summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/ABI/testing/sysfs-driver-xen-blkback17
-rw-r--r--Documentation/ABI/testing/sysfs-driver-xen-blkfront10
-rw-r--r--Documentation/bcache.txt37
-rw-r--r--Documentation/cpu-hotplug.txt6
-rw-r--r--Documentation/devicetree/bindings/clock/imx27-clock.txt1
-rw-r--r--Documentation/devicetree/bindings/vendor-prefixes.txt2
-rw-r--r--Documentation/ja_JP/HOWTO44
-rw-r--r--MAINTAINERS36
-rw-r--r--Makefile2
-rw-r--r--arch/alpha/Kconfig1
-rw-r--r--arch/alpha/include/asm/atomic.h88
-rw-r--r--arch/alpha/include/asm/param.h8
-rw-r--r--arch/alpha/include/asm/spinlock.h4
-rw-r--r--arch/alpha/include/asm/unistd.h3
-rw-r--r--arch/alpha/include/uapi/asm/param.h7
-rw-r--r--arch/alpha/include/uapi/asm/unistd.h2
-rw-r--r--arch/alpha/kernel/entry.S399
-rw-r--r--arch/alpha/kernel/irq_alpha.c2
-rw-r--r--arch/alpha/kernel/smp.c15
-rw-r--r--arch/alpha/kernel/sys_dp264.c8
-rw-r--r--arch/alpha/kernel/sys_marvel.c3
-rw-r--r--arch/alpha/kernel/systbls.S2
-rw-r--r--arch/alpha/kernel/time.c4
-rw-r--r--arch/alpha/kernel/traps.c12
-rw-r--r--arch/arm/Kconfig3
-rw-r--r--arch/arm/boot/dts/imx28-apx4devkit.dts2
-rw-r--r--arch/arm/boot/dts/imx28-evk.dts2
-rw-r--r--arch/arm/boot/dts/imx28-m28evk.dts2
-rw-r--r--arch/arm/boot/dts/imx28.dtsi1
-rw-r--r--arch/arm/boot/dts/imx51-babbage.dts13
-rw-r--r--arch/arm/boot/dts/imx53-mba53.dts2
-rw-r--r--arch/arm/boot/dts/imx53.dtsi32
-rw-r--r--arch/arm/boot/dts/stih416-pinctrl.dtsi10
-rw-r--r--arch/arm/boot/dts/stih416.dtsi2
-rw-r--r--arch/arm/boot/dts/twl4030.dtsi6
-rw-r--r--arch/arm/boot/dts/vf610.dtsi8
-rw-r--r--arch/arm/common/edma.c1
-rw-r--r--arch/arm/common/mcpm_platsmp.c4
-rw-r--r--arch/arm/configs/da8xx_omapl_defconfig2
-rw-r--r--arch/arm/configs/davinci_all_defconfig2
-rw-r--r--arch/arm/configs/multi_v7_defconfig6
-rw-r--r--arch/arm/configs/nhk8815_defconfig7
-rw-r--r--arch/arm/include/asm/arch_timer.h2
-rw-r--r--arch/arm/kernel/head-common.S1
-rw-r--r--arch/arm/kernel/head-nommu.S1
-rw-r--r--arch/arm/kernel/head.S1
-rw-r--r--arch/arm/kernel/hw_breakpoint.c4
-rw-r--r--arch/arm/kernel/perf_event_cpu.c6
-rw-r--r--arch/arm/kernel/psci_smp.c3
-rw-r--r--arch/arm/kernel/smp.c18
-rw-r--r--arch/arm/kernel/smp_twd.c6
-rw-r--r--arch/arm/lib/delay.c2
-rw-r--r--arch/arm/mach-davinci/board-dm365-evm.c2
-rw-r--r--arch/arm/mach-davinci/dm355.c2
-rw-r--r--arch/arm/mach-davinci/dm365.c2
-rw-r--r--arch/arm/mach-exynos/Kconfig1
-rw-r--r--arch/arm/mach-exynos/Makefile2
-rw-r--r--arch/arm/mach-exynos/common.c26
-rw-r--r--arch/arm/mach-exynos/common.h1
-rw-r--r--arch/arm/mach-exynos/cpuidle.c1
-rw-r--r--arch/arm/mach-exynos/headsmp.S2
-rw-r--r--arch/arm/mach-exynos/include/mach/memory.h5
-rw-r--r--arch/arm/mach-exynos/platsmp.c4
-rw-r--r--arch/arm/mach-exynos/pm.c6
-rw-r--r--arch/arm/mach-footbridge/dc21285.c2
-rw-r--r--arch/arm/mach-highbank/highbank.c7
-rw-r--r--arch/arm/mach-highbank/platsmp.c2
-rw-r--r--arch/arm/mach-imx/clk-imx6q.c5
-rw-r--r--arch/arm/mach-imx/clk-vf610.c2
-rw-r--r--arch/arm/mach-imx/mx27.h2
-rw-r--r--arch/arm/mach-imx/platsmp.c2
-rw-r--r--arch/arm/mach-keystone/keystone.c2
-rw-r--r--arch/arm/mach-keystone/platsmp.c2
-rw-r--r--arch/arm/mach-msm/headsmp.S2
-rw-r--r--arch/arm/mach-msm/platsmp.c6
-rw-r--r--arch/arm/mach-msm/timer.c4
-rw-r--r--arch/arm/mach-mvebu/coherency.c2
-rw-r--r--arch/arm/mach-mvebu/headsmp.S2
-rw-r--r--arch/arm/mach-mvebu/platsmp.c5
-rw-r--r--arch/arm/mach-omap2/Kconfig2
-rw-r--r--arch/arm/mach-omap2/board-generic.c23
-rw-r--r--arch/arm/mach-omap2/omap-headsmp.S2
-rw-r--r--arch/arm/mach-omap2/omap-mpuss-lowpower.c2
-rw-r--r--arch/arm/mach-omap2/omap-smp.c4
-rw-r--r--arch/arm/mach-omap2/omap-wakeupgen.c4
-rw-r--r--arch/arm/mach-prima2/headsmp.S2
-rw-r--r--arch/arm/mach-prima2/platsmp.c4
-rw-r--r--arch/arm/mach-pxa/em-x270.c17
-rw-r--r--arch/arm/mach-pxa/mainstone.c3
-rw-r--r--arch/arm/mach-pxa/pcm990-baseboard.c3
-rw-r--r--arch/arm/mach-pxa/poodle.c4
-rw-r--r--arch/arm/mach-pxa/spitz.c4
-rw-r--r--arch/arm/mach-pxa/stargate2.c3
-rw-r--r--arch/arm/mach-s3c24xx/Kconfig2
-rw-r--r--arch/arm/mach-s3c24xx/clock-s3c2410.c161
-rw-r--r--arch/arm/mach-s3c24xx/clock-s3c2440.c3
-rw-r--r--arch/arm/mach-shmobile/headsmp-scu.S1
-rw-r--r--arch/arm/mach-shmobile/headsmp.S2
-rw-r--r--arch/arm/mach-shmobile/smp-emev2.c2
-rw-r--r--arch/arm/mach-shmobile/smp-r8a7779.c2
-rw-r--r--arch/arm/mach-shmobile/smp-sh73a0.c2
-rw-r--r--arch/arm/mach-socfpga/headsmp.S1
-rw-r--r--arch/arm/mach-socfpga/platsmp.c2
-rw-r--r--arch/arm/mach-spear/generic.h2
-rw-r--r--arch/arm/mach-spear/platsmp.c4
-rw-r--r--arch/arm/mach-sti/Kconfig3
-rw-r--r--arch/arm/mach-sti/platsmp.c6
-rw-r--r--arch/arm/mach-tegra/platsmp.c4
-rw-r--r--arch/arm/mach-tegra/pm.c2
-rw-r--r--arch/arm/mach-ux500/platsmp.c4
-rw-r--r--arch/arm/mach-zynq/common.c2
-rw-r--r--arch/arm/mach-zynq/common.h2
-rw-r--r--arch/arm/mach-zynq/headsmp.S2
-rw-r--r--arch/arm/mach-zynq/platsmp.c6
-rw-r--r--arch/arm/mm/proc-arm1020.S2
-rw-r--r--arch/arm/mm/proc-arm1020e.S2
-rw-r--r--arch/arm/mm/proc-arm1022.S2
-rw-r--r--arch/arm/mm/proc-arm1026.S3
-rw-r--r--arch/arm/mm/proc-arm720.S2
-rw-r--r--arch/arm/mm/proc-arm740.S2
-rw-r--r--arch/arm/mm/proc-arm7tdmi.S2
-rw-r--r--arch/arm/mm/proc-arm920.S2
-rw-r--r--arch/arm/mm/proc-arm922.S2
-rw-r--r--arch/arm/mm/proc-arm925.S2
-rw-r--r--arch/arm/mm/proc-arm926.S2
-rw-r--r--arch/arm/mm/proc-arm940.S2
-rw-r--r--arch/arm/mm/proc-arm946.S2
-rw-r--r--arch/arm/mm/proc-arm9tdmi.S2
-rw-r--r--arch/arm/mm/proc-fa526.S2
-rw-r--r--arch/arm/mm/proc-feroceon.S2
-rw-r--r--arch/arm/mm/proc-mohawk.S2
-rw-r--r--arch/arm/mm/proc-sa110.S2
-rw-r--r--arch/arm/mm/proc-sa1100.S2
-rw-r--r--arch/arm/mm/proc-v6.S2
-rw-r--r--arch/arm/mm/proc-v7-2level.S4
-rw-r--r--arch/arm/mm/proc-v7-3level.S4
-rw-r--r--arch/arm/mm/proc-v7.S2
-rw-r--r--arch/arm/mm/proc-xsc3.S2
-rw-r--r--arch/arm/mm/proc-xscale.S2
-rw-r--r--arch/arm/plat-samsung/Kconfig7
-rw-r--r--arch/arm/plat-samsung/Makefile2
-rw-r--r--arch/arm/plat-samsung/include/plat/clock.h5
-rw-r--r--arch/arm/plat-samsung/include/plat/pm.h8
-rw-r--r--arch/arm/plat-samsung/pm.c14
-rw-r--r--arch/arm/plat-versatile/platsmp.c6
-rw-r--r--arch/arm64/include/asm/arch_timer.h2
-rw-r--r--arch/arm64/include/asm/debug-monitors.h7
-rw-r--r--arch/arm64/include/asm/system_misc.h3
-rw-r--r--arch/arm64/include/asm/thread_info.h4
-rw-r--r--arch/arm64/include/asm/virt.h13
-rw-r--r--arch/arm64/kernel/debug-monitors.c6
-rw-r--r--arch/arm64/kernel/entry.S2
-rw-r--r--arch/arm64/kernel/hw_breakpoint.c4
-rw-r--r--arch/arm64/kernel/process.c4
-rw-r--r--arch/arm64/kernel/smp.c23
-rw-r--r--arch/arm64/mm/fault.c46
-rw-r--r--arch/blackfin/kernel/perf_event.c2
-rw-r--r--arch/blackfin/kernel/setup.c4
-rw-r--r--arch/blackfin/mach-bf561/smp.c6
-rw-r--r--arch/blackfin/mach-common/cache-c.c4
-rw-r--r--arch/blackfin/mach-common/ints-priority.c2
-rw-r--r--arch/blackfin/mach-common/smp.c18
-rw-r--r--arch/cris/arch-v32/kernel/smp.c2
-rw-r--r--arch/frv/kernel/setup.c2
-rw-r--r--arch/hexagon/kernel/setup.c2
-rw-r--r--arch/hexagon/kernel/smp.c4
-rw-r--r--arch/m32r/kernel/smpboot.c2
-rw-r--r--arch/metag/kernel/perf/perf_event.c6
-rw-r--r--arch/metag/kernel/smp.c22
-rw-r--r--arch/metag/kernel/traps.c2
-rw-r--r--arch/mips/Kconfig1
-rw-r--r--arch/mips/ath79/setup.c2
-rw-r--r--arch/mips/cavium-octeon/octeon-irq.c12
-rw-r--r--arch/mips/cavium-octeon/octeon-platform.c5
-rw-r--r--arch/mips/cavium-octeon/smp.c6
-rw-r--r--arch/mips/include/asm/uasm.h37
-rw-r--r--arch/mips/kernel/bmips_vec.S4
-rw-r--r--arch/mips/kernel/cevt-bcm1480.c2
-rw-r--r--arch/mips/kernel/cevt-gic.c2
-rw-r--r--arch/mips/kernel/cevt-r4k.c2
-rw-r--r--arch/mips/kernel/cevt-sb1250.c2
-rw-r--r--arch/mips/kernel/cevt-smtc.c2
-rw-r--r--arch/mips/kernel/cpu-bugs64.c2
-rw-r--r--arch/mips/kernel/cpu-probe.c14
-rw-r--r--arch/mips/kernel/head.S4
-rw-r--r--arch/mips/kernel/smp-bmips.c8
-rw-r--r--arch/mips/kernel/smp-mt.c6
-rw-r--r--arch/mips/kernel/smp-up.c6
-rw-r--r--arch/mips/kernel/smp.c6
-rw-r--r--arch/mips/kernel/smtc.c2
-rw-r--r--arch/mips/kernel/spram.c14
-rw-r--r--arch/mips/kernel/sync-r4k.c12
-rw-r--r--arch/mips/kernel/traps.c13
-rw-r--r--arch/mips/kernel/watch.c2
-rw-r--r--arch/mips/kvm/Kconfig1
-rw-r--r--arch/mips/lantiq/irq.c2
-rw-r--r--arch/mips/lib/uncached.c2
-rw-r--r--arch/mips/mm/c-octeon.c6
-rw-r--r--arch/mips/mm/c-r3k.c8
-rw-r--r--arch/mips/mm/c-r4k.c34
-rw-r--r--arch/mips/mm/c-tx39.c2
-rw-r--r--arch/mips/mm/cache.c2
-rw-r--r--arch/mips/mm/cex-sb1.S4
-rw-r--r--arch/mips/mm/page.c40
-rw-r--r--arch/mips/mm/sc-ip22.c2
-rw-r--r--arch/mips/mm/sc-mips.c2
-rw-r--r--arch/mips/mm/sc-r5k.c2
-rw-r--r--arch/mips/mm/sc-rm7k.c12
-rw-r--r--arch/mips/mm/tlb-r3k.c2
-rw-r--r--arch/mips/mm/tlb-r4k.c4
-rw-r--r--arch/mips/mm/tlb-r8k.c4
-rw-r--r--arch/mips/mm/tlbex.c148
-rw-r--r--arch/mips/mm/uasm-micromips.c10
-rw-r--r--arch/mips/mm/uasm-mips.c10
-rw-r--r--arch/mips/mm/uasm.c106
-rw-r--r--arch/mips/mti-malta/malta-smtc.c6
-rw-r--r--arch/mips/mti-malta/malta-time.c2
-rw-r--r--arch/mips/mti-sead3/sead3-time.c2
-rw-r--r--arch/mips/netlogic/common/irq.c68
-rw-r--r--arch/mips/netlogic/common/smp.c4
-rw-r--r--arch/mips/netlogic/common/smpboot.S4
-rw-r--r--arch/mips/netlogic/common/time.c2
-rw-r--r--arch/mips/netlogic/dts/xlp_evp.dts3
-rw-r--r--arch/mips/netlogic/dts/xlp_svp.dts3
-rw-r--r--arch/mips/netlogic/xlp/usb-init.c2
-rw-r--r--arch/mips/netlogic/xlr/wakeup.c2
-rw-r--r--arch/mips/pci/pci-ip27.c2
-rw-r--r--arch/mips/pmcs-msp71xx/msp_smtc.c7
-rw-r--r--arch/mips/pmcs-msp71xx/msp_time.c2
-rw-r--r--arch/mips/pnx833x/common/interrupts.c2
-rw-r--r--arch/mips/powertv/time.c2
-rw-r--r--arch/mips/ralink/irq.c2
-rw-r--r--arch/mips/sgi-ip27/ip27-init.c4
-rw-r--r--arch/mips/sgi-ip27/ip27-smp.c6
-rw-r--r--arch/mips/sgi-ip27/ip27-timer.c6
-rw-r--r--arch/mips/sgi-ip27/ip27-xtalk.c6
-rw-r--r--arch/mips/sibyte/bcm1480/smp.c8
-rw-r--r--arch/mips/sibyte/sb1250/smp.c8
-rw-r--r--arch/openrisc/kernel/setup.c2
-rw-r--r--arch/parisc/kernel/firmware.c14
-rw-r--r--arch/parisc/kernel/hardware.c2
-rw-r--r--arch/parisc/kernel/processor.c6
-rw-r--r--arch/parisc/kernel/smp.c8
-rw-r--r--arch/powerpc/include/asm/eeh.h30
-rw-r--r--arch/powerpc/include/asm/hw_irq.h7
-rw-r--r--arch/powerpc/include/asm/module.h5
-rw-r--r--arch/powerpc/include/asm/pci-bridge.h1
-rw-r--r--arch/powerpc/include/asm/reg.h3
-rw-r--r--arch/powerpc/kernel/cputable.c20
-rw-r--r--arch/powerpc/kernel/eeh.c70
-rw-r--r--arch/powerpc/kernel/eeh_cache.c18
-rw-r--r--arch/powerpc/kernel/eeh_driver.c77
-rw-r--r--arch/powerpc/kernel/eeh_pe.c58
-rw-r--r--arch/powerpc/kernel/eeh_sysfs.c21
-rw-r--r--arch/powerpc/kernel/pci-common.c2
-rw-r--r--arch/powerpc/kernel/pci-hotplug.c49
-rw-r--r--arch/powerpc/kernel/pci_of_scan.c56
-rw-r--r--arch/powerpc/kernel/prom_init.c5
-rw-r--r--arch/powerpc/kernel/vmlinux.lds.S3
-rw-r--r--arch/powerpc/mm/hash_native_64.c12
-rw-r--r--arch/powerpc/perf/core-book3s.c5
-rw-r--r--arch/powerpc/perf/power8-pmu.c24
-rw-r--r--arch/powerpc/platforms/powernv/eeh-powernv.c17
-rw-r--r--arch/powerpc/platforms/powernv/pci-ioda.c2
-rw-r--r--arch/powerpc/platforms/pseries/Kconfig1
-rw-r--r--arch/powerpc/platforms/pseries/eeh_pseries.c67
-rw-r--r--arch/powerpc/platforms/pseries/lpar.c2
-rw-r--r--arch/powerpc/platforms/pseries/ras.c3
-rw-r--r--arch/s390/include/asm/processor.h10
-rw-r--r--arch/s390/include/asm/switch_to.h4
-rw-r--r--arch/s390/include/uapi/asm/ptrace.h1
-rw-r--r--arch/s390/kernel/cache.c15
-rw-r--r--arch/s390/kernel/crash_dump.c51
-rw-r--r--arch/s390/kernel/perf_cpum_cf.c4
-rw-r--r--arch/s390/kernel/processor.c2
-rw-r--r--arch/s390/kernel/ptrace.c50
-rw-r--r--arch/s390/kernel/smp.c17
-rw-r--r--arch/s390/kernel/sysinfo.c2
-rw-r--r--arch/s390/kernel/vtime.c6
-rw-r--r--arch/s390/mm/fault.c4
-rw-r--r--arch/s390/net/bpf_jit_comp.c113
-rw-r--r--arch/score/mm/tlb-score.c2
-rw-r--r--arch/sh/kernel/cpu/init.c18
-rw-r--r--arch/sh/kernel/cpu/sh2/probe.c2
-rw-r--r--arch/sh/kernel/cpu/sh2a/probe.c2
-rw-r--r--arch/sh/kernel/cpu/sh3/probe.c2
-rw-r--r--arch/sh/kernel/cpu/sh4/probe.c2
-rw-r--r--arch/sh/kernel/cpu/sh4a/smp-shx3.c6
-rw-r--r--arch/sh/kernel/cpu/sh5/probe.c2
-rw-r--r--arch/sh/kernel/perf_event.c4
-rw-r--r--arch/sh/kernel/process.c2
-rw-r--r--arch/sh/kernel/setup.c2
-rw-r--r--arch/sh/kernel/smp.c8
-rw-r--r--arch/sh/kernel/traps_32.c2
-rw-r--r--arch/sh/kernel/traps_64.c2
-rw-r--r--arch/sh/mm/tlb-sh5.c2
-rw-r--r--arch/sparc/kernel/ds.c11
-rw-r--r--arch/sparc/kernel/entry.h2
-rw-r--r--arch/sparc/kernel/hvtramp.S1
-rw-r--r--arch/sparc/kernel/irq_64.c5
-rw-r--r--arch/sparc/kernel/leon_smp.c10
-rw-r--r--arch/sparc/kernel/mdesc.c34
-rw-r--r--arch/sparc/kernel/smp_32.c20
-rw-r--r--arch/sparc/kernel/smp_64.c9
-rw-r--r--arch/sparc/kernel/sun4d_smp.c6
-rw-r--r--arch/sparc/kernel/sun4m_smp.c6
-rw-r--r--arch/sparc/kernel/sysfs.c4
-rw-r--r--arch/sparc/kernel/trampoline_32.S3
-rw-r--r--arch/sparc/kernel/trampoline_64.S2
-rw-r--r--arch/sparc/mm/init_64.c2
-rw-r--r--arch/sparc/mm/srmmu.c12
-rw-r--r--arch/tile/kernel/irq.c2
-rw-r--r--arch/tile/kernel/messaging.c2
-rw-r--r--arch/tile/kernel/setup.c12
-rw-r--r--arch/tile/kernel/smpboot.c8
-rw-r--r--arch/tile/kernel/time.c2
-rw-r--r--arch/um/include/shared/frame_kern.h8
-rw-r--r--arch/um/kernel/signal.c4
-rw-r--r--arch/um/kernel/skas/mmu.c2
-rw-r--r--arch/um/kernel/skas/uaccess.c2
-rw-r--r--arch/um/os-Linux/mem.c230
-rw-r--r--arch/um/os-Linux/signal.c8
-rw-r--r--arch/um/os-Linux/skas/process.c19
-rw-r--r--arch/x86/crypto/Makefile2
-rw-r--r--arch/x86/crypto/crct10dif-pcl-asm_64.S643
-rw-r--r--arch/x86/crypto/crct10dif-pclmul_glue.c151
-rw-r--r--arch/x86/include/asm/cpu.h2
-rw-r--r--arch/x86/include/asm/microcode.h4
-rw-r--r--arch/x86/include/asm/microcode_amd.h4
-rw-r--r--arch/x86/include/asm/microcode_intel.h4
-rw-r--r--arch/x86/include/asm/mmconfig.h4
-rw-r--r--arch/x86/include/asm/mpspec.h2
-rw-r--r--arch/x86/include/asm/numa.h6
-rw-r--r--arch/x86/include/asm/processor.h2
-rw-r--r--arch/x86/include/asm/prom.h2
-rw-r--r--arch/x86/include/asm/smp.h2
-rw-r--r--arch/x86/kernel/acpi/boot.c6
-rw-r--r--arch/x86/kernel/acpi/sleep.c18
-rw-r--r--arch/x86/kernel/apic/apic.c30
-rw-r--r--arch/x86/kernel/apic/apic_numachip.c2
-rw-r--r--arch/x86/kernel/apic/es7000_32.c2
-rw-r--r--arch/x86/kernel/apic/numaq_32.c2
-rw-r--r--arch/x86/kernel/apic/x2apic_cluster.c2
-rw-r--r--arch/x86/kernel/apic/x2apic_uv_x.c14
-rw-r--r--arch/x86/kernel/cpu/amd.c33
-rw-r--r--arch/x86/kernel/cpu/centaur.c26
-rw-r--r--arch/x86/kernel/cpu/common.c64
-rw-r--r--arch/x86/kernel/cpu/cyrix.c40
-rw-r--r--arch/x86/kernel/cpu/hypervisor.c2
-rw-r--r--arch/x86/kernel/cpu/intel.c30
-rw-r--r--arch/x86/kernel/cpu/intel_cacheinfo.c55
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce.c23
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce_amd.c14
-rw-r--r--arch/x86/kernel/cpu/mcheck/therm_throt.c9
-rw-r--r--arch/x86/kernel/cpu/perf_event.c2
-rw-r--r--arch/x86/kernel/cpu/perf_event_amd_ibs.c2
-rw-r--r--arch/x86/kernel/cpu/perf_event_amd_uncore.c31
-rw-r--r--arch/x86/kernel/cpu/perf_event_intel_uncore.c20
-rw-r--r--arch/x86/kernel/cpu/rdrand.c2
-rw-r--r--arch/x86/kernel/cpu/scattered.c4
-rw-r--r--arch/x86/kernel/cpu/topology.c2
-rw-r--r--arch/x86/kernel/cpu/transmeta.c6
-rw-r--r--arch/x86/kernel/cpu/umc.c2
-rw-r--r--arch/x86/kernel/cpu/vmware.c2
-rw-r--r--arch/x86/kernel/cpuid.c7
-rw-r--r--arch/x86/kernel/devicetree.c2
-rw-r--r--arch/x86/kernel/head_32.S1
-rw-r--r--arch/x86/kernel/head_64.S15
-rw-r--r--arch/x86/kernel/i387.c10
-rw-r--r--arch/x86/kernel/irq_32.c2
-rw-r--r--arch/x86/kernel/kvm.c10
-rw-r--r--arch/x86/kernel/kvmclock.c2
-rw-r--r--arch/x86/kernel/microcode_amd_early.c8
-rw-r--r--arch/x86/kernel/microcode_core.c2
-rw-r--r--arch/x86/kernel/microcode_core_early.c6
-rw-r--r--arch/x86/kernel/microcode_intel_early.c26
-rw-r--r--arch/x86/kernel/mmconf-fam10h_64.c12
-rw-r--r--arch/x86/kernel/msr.c6
-rw-r--r--arch/x86/kernel/process.c2
-rw-r--r--arch/x86/kernel/setup.c2
-rw-r--r--arch/x86/kernel/smpboot.c28
-rw-r--r--arch/x86/kernel/tboot.c6
-rw-r--r--arch/x86/kernel/tracepoint.c6
-rw-r--r--arch/x86/kernel/traps.c12
-rw-r--r--arch/x86/kernel/tsc.c4
-rw-r--r--arch/x86/kernel/tsc_sync.c18
-rw-r--r--arch/x86/kernel/vsyscall_64.c6
-rw-r--r--arch/x86/kernel/x86_init.c4
-rw-r--r--arch/x86/kernel/xsave.c4
-rw-r--r--arch/x86/kvm/mmu.c7
-rw-r--r--arch/x86/mm/mmio-mod.c4
-rw-r--r--arch/x86/mm/numa.c12
-rw-r--r--arch/x86/mm/numa_emulation.c12
-rw-r--r--arch/x86/mm/setup_nx.c4
-rw-r--r--arch/x86/pci/amd_bus.c8
-rw-r--r--arch/x86/platform/ce4100/ce4100.c3
-rw-r--r--arch/x86/platform/efi/efi.c7
-rw-r--r--arch/x86/platform/mrst/mrst.c4
-rw-r--r--arch/x86/um/signal.c1
-rw-r--r--arch/x86/xen/enlighten.c6
-rw-r--r--arch/x86/xen/setup.c6
-rw-r--r--arch/x86/xen/smp.c12
-rw-r--r--arch/x86/xen/spinlock.c2
-rw-r--r--arch/x86/xen/xen-ops.h2
-rw-r--r--arch/xtensa/kernel/time.c2
-rw-r--r--block/blk-iopoll.c6
-rw-r--r--block/blk-softirq.c6
-rw-r--r--crypto/Kconfig19
-rw-r--r--crypto/Makefile1
-rw-r--r--crypto/crct10dif.c178
-rw-r--r--crypto/tcrypt.c8
-rw-r--r--crypto/testmgr.c10
-rw-r--r--crypto/testmgr.h33
-rw-r--r--drivers/acpi/acpi_memhotplug.c1
-rw-r--r--drivers/acpi/acpi_processor.c2
-rw-r--r--drivers/acpi/acpica/aclocal.h13
-rw-r--r--drivers/acpi/internal.h9
-rw-r--r--drivers/acpi/processor_core.c8
-rw-r--r--drivers/acpi/processor_driver.c8
-rw-r--r--drivers/acpi/processor_idle.c6
-rw-r--r--drivers/acpi/scan.c13
-rw-r--r--drivers/acpi/video.c31
-rw-r--r--drivers/acpi/video_detect.c8
-rw-r--r--drivers/ata/Kconfig11
-rw-r--r--drivers/ata/Makefile1
-rw-r--r--drivers/ata/ahci.c9
-rw-r--r--drivers/ata/ahci_imx.c236
-rw-r--r--drivers/ata/ata_piix.c2
-rw-r--r--drivers/ata/libata-scsi.c6
-rw-r--r--drivers/ata/sata_inic162x.c14
-rw-r--r--drivers/base/core.c120
-rw-r--r--drivers/base/cpu.c2
-rw-r--r--drivers/base/platform.c1
-rw-r--r--drivers/base/regmap/regmap.c2
-rw-r--r--drivers/base/topology.c10
-rw-r--r--drivers/block/Kconfig4
-rw-r--r--drivers/block/drbd/drbd_actlog.c21
-rw-r--r--drivers/block/drbd/drbd_int.h15
-rw-r--r--drivers/block/drbd/drbd_main.c61
-rw-r--r--drivers/block/drbd/drbd_nl.c185
-rw-r--r--drivers/block/drbd/drbd_receiver.c12
-rw-r--r--drivers/block/drbd/drbd_state.c4
-rw-r--r--drivers/block/rsxx/core.c359
-rw-r--r--drivers/block/rsxx/cregs.c14
-rw-r--r--drivers/block/rsxx/dev.c33
-rw-r--r--drivers/block/rsxx/dma.c185
-rw-r--r--drivers/block/rsxx/rsxx_priv.h10
-rw-r--r--drivers/block/xen-blkback/blkback.c872
-rw-r--r--drivers/block/xen-blkback/common.h147
-rw-r--r--drivers/block/xen-blkback/xenbus.c85
-rw-r--r--drivers/block/xen-blkfront.c532
-rw-r--r--drivers/clocksource/arm_arch_timer.c8
-rw-r--r--drivers/clocksource/arm_global_timer.c8
-rw-r--r--drivers/clocksource/dummy_timer.c6
-rw-r--r--drivers/clocksource/exynos_mct.c4
-rw-r--r--drivers/clocksource/metag_generic.c6
-rw-r--r--drivers/clocksource/time-armada-370-xp.c4
-rw-r--r--drivers/clocksource/timer-marco.c4
-rw-r--r--drivers/cpufreq/cpufreq.c6
-rw-r--r--drivers/cpufreq/cpufreq_governor.c3
-rw-r--r--drivers/cpufreq/cpufreq_stats.c8
-rw-r--r--drivers/cpufreq/dbx500-cpufreq.c2
-rw-r--r--drivers/cpufreq/intel_pstate.c16
-rw-r--r--drivers/cpufreq/longhaul.c6
-rw-r--r--drivers/cpufreq/longhaul.h26
-rw-r--r--drivers/cpufreq/longrun.c6
-rw-r--r--drivers/cpufreq/omap-cpufreq.c2
-rw-r--r--drivers/cpufreq/powernow-k7.c8
-rw-r--r--drivers/cpufreq/powernow-k8.c6
-rw-r--r--drivers/cpufreq/s3c24xx-cpufreq.c4
-rw-r--r--drivers/crypto/caam/caamhash.c2
-rw-r--r--drivers/edac/edac_mc.c9
-rw-r--r--drivers/edac/edac_mc_sysfs.c28
-rw-r--r--drivers/edac/i5100_edac.c2
-rw-r--r--drivers/firmware/efi/efivars.c3
-rw-r--r--drivers/gpio/gpio-msm-v2.c2
-rw-r--r--drivers/gpio/gpio-omap.c84
-rw-r--r--drivers/gpu/drm/drm_crtc_helper.c27
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c19
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c17
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h3
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c101
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c10
-rw-r--r--drivers/gpu/drm/i915/intel_display.c69
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c5
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h2
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c19
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c12
-rw-r--r--drivers/gpu/drm/i915/intel_panel.c6
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c41
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c38
-rw-r--r--drivers/gpu/drm/nouveau/core/engine/bsp/nvc0.c1
-rw-r--r--drivers/gpu/drm/nouveau/core/engine/bsp/nve0.c1
-rw-r--r--drivers/gpu/drm/nouveau/core/engine/falcon.c19
-rw-r--r--drivers/gpu/drm/nouveau/core/engine/ppp/nvc0.c1
-rw-r--r--drivers/gpu/drm/nouveau/core/engine/vp/nvc0.c1
-rw-r--r--drivers/gpu/drm/nouveau/core/engine/vp/nve0.c1
-rw-r--r--drivers/gpu/drm/nouveau/core/include/engine/falcon.h2
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_bo.c21
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_display.c69
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_drm.c15
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_fbcon.c1
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_fence.c2
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_gem.c6
-rw-r--r--drivers/gpu/drm/nouveau/nv50_display.c46
-rw-r--r--drivers/gpu/drm/qxl/qxl_cmd.c42
-rw-r--r--drivers/gpu/drm/qxl/qxl_display.c70
-rw-r--r--drivers/gpu/drm/qxl/qxl_draw.c263
-rw-r--r--drivers/gpu/drm/qxl/qxl_drv.h76
-rw-r--r--drivers/gpu/drm/qxl/qxl_fb.c184
-rw-r--r--drivers/gpu/drm/qxl/qxl_fence.c10
-rw-r--r--drivers/gpu/drm/qxl/qxl_gem.c2
-rw-r--r--drivers/gpu/drm/qxl/qxl_image.c111
-rw-r--r--drivers/gpu/drm/qxl/qxl_ioctl.c319
-rw-r--r--drivers/gpu/drm/qxl/qxl_object.c70
-rw-r--r--drivers/gpu/drm/qxl/qxl_object.h6
-rw-r--r--drivers/gpu/drm/qxl/qxl_release.c212
-rw-r--r--drivers/gpu/drm/qxl/qxl_ttm.c2
-rw-r--r--drivers/gpu/drm/radeon/atombios_dp.c43
-rw-r--r--drivers/gpu/drm/radeon/cik.c59
-rw-r--r--drivers/gpu/drm/radeon/cikd.h16
-rw-r--r--drivers/gpu/drm/radeon/evergreen.c13
-rw-r--r--drivers/gpu/drm/radeon/evergreen_hdmi.c6
-rw-r--r--drivers/gpu/drm/radeon/ni.c182
-rw-r--r--drivers/gpu/drm/radeon/nid.h16
-rw-r--r--drivers/gpu/drm/radeon/r100.c11
-rw-r--r--drivers/gpu/drm/radeon/r600.c105
-rw-r--r--drivers/gpu/drm/radeon/r600_dpm.c4
-rw-r--r--drivers/gpu/drm/radeon/r600_hdmi.c6
-rw-r--r--drivers/gpu/drm/radeon/r600d.h1
-rw-r--r--drivers/gpu/drm/radeon/radeon.h10
-rw-r--r--drivers/gpu/drm/radeon/radeon_asic.c14
-rw-r--r--drivers/gpu/drm/radeon/radeon_asic.h7
-rw-r--r--drivers/gpu/drm/radeon/radeon_atombios.c40
-rw-r--r--drivers/gpu/drm/radeon/radeon_combios.c159
-rw-r--r--drivers/gpu/drm/radeon/radeon_drv.c4
-rw-r--r--drivers/gpu/drm/radeon/radeon_fence.c2
-rw-r--r--drivers/gpu/drm/radeon/radeon_gart.c5
-rw-r--r--drivers/gpu/drm/radeon/radeon_irq_kms.c11
-rw-r--r--drivers/gpu/drm/radeon/radeon_object.c1
-rw-r--r--drivers/gpu/drm/radeon/radeon_object.h2
-rw-r--r--drivers/gpu/drm/radeon/radeon_ring.c1
-rw-r--r--drivers/gpu/drm/radeon/radeon_sa.c7
-rw-r--r--drivers/gpu/drm/radeon/radeon_uvd.c111
-rw-r--r--drivers/gpu/drm/radeon/rs780_dpm.c25
-rw-r--r--drivers/gpu/drm/radeon/rs780d.h3
-rw-r--r--drivers/gpu/drm/radeon/rv6xx_dpm.c55
-rw-r--r--drivers/gpu/drm/radeon/rv770.c2
-rw-r--r--drivers/gpu/drm/radeon/rv770_dpm.c14
-rw-r--r--drivers/gpu/drm/radeon/si.c298
-rw-r--r--drivers/gpu/drm/radeon/sid.h14
-rw-r--r--drivers/gpu/drm/radeon/sumo_dpm.c14
-rw-r--r--drivers/gpu/drm/rcar-du/rcar_du_drv.c9
-rw-r--r--drivers/gpu/drm/shmobile/shmob_drm_drv.c9
-rw-r--r--drivers/hv/hv_balloon.c21
-rw-r--r--drivers/hv/vmbus_drv.c8
-rw-r--r--drivers/hwmon/abx500.c2
-rw-r--r--drivers/hwmon/coretemp.c39
-rw-r--r--drivers/hwmon/via-cputemp.c8
-rw-r--r--drivers/iio/adc/ti_am335x_adc.c1
-rw-r--r--drivers/iio/dac/ad7303.c4
-rw-r--r--drivers/iio/industrialio-trigger.c2
-rw-r--r--drivers/iio/inkern.c2
-rw-r--r--drivers/iio/pressure/st_pressure_core.c6
-rw-r--r--drivers/irqchip/irq-gic.c8
-rw-r--r--drivers/md/bcache/alloc.c46
-rw-r--r--drivers/md/bcache/bcache.h61
-rw-r--r--drivers/md/bcache/bset.c56
-rw-r--r--drivers/md/bcache/bset.h4
-rw-r--r--drivers/md/bcache/btree.c451
-rw-r--r--drivers/md/bcache/btree.h35
-rw-r--r--drivers/md/bcache/closure.c6
-rw-r--r--drivers/md/bcache/debug.c178
-rw-r--r--drivers/md/bcache/debug.h11
-rw-r--r--drivers/md/bcache/io.c68
-rw-r--r--drivers/md/bcache/journal.c25
-rw-r--r--drivers/md/bcache/movinggc.c24
-rw-r--r--drivers/md/bcache/request.c197
-rw-r--r--drivers/md/bcache/request.h2
-rw-r--r--drivers/md/bcache/super.c171
-rw-r--r--drivers/md/bcache/sysfs.c68
-rw-r--r--drivers/md/bcache/trace.c47
-rw-r--r--drivers/md/bcache/util.c17
-rw-r--r--drivers/md/bcache/util.h6
-rw-r--r--drivers/md/bcache/writeback.c133
-rw-r--r--drivers/md/bcache/writeback.h64
-rw-r--r--drivers/md/md.c14
-rw-r--r--drivers/md/raid1.c53
-rw-r--r--drivers/md/raid10.c19
-rw-r--r--drivers/md/raid5.c15
-rw-r--r--drivers/md/raid5.h1
-rw-r--r--drivers/media/pci/saa7134/saa7134-alsa.c2
-rw-r--r--drivers/misc/atmel-ssc.c11
-rw-r--r--drivers/misc/mei/hbm.c2
-rw-r--r--drivers/misc/mei/hw-me.c14
-rw-r--r--drivers/misc/mei/init.c3
-rw-r--r--drivers/mmc/host/pxamci.c2
-rw-r--r--drivers/net/ethernet/atheros/atl1e/atl1e_main.c24
-rw-r--r--drivers/net/ethernet/broadcom/Kconfig1
-rw-r--r--drivers/net/ethernet/emulex/benet/be_main.c14
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/debugfs.c2
-rw-r--r--drivers/net/hyperv/netvsc_drv.c4
-rw-r--r--drivers/net/macvtap.c65
-rw-r--r--drivers/net/tun.c62
-rw-r--r--drivers/net/vxlan.c6
-rw-r--r--drivers/net/xen-netfront.c31
-rw-r--r--drivers/of/irq.c6
-rw-r--r--drivers/oprofile/timer_int.c4
-rw-r--r--drivers/pci/hotplug/rpadlpar_core.c1
-rw-r--r--drivers/pnp/pnpacpi/rsparser.c2
-rw-r--r--drivers/pnp/resource.c1
-rw-r--r--drivers/s390/cio/qdio_main.c4
-rw-r--r--drivers/s390/crypto/ap_bus.c1
-rw-r--r--drivers/scsi/isci/request.c2
-rw-r--r--drivers/scsi/isci/task.c9
-rw-r--r--drivers/scsi/mvsas/mv_sas.c11
-rw-r--r--drivers/scsi/mvsas/mv_sas.h1
-rw-r--r--drivers/scsi/qla2xxx/qla_iocb.c11
-rw-r--r--drivers/scsi/sd.c22
-rw-r--r--drivers/spi/spi-altera.c12
-rw-r--r--drivers/spi/spi-nuc900.c13
-rw-r--r--drivers/spi/spi-s3c64xx.c3
-rw-r--r--drivers/spi/spi-xilinx.c16
-rw-r--r--drivers/staging/Kconfig2
-rw-r--r--drivers/staging/Makefile1
-rw-r--r--drivers/staging/android/logger.c4
-rw-r--r--drivers/staging/comedi/TODO2
-rw-r--r--drivers/staging/comedi/comedi_fops.c32
-rw-r--r--drivers/staging/csr/Kconfig9
-rw-r--r--drivers/staging/csr/LICENSE.txt39
-rw-r--r--drivers/staging/csr/Makefile73
-rw-r--r--drivers/staging/csr/bh.c404
-rw-r--r--drivers/staging/csr/csr_framework_ext.c40
-rw-r--r--drivers/staging/csr/csr_framework_ext.h35
-rw-r--r--drivers/staging/csr/csr_framework_ext_types.h30
-rw-r--r--drivers/staging/csr/csr_log.h223
-rw-r--r--drivers/staging/csr/csr_log_configure.h39
-rw-r--r--drivers/staging/csr/csr_log_text.h124
-rw-r--r--drivers/staging/csr/csr_macro.h39
-rw-r--r--drivers/staging/csr/csr_msg_transport.h17
-rw-r--r--drivers/staging/csr/csr_msgconv.c291
-rw-r--r--drivers/staging/csr/csr_msgconv.h78
-rw-r--r--drivers/staging/csr/csr_prim_defs.h55
-rw-r--r--drivers/staging/csr/csr_result.h17
-rw-r--r--drivers/staging/csr/csr_sched.h85
-rw-r--r--drivers/staging/csr/csr_sdio.h723
-rw-r--r--drivers/staging/csr/csr_serialize_primitive_types.c100
-rw-r--r--drivers/staging/csr/csr_time.c33
-rw-r--r--drivers/staging/csr/csr_time.h76
-rw-r--r--drivers/staging/csr/csr_util.c15
-rw-r--r--drivers/staging/csr/csr_wifi_common.h101
-rw-r--r--drivers/staging/csr/csr_wifi_fsm.h240
-rw-r--r--drivers/staging/csr/csr_wifi_fsm_event.h42
-rw-r--r--drivers/staging/csr/csr_wifi_fsm_types.h430
-rw-r--r--drivers/staging/csr/csr_wifi_hip_card.h114
-rw-r--r--drivers/staging/csr/csr_wifi_hip_card_sdio.c4001
-rw-r--r--drivers/staging/csr/csr_wifi_hip_card_sdio.h694
-rw-r--r--drivers/staging/csr/csr_wifi_hip_card_sdio_intr.c2595
-rw-r--r--drivers/staging/csr/csr_wifi_hip_card_sdio_mem.c1713
-rw-r--r--drivers/staging/csr/csr_wifi_hip_chiphelper.c793
-rw-r--r--drivers/staging/csr/csr_wifi_hip_chiphelper.h407
-rw-r--r--drivers/staging/csr/csr_wifi_hip_chiphelper_private.h200
-rw-r--r--drivers/staging/csr/csr_wifi_hip_conversions.h73
-rw-r--r--drivers/staging/csr/csr_wifi_hip_download.c819
-rw-r--r--drivers/staging/csr/csr_wifi_hip_dump.c837
-rw-r--r--drivers/staging/csr/csr_wifi_hip_packing.c4804
-rw-r--r--drivers/staging/csr/csr_wifi_hip_send.c415
-rw-r--r--drivers/staging/csr/csr_wifi_hip_signals.c1313
-rw-r--r--drivers/staging/csr/csr_wifi_hip_signals.h128
-rw-r--r--drivers/staging/csr/csr_wifi_hip_sigs.h1417
-rw-r--r--drivers/staging/csr/csr_wifi_hip_ta_sampling.c541
-rw-r--r--drivers/staging/csr/csr_wifi_hip_ta_sampling.h66
-rw-r--r--drivers/staging/csr/csr_wifi_hip_udi.c173
-rw-r--r--drivers/staging/csr/csr_wifi_hip_unifi.h871
-rw-r--r--drivers/staging/csr/csr_wifi_hip_unifi_signal_names.c41
-rw-r--r--drivers/staging/csr/csr_wifi_hip_unifi_udi.h52
-rw-r--r--drivers/staging/csr/csr_wifi_hip_unifihw.h59
-rw-r--r--drivers/staging/csr/csr_wifi_hip_unifiversion.h30
-rw-r--r--drivers/staging/csr/csr_wifi_hip_xbv.c1076
-rw-r--r--drivers/staging/csr/csr_wifi_hip_xbv.h119
-rw-r--r--drivers/staging/csr/csr_wifi_hostio_prim.h18
-rw-r--r--drivers/staging/csr/csr_wifi_lib.h103
-rw-r--r--drivers/staging/csr/csr_wifi_msgconv.h49
-rw-r--r--drivers/staging/csr/csr_wifi_nme_ap_converter_init.c90
-rw-r--r--drivers/staging/csr/csr_wifi_nme_ap_converter_init.h41
-rw-r--r--drivers/staging/csr/csr_wifi_nme_ap_free_downstream_contents.c84
-rw-r--r--drivers/staging/csr/csr_wifi_nme_ap_free_upstream_contents.c39
-rw-r--r--drivers/staging/csr/csr_wifi_nme_ap_lib.h495
-rw-r--r--drivers/staging/csr/csr_wifi_nme_ap_prim.h494
-rw-r--r--drivers/staging/csr/csr_wifi_nme_ap_sef.c30
-rw-r--r--drivers/staging/csr/csr_wifi_nme_ap_sef.h21
-rw-r--r--drivers/staging/csr/csr_wifi_nme_ap_serialize.c909
-rw-r--r--drivers/staging/csr/csr_wifi_nme_ap_serialize.h94
-rw-r--r--drivers/staging/csr/csr_wifi_nme_converter_init.h38
-rw-r--r--drivers/staging/csr/csr_wifi_nme_lib.h991
-rw-r--r--drivers/staging/csr/csr_wifi_nme_prim.h1657
-rw-r--r--drivers/staging/csr/csr_wifi_nme_serialize.h166
-rw-r--r--drivers/staging/csr/csr_wifi_nme_task.h27
-rw-r--r--drivers/staging/csr/csr_wifi_private_common.h81
-rw-r--r--drivers/staging/csr/csr_wifi_result.h27
-rw-r--r--drivers/staging/csr/csr_wifi_router_converter_init.c82
-rw-r--r--drivers/staging/csr/csr_wifi_router_converter_init.h34
-rw-r--r--drivers/staging/csr/csr_wifi_router_ctrl_converter_init.c134
-rw-r--r--drivers/staging/csr/csr_wifi_router_ctrl_converter_init.h34
-rw-r--r--drivers/staging/csr/csr_wifi_router_ctrl_free_downstream_contents.c108
-rw-r--r--drivers/staging/csr/csr_wifi_router_ctrl_free_upstream_contents.c87
-rw-r--r--drivers/staging/csr/csr_wifi_router_ctrl_lib.h2082
-rw-r--r--drivers/staging/csr/csr_wifi_router_ctrl_prim.h2113
-rw-r--r--drivers/staging/csr/csr_wifi_router_ctrl_sef.c46
-rw-r--r--drivers/staging/csr/csr_wifi_router_ctrl_sef.h51
-rw-r--r--drivers/staging/csr/csr_wifi_router_ctrl_serialize.c2591
-rw-r--r--drivers/staging/csr/csr_wifi_router_ctrl_serialize.h333
-rw-r--r--drivers/staging/csr/csr_wifi_router_free_downstream_contents.c53
-rw-r--r--drivers/staging/csr/csr_wifi_router_free_upstream_contents.c47
-rw-r--r--drivers/staging/csr/csr_wifi_router_lib.h417
-rw-r--r--drivers/staging/csr/csr_wifi_router_prim.h421
-rw-r--r--drivers/staging/csr/csr_wifi_router_sef.c19
-rw-r--r--drivers/staging/csr/csr_wifi_router_sef.h25
-rw-r--r--drivers/staging/csr/csr_wifi_router_serialize.c418
-rw-r--r--drivers/staging/csr/csr_wifi_router_serialize.h67
-rw-r--r--drivers/staging/csr/csr_wifi_router_task.h25
-rw-r--r--drivers/staging/csr/csr_wifi_router_transport.c199
-rw-r--r--drivers/staging/csr/csr_wifi_serialize_primitive_types.c256
-rw-r--r--drivers/staging/csr/csr_wifi_sme_ap_lib.h774
-rw-r--r--drivers/staging/csr/csr_wifi_sme_ap_prim.h1030
-rw-r--r--drivers/staging/csr/csr_wifi_sme_converter_init.c201
-rw-r--r--drivers/staging/csr/csr_wifi_sme_converter_init.h34
-rw-r--r--drivers/staging/csr/csr_wifi_sme_free_downstream_contents.c187
-rw-r--r--drivers/staging/csr/csr_wifi_sme_free_upstream_contents.c275
-rw-r--r--drivers/staging/csr/csr_wifi_sme_lib.h4303
-rw-r--r--drivers/staging/csr/csr_wifi_sme_prim.h6510
-rw-r--r--drivers/staging/csr/csr_wifi_sme_sef.c85
-rw-r--r--drivers/staging/csr/csr_wifi_sme_sef.h142
-rw-r--r--drivers/staging/csr/csr_wifi_sme_serialize.c5809
-rw-r--r--drivers/staging/csr/csr_wifi_sme_serialize.h666
-rw-r--r--drivers/staging/csr/csr_wifi_sme_task.h25
-rw-r--r--drivers/staging/csr/csr_wifi_vif_utils.h27
-rw-r--r--drivers/staging/csr/data_tx.c54
-rw-r--r--drivers/staging/csr/drv.c2193
-rw-r--r--drivers/staging/csr/firmware.c396
-rw-r--r--drivers/staging/csr/inet.c104
-rw-r--r--drivers/staging/csr/init_hw.c108
-rw-r--r--drivers/staging/csr/io.c1098
-rw-r--r--drivers/staging/csr/mlme.c433
-rw-r--r--drivers/staging/csr/monitor.c384
-rw-r--r--drivers/staging/csr/netdev.c3307
-rw-r--r--drivers/staging/csr/os.c477
-rw-r--r--drivers/staging/csr/putest.c685
-rw-r--r--drivers/staging/csr/sdio_events.c134
-rw-r--r--drivers/staging/csr/sdio_mmc.c1288
-rw-r--r--drivers/staging/csr/sdio_stubs.c82
-rw-r--r--drivers/staging/csr/sme_blocking.c1466
-rw-r--r--drivers/staging/csr/sme_mgt.c1012
-rw-r--r--drivers/staging/csr/sme_native.c566
-rw-r--r--drivers/staging/csr/sme_sys.c3260
-rw-r--r--drivers/staging/csr/sme_userspace.c315
-rw-r--r--drivers/staging/csr/sme_userspace.h38
-rw-r--r--drivers/staging/csr/sme_wext.c3327
-rw-r--r--drivers/staging/csr/ul_int.c528
-rw-r--r--drivers/staging/csr/unifi_clients.h129
-rw-r--r--drivers/staging/csr/unifi_config.h34
-rw-r--r--drivers/staging/csr/unifi_dbg.c110
-rw-r--r--drivers/staging/csr/unifi_event.c692
-rw-r--r--drivers/staging/csr/unifi_native.h257
-rw-r--r--drivers/staging/csr/unifi_os.h122
-rw-r--r--drivers/staging/csr/unifi_pdu_processing.c3729
-rw-r--r--drivers/staging/csr/unifi_priv.h1136
-rw-r--r--drivers/staging/csr/unifi_sme.c1225
-rw-r--r--drivers/staging/csr/unifi_sme.h245
-rw-r--r--drivers/staging/csr/unifi_wext.h108
-rw-r--r--drivers/staging/csr/unifiio.h398
-rw-r--r--drivers/staging/csr/wext_events.c283
-rw-r--r--drivers/staging/frontier/alphatrack.c2
-rw-r--r--drivers/staging/gdm72xx/gdm_qos.c2
-rw-r--r--drivers/staging/iio/accel/lis3l02dq_core.c2
-rw-r--r--drivers/staging/iio/adc/ad7291.c1
-rw-r--r--drivers/staging/iio/adc/mxs-lradc.c18
-rw-r--r--drivers/staging/imx-drm/Kconfig1
-rw-r--r--drivers/staging/line6/pcm.c5
-rw-r--r--drivers/staging/tidspbridge/pmgr/dbll.c7
-rw-r--r--drivers/staging/zram/zram_drv.c6
-rw-r--r--drivers/thermal/x86_pkg_temp_thermal.c18
-rw-r--r--drivers/tty/serial/8250/8250_early.c3
-rw-r--r--drivers/tty/serial/Kconfig2
-rw-r--r--drivers/tty/synclinkmp.c2
-rw-r--r--drivers/usb/core/hub.c48
-rw-r--r--drivers/usb/core/hub.h3
-rw-r--r--drivers/usb/dwc3/Kconfig2
-rw-r--r--drivers/usb/dwc3/core.c2
-rw-r--r--drivers/usb/dwc3/core.h4
-rw-r--r--drivers/usb/dwc3/gadget.c1
-rw-r--r--drivers/usb/gadget/Kconfig5
-rw-r--r--drivers/usb/gadget/at91_udc.c16
-rw-r--r--drivers/usb/gadget/f_ecm.c7
-rw-r--r--drivers/usb/gadget/f_eem.c7
-rw-r--r--drivers/usb/gadget/f_ncm.c7
-rw-r--r--drivers/usb/gadget/f_phonet.c7
-rw-r--r--drivers/usb/gadget/f_rndis.c7
-rw-r--r--drivers/usb/gadget/f_subset.c7
-rw-r--r--drivers/usb/gadget/fotg210-udc.c4
-rw-r--r--drivers/usb/gadget/mv_u3d_core.c4
-rw-r--r--drivers/usb/gadget/udc-core.c6
-rw-r--r--drivers/usb/host/ehci-hub.c1
-rw-r--r--drivers/usb/host/pci-quirks.h1
-rw-r--r--drivers/usb/host/xhci-pci.c1
-rw-r--r--drivers/usb/host/xhci-ring.c2
-rw-r--r--drivers/usb/host/xhci.c17
-rw-r--r--drivers/usb/misc/sisusbvga/sisusb.c1
-rw-r--r--drivers/usb/phy/phy-omap-usb3.c2
-rw-r--r--drivers/usb/phy/phy-samsung-usb2.c2
-rw-r--r--drivers/usb/renesas_usbhs/mod_gadget.c4
-rw-r--r--drivers/usb/serial/cp210x.c4
-rw-r--r--drivers/usb/serial/mos7840.c25
-rw-r--r--drivers/usb/serial/option.c23
-rw-r--r--drivers/usb/serial/ti_usb_3410_5052.c2
-rw-r--r--drivers/usb/storage/unusual_devs.h7
-rw-r--r--drivers/vhost/net.c37
-rw-r--r--drivers/vhost/scsi.c17
-rw-r--r--drivers/vhost/test.c6
-rw-r--r--drivers/vhost/vhost.h10
-rw-r--r--drivers/video/backlight/max8925_bl.c41
-rw-r--r--drivers/video/uvesafb.c2
-rw-r--r--drivers/xen/xen-acpi-cpuhotplug.c2
-rw-r--r--fs/btrfs/extent-tree.c27
-rw-r--r--fs/btrfs/scrub.c2
-rw-r--r--fs/ext3/namei.c2
-rw-r--r--fs/ext4/balloc.c4
-rw-r--r--fs/ext4/extents.c23
-rw-r--r--fs/ext4/extents_status.c73
-rw-r--r--fs/ext4/inode.c19
-rw-r--r--fs/ext4/mballoc.c11
-rw-r--r--fs/ext4/namei.c2
-rw-r--r--fs/ext4/page-io.c35
-rw-r--r--fs/ext4/super.c14
-rw-r--r--fs/fuse/dir.c51
-rw-r--r--fs/lockd/svclock.c4
-rw-r--r--fs/nfs/nfs4xdr.c21
-rw-r--r--fs/nfsd/nfs4proc.c2
-rw-r--r--fs/nfsd/nfsd.h1
-rw-r--r--fs/nfsd/nfssvc.c13
-rw-r--r--fs/nfsd/vfs.c5
-rw-r--r--fs/open.c2
-rw-r--r--fs/proc/vmcore.c2
-rw-r--r--fs/super.c25
-rw-r--r--fs/sysfs/group.c70
-rw-r--r--fs/xfs/xfs_dinode.h3
-rw-r--r--fs/xfs/xfs_inode.c31
-rw-r--r--fs/xfs/xfs_log_recover.c13
-rw-r--r--include/acpi/acpixf.h1
-rw-r--r--include/acpi/actypes.h15
-rw-r--r--include/dt-bindings/clock/vf610-clock.h4
-rw-r--r--include/linux/cgroup.h3
-rw-r--r--include/linux/cgroup_subsys.h45
-rw-r--r--include/linux/cpu.h2
-rw-r--r--include/linux/crc-t10dif.h4
-rw-r--r--include/linux/dcache.h2
-rw-r--r--include/linux/device.h37
-rw-r--r--include/linux/drbd.h6
-rw-r--r--include/linux/drbd_genl.h2
-rw-r--r--include/linux/drbd_limits.h9
-rw-r--r--include/linux/edac.h7
-rw-r--r--include/linux/if_vlan.h3
-rw-r--r--include/linux/iio/iio.h4
-rw-r--r--include/linux/list.h11
-rw-r--r--include/linux/mfd/syscon/imx6q-iomuxc-gpr.h137
-rw-r--r--include/linux/perf_event.h2
-rw-r--r--include/linux/platform_data/mmc-pxamci.h2
-rw-r--r--include/linux/pm_wakeup.h4
-rw-r--r--include/linux/shdma-base.h4
-rw-r--r--include/linux/sysfs.h64
-rw-r--r--include/linux/usb.h11
-rw-r--r--include/trace/events/bcache.h381
-rw-r--r--include/trace/ftrace.h4
-rw-r--r--include/uapi/asm-generic/fcntl.h4
-rw-r--r--include/uapi/linux/usb/ch11.h11
-rw-r--r--include/xen/interface/io/blkif.h53
-rw-r--r--include/xen/interface/io/ring.h5
-rw-r--r--init/calibrate.c13
-rw-r--r--kernel/cgroup.c31
-rw-r--r--kernel/cpu.c6
-rw-r--r--kernel/events/core.c6
-rw-r--r--kernel/fork.c2
-rw-r--r--kernel/hrtimer.c6
-rw-r--r--kernel/power/autosleep.c3
-rw-r--r--kernel/printk.c2
-rw-r--r--kernel/profile.c2
-rw-r--r--kernel/rcutorture.c6
-rw-r--r--kernel/rcutree.c6
-rw-r--r--kernel/rcutree.h4
-rw-r--r--kernel/rcutree_plugin.h6
-rw-r--r--kernel/relay.c2
-rw-r--r--kernel/sched/core.c12
-rw-r--r--kernel/sched/fair.c2
-rw-r--r--kernel/smp.c2
-rw-r--r--kernel/smpboot.c2
-rw-r--r--kernel/softirq.c8
-rw-r--r--kernel/time/tick-sched.c2
-rw-r--r--kernel/timer.c10
-rw-r--r--kernel/trace/ftrace.c18
-rw-r--r--kernel/trace/ring_buffer.c26
-rw-r--r--kernel/trace/trace.c227
-rw-r--r--kernel/trace/trace.h18
-rw-r--r--kernel/trace/trace_event_perf.c10
-rw-r--r--kernel/trace/trace_events.c98
-rw-r--r--kernel/trace/trace_events_filter.c4
-rw-r--r--kernel/trace/trace_functions.c2
-rw-r--r--kernel/trace/trace_functions_graph.c54
-rw-r--r--kernel/trace/trace_kprobe.c29
-rw-r--r--kernel/trace/trace_mmiotrace.c8
-rw-r--r--kernel/trace/trace_output.c14
-rw-r--r--kernel/trace/trace_syscalls.c26
-rw-r--r--kernel/trace/trace_uprobe.c2
-rw-r--r--kernel/wait.c3
-rw-r--r--kernel/workqueue.c4
-rw-r--r--lib/Kconfig2
-rw-r--r--lib/Kconfig.debug2
-rw-r--r--lib/crc-t10dif.c73
-rw-r--r--lib/earlycpio.c2
-rw-r--r--lib/mpi/longlong.h17
-rw-r--r--lib/percpu_counter.c2
-rw-r--r--mm/backing-dev.c2
-rw-r--r--mm/memcontrol.c2
-rw-r--r--mm/page-writeback.c4
-rw-r--r--mm/slab.c10
-rw-r--r--mm/slub.c4
-rw-r--r--mm/vmstat.c6
-rw-r--r--net/8021q/vlan_core.c2
-rw-r--r--net/8021q/vlan_dev.c7
-rw-r--r--net/core/dev.c11
-rw-r--r--net/core/ethtool.c30
-rw-r--r--net/core/flow.c4
-rw-r--r--net/ethernet/eth.c21
-rw-r--r--net/ipv4/ip_input.c7
-rw-r--r--net/ipv6/ndisc.c6
-rw-r--r--net/irda/irlan/irlan_eth.c31
-rw-r--r--net/iucv/iucv.c2
-rw-r--r--net/sched/sch_qfq.c85
-rw-r--r--net/sunrpc/clnt.c1
-rw-r--r--net/sunrpc/xprtrdma/svc_rdma_marshal.c20
-rw-r--r--sound/arm/pxa2xx-pcm-lib.c2
-rw-r--r--sound/core/seq/oss/seq_oss_init.c16
-rw-r--r--sound/core/seq/oss/seq_oss_midi.c2
-rw-r--r--sound/oss/vwsnd.c4
-rw-r--r--sound/pci/asihpi/asihpi.c3
-rw-r--r--sound/pci/atiixp.c2
-rw-r--r--sound/pci/atiixp_modem.c2
-rw-r--r--sound/pci/hda/patch_hdmi.c2
-rw-r--r--sound/pci/hda/patch_sigmatel.c13
-rw-r--r--sound/soc/atmel/atmel-pcm-dma.c2
-rw-r--r--sound/soc/cirrus/ep93xx-ac97.c4
-rw-r--r--sound/soc/codecs/max98088.c2
-rw-r--r--sound/soc/codecs/sgtl5000.c5
-rw-r--r--sound/soc/codecs/sgtl5000.h2
-rw-r--r--sound/soc/codecs/wm8978.c1
-rw-r--r--sound/soc/codecs/wm8994.c4
-rw-r--r--sound/soc/omap/mcbsp.c39
-rw-r--r--sound/soc/omap/omap-dmic.c11
-rw-r--r--sound/soc/omap/omap-mcpdm.c16
-rw-r--r--sound/soc/omap/omap-pcm.c17
-rw-r--r--sound/soc/s6000/s6000-pcm.c2
-rw-r--r--sound/soc/samsung/i2s.c8
-rw-r--r--sound/soc/soc-core.c4
-rw-r--r--sound/soc/tegra/tegra20_ac97.c6
-rw-r--r--sound/soc/tegra/tegra20_spdif.c4
-rw-r--r--sound/usb/6fire/pcm.c14
-rw-r--r--sound/usb/hiface/pcm.c2
-rw-r--r--sound/usb/misc/ua101.c14
-rw-r--r--sound/usb/usx2y/usbusx2yaudio.c4
-rw-r--r--tools/hv/hv_kvp_daemon.c5
969 files changed, 10314 insertions, 98466 deletions
diff --git a/Documentation/ABI/testing/sysfs-driver-xen-blkback b/Documentation/ABI/testing/sysfs-driver-xen-blkback
new file mode 100644
index 000000000000..8bb43b66eb55
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-driver-xen-blkback
@@ -0,0 +1,17 @@
+What: /sys/module/xen_blkback/parameters/max_buffer_pages
+Date: March 2013
+KernelVersion: 3.11
+Contact: Roger Pau Monné <roger.pau@citrix.com>
+Description:
+ Maximum number of free pages to keep in each block
+ backend buffer.
+
+What: /sys/module/xen_blkback/parameters/max_persistent_grants
+Date: March 2013
+KernelVersion: 3.11
+Contact: Roger Pau Monné <roger.pau@citrix.com>
+Description:
+ Maximum number of grants to map persistently in
+ blkback. If the frontend tries to use more than
+ max_persistent_grants, the LRU kicks in and starts
+ removing 5% of max_persistent_grants every 100ms.
diff --git a/Documentation/ABI/testing/sysfs-driver-xen-blkfront b/Documentation/ABI/testing/sysfs-driver-xen-blkfront
new file mode 100644
index 000000000000..c0a6cb7eb314
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-driver-xen-blkfront
@@ -0,0 +1,10 @@
+What: /sys/module/xen_blkfront/parameters/max
+Date: June 2013
+KernelVersion: 3.11
+Contact: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+Description:
+ Maximum number of segments that the frontend will negotiate
+ with the backend for indirect descriptors. The default value
+ is 32 - higher value means more potential throughput but more
+ memory usage. The backend picks the minimum of the frontend
+ and its default backend value.
diff --git a/Documentation/bcache.txt b/Documentation/bcache.txt
index c3365f26b2d9..32b6c3189d98 100644
--- a/Documentation/bcache.txt
+++ b/Documentation/bcache.txt
@@ -46,29 +46,33 @@ you format your backing devices and cache device at the same time, you won't
have to manually attach:
make-bcache -B /dev/sda /dev/sdb -C /dev/sdc
-To make bcache devices known to the kernel, echo them to /sys/fs/bcache/register:
+bcache-tools now ships udev rules, and bcache devices are known to the kernel
+immediately. Without udev, you can manually register devices like this:
echo /dev/sdb > /sys/fs/bcache/register
echo /dev/sdc > /sys/fs/bcache/register
-To register your bcache devices automatically, you could add something like
-this to an init script:
+Registering the backing device makes the bcache device show up in /dev; you can
+now format it and use it as normal. But the first time using a new bcache
+device, it'll be running in passthrough mode until you attach it to a cache.
+See the section on attaching.
- echo /dev/sd* > /sys/fs/bcache/register_quiet
+The devices show up as:
-It'll look for bcache superblocks and ignore everything that doesn't have one.
+ /dev/bcache<N>
-Registering the backing device makes the bcache show up in /dev; you can now
-format it and use it as normal. But the first time using a new bcache device,
-it'll be running in passthrough mode until you attach it to a cache. See the
-section on attaching.
+As well as (with udev):
-The devices show up at /dev/bcacheN, and can be controlled via sysfs from
-/sys/block/bcacheN/bcache:
+ /dev/bcache/by-uuid/<uuid>
+ /dev/bcache/by-label/<label>
+
+To get started:
mkfs.ext4 /dev/bcache0
mount /dev/bcache0 /mnt
+You can control bcache devices through sysfs at /sys/block/bcache<N>/bcache .
+
Cache devices are managed as sets; multiple caches per set isn't supported yet
but will allow for mirroring of metadata and dirty data in the future. Your new
cache set shows up as /sys/fs/bcache/<UUID>
@@ -80,11 +84,11 @@ must be attached to your cache set to enable caching. Attaching a backing
device to a cache set is done thusly, with the UUID of the cache set in
/sys/fs/bcache:
- echo <UUID> > /sys/block/bcache0/bcache/attach
+ echo <CSET-UUID> > /sys/block/bcache0/bcache/attach
This only has to be done once. The next time you reboot, just reregister all
your bcache devices. If a backing device has data in a cache somewhere, the
-/dev/bcache# device won't be created until the cache shows up - particularly
+/dev/bcache<N> device won't be created until the cache shows up - particularly
important if you have writeback caching turned on.
If you're booting up and your cache device is gone and never coming back, you
@@ -191,6 +195,9 @@ want for getting the best possible numbers when benchmarking.
SYSFS - BACKING DEVICE:
+Available at /sys/block/<bdev>/bcache, /sys/block/bcache*/bcache and
+(if attached) /sys/fs/bcache/<cset-uuid>/bdev*
+
attach
Echo the UUID of a cache set to this file to enable caching.
@@ -300,6 +307,8 @@ cache_readaheads
SYSFS - CACHE SET:
+Available at /sys/fs/bcache/<cset-uuid>
+
average_key_size
Average data per key in the btree.
@@ -390,6 +399,8 @@ trigger_gc
SYSFS - CACHE DEVICE:
+Available at /sys/block/<cdev>/bcache
+
block_size
Minimum granularity of writes - should match hardware sector size.
diff --git a/Documentation/cpu-hotplug.txt b/Documentation/cpu-hotplug.txt
index edd4b4df3932..786dc82f98ce 100644
--- a/Documentation/cpu-hotplug.txt
+++ b/Documentation/cpu-hotplug.txt
@@ -267,8 +267,8 @@ Q: If i have some kernel code that needs to be aware of CPU arrival and
A: This is what you would need in your kernel code to receive notifications.
#include <linux/cpu.h>
- static int __cpuinit foobar_cpu_callback(struct notifier_block *nfb,
- unsigned long action, void *hcpu)
+ static int foobar_cpu_callback(struct notifier_block *nfb,
+ unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long)hcpu;
@@ -285,7 +285,7 @@ A: This is what you would need in your kernel code to receive notifications.
return NOTIFY_OK;
}
- static struct notifier_block __cpuinitdata foobar_cpu_notifer =
+ static struct notifier_block foobar_cpu_notifer =
{
.notifier_call = foobar_cpu_callback,
};
diff --git a/Documentation/devicetree/bindings/clock/imx27-clock.txt b/Documentation/devicetree/bindings/clock/imx27-clock.txt
index ab1a56e9de9d..7a2070393732 100644
--- a/Documentation/devicetree/bindings/clock/imx27-clock.txt
+++ b/Documentation/devicetree/bindings/clock/imx27-clock.txt
@@ -98,6 +98,7 @@ clocks and IDs.
fpm 83
mpll_osc_sel 84
mpll_sel 85
+ spll_gate 86
Examples:
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
index d5a79caec147..366ce9b87240 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.txt
+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
@@ -26,6 +26,7 @@ est ESTeem Wireless Modems
fsl Freescale Semiconductor
GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc.
gef GE Fanuc Intelligent Platforms Embedded Systems, Inc.
+hisilicon Hisilicon Limited.
hp Hewlett Packard
ibm International Business Machines (IBM)
idt Integrated Device Technologies, Inc.
@@ -43,6 +44,7 @@ nxp NXP Semiconductors
onnn ON Semiconductor Corp.
picochip Picochip Ltd
powervr PowerVR (deprecated, use img)
+qca Qualcomm Atheros, Inc.
qcom Qualcomm, Inc.
ralink Mediatek/Ralink Technology Corp.
ramtron Ramtron International
diff --git a/Documentation/ja_JP/HOWTO b/Documentation/ja_JP/HOWTO
index 050d37fe6d40..8148a47fc70e 100644
--- a/Documentation/ja_JP/HOWTO
+++ b/Documentation/ja_JP/HOWTO
@@ -11,14 +11,14 @@ for non English (read: Japanese) speakers and is not intended as a
fork. So if you have any comments or updates for this file, please try
to update the original English file first.
-Last Updated: 2011/03/31
+Last Updated: 2013/07/19
==================================
ã“ã‚Œã¯ã€
-linux-2.6.38/Documentation/HOWTO
+linux-3.10/Documentation/HOWTO
ã®å’Œè¨³ã§ã™ã€‚
-翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ >
-翻訳日: 2011/3/28
+翻訳団体: JF プロジェクト < http://linuxjf.sourceforge.jp/ >
+翻訳日: 2013/7/19
翻訳者: Tsugikazu Shibata <tshibata at ab dot jp dot nec dot com>
校正者: æ¾å€‰ã•ã‚“ <nbh--mats at nifty dot com>
å°æž— é›…å…¸ã•ã‚“ (Masanori Kobayasi) <zap03216 at nifty dot ne dot jp>
@@ -245,7 +245,7 @@ Linux カーãƒãƒ«ã‚½ãƒ¼ã‚¹ãƒ„リーã®ä¸­ã«å«ã¾ã‚Œã‚‹ã€ãã‚Œã„ã«ã—ã€ä¿
自己å‚照方å¼ã§ã€ç´¢å¼•ãŒã¤ã„㟠web å½¢å¼ã§ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’å‚ç…§ã™ã‚‹ã“ã¨ãŒ
ã§ãã¾ã™ã€‚ã“ã®æœ€æ–°ã®ç´ æ™´ã—ã„カーãƒãƒ«ã‚³ãƒ¼ãƒ‰ã®ãƒªãƒã‚¸ãƒˆãƒªã¯ä»¥ä¸‹ã§è¦‹ã¤ã‹ã‚Š
ã¾ã™-
- http://sosdg.org/~qiyong/lxr/
+ http://lxr.linux.no/+trees
開発プロセス
-----------------------
@@ -253,24 +253,24 @@ Linux カーãƒãƒ«ã‚½ãƒ¼ã‚¹ãƒ„リーã®ä¸­ã«å«ã¾ã‚Œã‚‹ã€ãã‚Œã„ã«ã—ã€ä¿
Linux カーãƒãƒ«ã®é–‹ç™ºãƒ—ロセスã¯ç¾åœ¨å¹¾ã¤ã‹ã®ç•°ãªã‚‹ãƒ¡ã‚¤ãƒ³ã‚«ãƒ¼ãƒãƒ«ã€Œãƒ–ラン
ãƒã€ã¨å¤šæ•°ã®ã‚µãƒ–システム毎ã®ã‚«ãƒ¼ãƒãƒ«ãƒ–ランãƒã‹ã‚‰æ§‹æˆã•ã‚Œã¾ã™ã€‚
ã“れらã®ãƒ–ランãƒã¨ã¯-
- - メイン㮠2.6.x カーãƒãƒ«ãƒ„リー
- - 2.6.x.y -stable カーãƒãƒ«ãƒ„リー
- - 2.6.x -git カーãƒãƒ«ãƒ‘ッãƒ
+ - メイン㮠3.x カーãƒãƒ«ãƒ„リー
+ - 3.x.y -stable カーãƒãƒ«ãƒ„リー
+ - 3.x -git カーãƒãƒ«ãƒ‘ッãƒ
- サブシステム毎ã®ã‚«ãƒ¼ãƒãƒ«ãƒ„リーã¨ãƒ‘ッãƒ
- - çµ±åˆãƒ†ã‚¹ãƒˆã®ãŸã‚ã® 2.6.x -next カーãƒãƒ«ãƒ„リー
+ - çµ±åˆãƒ†ã‚¹ãƒˆã®ãŸã‚ã® 3.x -next カーãƒãƒ«ãƒ„リー
-2.6.x カーãƒãƒ«ãƒ„リー
+3.x カーãƒãƒ«ãƒ„リー
-----------------
-2.6.x カーãƒãƒ«ã¯ Linus Torvalds ã«ã‚ˆã£ã¦ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã•ã‚Œã€kernel.org
-ã® pub/linux/kernel/v2.6/ ディレクトリã«å­˜åœ¨ã—ã¾ã™ã€‚ã“ã®é–‹ç™ºãƒ—ロセスã¯
+3.x カーãƒãƒ«ã¯ Linus Torvalds ã«ã‚ˆã£ã¦ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã•ã‚Œã€kernel.org
+ã® pub/linux/kernel/v3.x/ ディレクトリã«å­˜åœ¨ã—ã¾ã™ã€‚ã“ã®é–‹ç™ºãƒ—ロセスã¯
以下ã®ã¨ãŠã‚Š-
- æ–°ã—ã„カーãƒãƒ«ãŒãƒªãƒªãƒ¼ã‚¹ã•ã‚ŒãŸç›´å¾Œã«ã€2週間ã®ç‰¹åˆ¥æœŸé–“ãŒè¨­ã‘られã€
ã“ã®æœŸé–“中ã«ã€ãƒ¡ãƒ³ãƒ†ãƒŠé”㯠Linus ã«å¤§ããªå·®åˆ†ã‚’é€ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
ã“ã®ã‚ˆã†ãªå·®åˆ†ã¯é€šå¸¸ -next カーãƒãƒ«ã«æ•°é€±é–“å«ã¾ã‚Œã¦ããŸãƒ‘ッãƒã§ã™ã€‚
大ããªå¤‰æ›´ã¯ git(カーãƒãƒ«ã®ã‚½ãƒ¼ã‚¹ç®¡ç†ãƒ„ールã€è©³ç´°ã¯
- http://git-scm.com/ å‚ç…§) を使ã£ã¦é€ã‚‹ã®ãŒå¥½ã¾ã—ã„ã‚„ã‚Šæ–¹ã§ã™ãŒã€ãƒ‘ッ
+ http://git-scm.com/ å‚ç…§) を使ã£ã¦é€ã‚‹ã®ãŒå¥½ã¾ã—ã„ã‚„ã‚Šæ–¹ã§ã™ãŒã€ãƒ‘ッ
ãƒãƒ•ã‚¡ã‚¤ãƒ«ã®å½¢å¼ã®ã¾ã¾é€ã‚‹ã®ã§ã‚‚å分ã§ã™ã€‚
- 2週間後ã€-rc1 カーãƒãƒ«ãŒãƒªãƒªãƒ¼ã‚¹ã•ã‚Œã€ã“ã®å¾Œã«ã¯ã‚«ãƒ¼ãƒãƒ«å…¨ä½“ã®å®‰å®š
@@ -302,20 +302,20 @@ Andrew Morton ㌠Linux-kernel メーリングリストã«ã‚«ãƒ¼ãƒãƒ«ãƒªãƒªãƒ¼ã
実ã«èªè­˜ã•ã‚ŒãŸãƒã‚°ã®çŠ¶æ³ã«ã‚ˆã‚Šãƒªãƒªãƒ¼ã‚¹ã•ã‚Œã‚‹ã®ã§ã‚ã‚Šã€å‰ã‚‚ã£ã¦æ±ºã‚ら
ã‚ŒãŸè¨ˆç”»ã«ã‚ˆã£ã¦ãƒªãƒªãƒ¼ã‚¹ã•ã‚Œã‚‹ã‚‚ã®ã§ã¯ãªã„ã‹ã‚‰ã§ã™ã€‚ã€
-2.6.x.y -stable カーãƒãƒ«ãƒ„リー
+3.x.y -stable カーãƒãƒ«ãƒ„リー
---------------------------
-ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ãŒ4ã¤ã®æ•°å­—ã«åˆ†ã‹ã‚Œã¦ã„るカーãƒãƒ«ã¯ -stable カーãƒãƒ«ã§ã™ã€‚
-ã“ã‚Œã«ã¯ã€2.6.x カーãƒãƒ«ã§è¦‹ã¤ã‹ã£ãŸã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£å•é¡Œã‚„é‡å¤§ãªå¾Œæˆ»ã‚Šã«å¯¾
+ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ãŒ3ã¤ã®æ•°å­—ã«åˆ†ã‹ã‚Œã¦ã„るカーãƒãƒ«ã¯ -stable カーãƒãƒ«ã§ã™ã€‚
+ã“ã‚Œã«ã¯ã€3.x カーãƒãƒ«ã§è¦‹ã¤ã‹ã£ãŸã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£å•é¡Œã‚„é‡å¤§ãªå¾Œæˆ»ã‚Šã«å¯¾
ã™ã‚‹æ¯”較的å°ã•ã„é‡è¦ãªä¿®æ­£ãŒå«ã¾ã‚Œã¾ã™ã€‚
ã“ã‚Œã¯ã€é–‹ç™º/実験的ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ†ã‚¹ãƒˆã«å”力ã™ã‚‹ã“ã¨ã«èˆˆå‘³ãŒç„¡ãã€
最新ã®å®‰å®šã—ãŸã‚«ãƒ¼ãƒãƒ«ã‚’使ã„ãŸã„ユーザã«æŽ¨å¥¨ã™ã‚‹ãƒ–ランãƒã§ã™ã€‚
-ã‚‚ã—ã€2.6.x.y カーãƒãƒ«ãŒå­˜åœ¨ã—ãªã„å ´åˆã«ã¯ã€ç•ªå·ãŒä¸€ç•ªå¤§ãã„ 2.6.x ãŒ
+ã‚‚ã—ã€3.x.y カーãƒãƒ«ãŒå­˜åœ¨ã—ãªã„å ´åˆã«ã¯ã€ç•ªå·ãŒä¸€ç•ªå¤§ãã„ 3.x ãŒ
最新ã®å®‰å®šç‰ˆã‚«ãƒ¼ãƒãƒ«ã§ã™ã€‚
-2.6.x.y 㯠"stable" ãƒãƒ¼ãƒ  <stable@kernel.org> ã§ãƒ¡ãƒ³ãƒ†ã•ã‚Œã¦ãŠã‚Šã€å¿…
+3.x.y 㯠"stable" ãƒãƒ¼ãƒ  <stable@kernel.org> ã§ãƒ¡ãƒ³ãƒ†ã•ã‚Œã¦ãŠã‚Šã€å¿…
è¦ã«å¿œã˜ã¦ãƒªãƒªãƒ¼ã‚¹ã•ã‚Œã¾ã™ã€‚通常ã®ãƒªãƒªãƒ¼ã‚¹æœŸé–“㯠2週間毎ã§ã™ãŒã€å·®ã—è¿«ã£
ãŸå•é¡ŒãŒãªã‘ã‚Œã°ã‚‚ã†å°‘ã—é•·ããªã‚‹ã“ã¨ã‚‚ã‚ã‚Šã¾ã™ã€‚セキュリティ関連ã®å•é¡Œ
ã®å ´åˆã¯ã“ã‚Œã«å¯¾ã—ã¦ã ã„ãŸã„ã®å ´åˆã€ã™ãã«ãƒªãƒªãƒ¼ã‚¹ãŒã•ã‚Œã¾ã™ã€‚
@@ -324,7 +324,7 @@ Andrew Morton ㌠Linux-kernel メーリングリストã«ã‚«ãƒ¼ãƒãƒ«ãƒªãƒªãƒ¼ã
イルã«ã¯ã©ã®ã‚ˆã†ãªç¨®é¡žã®å¤‰æ›´ãŒ -stable ツリーã«å—ã‘入れå¯èƒ½ã‹ã€ã¾ãŸãƒª
リースプロセスãŒã©ã†å‹•ãã‹ãŒè¨˜è¿°ã•ã‚Œã¦ã„ã¾ã™ã€‚
-2.6.x -git パッãƒ
+3.x -git パッãƒ
------------------
git リãƒã‚¸ãƒˆãƒªã§ç®¡ç†ã•ã‚Œã¦ã„ã‚‹Linus ã®ã‚«ãƒ¼ãƒãƒ«ãƒ„リーã®æ¯Žæ—¥ã®ã‚¹ãƒŠãƒƒãƒ—
@@ -358,14 +358,14 @@ quilt シリーズã¨ã—ã¦å…¬é–‹ã•ã‚Œã¦ã„るパッãƒã‚­ãƒ¥ãƒ¼ã‚‚使ã‚ã‚Œã
ã‚’ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚大部分ã®ã“れら㮠patchwork ã®ã‚µã‚¤ãƒˆã¯
http://patchwork.kernel.org/ ã§ãƒªã‚¹ãƒˆã•ã‚Œã¦ã„ã¾ã™ã€‚
-çµ±åˆãƒ†ã‚¹ãƒˆã®ãŸã‚ã® 2.6.x -next カーãƒãƒ«ãƒ„リー
+çµ±åˆãƒ†ã‚¹ãƒˆã®ãŸã‚ã® 3.x -next カーãƒãƒ«ãƒ„リー
---------------------------------------------
-サブシステムツリーã®æ›´æ–°å†…容ãŒãƒ¡ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³ã® 2.6.x ツリーã«ãƒžãƒ¼ã‚¸ã•ã‚Œ
+サブシステムツリーã®æ›´æ–°å†…容ãŒãƒ¡ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³ã® 3.x ツリーã«ãƒžãƒ¼ã‚¸ã•ã‚Œ
ã‚‹å‰ã«ã€ãれらã¯çµ±åˆãƒ†ã‚¹ãƒˆã•ã‚Œã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“ã®ç›®çš„ã®ãŸã‚ã€å®Ÿè³ªçš„
ã«å…¨ã‚µãƒ–システムツリーã‹ã‚‰ã»ã¼æ¯Žæ—¥ãƒ—ルã•ã‚Œã¦ã§ãる特別ãªãƒ†ã‚¹ãƒˆç”¨ã®ãƒª
ãƒã‚¸ãƒˆãƒªãŒå­˜åœ¨ã—ã¾ã™-
- http://git.kernel.org/?p=linux/kernel/git/sfr/linux-next.git
+ http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git
http://linux.f-seidel.de/linux-next/pmwiki/
ã“ã®ã‚„ã‚Šæ–¹ã«ã‚ˆã£ã¦ã€-next カーãƒãƒ«ã¯æ¬¡ã®ãƒžãƒ¼ã‚¸æ©Ÿä¼šã§ã©ã‚“ãªã‚‚ã®ãŒãƒ¡ã‚¤ãƒ³
diff --git a/MAINTAINERS b/MAINTAINERS
index bf61e04291ab..a26b10e52aea 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1642,7 +1642,7 @@ S: Maintained
F: drivers/net/hamradio/baycom*
BCACHE (BLOCK LAYER CACHE)
-M: Kent Overstreet <koverstreet@google.com>
+M: Kent Overstreet <kmo@daterainc.com>
L: linux-bcache@vger.kernel.org
W: http://bcache.evilpiepirate.org
S: Maintained:
@@ -3346,7 +3346,7 @@ F: Documentation/firmware_class/
F: drivers/base/firmware*.c
F: include/linux/firmware.h
-FLASHSYSTEM DRIVER (IBM FlashSystem 70/80 PCI SSD Flash Card)
+FLASH ADAPTER DRIVER (IBM Flash Adapter 900GB Full Height PCI Flash Card)
M: Joshua Morris <josh.h.morris@us.ibm.com>
M: Philip Kelleher <pjk1939@linux.vnet.ibm.com>
S: Maintained
@@ -3622,11 +3622,9 @@ F: drivers/isdn/gigaset/
F: include/uapi/linux/gigaset_dev.h
GPIO SUBSYSTEM
-M: Grant Likely <grant.likely@linaro.org>
M: Linus Walleij <linus.walleij@linaro.org>
S: Maintained
L: linux-gpio@vger.kernel.org
-T: git git://git.secretlab.ca/git/linux-2.6.git
F: Documentation/gpio.txt
F: drivers/gpio/
F: include/linux/gpio*
@@ -4472,8 +4470,6 @@ F: drivers/irqchip/
IRQ DOMAINS (IRQ NUMBER MAPPING LIBRARY)
M: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-M: Grant Likely <grant.likely@linaro.org>
-T: git git://git.secretlab.ca/git/linux-2.6.git irqdomain/next
S: Maintained
F: Documentation/IRQ-domain.txt
F: include/linux/irqdomain.h
@@ -4990,7 +4986,7 @@ F: arch/powerpc/platforms/44x/
LINUX FOR POWERPC EMBEDDED XILINX VIRTEX
L: linuxppc-dev@lists.ozlabs.org
-S: Unmaintained
+S: Orphan
F: arch/powerpc/*/*virtex*
F: arch/powerpc/*/*/*virtex*
@@ -5886,7 +5882,7 @@ OMAP DEVICE TREE SUPPORT
M: Benoît Cousson <b-cousson@ti.com>
M: Tony Lindgren <tony@atomide.com>
L: linux-omap@vger.kernel.org
-L: devicetree-discuss@lists.ozlabs.org (moderated for non-subscribers)
+L: devicetree@vger.kernel.org
S: Maintained
F: arch/arm/boot/dts/*omap*
F: arch/arm/boot/dts/*am3*
@@ -6050,17 +6046,28 @@ F: drivers/i2c/busses/i2c-ocores.c
OPEN FIRMWARE AND FLATTENED DEVICE TREE
M: Grant Likely <grant.likely@linaro.org>
M: Rob Herring <rob.herring@calxeda.com>
-L: devicetree-discuss@lists.ozlabs.org (moderated for non-subscribers)
+L: devicetree@vger.kernel.org
W: http://fdt.secretlab.ca
T: git git://git.secretlab.ca/git/linux-2.6.git
S: Maintained
-F: Documentation/devicetree
-F: drivers/of
+F: drivers/of/
F: include/linux/of*.h
-F: scripts/dtc
+F: scripts/dtc/
K: of_get_property
K: of_match_table
+OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
+M: Rob Herring <rob.herring@calxeda.com>
+M: Pawel Moll <pawel.moll@arm.com>
+M: Mark Rutland <mark.rutland@arm.com>
+M: Stephen Warren <swarren@wwwdotorg.org>
+M: Ian Campbell <ian.campbell@citrix.com>
+L: devicetree@vger.kernel.org
+S: Maintained
+F: Documentation/devicetree/
+F: arch/*/boot/dts/
+F: include/dt-bindings/
+
OPENRISC ARCHITECTURE
M: Jonas Bonn <jonas@southpole.se>
W: http://openrisc.net
@@ -7746,7 +7753,6 @@ F: drivers/clk/spear/
SPI SUBSYSTEM
M: Mark Brown <broonie@kernel.org>
-M: Grant Likely <grant.likely@linaro.org>
L: linux-spi@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git
Q: http://patchwork.kernel.org/project/spi-devel-general/list/
@@ -7812,7 +7818,7 @@ F: drivers/staging/asus_oled/
STAGING - COMEDI
M: Ian Abbott <abbotti@mev.co.uk>
-M: Mori Hess <fmhess@users.sourceforge.net>
+M: H Hartley Sweeten <hsweeten@visionengravers.com>
S: Odd Fixes
F: drivers/staging/comedi/
@@ -9288,7 +9294,7 @@ S: Maintained
F: drivers/net/ethernet/xilinx/xilinx_axienet*
XILINX SYSTEMACE DRIVER
-S: Unmaintained
+S: Orphan
F: drivers/block/xsysace.c
XILINX UARTLITE SERIAL DRIVER
diff --git a/Makefile b/Makefile
index 9262ba8da4f9..a35f72a420c0 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
VERSION = 3
PATCHLEVEL = 11
SUBLEVEL = 0
-EXTRAVERSION = -rc1
+EXTRAVERSION = -rc2
NAME = Linux for Workgroups
# *DOCUMENTATION*
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig
index 837a1f2d8b96..082d9b4b5472 100644
--- a/arch/alpha/Kconfig
+++ b/arch/alpha/Kconfig
@@ -15,6 +15,7 @@ config ALPHA
select ARCH_WANT_OPTIONAL_GPIOLIB
select ARCH_WANT_IPC_PARSE_VERSION
select ARCH_HAVE_NMI_SAFE_CMPXCHG
+ select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
select GENERIC_SMP_IDLE_THREAD
select GENERIC_CMOS_UPDATE
select GENERIC_STRNCPY_FROM_USER
diff --git a/arch/alpha/include/asm/atomic.h b/arch/alpha/include/asm/atomic.h
index c2cbe4fc391c..78b03ef39f6f 100644
--- a/arch/alpha/include/asm/atomic.h
+++ b/arch/alpha/include/asm/atomic.h
@@ -186,17 +186,24 @@ static __inline__ long atomic64_sub_return(long i, atomic64_t * v)
*/
static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
{
- int c, old;
- c = atomic_read(v);
- for (;;) {
- if (unlikely(c == (u)))
- break;
- old = atomic_cmpxchg((v), c, c + (a));
- if (likely(old == c))
- break;
- c = old;
- }
- return c;
+ int c, new, old;
+ smp_mb();
+ __asm__ __volatile__(
+ "1: ldl_l %[old],%[mem]\n"
+ " cmpeq %[old],%[u],%[c]\n"
+ " addl %[old],%[a],%[new]\n"
+ " bne %[c],2f\n"
+ " stl_c %[new],%[mem]\n"
+ " beq %[new],3f\n"
+ "2:\n"
+ ".subsection 2\n"
+ "3: br 1b\n"
+ ".previous"
+ : [old] "=&r"(old), [new] "=&r"(new), [c] "=&r"(c)
+ : [mem] "m"(*v), [a] "rI"(a), [u] "rI"((long)u)
+ : "memory");
+ smp_mb();
+ return old;
}
@@ -207,21 +214,56 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
* @u: ...unless v is equal to u.
*
* Atomically adds @a to @v, so long as it was not @u.
- * Returns the old value of @v.
+ * Returns true iff @v was not @u.
*/
static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u)
{
- long c, old;
- c = atomic64_read(v);
- for (;;) {
- if (unlikely(c == (u)))
- break;
- old = atomic64_cmpxchg((v), c, c + (a));
- if (likely(old == c))
- break;
- c = old;
- }
- return c != (u);
+ long c, tmp;
+ smp_mb();
+ __asm__ __volatile__(
+ "1: ldq_l %[tmp],%[mem]\n"
+ " cmpeq %[tmp],%[u],%[c]\n"
+ " addq %[tmp],%[a],%[tmp]\n"
+ " bne %[c],2f\n"
+ " stq_c %[tmp],%[mem]\n"
+ " beq %[tmp],3f\n"
+ "2:\n"
+ ".subsection 2\n"
+ "3: br 1b\n"
+ ".previous"
+ : [tmp] "=&r"(tmp), [c] "=&r"(c)
+ : [mem] "m"(*v), [a] "rI"(a), [u] "rI"(u)
+ : "memory");
+ smp_mb();
+ return !c;
+}
+
+/*
+ * atomic64_dec_if_positive - decrement by 1 if old value positive
+ * @v: pointer of type atomic_t
+ *
+ * The function returns the old value of *v minus 1, even if
+ * the atomic variable, v, was not decremented.
+ */
+static inline long atomic64_dec_if_positive(atomic64_t *v)
+{
+ long old, tmp;
+ smp_mb();
+ __asm__ __volatile__(
+ "1: ldq_l %[old],%[mem]\n"
+ " subq %[old],1,%[tmp]\n"
+ " ble %[old],2f\n"
+ " stq_c %[tmp],%[mem]\n"
+ " beq %[tmp],3f\n"
+ "2:\n"
+ ".subsection 2\n"
+ "3: br 1b\n"
+ ".previous"
+ : [old] "=&r"(old), [tmp] "=&r"(tmp)
+ : [mem] "m"(*v)
+ : "memory");
+ smp_mb();
+ return old - 1;
}
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)
diff --git a/arch/alpha/include/asm/param.h b/arch/alpha/include/asm/param.h
index bf46af51941b..a5b68b268bcf 100644
--- a/arch/alpha/include/asm/param.h
+++ b/arch/alpha/include/asm/param.h
@@ -3,7 +3,9 @@
#include <uapi/asm/param.h>
-#define HZ CONFIG_HZ
-#define USER_HZ HZ
-# define CLOCKS_PER_SEC HZ /* frequency at which times() counts */
+# undef HZ
+# define HZ CONFIG_HZ
+# define USER_HZ 1024
+# define CLOCKS_PER_SEC USER_HZ /* frequency at which times() counts */
+
#endif /* _ASM_ALPHA_PARAM_H */
diff --git a/arch/alpha/include/asm/spinlock.h b/arch/alpha/include/asm/spinlock.h
index 3bba21e41b81..37b570d01202 100644
--- a/arch/alpha/include/asm/spinlock.h
+++ b/arch/alpha/include/asm/spinlock.h
@@ -168,8 +168,4 @@ static inline void arch_write_unlock(arch_rwlock_t * lock)
#define arch_read_lock_flags(lock, flags) arch_read_lock(lock)
#define arch_write_lock_flags(lock, flags) arch_write_lock(lock)
-#define arch_spin_relax(lock) cpu_relax()
-#define arch_read_relax(lock) cpu_relax()
-#define arch_write_relax(lock) cpu_relax()
-
#endif /* _ALPHA_SPINLOCK_H */
diff --git a/arch/alpha/include/asm/unistd.h b/arch/alpha/include/asm/unistd.h
index 43baee17acdf..f2c94402e2c8 100644
--- a/arch/alpha/include/asm/unistd.h
+++ b/arch/alpha/include/asm/unistd.h
@@ -3,8 +3,7 @@
#include <uapi/asm/unistd.h>
-
-#define NR_SYSCALLS 506
+#define NR_SYSCALLS 508
#define __ARCH_WANT_OLD_READDIR
#define __ARCH_WANT_STAT64
diff --git a/arch/alpha/include/uapi/asm/param.h b/arch/alpha/include/uapi/asm/param.h
index 29daed819ebd..dbcd9834af6d 100644
--- a/arch/alpha/include/uapi/asm/param.h
+++ b/arch/alpha/include/uapi/asm/param.h
@@ -1,13 +1,7 @@
#ifndef _UAPI_ASM_ALPHA_PARAM_H
#define _UAPI_ASM_ALPHA_PARAM_H
-/* ??? Gross. I don't want to parameterize this, and supposedly the
- hardware ignores reprogramming. We also need userland buy-in to the
- change in HZ, since this is visible in the wait4 resources etc. */
-
-#ifndef __KERNEL__
#define HZ 1024
-#endif
#define EXEC_PAGESIZE 8192
@@ -17,5 +11,4 @@
#define MAXHOSTNAMELEN 64 /* max length of hostname */
-
#endif /* _UAPI_ASM_ALPHA_PARAM_H */
diff --git a/arch/alpha/include/uapi/asm/unistd.h b/arch/alpha/include/uapi/asm/unistd.h
index 801d28bcea51..53ae7bb1bfd1 100644
--- a/arch/alpha/include/uapi/asm/unistd.h
+++ b/arch/alpha/include/uapi/asm/unistd.h
@@ -467,5 +467,7 @@
#define __NR_sendmmsg 503
#define __NR_process_vm_readv 504
#define __NR_process_vm_writev 505
+#define __NR_kcmp 506
+#define __NR_finit_module 507
#endif /* _UAPI_ALPHA_UNISTD_H */
diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S
index f62a994ef126..a969b95ee5ac 100644
--- a/arch/alpha/kernel/entry.S
+++ b/arch/alpha/kernel/entry.S
@@ -12,11 +12,32 @@
.text
.set noat
+ .cfi_sections .debug_frame
/* Stack offsets. */
#define SP_OFF 184
#define SWITCH_STACK_SIZE 320
+.macro CFI_START_OSF_FRAME func
+ .align 4
+ .globl \func
+ .type \func,@function
+\func:
+ .cfi_startproc simple
+ .cfi_return_column 64
+ .cfi_def_cfa $sp, 48
+ .cfi_rel_offset 64, 8
+ .cfi_rel_offset $gp, 16
+ .cfi_rel_offset $16, 24
+ .cfi_rel_offset $17, 32
+ .cfi_rel_offset $18, 40
+.endm
+
+.macro CFI_END_OSF_FRAME func
+ .cfi_endproc
+ .size \func, . - \func
+.endm
+
/*
* This defines the normal kernel pt-regs layout.
*
@@ -27,100 +48,158 @@
* the palcode-provided values are available to the signal handler.
*/
-#define SAVE_ALL \
- subq $sp, SP_OFF, $sp; \
- stq $0, 0($sp); \
- stq $1, 8($sp); \
- stq $2, 16($sp); \
- stq $3, 24($sp); \
- stq $4, 32($sp); \
- stq $28, 144($sp); \
- lda $2, alpha_mv; \
- stq $5, 40($sp); \
- stq $6, 48($sp); \
- stq $7, 56($sp); \
- stq $8, 64($sp); \
- stq $19, 72($sp); \
- stq $20, 80($sp); \
- stq $21, 88($sp); \
- ldq $2, HAE_CACHE($2); \
- stq $22, 96($sp); \
- stq $23, 104($sp); \
- stq $24, 112($sp); \
- stq $25, 120($sp); \
- stq $26, 128($sp); \
- stq $27, 136($sp); \
- stq $2, 152($sp); \
- stq $16, 160($sp); \
- stq $17, 168($sp); \
+.macro SAVE_ALL
+ subq $sp, SP_OFF, $sp
+ .cfi_adjust_cfa_offset SP_OFF
+ stq $0, 0($sp)
+ stq $1, 8($sp)
+ stq $2, 16($sp)
+ stq $3, 24($sp)
+ stq $4, 32($sp)
+ stq $28, 144($sp)
+ .cfi_rel_offset $0, 0
+ .cfi_rel_offset $1, 8
+ .cfi_rel_offset $2, 16
+ .cfi_rel_offset $3, 24
+ .cfi_rel_offset $4, 32
+ .cfi_rel_offset $28, 144
+ lda $2, alpha_mv
+ stq $5, 40($sp)
+ stq $6, 48($sp)
+ stq $7, 56($sp)
+ stq $8, 64($sp)
+ stq $19, 72($sp)
+ stq $20, 80($sp)
+ stq $21, 88($sp)
+ ldq $2, HAE_CACHE($2)
+ stq $22, 96($sp)
+ stq $23, 104($sp)
+ stq $24, 112($sp)
+ stq $25, 120($sp)
+ stq $26, 128($sp)
+ stq $27, 136($sp)
+ stq $2, 152($sp)
+ stq $16, 160($sp)
+ stq $17, 168($sp)
stq $18, 176($sp)
+ .cfi_rel_offset $5, 40
+ .cfi_rel_offset $6, 48
+ .cfi_rel_offset $7, 56
+ .cfi_rel_offset $8, 64
+ .cfi_rel_offset $19, 72
+ .cfi_rel_offset $20, 80
+ .cfi_rel_offset $21, 88
+ .cfi_rel_offset $22, 96
+ .cfi_rel_offset $23, 104
+ .cfi_rel_offset $24, 112
+ .cfi_rel_offset $25, 120
+ .cfi_rel_offset $26, 128
+ .cfi_rel_offset $27, 136
+.endm
-#define RESTORE_ALL \
- lda $19, alpha_mv; \
- ldq $0, 0($sp); \
- ldq $1, 8($sp); \
- ldq $2, 16($sp); \
- ldq $3, 24($sp); \
- ldq $21, 152($sp); \
- ldq $20, HAE_CACHE($19); \
- ldq $4, 32($sp); \
- ldq $5, 40($sp); \
- ldq $6, 48($sp); \
- ldq $7, 56($sp); \
- subq $20, $21, $20; \
- ldq $8, 64($sp); \
- beq $20, 99f; \
- ldq $20, HAE_REG($19); \
- stq $21, HAE_CACHE($19); \
- stq $21, 0($20); \
-99:; \
- ldq $19, 72($sp); \
- ldq $20, 80($sp); \
- ldq $21, 88($sp); \
- ldq $22, 96($sp); \
- ldq $23, 104($sp); \
- ldq $24, 112($sp); \
- ldq $25, 120($sp); \
- ldq $26, 128($sp); \
- ldq $27, 136($sp); \
- ldq $28, 144($sp); \
+.macro RESTORE_ALL
+ lda $19, alpha_mv
+ ldq $0, 0($sp)
+ ldq $1, 8($sp)
+ ldq $2, 16($sp)
+ ldq $3, 24($sp)
+ ldq $21, 152($sp)
+ ldq $20, HAE_CACHE($19)
+ ldq $4, 32($sp)
+ ldq $5, 40($sp)
+ ldq $6, 48($sp)
+ ldq $7, 56($sp)
+ subq $20, $21, $20
+ ldq $8, 64($sp)
+ beq $20, 99f
+ ldq $20, HAE_REG($19)
+ stq $21, HAE_CACHE($19)
+ stq $21, 0($20)
+99: ldq $19, 72($sp)
+ ldq $20, 80($sp)
+ ldq $21, 88($sp)
+ ldq $22, 96($sp)
+ ldq $23, 104($sp)
+ ldq $24, 112($sp)
+ ldq $25, 120($sp)
+ ldq $26, 128($sp)
+ ldq $27, 136($sp)
+ ldq $28, 144($sp)
addq $sp, SP_OFF, $sp
+ .cfi_restore $0
+ .cfi_restore $1
+ .cfi_restore $2
+ .cfi_restore $3
+ .cfi_restore $4
+ .cfi_restore $5
+ .cfi_restore $6
+ .cfi_restore $7
+ .cfi_restore $8
+ .cfi_restore $19
+ .cfi_restore $20
+ .cfi_restore $21
+ .cfi_restore $22
+ .cfi_restore $23
+ .cfi_restore $24
+ .cfi_restore $25
+ .cfi_restore $26
+ .cfi_restore $27
+ .cfi_restore $28
+ .cfi_adjust_cfa_offset -SP_OFF
+.endm
+
+.macro DO_SWITCH_STACK
+ bsr $1, do_switch_stack
+ .cfi_adjust_cfa_offset SWITCH_STACK_SIZE
+ .cfi_rel_offset $9, 0
+ .cfi_rel_offset $10, 8
+ .cfi_rel_offset $11, 16
+ .cfi_rel_offset $12, 24
+ .cfi_rel_offset $13, 32
+ .cfi_rel_offset $14, 40
+ .cfi_rel_offset $15, 48
+ /* We don't really care about the FP registers for debugging. */
+.endm
+
+.macro UNDO_SWITCH_STACK
+ bsr $1, undo_switch_stack
+ .cfi_restore $9
+ .cfi_restore $10
+ .cfi_restore $11
+ .cfi_restore $12
+ .cfi_restore $13
+ .cfi_restore $14
+ .cfi_restore $15
+ .cfi_adjust_cfa_offset -SWITCH_STACK_SIZE
+.endm
/*
* Non-syscall kernel entry points.
*/
- .align 4
- .globl entInt
- .ent entInt
-entInt:
+CFI_START_OSF_FRAME entInt
SAVE_ALL
lda $8, 0x3fff
lda $26, ret_from_sys_call
bic $sp, $8, $8
mov $sp, $19
jsr $31, do_entInt
-.end entInt
+CFI_END_OSF_FRAME entInt
- .align 4
- .globl entArith
- .ent entArith
-entArith:
+CFI_START_OSF_FRAME entArith
SAVE_ALL
lda $8, 0x3fff
lda $26, ret_from_sys_call
bic $sp, $8, $8
mov $sp, $18
jsr $31, do_entArith
-.end entArith
+CFI_END_OSF_FRAME entArith
- .align 4
- .globl entMM
- .ent entMM
-entMM:
+CFI_START_OSF_FRAME entMM
SAVE_ALL
/* save $9 - $15 so the inline exception code can manipulate them. */
subq $sp, 56, $sp
+ .cfi_adjust_cfa_offset 56
stq $9, 0($sp)
stq $10, 8($sp)
stq $11, 16($sp)
@@ -128,6 +207,13 @@ entMM:
stq $13, 32($sp)
stq $14, 40($sp)
stq $15, 48($sp)
+ .cfi_rel_offset $9, 0
+ .cfi_rel_offset $10, 8
+ .cfi_rel_offset $11, 16
+ .cfi_rel_offset $12, 24
+ .cfi_rel_offset $13, 32
+ .cfi_rel_offset $14, 40
+ .cfi_rel_offset $15, 48
addq $sp, 56, $19
/* handle the fault */
lda $8, 0x3fff
@@ -142,28 +228,33 @@ entMM:
ldq $14, 40($sp)
ldq $15, 48($sp)
addq $sp, 56, $sp
+ .cfi_restore $9
+ .cfi_restore $10
+ .cfi_restore $11
+ .cfi_restore $12
+ .cfi_restore $13
+ .cfi_restore $14
+ .cfi_restore $15
+ .cfi_adjust_cfa_offset -56
/* finish up the syscall as normal. */
br ret_from_sys_call
-.end entMM
+CFI_END_OSF_FRAME entMM
- .align 4
- .globl entIF
- .ent entIF
-entIF:
+CFI_START_OSF_FRAME entIF
SAVE_ALL
lda $8, 0x3fff
lda $26, ret_from_sys_call
bic $sp, $8, $8
mov $sp, $17
jsr $31, do_entIF
-.end entIF
+CFI_END_OSF_FRAME entIF
- .align 4
- .globl entUna
- .ent entUna
-entUna:
+CFI_START_OSF_FRAME entUna
lda $sp, -256($sp)
+ .cfi_adjust_cfa_offset 256
stq $0, 0($sp)
+ .cfi_rel_offset $0, 0
+ .cfi_remember_state
ldq $0, 256($sp) /* get PS */
stq $1, 8($sp)
stq $2, 16($sp)
@@ -195,6 +286,32 @@ entUna:
stq $28, 224($sp)
mov $sp, $19
stq $gp, 232($sp)
+ .cfi_rel_offset $1, 1*8
+ .cfi_rel_offset $2, 2*8
+ .cfi_rel_offset $3, 3*8
+ .cfi_rel_offset $4, 4*8
+ .cfi_rel_offset $5, 5*8
+ .cfi_rel_offset $6, 6*8
+ .cfi_rel_offset $7, 7*8
+ .cfi_rel_offset $8, 8*8
+ .cfi_rel_offset $9, 9*8
+ .cfi_rel_offset $10, 10*8
+ .cfi_rel_offset $11, 11*8
+ .cfi_rel_offset $12, 12*8
+ .cfi_rel_offset $13, 13*8
+ .cfi_rel_offset $14, 14*8
+ .cfi_rel_offset $15, 15*8
+ .cfi_rel_offset $19, 19*8
+ .cfi_rel_offset $20, 20*8
+ .cfi_rel_offset $21, 21*8
+ .cfi_rel_offset $22, 22*8
+ .cfi_rel_offset $23, 23*8
+ .cfi_rel_offset $24, 24*8
+ .cfi_rel_offset $25, 25*8
+ .cfi_rel_offset $26, 26*8
+ .cfi_rel_offset $27, 27*8
+ .cfi_rel_offset $28, 28*8
+ .cfi_rel_offset $29, 29*8
lda $8, 0x3fff
stq $31, 248($sp)
bic $sp, $8, $8
@@ -228,16 +345,45 @@ entUna:
ldq $28, 224($sp)
ldq $gp, 232($sp)
lda $sp, 256($sp)
+ .cfi_restore $1
+ .cfi_restore $2
+ .cfi_restore $3
+ .cfi_restore $4
+ .cfi_restore $5
+ .cfi_restore $6
+ .cfi_restore $7
+ .cfi_restore $8
+ .cfi_restore $9
+ .cfi_restore $10
+ .cfi_restore $11
+ .cfi_restore $12
+ .cfi_restore $13
+ .cfi_restore $14
+ .cfi_restore $15
+ .cfi_restore $19
+ .cfi_restore $20
+ .cfi_restore $21
+ .cfi_restore $22
+ .cfi_restore $23
+ .cfi_restore $24
+ .cfi_restore $25
+ .cfi_restore $26
+ .cfi_restore $27
+ .cfi_restore $28
+ .cfi_restore $29
+ .cfi_adjust_cfa_offset -256
call_pal PAL_rti
-.end entUna
.align 4
- .ent entUnaUser
entUnaUser:
+ .cfi_restore_state
ldq $0, 0($sp) /* restore original $0 */
lda $sp, 256($sp) /* pop entUna's stack frame */
+ .cfi_restore $0
+ .cfi_adjust_cfa_offset -256
SAVE_ALL /* setup normal kernel stack */
lda $sp, -56($sp)
+ .cfi_adjust_cfa_offset 56
stq $9, 0($sp)
stq $10, 8($sp)
stq $11, 16($sp)
@@ -245,6 +391,13 @@ entUnaUser:
stq $13, 32($sp)
stq $14, 40($sp)
stq $15, 48($sp)
+ .cfi_rel_offset $9, 0
+ .cfi_rel_offset $10, 8
+ .cfi_rel_offset $11, 16
+ .cfi_rel_offset $12, 24
+ .cfi_rel_offset $13, 32
+ .cfi_rel_offset $14, 40
+ .cfi_rel_offset $15, 48
lda $8, 0x3fff
addq $sp, 56, $19
bic $sp, $8, $8
@@ -257,20 +410,25 @@ entUnaUser:
ldq $14, 40($sp)
ldq $15, 48($sp)
lda $sp, 56($sp)
+ .cfi_restore $9
+ .cfi_restore $10
+ .cfi_restore $11
+ .cfi_restore $12
+ .cfi_restore $13
+ .cfi_restore $14
+ .cfi_restore $15
+ .cfi_adjust_cfa_offset -56
br ret_from_sys_call
-.end entUnaUser
+CFI_END_OSF_FRAME entUna
- .align 4
- .globl entDbg
- .ent entDbg
-entDbg:
+CFI_START_OSF_FRAME entDbg
SAVE_ALL
lda $8, 0x3fff
lda $26, ret_from_sys_call
bic $sp, $8, $8
mov $sp, $16
jsr $31, do_entDbg
-.end entDbg
+CFI_END_OSF_FRAME entDbg
/*
* The system call entry point is special. Most importantly, it looks
@@ -285,8 +443,12 @@ entDbg:
.align 4
.globl entSys
- .globl ret_from_sys_call
- .ent entSys
+ .type entSys, @function
+ .cfi_startproc simple
+ .cfi_return_column 64
+ .cfi_def_cfa $sp, 48
+ .cfi_rel_offset 64, 8
+ .cfi_rel_offset $gp, 16
entSys:
SAVE_ALL
lda $8, 0x3fff
@@ -300,6 +462,9 @@ entSys:
stq $17, SP_OFF+32($sp)
s8addq $0, $5, $5
stq $18, SP_OFF+40($sp)
+ .cfi_rel_offset $16, SP_OFF+24
+ .cfi_rel_offset $17, SP_OFF+32
+ .cfi_rel_offset $18, SP_OFF+40
blbs $3, strace
beq $4, 1f
ldq $27, 0($5)
@@ -310,6 +475,7 @@ entSys:
stq $31, 72($sp) /* a3=0 => no error */
.align 4
+ .globl ret_from_sys_call
ret_from_sys_call:
cmovne $26, 0, $18 /* $18 = 0 => non-restartable */
ldq $0, SP_OFF($sp)
@@ -324,10 +490,12 @@ ret_to_user:
and $17, _TIF_WORK_MASK, $2
bne $2, work_pending
restore_all:
+ .cfi_remember_state
RESTORE_ALL
call_pal PAL_rti
ret_to_kernel:
+ .cfi_restore_state
lda $16, 7
call_pal PAL_swpipl
br restore_all
@@ -356,7 +524,6 @@ $ret_success:
stq $0, 0($sp)
stq $31, 72($sp) /* a3=0 => no error */
br ret_from_sys_call
-.end entSys
/*
* Do all cleanup when returning from all interrupts and system calls.
@@ -370,7 +537,7 @@ $ret_success:
*/
.align 4
- .ent work_pending
+ .type work_pending, @function
work_pending:
and $17, _TIF_NOTIFY_RESUME | _TIF_SIGPENDING, $2
bne $2, $work_notifysig
@@ -387,23 +554,22 @@ $work_resched:
$work_notifysig:
mov $sp, $16
- bsr $1, do_switch_stack
+ DO_SWITCH_STACK
jsr $26, do_work_pending
- bsr $1, undo_switch_stack
+ UNDO_SWITCH_STACK
br restore_all
-.end work_pending
/*
* PTRACE syscall handler
*/
.align 4
- .ent strace
+ .type strace, @function
strace:
/* set up signal stack, call syscall_trace */
- bsr $1, do_switch_stack
+ DO_SWITCH_STACK
jsr $26, syscall_trace_enter /* returns the syscall number */
- bsr $1, undo_switch_stack
+ UNDO_SWITCH_STACK
/* get the arguments back.. */
ldq $16, SP_OFF+24($sp)
@@ -431,9 +597,9 @@ ret_from_straced:
$strace_success:
stq $0, 0($sp) /* save return value */
- bsr $1, do_switch_stack
+ DO_SWITCH_STACK
jsr $26, syscall_trace_leave
- bsr $1, undo_switch_stack
+ UNDO_SWITCH_STACK
br $31, ret_from_sys_call
.align 3
@@ -447,26 +613,31 @@ $strace_error:
stq $0, 0($sp)
stq $1, 72($sp) /* a3 for return */
- bsr $1, do_switch_stack
+ DO_SWITCH_STACK
mov $18, $9 /* save old syscall number */
mov $19, $10 /* save old a3 */
jsr $26, syscall_trace_leave
mov $9, $18
mov $10, $19
- bsr $1, undo_switch_stack
+ UNDO_SWITCH_STACK
mov $31, $26 /* tell "ret_from_sys_call" we can restart */
br ret_from_sys_call
-.end strace
+CFI_END_OSF_FRAME entSys
/*
* Save and restore the switch stack -- aka the balance of the user context.
*/
.align 4
- .ent do_switch_stack
+ .type do_switch_stack, @function
+ .cfi_startproc simple
+ .cfi_return_column 64
+ .cfi_def_cfa $sp, 0
+ .cfi_register 64, $1
do_switch_stack:
lda $sp, -SWITCH_STACK_SIZE($sp)
+ .cfi_adjust_cfa_offset SWITCH_STACK_SIZE
stq $9, 0($sp)
stq $10, 8($sp)
stq $11, 16($sp)
@@ -510,10 +681,14 @@ do_switch_stack:
stt $f0, 312($sp) # save fpcr in slot of $f31
ldt $f0, 64($sp) # dont let "do_switch_stack" change fp state.
ret $31, ($1), 1
-.end do_switch_stack
+ .cfi_endproc
+ .size do_switch_stack, .-do_switch_stack
.align 4
- .ent undo_switch_stack
+ .type undo_switch_stack, @function
+ .cfi_startproc simple
+ .cfi_def_cfa $sp, 0
+ .cfi_register 64, $1
undo_switch_stack:
ldq $9, 0($sp)
ldq $10, 8($sp)
@@ -558,7 +733,8 @@ undo_switch_stack:
ldt $f30, 304($sp)
lda $sp, SWITCH_STACK_SIZE($sp)
ret $31, ($1), 1
-.end undo_switch_stack
+ .cfi_endproc
+ .size undo_switch_stack, .-undo_switch_stack
/*
* The meat of the context switch code.
@@ -566,17 +742,18 @@ undo_switch_stack:
.align 4
.globl alpha_switch_to
- .ent alpha_switch_to
+ .type alpha_switch_to, @function
+ .cfi_startproc
alpha_switch_to:
- .prologue 0
- bsr $1, do_switch_stack
+ DO_SWITCH_STACK
call_pal PAL_swpctx
lda $8, 0x3fff
- bsr $1, undo_switch_stack
+ UNDO_SWITCH_STACK
bic $sp, $8, $8
mov $17, $0
ret
-.end alpha_switch_to
+ .cfi_endproc
+ .size alpha_switch_to, .-alpha_switch_to
/*
* New processes begin life here.
diff --git a/arch/alpha/kernel/irq_alpha.c b/arch/alpha/kernel/irq_alpha.c
index f433fc11877a..28e4429596f3 100644
--- a/arch/alpha/kernel/irq_alpha.c
+++ b/arch/alpha/kernel/irq_alpha.c
@@ -236,7 +236,7 @@ void __init
init_rtc_irq(void)
{
irq_set_chip_and_handler_name(RTC_IRQ, &dummy_irq_chip,
- handle_simple_irq, "RTC");
+ handle_percpu_irq, "RTC");
setup_irq(RTC_IRQ, &timer_irqaction);
}
diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c
index 7b60834fb4b2..9dbbcb3b9146 100644
--- a/arch/alpha/kernel/smp.c
+++ b/arch/alpha/kernel/smp.c
@@ -116,7 +116,7 @@ wait_boot_cpu_to_stop(int cpuid)
/*
* Where secondaries begin a life of C.
*/
-void __cpuinit
+void
smp_callin(void)
{
int cpuid = hard_smp_processor_id();
@@ -194,7 +194,7 @@ wait_for_txrdy (unsigned long cpumask)
* Send a message to a secondary's console. "START" is one such
* interesting message. ;-)
*/
-static void __cpuinit
+static void
send_secondary_console_msg(char *str, int cpuid)
{
struct percpu_struct *cpu;
@@ -264,9 +264,10 @@ recv_secondary_console_msg(void)
if (cnt <= 0 || cnt >= 80)
strcpy(buf, "<<< BOGUS MSG >>>");
else {
- cp1 = (char *) &cpu->ipc_buffer[11];
+ cp1 = (char *) &cpu->ipc_buffer[1];
cp2 = buf;
- strcpy(cp2, cp1);
+ memcpy(cp2, cp1, cnt);
+ cp2[cnt] = '\0';
while ((cp2 = strchr(cp2, '\r')) != 0) {
*cp2 = ' ';
@@ -285,7 +286,7 @@ recv_secondary_console_msg(void)
/*
* Convince the console to have a secondary cpu begin execution.
*/
-static int __cpuinit
+static int
secondary_cpu_start(int cpuid, struct task_struct *idle)
{
struct percpu_struct *cpu;
@@ -356,7 +357,7 @@ secondary_cpu_start(int cpuid, struct task_struct *idle)
/*
* Bring one cpu online.
*/
-static int __cpuinit
+static int
smp_boot_one_cpu(int cpuid, struct task_struct *idle)
{
unsigned long timeout;
@@ -472,7 +473,7 @@ smp_prepare_boot_cpu(void)
{
}
-int __cpuinit
+int
__cpu_up(unsigned int cpu, struct task_struct *tidle)
{
smp_boot_one_cpu(cpu, tidle);
diff --git a/arch/alpha/kernel/sys_dp264.c b/arch/alpha/kernel/sys_dp264.c
index 5bf401f7ea97..6c35159bc00e 100644
--- a/arch/alpha/kernel/sys_dp264.c
+++ b/arch/alpha/kernel/sys_dp264.c
@@ -190,9 +190,6 @@ static struct irq_chip clipper_irq_type = {
static void
dp264_device_interrupt(unsigned long vector)
{
-#if 1
- printk("dp264_device_interrupt: NOT IMPLEMENTED YET!!\n");
-#else
unsigned long pld;
unsigned int i;
@@ -210,12 +207,7 @@ dp264_device_interrupt(unsigned long vector)
isa_device_interrupt(vector);
else
handle_irq(16 + i);
-#if 0
- TSUNAMI_cchip->dir0.csr = 1UL << i; mb();
- tmp = TSUNAMI_cchip->dir0.csr;
-#endif
}
-#endif
}
static void
diff --git a/arch/alpha/kernel/sys_marvel.c b/arch/alpha/kernel/sys_marvel.c
index 407accc80877..c92e389ff219 100644
--- a/arch/alpha/kernel/sys_marvel.c
+++ b/arch/alpha/kernel/sys_marvel.c
@@ -317,8 +317,9 @@ marvel_init_irq(void)
}
static int
-marvel_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+marvel_map_irq(const struct pci_dev *cdev, u8 slot, u8 pin)
{
+ struct pci_dev *dev = (struct pci_dev *)cdev;
struct pci_controller *hose = dev->sysdata;
struct io7_port *io7_port = hose->sysdata;
struct io7 *io7 = io7_port->io7;
diff --git a/arch/alpha/kernel/systbls.S b/arch/alpha/kernel/systbls.S
index 4284ec798ec9..dca9b3fb0071 100644
--- a/arch/alpha/kernel/systbls.S
+++ b/arch/alpha/kernel/systbls.S
@@ -524,6 +524,8 @@ sys_call_table:
.quad sys_sendmmsg
.quad sys_process_vm_readv
.quad sys_process_vm_writev /* 505 */
+ .quad sys_kcmp
+ .quad sys_finit_module
.size sys_call_table, . - sys_call_table
.type sys_call_table, @object
diff --git a/arch/alpha/kernel/time.c b/arch/alpha/kernel/time.c
index e336694ca042..ea3395036556 100644
--- a/arch/alpha/kernel/time.c
+++ b/arch/alpha/kernel/time.c
@@ -105,9 +105,7 @@ void arch_irq_work_raise(void)
static inline __u32 rpcc(void)
{
- __u32 result;
- asm volatile ("rpcc %0" : "=r"(result));
- return result;
+ return __builtin_alpha_rpcc();
}
int update_persistent_clock(struct timespec now)
diff --git a/arch/alpha/kernel/traps.c b/arch/alpha/kernel/traps.c
index affccb959a9e..bd0665cdc840 100644
--- a/arch/alpha/kernel/traps.c
+++ b/arch/alpha/kernel/traps.c
@@ -32,7 +32,7 @@
static int opDEC_fix;
-static void __cpuinit
+static void
opDEC_check(void)
{
__asm__ __volatile__ (
@@ -66,8 +66,8 @@ dik_show_regs(struct pt_regs *regs, unsigned long *r9_15)
{
printk("pc = [<%016lx>] ra = [<%016lx>] ps = %04lx %s\n",
regs->pc, regs->r26, regs->ps, print_tainted());
- print_symbol("pc is at %s\n", regs->pc);
- print_symbol("ra is at %s\n", regs->r26 );
+ printk("pc is at %pSR\n", (void *)regs->pc);
+ printk("ra is at %pSR\n", (void *)regs->r26);
printk("v0 = %016lx t0 = %016lx t1 = %016lx\n",
regs->r0, regs->r1, regs->r2);
printk("t2 = %016lx t3 = %016lx t4 = %016lx\n",
@@ -132,9 +132,7 @@ dik_show_trace(unsigned long *sp)
continue;
if (tmp >= (unsigned long) &_etext)
continue;
- printk("[<%lx>]", tmp);
- print_symbol(" %s", tmp);
- printk("\n");
+ printk("[<%lx>] %pSR\n", tmp, (void *)tmp);
if (i > 40) {
printk(" ...");
break;
@@ -1059,7 +1057,7 @@ give_sigbus:
return;
}
-void __cpuinit
+void
trap_init(void)
{
/* Tell PAL-code what global pointer we want in the kernel. */
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index ba412e02ec0c..37c0f4e978d4 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1600,8 +1600,7 @@ config LOCAL_TIMERS
config ARCH_NR_GPIO
int
default 1024 if ARCH_SHMOBILE || ARCH_TEGRA
- default 512 if SOC_OMAP5
- default 512 if ARCH_KEYSTONE
+ default 512 if ARCH_EXYNOS || ARCH_KEYSTONE || SOC_OMAP5
default 392 if ARCH_U8500
default 352 if ARCH_VT8500
default 288 if ARCH_SUNXI
diff --git a/arch/arm/boot/dts/imx28-apx4devkit.dts b/arch/arm/boot/dts/imx28-apx4devkit.dts
index 43bf3c796cba..0e7fed47bd8d 100644
--- a/arch/arm/boot/dts/imx28-apx4devkit.dts
+++ b/arch/arm/boot/dts/imx28-apx4devkit.dts
@@ -147,7 +147,7 @@
reg = <0x0a>;
VDDA-supply = <&reg_3p3v>;
VDDIO-supply = <&reg_3p3v>;
-
+ clocks = <&saif0>;
};
pcf8563: rtc@51 {
diff --git a/arch/arm/boot/dts/imx28-evk.dts b/arch/arm/boot/dts/imx28-evk.dts
index 1f0d38d7b16f..e035f4664b97 100644
--- a/arch/arm/boot/dts/imx28-evk.dts
+++ b/arch/arm/boot/dts/imx28-evk.dts
@@ -195,7 +195,7 @@
reg = <0x0a>;
VDDA-supply = <&reg_3p3v>;
VDDIO-supply = <&reg_3p3v>;
-
+ clocks = <&saif0>;
};
at24@51 {
diff --git a/arch/arm/boot/dts/imx28-m28evk.dts b/arch/arm/boot/dts/imx28-m28evk.dts
index 880df2f13be8..44d9da57736e 100644
--- a/arch/arm/boot/dts/imx28-m28evk.dts
+++ b/arch/arm/boot/dts/imx28-m28evk.dts
@@ -184,7 +184,7 @@
reg = <0x0a>;
VDDA-supply = <&reg_3p3v>;
VDDIO-supply = <&reg_3p3v>;
-
+ clocks = <&saif0>;
};
eeprom: eeprom@51 {
diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi
index 6a8acb01b1d3..9524a0571281 100644
--- a/arch/arm/boot/dts/imx28.dtsi
+++ b/arch/arm/boot/dts/imx28.dtsi
@@ -837,6 +837,7 @@
compatible = "fsl,imx28-saif";
reg = <0x80042000 0x2000>;
interrupts = <59 80>;
+ #clock-cells = <0>;
clocks = <&clks 53>;
dmas = <&dma_apbx 4>;
dma-names = "rx-tx";
diff --git a/arch/arm/boot/dts/imx51-babbage.dts b/arch/arm/boot/dts/imx51-babbage.dts
index 6dd9486c755b..ad3471ca17c7 100644
--- a/arch/arm/boot/dts/imx51-babbage.dts
+++ b/arch/arm/boot/dts/imx51-babbage.dts
@@ -61,6 +61,16 @@
mux-int-port = <2>;
mux-ext-port = <3>;
};
+
+ clocks {
+ clk_26M: codec_clock {
+ compatible = "fixed-clock";
+ reg=<0>;
+ #clock-cells = <0>;
+ clock-frequency = <26000000>;
+ gpios = <&gpio4 26 1>;
+ };
+ };
};
&esdhc1 {
@@ -229,6 +239,7 @@
MX51_PAD_EIM_A27__GPIO2_21 0x5
MX51_PAD_CSPI1_SS0__GPIO4_24 0x85
MX51_PAD_CSPI1_SS1__GPIO4_25 0x85
+ MX51_PAD_CSPI1_RDY__GPIO4_26 0x80000000
>;
};
};
@@ -255,7 +266,7 @@
sgtl5000: codec@0a {
compatible = "fsl,sgtl5000";
reg = <0x0a>;
- clock-frequency = <26000000>;
+ clocks = <&clk_26M>;
VDDA-supply = <&vdig_reg>;
VDDIO-supply = <&vvideo_reg>;
};
diff --git a/arch/arm/boot/dts/imx53-mba53.dts b/arch/arm/boot/dts/imx53-mba53.dts
index aaa33bc99f78..a63090267941 100644
--- a/arch/arm/boot/dts/imx53-mba53.dts
+++ b/arch/arm/boot/dts/imx53-mba53.dts
@@ -27,7 +27,7 @@
backlight {
compatible = "pwm-backlight";
- pwms = <&pwm2 0 50000 0 0>;
+ pwms = <&pwm2 0 50000>;
brightness-levels = <0 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100>;
default-brightness-level = <10>;
enable-gpios = <&gpio7 7 0>;
diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi
index 3895fbba8fce..569aa9f2c4ed 100644
--- a/arch/arm/boot/dts/imx53.dtsi
+++ b/arch/arm/boot/dts/imx53.dtsi
@@ -725,15 +725,15 @@
uart1 {
pinctrl_uart1_1: uart1grp-1 {
fsl,pins = <
- MX53_PAD_CSI0_DAT10__UART1_TXD_MUX 0x1c5
- MX53_PAD_CSI0_DAT11__UART1_RXD_MUX 0x1c5
+ MX53_PAD_CSI0_DAT10__UART1_TXD_MUX 0x1e4
+ MX53_PAD_CSI0_DAT11__UART1_RXD_MUX 0x1e4
>;
};
pinctrl_uart1_2: uart1grp-2 {
fsl,pins = <
- MX53_PAD_PATA_DIOW__UART1_TXD_MUX 0x1c5
- MX53_PAD_PATA_DMACK__UART1_RXD_MUX 0x1c5
+ MX53_PAD_PATA_DIOW__UART1_TXD_MUX 0x1e4
+ MX53_PAD_PATA_DMACK__UART1_RXD_MUX 0x1e4
>;
};
@@ -748,8 +748,8 @@
uart2 {
pinctrl_uart2_1: uart2grp-1 {
fsl,pins = <
- MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX 0x1c5
- MX53_PAD_PATA_DMARQ__UART2_TXD_MUX 0x1c5
+ MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX 0x1e4
+ MX53_PAD_PATA_DMARQ__UART2_TXD_MUX 0x1e4
>;
};
@@ -766,17 +766,17 @@
uart3 {
pinctrl_uart3_1: uart3grp-1 {
fsl,pins = <
- MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1c5
- MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1c5
- MX53_PAD_PATA_DA_1__UART3_CTS 0x1c5
- MX53_PAD_PATA_DA_2__UART3_RTS 0x1c5
+ MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1e4
+ MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1e4
+ MX53_PAD_PATA_DA_1__UART3_CTS 0x1e4
+ MX53_PAD_PATA_DA_2__UART3_RTS 0x1e4
>;
};
pinctrl_uart3_2: uart3grp-2 {
fsl,pins = <
- MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1c5
- MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1c5
+ MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1e4
+ MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1e4
>;
};
@@ -785,8 +785,8 @@
uart4 {
pinctrl_uart4_1: uart4grp-1 {
fsl,pins = <
- MX53_PAD_KEY_COL0__UART4_TXD_MUX 0x1c5
- MX53_PAD_KEY_ROW0__UART4_RXD_MUX 0x1c5
+ MX53_PAD_KEY_COL0__UART4_TXD_MUX 0x1e4
+ MX53_PAD_KEY_ROW0__UART4_RXD_MUX 0x1e4
>;
};
};
@@ -794,8 +794,8 @@
uart5 {
pinctrl_uart5_1: uart5grp-1 {
fsl,pins = <
- MX53_PAD_KEY_COL1__UART5_TXD_MUX 0x1c5
- MX53_PAD_KEY_ROW1__UART5_RXD_MUX 0x1c5
+ MX53_PAD_KEY_COL1__UART5_TXD_MUX 0x1e4
+ MX53_PAD_KEY_ROW1__UART5_RXD_MUX 0x1e4
>;
};
};
diff --git a/arch/arm/boot/dts/stih416-pinctrl.dtsi b/arch/arm/boot/dts/stih416-pinctrl.dtsi
index 957b21a71b4b..0f246c979262 100644
--- a/arch/arm/boot/dts/stih416-pinctrl.dtsi
+++ b/arch/arm/boot/dts/stih416-pinctrl.dtsi
@@ -166,6 +166,15 @@
reg = <0x9000 0x100>;
st,bank-name = "PIO31";
};
+
+ serial2-oe {
+ pinctrl_serial2_oe: serial2-1 {
+ st,pins {
+ output-enable = <&PIO11 3 ALT2 OUT>;
+ };
+ };
+ };
+
};
pin-controller-rear {
@@ -218,7 +227,6 @@
st,pins {
tx = <&PIO17 4 ALT2 OUT>;
rx = <&PIO17 5 ALT2 IN>;
- output-enable = <&PIO11 3 ALT2 OUT>;
};
};
};
diff --git a/arch/arm/boot/dts/stih416.dtsi b/arch/arm/boot/dts/stih416.dtsi
index 3cecd9689a49..1a0326ea7d07 100644
--- a/arch/arm/boot/dts/stih416.dtsi
+++ b/arch/arm/boot/dts/stih416.dtsi
@@ -79,7 +79,7 @@
interrupts = <0 197 0>;
clocks = <&CLK_S_ICN_REG_0>;
pinctrl-names = "default";
- pinctrl-0 = <&pinctrl_serial2>;
+ pinctrl-0 = <&pinctrl_serial2 &pinctrl_serial2_oe>;
};
/* SBC_UART1 */
diff --git a/arch/arm/boot/dts/twl4030.dtsi b/arch/arm/boot/dts/twl4030.dtsi
index b3034da00a37..ae6a17aed9ee 100644
--- a/arch/arm/boot/dts/twl4030.dtsi
+++ b/arch/arm/boot/dts/twl4030.dtsi
@@ -47,6 +47,12 @@
regulator-max-microvolt = <3150000>;
};
+ vmmc2: regulator-vmmc2 {
+ compatible = "ti,twl4030-vmmc2";
+ regulator-min-microvolt = <1850000>;
+ regulator-max-microvolt = <3150000>;
+ };
+
vusb1v5: regulator-vusb1v5 {
compatible = "ti,twl4030-vusb1v5";
};
diff --git a/arch/arm/boot/dts/vf610.dtsi b/arch/arm/boot/dts/vf610.dtsi
index e1eb7dadda80..67d929cf9804 100644
--- a/arch/arm/boot/dts/vf610.dtsi
+++ b/arch/arm/boot/dts/vf610.dtsi
@@ -442,8 +442,8 @@
compatible = "fsl,mvf600-fec";
reg = <0x400d0000 0x1000>;
interrupts = <0 78 0x04>;
- clocks = <&clks VF610_CLK_ENET>,
- <&clks VF610_CLK_ENET>,
+ clocks = <&clks VF610_CLK_ENET0>,
+ <&clks VF610_CLK_ENET0>,
<&clks VF610_CLK_ENET>;
clock-names = "ipg", "ahb", "ptp";
status = "disabled";
@@ -453,8 +453,8 @@
compatible = "fsl,mvf600-fec";
reg = <0x400d1000 0x1000>;
interrupts = <0 79 0x04>;
- clocks = <&clks VF610_CLK_ENET>,
- <&clks VF610_CLK_ENET>,
+ clocks = <&clks VF610_CLK_ENET1>,
+ <&clks VF610_CLK_ENET1>,
<&clks VF610_CLK_ENET>;
clock-names = "ipg", "ahb", "ptp";
status = "disabled";
diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
index a432e6c1dac1..39ad030ac0c7 100644
--- a/arch/arm/common/edma.c
+++ b/arch/arm/common/edma.c
@@ -26,7 +26,6 @@
#include <linux/io.h>
#include <linux/slab.h>
#include <linux/edma.h>
-#include <linux/err.h>
#include <linux/of_address.h>
#include <linux/of_device.h>
#include <linux/of_dma.h>
diff --git a/arch/arm/common/mcpm_platsmp.c b/arch/arm/common/mcpm_platsmp.c
index 510e5b13aa2e..1bc34c7567fd 100644
--- a/arch/arm/common/mcpm_platsmp.c
+++ b/arch/arm/common/mcpm_platsmp.c
@@ -19,7 +19,7 @@
#include <asm/smp.h>
#include <asm/smp_plat.h>
-static int __cpuinit mcpm_boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int mcpm_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
unsigned int mpidr, pcpu, pcluster, ret;
extern void secondary_startup(void);
@@ -40,7 +40,7 @@ static int __cpuinit mcpm_boot_secondary(unsigned int cpu, struct task_struct *i
return 0;
}
-static void __cpuinit mcpm_secondary_init(unsigned int cpu)
+static void mcpm_secondary_init(unsigned int cpu)
{
mcpm_cpu_powered_up();
}
diff --git a/arch/arm/configs/da8xx_omapl_defconfig b/arch/arm/configs/da8xx_omapl_defconfig
index 7c868139bdb0..1571bea48bed 100644
--- a/arch/arm/configs/da8xx_omapl_defconfig
+++ b/arch/arm/configs/da8xx_omapl_defconfig
@@ -102,6 +102,8 @@ CONFIG_SND_SOC=m
CONFIG_SND_DAVINCI_SOC=m
# CONFIG_HID_SUPPORT is not set
# CONFIG_USB_SUPPORT is not set
+CONFIG_DMADEVICES=y
+CONFIG_TI_EDMA=y
CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y
CONFIG_XFS_FS=m
diff --git a/arch/arm/configs/davinci_all_defconfig b/arch/arm/configs/davinci_all_defconfig
index c86fd75e181a..ab2f7378352c 100644
--- a/arch/arm/configs/davinci_all_defconfig
+++ b/arch/arm/configs/davinci_all_defconfig
@@ -162,6 +162,8 @@ CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=m
CONFIG_LEDS_TRIGGER_HEARTBEAT=m
CONFIG_RTC_CLASS=y
+CONFIG_DMADEVICES=y
+CONFIG_TI_EDMA=y
CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y
CONFIG_XFS_FS=m
diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
index fe0bdc361d2c..6e572c64cf5a 100644
--- a/arch/arm/configs/multi_v7_defconfig
+++ b/arch/arm/configs/multi_v7_defconfig
@@ -53,6 +53,7 @@ CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_OMAP_OCP2SCP=y
CONFIG_BLK_DEV_SD=y
CONFIG_ATA=y
CONFIG_SATA_AHCI_PLATFORM=y
@@ -61,6 +62,7 @@ CONFIG_SATA_MV=y
CONFIG_NETDEVICES=y
CONFIG_SUN4I_EMAC=y
CONFIG_NET_CALXEDA_XGMAC=y
+CONFIG_KS8851=y
CONFIG_SMSC911X=y
CONFIG_STMMAC_ETH=y
CONFIG_MDIO_SUN4I=y
@@ -89,6 +91,7 @@ CONFIG_I2C_DESIGNWARE_PLATFORM=y
CONFIG_I2C_SIRF=y
CONFIG_I2C_TEGRA=y
CONFIG_SPI=y
+CONFIG_SPI_OMAP24XX=y
CONFIG_SPI_PL022=y
CONFIG_SPI_SIRF=y
CONFIG_SPI_TEGRA114=y
@@ -111,11 +114,12 @@ CONFIG_FB_SIMPLE=y
CONFIG_USB=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_MXC=y
CONFIG_USB_EHCI_TEGRA=y
CONFIG_USB_EHCI_HCD_PLATFORM=y
CONFIG_USB_ISP1760_HCD=y
CONFIG_USB_STORAGE=y
+CONFIG_USB_CHIPIDEA=y
+CONFIG_USB_CHIPIDEA_HOST=y
CONFIG_AB8500_USB=y
CONFIG_NOP_USB_XCEIV=y
CONFIG_OMAP_USB2=y
diff --git a/arch/arm/configs/nhk8815_defconfig b/arch/arm/configs/nhk8815_defconfig
index 35f8cf299fa2..263ae3869e32 100644
--- a/arch/arm/configs/nhk8815_defconfig
+++ b/arch/arm/configs/nhk8815_defconfig
@@ -1,6 +1,8 @@
# CONFIG_LOCALVERSION_AUTO is not set
# CONFIG_SWAP is not set
CONFIG_SYSVIPC=y
+CONFIG_NO_HZ_IDLE=y
+CONFIG_HIGH_RES_TIMERS=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=14
@@ -48,7 +50,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_MTD=y
CONFIG_MTD_TESTS=m
CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_CHAR=y
CONFIG_MTD_BLOCK=y
CONFIG_MTD_NAND_ECC_SMC=y
CONFIG_MTD_NAND=y
@@ -94,8 +95,10 @@ CONFIG_I2C_GPIO=y
CONFIG_I2C_NOMADIK=y
CONFIG_DEBUG_GPIO=y
# CONFIG_HWMON is not set
+CONFIG_REGULATOR=y
CONFIG_MMC=y
-CONFIG_MMC_CLKGATE=y
+CONFIG_MMC_UNSAFE_RESUME=y
+# CONFIG_MMC_BLOCK_BOUNCE is not set
CONFIG_MMC_ARMMMCI=y
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
diff --git a/arch/arm/include/asm/arch_timer.h b/arch/arm/include/asm/arch_timer.h
index accefe099182..e406d575c94f 100644
--- a/arch/arm/include/asm/arch_timer.h
+++ b/arch/arm/include/asm/arch_timer.h
@@ -89,7 +89,7 @@ static inline u64 arch_counter_get_cntvct(void)
return cval;
}
-static inline void __cpuinit arch_counter_set_user_access(void)
+static inline void arch_counter_set_user_access(void)
{
u32 cntkctl;
diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S
index 76ab5ca50610..47cd974e57ea 100644
--- a/arch/arm/kernel/head-common.S
+++ b/arch/arm/kernel/head-common.S
@@ -149,7 +149,6 @@ ENDPROC(lookup_processor_type)
* r5 = proc_info pointer in physical address space
* r9 = cpuid (preserved)
*/
- __CPUINIT
__lookup_processor_type:
adr r3, __lookup_processor_type_data
ldmia r3, {r4 - r6}
diff --git a/arch/arm/kernel/head-nommu.S b/arch/arm/kernel/head-nommu.S
index 75f14cc3e073..b361de143756 100644
--- a/arch/arm/kernel/head-nommu.S
+++ b/arch/arm/kernel/head-nommu.S
@@ -87,7 +87,6 @@ ENTRY(stext)
ENDPROC(stext)
#ifdef CONFIG_SMP
- __CPUINIT
ENTRY(secondary_startup)
/*
* Common entry point for secondary CPUs.
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
index 45e8935cae4e..9cf6063020ae 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -343,7 +343,6 @@ __turn_mmu_on_loc:
.long __turn_mmu_on_end
#if defined(CONFIG_SMP)
- __CPUINIT
ENTRY(secondary_startup)
/*
* Common entry point for secondary CPUs.
diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c
index 1fd749ee4a1b..7b95de601357 100644
--- a/arch/arm/kernel/hw_breakpoint.c
+++ b/arch/arm/kernel/hw_breakpoint.c
@@ -1020,7 +1020,7 @@ out_mdbgen:
cpumask_or(&debug_err_mask, &debug_err_mask, cpumask_of(cpu));
}
-static int __cpuinit dbg_reset_notify(struct notifier_block *self,
+static int dbg_reset_notify(struct notifier_block *self,
unsigned long action, void *cpu)
{
if ((action & ~CPU_TASKS_FROZEN) == CPU_ONLINE)
@@ -1029,7 +1029,7 @@ static int __cpuinit dbg_reset_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata dbg_reset_nb = {
+static struct notifier_block dbg_reset_nb = {
.notifier_call = dbg_reset_notify,
};
diff --git a/arch/arm/kernel/perf_event_cpu.c b/arch/arm/kernel/perf_event_cpu.c
index 1f2740e3dbc0..aebe0e99c153 100644
--- a/arch/arm/kernel/perf_event_cpu.c
+++ b/arch/arm/kernel/perf_event_cpu.c
@@ -157,8 +157,8 @@ static void cpu_pmu_init(struct arm_pmu *cpu_pmu)
* UNKNOWN at reset, the PMU must be explicitly reset to avoid reading
* junk values out of them.
*/
-static int __cpuinit cpu_pmu_notify(struct notifier_block *b,
- unsigned long action, void *hcpu)
+static int cpu_pmu_notify(struct notifier_block *b, unsigned long action,
+ void *hcpu)
{
if ((action & ~CPU_TASKS_FROZEN) != CPU_STARTING)
return NOTIFY_DONE;
@@ -171,7 +171,7 @@ static int __cpuinit cpu_pmu_notify(struct notifier_block *b,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata cpu_pmu_hotplug_notifier = {
+static struct notifier_block cpu_pmu_hotplug_notifier = {
.notifier_call = cpu_pmu_notify,
};
diff --git a/arch/arm/kernel/psci_smp.c b/arch/arm/kernel/psci_smp.c
index 219f1d73572a..70ded3fb42d9 100644
--- a/arch/arm/kernel/psci_smp.c
+++ b/arch/arm/kernel/psci_smp.c
@@ -46,8 +46,7 @@
extern void secondary_startup(void);
-static int __cpuinit psci_boot_secondary(unsigned int cpu,
- struct task_struct *idle)
+static int psci_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
if (psci_ops.cpu_on)
return psci_ops.cpu_on(cpu_logical_map(cpu),
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index c5fb5469054b..c2b4f8f0be9a 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -58,7 +58,7 @@ struct secondary_data secondary_data;
* control for which core is the next to come out of the secondary
* boot "holding pen"
*/
-volatile int __cpuinitdata pen_release = -1;
+volatile int pen_release = -1;
enum ipi_msg_type {
IPI_WAKEUP,
@@ -86,7 +86,7 @@ static unsigned long get_arch_pgd(pgd_t *pgd)
return pgdir >> ARCH_PGD_SHIFT;
}
-int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *idle)
+int __cpu_up(unsigned int cpu, struct task_struct *idle)
{
int ret;
@@ -138,7 +138,7 @@ void __init smp_init_cpus(void)
smp_ops.smp_init_cpus();
}
-int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
+int boot_secondary(unsigned int cpu, struct task_struct *idle)
{
if (smp_ops.smp_boot_secondary)
return smp_ops.smp_boot_secondary(cpu, idle);
@@ -170,7 +170,7 @@ static int platform_cpu_disable(unsigned int cpu)
/*
* __cpu_disable runs on the processor to be shutdown.
*/
-int __cpuinit __cpu_disable(void)
+int __cpu_disable(void)
{
unsigned int cpu = smp_processor_id();
int ret;
@@ -216,7 +216,7 @@ static DECLARE_COMPLETION(cpu_died);
* called on the thread which is asking for a CPU to be shutdown -
* waits until shutdown has completed, or it is timed out.
*/
-void __cpuinit __cpu_die(unsigned int cpu)
+void __cpu_die(unsigned int cpu)
{
if (!wait_for_completion_timeout(&cpu_died, msecs_to_jiffies(5000))) {
pr_err("CPU%u: cpu didn't die\n", cpu);
@@ -306,7 +306,7 @@ void __ref cpu_die(void)
* Called by both boot and secondaries to move global data into
* per-processor storage.
*/
-static void __cpuinit smp_store_cpu_info(unsigned int cpuid)
+static void smp_store_cpu_info(unsigned int cpuid)
{
struct cpuinfo_arm *cpu_info = &per_cpu(cpu_data, cpuid);
@@ -322,7 +322,7 @@ static void percpu_timer_setup(void);
* This is the secondary CPU boot entry. We're using this CPUs
* idle thread stack, but a set of temporary page tables.
*/
-asmlinkage void __cpuinit secondary_start_kernel(void)
+asmlinkage void secondary_start_kernel(void)
{
struct mm_struct *mm = &init_mm;
unsigned int cpu;
@@ -521,7 +521,7 @@ static void broadcast_timer_set_mode(enum clock_event_mode mode,
{
}
-static void __cpuinit broadcast_timer_setup(struct clock_event_device *evt)
+static void broadcast_timer_setup(struct clock_event_device *evt)
{
evt->name = "dummy_timer";
evt->features = CLOCK_EVT_FEAT_ONESHOT |
@@ -550,7 +550,7 @@ int local_timer_register(struct local_timer_ops *ops)
}
#endif
-static void __cpuinit percpu_timer_setup(void)
+static void percpu_timer_setup(void)
{
unsigned int cpu = smp_processor_id();
struct clock_event_device *evt = &per_cpu(percpu_clockevent, cpu);
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c
index f6fd1d4398c6..25956204ef23 100644
--- a/arch/arm/kernel/smp_twd.c
+++ b/arch/arm/kernel/smp_twd.c
@@ -187,7 +187,7 @@ core_initcall(twd_cpufreq_init);
#endif
-static void __cpuinit twd_calibrate_rate(void)
+static void twd_calibrate_rate(void)
{
unsigned long count;
u64 waitjiffies;
@@ -265,7 +265,7 @@ static void twd_get_clock(struct device_node *np)
/*
* Setup the local clock events for a CPU.
*/
-static int __cpuinit twd_timer_setup(struct clock_event_device *clk)
+static int twd_timer_setup(struct clock_event_device *clk)
{
struct clock_event_device **this_cpu_clk;
int cpu = smp_processor_id();
@@ -308,7 +308,7 @@ static int __cpuinit twd_timer_setup(struct clock_event_device *clk)
return 0;
}
-static struct local_timer_ops twd_lt_ops __cpuinitdata = {
+static struct local_timer_ops twd_lt_ops = {
.setup = twd_timer_setup,
.stop = twd_timer_stop,
};
diff --git a/arch/arm/lib/delay.c b/arch/arm/lib/delay.c
index 64dbfa57204a..5306de350133 100644
--- a/arch/arm/lib/delay.c
+++ b/arch/arm/lib/delay.c
@@ -86,7 +86,7 @@ void __init register_current_timer_delay(const struct delay_timer *timer)
}
}
-unsigned long __cpuinit calibrate_delay_is_known(void)
+unsigned long calibrate_delay_is_known(void)
{
delay_calibrated = true;
return lpj_fine;
diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c
index afbc439f11d4..4cdb61c54459 100644
--- a/arch/arm/mach-davinci/board-dm365-evm.c
+++ b/arch/arm/mach-davinci/board-dm365-evm.c
@@ -505,7 +505,7 @@ static struct vpbe_output dm365evm_vpbe_outputs[] = {
/*
* Amplifiers on the board
*/
-struct ths7303_platform_data ths7303_pdata = {
+static struct ths7303_platform_data ths7303_pdata = {
.ch_1 = 3,
.ch_2 = 3,
.ch_3 = 3,
diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c
index 42ef53f62c6c..86100d179694 100644
--- a/arch/arm/mach-davinci/dm355.c
+++ b/arch/arm/mach-davinci/dm355.c
@@ -860,7 +860,7 @@ static struct platform_device dm355_vpbe_display = {
},
};
-struct venc_platform_data dm355_venc_pdata = {
+static struct venc_platform_data dm355_venc_pdata = {
.setup_pinmux = dm355_vpbe_setup_pinmux,
.setup_clock = dm355_venc_setup_clock,
};
diff --git a/arch/arm/mach-davinci/dm365.c b/arch/arm/mach-davinci/dm365.c
index fa7af5eda52d..dad28029ba9b 100644
--- a/arch/arm/mach-davinci/dm365.c
+++ b/arch/arm/mach-davinci/dm365.c
@@ -1349,7 +1349,7 @@ static struct platform_device dm365_vpbe_display = {
},
};
-struct venc_platform_data dm365_venc_pdata = {
+static struct venc_platform_data dm365_venc_pdata = {
.setup_pinmux = dm365_vpbe_setup_pinmux,
.setup_clock = dm365_venc_setup_clock,
};
diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
index 855d4a7b462d..5952e68c76c4 100644
--- a/arch/arm/mach-exynos/Kconfig
+++ b/arch/arm/mach-exynos/Kconfig
@@ -92,6 +92,7 @@ config SOC_EXYNOS5440
bool "SAMSUNG EXYNOS5440"
default y
depends on ARCH_EXYNOS5
+ select ARCH_DMA_ADDR_T_64BIT if ARM_LPAE
select ARCH_HAS_OPP
select HAVE_ARM_ARCH_TIMER
select AUTO_ZRELADDR
diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile
index e970a7a4e278..53696154aead 100644
--- a/arch/arm/mach-exynos/Makefile
+++ b/arch/arm/mach-exynos/Makefile
@@ -14,7 +14,7 @@ obj- :=
obj-$(CONFIG_ARCH_EXYNOS) += common.o
-obj-$(CONFIG_PM) += pm.o
+obj-$(CONFIG_S5P_PM) += pm.o
obj-$(CONFIG_PM_GENERIC_DOMAINS) += pm_domains.o
obj-$(CONFIG_CPU_IDLE) += cpuidle.o
diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c
index 164685bd25c8..ba95e5db2501 100644
--- a/arch/arm/mach-exynos/common.c
+++ b/arch/arm/mach-exynos/common.c
@@ -58,7 +58,6 @@ static const char name_exynos5440[] = "EXYNOS5440";
static void exynos4_map_io(void);
static void exynos5_map_io(void);
-static void exynos5440_map_io(void);
static int exynos_init(void);
static struct cpu_table cpu_ids[] __initdata = {
@@ -95,7 +94,6 @@ static struct cpu_table cpu_ids[] __initdata = {
}, {
.idcode = EXYNOS5440_SOC_ID,
.idmask = EXYNOS5_SOC_MASK,
- .map_io = exynos5440_map_io,
.init = exynos_init,
.name = name_exynos5440,
},
@@ -150,11 +148,6 @@ static struct map_desc exynos4_iodesc[] __initdata = {
.length = SZ_64K,
.type = MT_DEVICE,
}, {
- .virtual = (unsigned long)S3C_VA_UART,
- .pfn = __phys_to_pfn(EXYNOS4_PA_UART),
- .length = SZ_512K,
- .type = MT_DEVICE,
- }, {
.virtual = (unsigned long)S5P_VA_CMU,
.pfn = __phys_to_pfn(EXYNOS4_PA_CMU),
.length = SZ_128K,
@@ -268,20 +261,6 @@ static struct map_desc exynos5_iodesc[] __initdata = {
.pfn = __phys_to_pfn(EXYNOS5_PA_PMU),
.length = SZ_64K,
.type = MT_DEVICE,
- }, {
- .virtual = (unsigned long)S3C_VA_UART,
- .pfn = __phys_to_pfn(EXYNOS5_PA_UART),
- .length = SZ_512K,
- .type = MT_DEVICE,
- },
-};
-
-static struct map_desc exynos5440_iodesc0[] __initdata = {
- {
- .virtual = (unsigned long)S3C_VA_UART,
- .pfn = __phys_to_pfn(EXYNOS5440_PA_UART0),
- .length = SZ_512K,
- .type = MT_DEVICE,
},
};
@@ -388,11 +367,6 @@ static void __init exynos5_map_io(void)
iotable_init(exynos5250_iodesc, ARRAY_SIZE(exynos5250_iodesc));
}
-static void __init exynos5440_map_io(void)
-{
- iotable_init(exynos5440_iodesc0, ARRAY_SIZE(exynos5440_iodesc0));
-}
-
void __init exynos_init_time(void)
{
of_clk_init(NULL);
diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h
index 3e156bcddcb4..972490fc09d6 100644
--- a/arch/arm/mach-exynos/common.h
+++ b/arch/arm/mach-exynos/common.h
@@ -97,6 +97,5 @@ struct exynos_pmu_conf {
};
extern void exynos_sys_powerdown_conf(enum sys_powerdown mode);
-extern void s3c_cpu_resume(void);
#endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */
diff --git a/arch/arm/mach-exynos/cpuidle.c b/arch/arm/mach-exynos/cpuidle.c
index 17a18ff3d71e..225ee8431c72 100644
--- a/arch/arm/mach-exynos/cpuidle.c
+++ b/arch/arm/mach-exynos/cpuidle.c
@@ -25,6 +25,7 @@
#include <mach/regs-pmu.h>
#include <plat/cpu.h>
+#include <plat/pm.h>
#include "common.h"
diff --git a/arch/arm/mach-exynos/headsmp.S b/arch/arm/mach-exynos/headsmp.S
index 5364d4bfa8bc..cdd9d91e9933 100644
--- a/arch/arm/mach-exynos/headsmp.S
+++ b/arch/arm/mach-exynos/headsmp.S
@@ -13,8 +13,6 @@
#include <linux/linkage.h>
#include <linux/init.h>
- __CPUINIT
-
/*
* exynos4 specific entry point for secondary CPUs. This provides
* a "holding pen" into which all secondary cores are held until we're
diff --git a/arch/arm/mach-exynos/include/mach/memory.h b/arch/arm/mach-exynos/include/mach/memory.h
index 374ef2cf7152..2a4cdb7cb326 100644
--- a/arch/arm/mach-exynos/include/mach/memory.h
+++ b/arch/arm/mach-exynos/include/mach/memory.h
@@ -15,8 +15,13 @@
#define PLAT_PHYS_OFFSET UL(0x40000000)
+#ifndef CONFIG_ARM_LPAE
/* Maximum of 256MiB in one bank */
#define MAX_PHYSMEM_BITS 32
#define SECTION_SIZE_BITS 28
+#else
+#define MAX_PHYSMEM_BITS 36
+#define SECTION_SIZE_BITS 31
+#endif
#endif /* __ASM_ARCH_MEMORY_H */
diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c
index deba1308ff16..58b43e6f9262 100644
--- a/arch/arm/mach-exynos/platsmp.c
+++ b/arch/arm/mach-exynos/platsmp.c
@@ -75,7 +75,7 @@ static void __iomem *scu_base_addr(void)
static DEFINE_SPINLOCK(boot_lock);
-static void __cpuinit exynos_secondary_init(unsigned int cpu)
+static void exynos_secondary_init(unsigned int cpu)
{
/*
* let the primary processor know we're out of the
@@ -90,7 +90,7 @@ static void __cpuinit exynos_secondary_init(unsigned int cpu)
spin_unlock(&boot_lock);
}
-static int __cpuinit exynos_boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
unsigned long timeout;
unsigned long phys_cpu = cpu_logical_map(cpu);
diff --git a/arch/arm/mach-exynos/pm.c b/arch/arm/mach-exynos/pm.c
index 41c20692a13f..c679db577269 100644
--- a/arch/arm/mach-exynos/pm.c
+++ b/arch/arm/mach-exynos/pm.c
@@ -217,6 +217,9 @@ static __init int exynos_pm_drvinit(void)
struct clk *pll_base;
unsigned int tmp;
+ if (soc_is_exynos5440())
+ return 0;
+
s3c_pm_init();
/* All wakeup disable */
@@ -340,6 +343,9 @@ static struct syscore_ops exynos_pm_syscore_ops = {
static __init int exynos_pm_syscore_init(void)
{
+ if (soc_is_exynos5440())
+ return 0;
+
register_syscore_ops(&exynos_pm_syscore_ops);
return 0;
}
diff --git a/arch/arm/mach-footbridge/dc21285.c b/arch/arm/mach-footbridge/dc21285.c
index a7cd2cf5e08d..3490a24f969e 100644
--- a/arch/arm/mach-footbridge/dc21285.c
+++ b/arch/arm/mach-footbridge/dc21285.c
@@ -276,8 +276,6 @@ int __init dc21285_setup(int nr, struct pci_sys_data *sys)
sys->mem_offset = DC21285_PCI_MEM;
- pci_ioremap_io(0, DC21285_PCI_IO);
-
pci_add_resource_offset(&sys->resources, &res[0], sys->mem_offset);
pci_add_resource_offset(&sys->resources, &res[1], sys->mem_offset);
diff --git a/arch/arm/mach-highbank/highbank.c b/arch/arm/mach-highbank/highbank.c
index dc5d6becd8c7..88815795fe26 100644
--- a/arch/arm/mach-highbank/highbank.c
+++ b/arch/arm/mach-highbank/highbank.c
@@ -115,6 +115,7 @@ static int highbank_platform_notifier(struct notifier_block *nb,
{
struct resource *res;
int reg = -1;
+ u32 val;
struct device *dev = __dev;
if (event != BUS_NOTIFY_ADD_DEVICE)
@@ -141,10 +142,10 @@ static int highbank_platform_notifier(struct notifier_block *nb,
return NOTIFY_DONE;
if (of_property_read_bool(dev->of_node, "dma-coherent")) {
- writel(0xff31, sregs_base + reg);
+ val = readl(sregs_base + reg);
+ writel(val | 0xff01, sregs_base + reg);
set_dma_ops(dev, &arm_coherent_dma_ops);
- } else
- writel(0, sregs_base + reg);
+ }
return NOTIFY_OK;
}
diff --git a/arch/arm/mach-highbank/platsmp.c b/arch/arm/mach-highbank/platsmp.c
index a984573e0d02..32d75cf55cbc 100644
--- a/arch/arm/mach-highbank/platsmp.c
+++ b/arch/arm/mach-highbank/platsmp.c
@@ -24,7 +24,7 @@
extern void secondary_startup(void);
-static int __cpuinit highbank_boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int highbank_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
highbank_set_cpu_jump(cpu, secondary_startup);
arch_send_wakeup_ipi_mask(cpumask_of(cpu));
diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c
index 4282e99f5ca1..86567d980b07 100644
--- a/arch/arm/mach-imx/clk-imx6q.c
+++ b/arch/arm/mach-imx/clk-imx6q.c
@@ -199,7 +199,8 @@ static const char *pcie_axi_sels[] = { "axi", "ahb", };
static const char *ssi_sels[] = { "pll3_pfd2_508m", "pll3_pfd3_454m", "pll4_post_div", };
static const char *usdhc_sels[] = { "pll2_pfd2_396m", "pll2_pfd0_352m", };
static const char *enfc_sels[] = { "pll2_pfd0_352m", "pll2_bus", "pll3_usb_otg", "pll2_pfd2_396m", };
-static const char *emi_sels[] = { "axi", "pll3_usb_otg", "pll2_pfd2_396m", "pll2_pfd0_352m", };
+static const char *emi_sels[] = { "pll2_pfd2_396m", "pll3_usb_otg", "axi", "pll2_pfd0_352m", };
+static const char *emi_slow_sels[] = { "axi", "pll3_usb_otg", "pll2_pfd2_396m", "pll2_pfd0_352m", };
static const char *vdo_axi_sels[] = { "axi", "ahb", };
static const char *vpu_axi_sels[] = { "axi", "pll2_pfd2_396m", "pll2_pfd0_352m", };
static const char *cko1_sels[] = { "pll3_usb_otg", "pll2_bus", "pll1_sys", "pll5_video_div",
@@ -392,7 +393,7 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
clk[usdhc4_sel] = imx_clk_mux("usdhc4_sel", base + 0x1c, 19, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels));
clk[enfc_sel] = imx_clk_mux("enfc_sel", base + 0x2c, 16, 2, enfc_sels, ARRAY_SIZE(enfc_sels));
clk[emi_sel] = imx_clk_mux("emi_sel", base + 0x1c, 27, 2, emi_sels, ARRAY_SIZE(emi_sels));
- clk[emi_slow_sel] = imx_clk_mux("emi_slow_sel", base + 0x1c, 29, 2, emi_sels, ARRAY_SIZE(emi_sels));
+ clk[emi_slow_sel] = imx_clk_mux("emi_slow_sel", base + 0x1c, 29, 2, emi_slow_sels, ARRAY_SIZE(emi_slow_sels));
clk[vdo_axi_sel] = imx_clk_mux("vdo_axi_sel", base + 0x18, 11, 1, vdo_axi_sels, ARRAY_SIZE(vdo_axi_sels));
clk[vpu_axi_sel] = imx_clk_mux("vpu_axi_sel", base + 0x18, 14, 2, vpu_axi_sels, ARRAY_SIZE(vpu_axi_sels));
clk[cko1_sel] = imx_clk_mux("cko1_sel", base + 0x60, 0, 4, cko1_sels, ARRAY_SIZE(cko1_sels));
diff --git a/arch/arm/mach-imx/clk-vf610.c b/arch/arm/mach-imx/clk-vf610.c
index d617c0b7c809..b169a396d93b 100644
--- a/arch/arm/mach-imx/clk-vf610.c
+++ b/arch/arm/mach-imx/clk-vf610.c
@@ -183,6 +183,8 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)
clk[VF610_CLK_ENET_TS_SEL] = imx_clk_mux("enet_ts_sel", CCM_CSCMR2, 0, 3, enet_ts_sels, 7);
clk[VF610_CLK_ENET] = imx_clk_gate("enet", "enet_sel", CCM_CSCDR1, 24);
clk[VF610_CLK_ENET_TS] = imx_clk_gate("enet_ts", "enet_ts_sel", CCM_CSCDR1, 23);
+ clk[VF610_CLK_ENET0] = imx_clk_gate2("enet0", "ipg_bus", CCM_CCGR9, CCM_CCGRx_CGn(0));
+ clk[VF610_CLK_ENET1] = imx_clk_gate2("enet1", "ipg_bus", CCM_CCGR9, CCM_CCGRx_CGn(1));
clk[VF610_CLK_PIT] = imx_clk_gate2("pit", "ipg_bus", CCM_CCGR1, CCM_CCGRx_CGn(7));
diff --git a/arch/arm/mach-imx/mx27.h b/arch/arm/mach-imx/mx27.h
index e074616d54ca..8a65f192e7f3 100644
--- a/arch/arm/mach-imx/mx27.h
+++ b/arch/arm/mach-imx/mx27.h
@@ -135,7 +135,7 @@
#define MX27_INT_GPT4 (NR_IRQS_LEGACY + 4)
#define MX27_INT_RTIC (NR_IRQS_LEGACY + 5)
#define MX27_INT_CSPI3 (NR_IRQS_LEGACY + 6)
-#define MX27_INT_SDHC (NR_IRQS_LEGACY + 7)
+#define MX27_INT_MSHC (NR_IRQS_LEGACY + 7)
#define MX27_INT_GPIO (NR_IRQS_LEGACY + 8)
#define MX27_INT_SDHC3 (NR_IRQS_LEGACY + 9)
#define MX27_INT_SDHC2 (NR_IRQS_LEGACY + 10)
diff --git a/arch/arm/mach-imx/platsmp.c b/arch/arm/mach-imx/platsmp.c
index c6e1ab544882..1f24c1fdfea4 100644
--- a/arch/arm/mach-imx/platsmp.c
+++ b/arch/arm/mach-imx/platsmp.c
@@ -53,7 +53,7 @@ void imx_scu_standby_enable(void)
writel_relaxed(val, scu_base);
}
-static int __cpuinit imx_boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int imx_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
imx_set_cpu_jump(cpu, v7_secondary_startup);
imx_enable_cpu(cpu, true);
diff --git a/arch/arm/mach-keystone/keystone.c b/arch/arm/mach-keystone/keystone.c
index fe4d9ff93a7e..b661c5c2870a 100644
--- a/arch/arm/mach-keystone/keystone.c
+++ b/arch/arm/mach-keystone/keystone.c
@@ -49,7 +49,7 @@ static const char *keystone_match[] __initconst = {
NULL,
};
-void keystone_restart(char mode, const char *cmd)
+void keystone_restart(enum reboot_mode mode, const char *cmd)
{
u32 val;
diff --git a/arch/arm/mach-keystone/platsmp.c b/arch/arm/mach-keystone/platsmp.c
index 1d4181e1daf2..14378e3fef16 100644
--- a/arch/arm/mach-keystone/platsmp.c
+++ b/arch/arm/mach-keystone/platsmp.c
@@ -21,7 +21,7 @@
#include "keystone.h"
-static int __cpuinit keystone_smp_boot_secondary(unsigned int cpu,
+static int keystone_smp_boot_secondary(unsigned int cpu,
struct task_struct *idle)
{
unsigned long start = virt_to_phys(&secondary_startup);
diff --git a/arch/arm/mach-msm/headsmp.S b/arch/arm/mach-msm/headsmp.S
index bcd5af223dea..6c62c3f82fe6 100644
--- a/arch/arm/mach-msm/headsmp.S
+++ b/arch/arm/mach-msm/headsmp.S
@@ -11,8 +11,6 @@
#include <linux/linkage.h>
#include <linux/init.h>
- __CPUINIT
-
/*
* MSM specific entry point for secondary CPUs. This provides
* a "holding pen" into which all secondary cores are held until we're
diff --git a/arch/arm/mach-msm/platsmp.c b/arch/arm/mach-msm/platsmp.c
index 00cdb0a5dac8..3f06edcdd0ce 100644
--- a/arch/arm/mach-msm/platsmp.c
+++ b/arch/arm/mach-msm/platsmp.c
@@ -38,7 +38,7 @@ static inline int get_core_count(void)
return ((read_cpuid_id() >> 4) & 3) + 1;
}
-static void __cpuinit msm_secondary_init(unsigned int cpu)
+static void msm_secondary_init(unsigned int cpu)
{
/*
* let the primary processor know we're out of the
@@ -54,7 +54,7 @@ static void __cpuinit msm_secondary_init(unsigned int cpu)
spin_unlock(&boot_lock);
}
-static __cpuinit void prepare_cold_cpu(unsigned int cpu)
+static void prepare_cold_cpu(unsigned int cpu)
{
int ret;
ret = scm_set_boot_addr(virt_to_phys(msm_secondary_startup),
@@ -73,7 +73,7 @@ static __cpuinit void prepare_cold_cpu(unsigned int cpu)
"address\n");
}
-static int __cpuinit msm_boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int msm_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
unsigned long timeout;
static int cold_boot_done;
diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c
index b6418fd5fe0d..8697cfc0d0b6 100644
--- a/arch/arm/mach-msm/timer.c
+++ b/arch/arm/mach-msm/timer.c
@@ -139,7 +139,7 @@ static struct clocksource msm_clocksource = {
};
#ifdef CONFIG_LOCAL_TIMERS
-static int __cpuinit msm_local_timer_setup(struct clock_event_device *evt)
+static int msm_local_timer_setup(struct clock_event_device *evt)
{
/* Use existing clock_event for cpu 0 */
if (!smp_processor_id())
@@ -164,7 +164,7 @@ static void msm_local_timer_stop(struct clock_event_device *evt)
disable_percpu_irq(evt->irq);
}
-static struct local_timer_ops msm_local_timer_ops __cpuinitdata = {
+static struct local_timer_ops msm_local_timer_ops = {
.setup = msm_local_timer_setup,
.stop = msm_local_timer_stop,
};
diff --git a/arch/arm/mach-mvebu/coherency.c b/arch/arm/mach-mvebu/coherency.c
index be117591f7f2..4c24303ec481 100644
--- a/arch/arm/mach-mvebu/coherency.c
+++ b/arch/arm/mach-mvebu/coherency.c
@@ -28,7 +28,7 @@
#include <asm/cacheflush.h>
#include "armada-370-xp.h"
-unsigned long __cpuinitdata coherency_phys_base;
+unsigned long coherency_phys_base;
static void __iomem *coherency_base;
static void __iomem *coherency_cpu_base;
diff --git a/arch/arm/mach-mvebu/headsmp.S b/arch/arm/mach-mvebu/headsmp.S
index 7147300c8af2..8a1b0c96e9ec 100644
--- a/arch/arm/mach-mvebu/headsmp.S
+++ b/arch/arm/mach-mvebu/headsmp.S
@@ -21,8 +21,6 @@
#include <linux/linkage.h>
#include <linux/init.h>
- __CPUINIT
-
/*
* Armada XP specific entry point for secondary CPUs.
* We add the CPU to the coherency fabric and then jump to secondary
diff --git a/arch/arm/mach-mvebu/platsmp.c b/arch/arm/mach-mvebu/platsmp.c
index 93f2f3ab45f1..ce81d3031405 100644
--- a/arch/arm/mach-mvebu/platsmp.c
+++ b/arch/arm/mach-mvebu/platsmp.c
@@ -71,13 +71,12 @@ void __init set_secondary_cpus_clock(void)
}
}
-static void __cpuinit armada_xp_secondary_init(unsigned int cpu)
+static void armada_xp_secondary_init(unsigned int cpu)
{
armada_xp_mpic_smp_cpu_init();
}
-static int __cpuinit armada_xp_boot_secondary(unsigned int cpu,
- struct task_struct *idle)
+static int armada_xp_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
pr_info("Booting CPU %d\n", cpu);
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index 627fa7e41fba..3eed0006d189 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -62,7 +62,7 @@ config SOC_OMAP5
select HAVE_SMP
select COMMON_CLK
select HAVE_ARM_ARCH_TIMER
- select ARM_ERRATA_798181
+ select ARM_ERRATA_798181 if SMP
config SOC_AM33XX
bool "AM33XX support"
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
index e5fbfed69aa2..be5d005ebad2 100644
--- a/arch/arm/mach-omap2/board-generic.c
+++ b/arch/arm/mach-omap2/board-generic.c
@@ -15,6 +15,7 @@
#include <linux/of_irq.h>
#include <linux/of_platform.h>
#include <linux/irqdomain.h>
+#include <linux/clk.h>
#include <asm/mach/arch.h>
@@ -35,6 +36,21 @@ static struct of_device_id omap_dt_match_table[] __initdata = {
{ }
};
+/*
+ * Create alias for USB host PHY clock.
+ * Remove this when clock phandle can be provided via DT
+ */
+static void __init legacy_init_ehci_clk(char *clkname)
+{
+ int ret;
+
+ ret = clk_add_alias("main_clk", NULL, clkname, NULL);
+ if (ret) {
+ pr_err("%s:Failed to add main_clk alias to %s :%d\n",
+ __func__, clkname, ret);
+ }
+}
+
static void __init omap_generic_init(void)
{
omap_sdrc_init(NULL, NULL);
@@ -45,10 +61,15 @@ static void __init omap_generic_init(void)
* HACK: call display setup code for selected boards to enable omapdss.
* This will be removed when omapdss supports DT.
*/
- if (of_machine_is_compatible("ti,omap4-panda"))
+ if (of_machine_is_compatible("ti,omap4-panda")) {
omap4_panda_display_init_of();
+ legacy_init_ehci_clk("auxclk3_ck");
+
+ }
else if (of_machine_is_compatible("ti,omap4-sdp"))
omap_4430sdp_display_init_of();
+ else if (of_machine_is_compatible("ti,omap5-uevm"))
+ legacy_init_ehci_clk("auxclk1_ck");
}
#ifdef CONFIG_SOC_OMAP2420
diff --git a/arch/arm/mach-omap2/omap-headsmp.S b/arch/arm/mach-omap2/omap-headsmp.S
index 4ea308114165..75e92952c18e 100644
--- a/arch/arm/mach-omap2/omap-headsmp.S
+++ b/arch/arm/mach-omap2/omap-headsmp.S
@@ -20,8 +20,6 @@
#include "omap44xx.h"
- __CPUINIT
-
/* Physical address needed since MMU not enabled yet on secondary core */
#define AUX_CORE_BOOT0_PA 0x48281800
diff --git a/arch/arm/mach-omap2/omap-mpuss-lowpower.c b/arch/arm/mach-omap2/omap-mpuss-lowpower.c
index f993a4188701..f991016e2a6a 100644
--- a/arch/arm/mach-omap2/omap-mpuss-lowpower.c
+++ b/arch/arm/mach-omap2/omap-mpuss-lowpower.c
@@ -291,7 +291,7 @@ int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state)
* @cpu : CPU ID
* @power_state: CPU low power state.
*/
-int __cpuinit omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state)
+int omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state)
{
struct omap4_cpu_pm_info *pm_info = &per_cpu(omap4_pm_info, cpu);
unsigned int cpu_state = 0;
diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c
index 98a11463a843..8708b2a9da45 100644
--- a/arch/arm/mach-omap2/omap-smp.c
+++ b/arch/arm/mach-omap2/omap-smp.c
@@ -51,7 +51,7 @@ void __iomem *omap4_get_scu_base(void)
return scu_base;
}
-static void __cpuinit omap4_secondary_init(unsigned int cpu)
+static void omap4_secondary_init(unsigned int cpu)
{
/*
* Configure ACTRL and enable NS SMP bit access on CPU1 on HS device.
@@ -72,7 +72,7 @@ static void __cpuinit omap4_secondary_init(unsigned int cpu)
spin_unlock(&boot_lock);
}
-static int __cpuinit omap4_boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int omap4_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
static struct clockdomain *cpu1_clkdm;
static bool booted;
diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c
index f8bb3b9b6a76..813c61558a5f 100644
--- a/arch/arm/mach-omap2/omap-wakeupgen.c
+++ b/arch/arm/mach-omap2/omap-wakeupgen.c
@@ -323,8 +323,8 @@ static void irq_save_secure_context(void)
#endif
#ifdef CONFIG_HOTPLUG_CPU
-static int __cpuinit irq_cpu_hotplug_notify(struct notifier_block *self,
- unsigned long action, void *hcpu)
+static int irq_cpu_hotplug_notify(struct notifier_block *self,
+ unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned int)hcpu;
diff --git a/arch/arm/mach-prima2/headsmp.S b/arch/arm/mach-prima2/headsmp.S
index 5b8a408d8921..d86fe33c5f53 100644
--- a/arch/arm/mach-prima2/headsmp.S
+++ b/arch/arm/mach-prima2/headsmp.S
@@ -9,8 +9,6 @@
#include <linux/linkage.h>
#include <linux/init.h>
- __CPUINIT
-
/*
* SIRFSOC specific entry point for secondary CPUs. This provides
* a "holding pen" into which all secondary cores are held until we're
diff --git a/arch/arm/mach-prima2/platsmp.c b/arch/arm/mach-prima2/platsmp.c
index 1c3de7bed841..3dbcb1ab6e37 100644
--- a/arch/arm/mach-prima2/platsmp.c
+++ b/arch/arm/mach-prima2/platsmp.c
@@ -44,7 +44,7 @@ void __init sirfsoc_map_scu(void)
scu_base = (void __iomem *)SIRFSOC_VA(base);
}
-static void __cpuinit sirfsoc_secondary_init(unsigned int cpu)
+static void sirfsoc_secondary_init(unsigned int cpu)
{
/*
* let the primary processor know we're out of the
@@ -65,7 +65,7 @@ static struct of_device_id rsc_ids[] = {
{},
};
-static int __cpuinit sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
unsigned long timeout;
struct device_node *np;
diff --git a/arch/arm/mach-pxa/em-x270.c b/arch/arm/mach-pxa/em-x270.c
index f6726bb4eb95..3a3362fa793e 100644
--- a/arch/arm/mach-pxa/em-x270.c
+++ b/arch/arm/mach-pxa/em-x270.c
@@ -477,16 +477,24 @@ static int em_x270_usb_hub_init(void)
/* USB Hub power-on and reset */
gpio_direction_output(usb_hub_reset, 1);
gpio_direction_output(GPIO9_USB_VBUS_EN, 0);
- regulator_enable(em_x270_usb_ldo);
+ err = regulator_enable(em_x270_usb_ldo);
+ if (err)
+ goto err_free_rst_gpio;
+
gpio_set_value(usb_hub_reset, 0);
gpio_set_value(usb_hub_reset, 1);
regulator_disable(em_x270_usb_ldo);
- regulator_enable(em_x270_usb_ldo);
+ err = regulator_enable(em_x270_usb_ldo);
+ if (err)
+ goto err_free_rst_gpio;
+
gpio_set_value(usb_hub_reset, 0);
gpio_set_value(GPIO9_USB_VBUS_EN, 1);
return 0;
+err_free_rst_gpio:
+ gpio_free(usb_hub_reset);
err_free_vbus_gpio:
gpio_free(GPIO9_USB_VBUS_EN);
err_free_usb_ldo:
@@ -592,7 +600,7 @@ err_irq:
return err;
}
-static void em_x270_mci_setpower(struct device *dev, unsigned int vdd)
+static int em_x270_mci_setpower(struct device *dev, unsigned int vdd)
{
struct pxamci_platform_data* p_d = dev->platform_data;
@@ -600,10 +608,11 @@ static void em_x270_mci_setpower(struct device *dev, unsigned int vdd)
int vdd_uV = (2000 + (vdd - __ffs(MMC_VDD_20_21)) * 100) * 1000;
regulator_set_voltage(em_x270_sdio_ldo, vdd_uV, vdd_uV);
- regulator_enable(em_x270_sdio_ldo);
+ return regulator_enable(em_x270_sdio_ldo);
} else {
regulator_disable(em_x270_sdio_ldo);
}
+ return 0;
}
static void em_x270_mci_exit(struct device *dev, void *data)
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c
index d2c652318376..dd70343c8708 100644
--- a/arch/arm/mach-pxa/mainstone.c
+++ b/arch/arm/mach-pxa/mainstone.c
@@ -408,7 +408,7 @@ static int mainstone_mci_init(struct device *dev, irq_handler_t mstone_detect_in
return err;
}
-static void mainstone_mci_setpower(struct device *dev, unsigned int vdd)
+static int mainstone_mci_setpower(struct device *dev, unsigned int vdd)
{
struct pxamci_platform_data* p_d = dev->platform_data;
@@ -420,6 +420,7 @@ static void mainstone_mci_setpower(struct device *dev, unsigned int vdd)
printk(KERN_DEBUG "%s: off\n", __func__);
MST_MSCWR1 &= ~MST_MSCWR1_MMC_ON;
}
+ return 0;
}
static void mainstone_mci_exit(struct device *dev, void *data)
diff --git a/arch/arm/mach-pxa/pcm990-baseboard.c b/arch/arm/mach-pxa/pcm990-baseboard.c
index fb7f1d1627dc..13e5b00eae90 100644
--- a/arch/arm/mach-pxa/pcm990-baseboard.c
+++ b/arch/arm/mach-pxa/pcm990-baseboard.c
@@ -335,7 +335,7 @@ static int pcm990_mci_init(struct device *dev, irq_handler_t mci_detect_int,
return err;
}
-static void pcm990_mci_setpower(struct device *dev, unsigned int vdd)
+static int pcm990_mci_setpower(struct device *dev, unsigned int vdd)
{
struct pxamci_platform_data *p_d = dev->platform_data;
u8 val;
@@ -348,6 +348,7 @@ static void pcm990_mci_setpower(struct device *dev, unsigned int vdd)
val &= ~PCM990_CTRL_MMC2PWR;
pcm990_cpld_writeb(PCM990_CTRL_MMC2PWR, PCM990_CTRL_REG5);
+ return 0;
}
static void pcm990_mci_exit(struct device *dev, void *data)
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c
index 711d37e26bd8..aedf053a1de5 100644
--- a/arch/arm/mach-pxa/poodle.c
+++ b/arch/arm/mach-pxa/poodle.c
@@ -258,7 +258,7 @@ err_free_2:
return err;
}
-static void poodle_mci_setpower(struct device *dev, unsigned int vdd)
+static int poodle_mci_setpower(struct device *dev, unsigned int vdd)
{
struct pxamci_platform_data* p_d = dev->platform_data;
@@ -270,6 +270,8 @@ static void poodle_mci_setpower(struct device *dev, unsigned int vdd)
gpio_set_value(POODLE_GPIO_SD_PWR1, 0);
gpio_set_value(POODLE_GPIO_SD_PWR, 0);
}
+
+ return 0;
}
static void poodle_mci_exit(struct device *dev, void *data)
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c
index 2125df0444e7..4c29173026e8 100644
--- a/arch/arm/mach-pxa/spitz.c
+++ b/arch/arm/mach-pxa/spitz.c
@@ -598,7 +598,7 @@ static inline void spitz_spi_init(void) {}
* NOTE: The card detect interrupt isn't debounced so we delay it by 250ms to
* give the card a chance to fully insert/eject.
*/
-static void spitz_mci_setpower(struct device *dev, unsigned int vdd)
+static int spitz_mci_setpower(struct device *dev, unsigned int vdd)
{
struct pxamci_platform_data* p_d = dev->platform_data;
@@ -606,6 +606,8 @@ static void spitz_mci_setpower(struct device *dev, unsigned int vdd)
spitz_card_pwr_ctrl(SCOOP_CPR_SD_3V, SCOOP_CPR_SD_3V);
else
spitz_card_pwr_ctrl(SCOOP_CPR_SD_3V, 0x0);
+
+ return 0;
}
static struct pxamci_platform_data spitz_mci_platform_data = {
diff --git a/arch/arm/mach-pxa/stargate2.c b/arch/arm/mach-pxa/stargate2.c
index 88fde43c948c..62aea3e835f3 100644
--- a/arch/arm/mach-pxa/stargate2.c
+++ b/arch/arm/mach-pxa/stargate2.c
@@ -734,9 +734,10 @@ static int stargate2_mci_init(struct device *dev,
*
* Very simple control. Either it is on or off and is controlled by
* a gpio pin */
-static void stargate2_mci_setpower(struct device *dev, unsigned int vdd)
+static int stargate2_mci_setpower(struct device *dev, unsigned int vdd)
{
gpio_set_value(SG2_SD_POWER_ENABLE, !!vdd);
+ return 0;
}
static void stargate2_mci_exit(struct device *dev, void *data)
diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig
index 6d9252e081ce..7791ac76f945 100644
--- a/arch/arm/mach-s3c24xx/Kconfig
+++ b/arch/arm/mach-s3c24xx/Kconfig
@@ -208,7 +208,7 @@ config S3C24XX_GPIO_EXTRA128
config S3C24XX_PLL
bool "Support CPUfreq changing of PLL frequency (EXPERIMENTAL)"
- depends on ARM_S3C24XX
+ depends on ARM_S3C24XX_CPUFREQ
help
Compile in support for changing the PLL frequency from the
S3C24XX series CPUfreq driver. The PLL takes time to settle
diff --git a/arch/arm/mach-s3c24xx/clock-s3c2410.c b/arch/arm/mach-s3c24xx/clock-s3c2410.c
index 34fffdf6fc1d..564553694b54 100644
--- a/arch/arm/mach-s3c24xx/clock-s3c2410.c
+++ b/arch/arm/mach-s3c24xx/clock-s3c2410.c
@@ -119,66 +119,101 @@ static struct clk init_clocks_off[] = {
}
};
-static struct clk init_clocks[] = {
- {
- .name = "lcd",
- .parent = &clk_h,
- .enable = s3c2410_clkcon_enable,
- .ctrlbit = S3C2410_CLKCON_LCDC,
- }, {
- .name = "gpio",
- .parent = &clk_p,
- .enable = s3c2410_clkcon_enable,
- .ctrlbit = S3C2410_CLKCON_GPIO,
- }, {
- .name = "usb-host",
- .parent = &clk_h,
- .enable = s3c2410_clkcon_enable,
- .ctrlbit = S3C2410_CLKCON_USBH,
- }, {
- .name = "usb-device",
- .parent = &clk_h,
- .enable = s3c2410_clkcon_enable,
- .ctrlbit = S3C2410_CLKCON_USBD,
- }, {
- .name = "timers",
- .parent = &clk_p,
- .enable = s3c2410_clkcon_enable,
- .ctrlbit = S3C2410_CLKCON_PWMT,
- }, {
- .name = "uart",
- .devname = "s3c2410-uart.0",
- .parent = &clk_p,
- .enable = s3c2410_clkcon_enable,
- .ctrlbit = S3C2410_CLKCON_UART0,
- }, {
- .name = "uart",
- .devname = "s3c2410-uart.1",
- .parent = &clk_p,
- .enable = s3c2410_clkcon_enable,
- .ctrlbit = S3C2410_CLKCON_UART1,
- }, {
- .name = "uart",
- .devname = "s3c2410-uart.2",
- .parent = &clk_p,
- .enable = s3c2410_clkcon_enable,
- .ctrlbit = S3C2410_CLKCON_UART2,
- }, {
- .name = "rtc",
- .parent = &clk_p,
- .enable = s3c2410_clkcon_enable,
- .ctrlbit = S3C2410_CLKCON_RTC,
- }, {
- .name = "watchdog",
- .parent = &clk_p,
- .ctrlbit = 0,
- }, {
- .name = "usb-bus-host",
- .parent = &clk_usb_bus,
- }, {
- .name = "usb-bus-gadget",
- .parent = &clk_usb_bus,
- },
+static struct clk clk_lcd = {
+ .name = "lcd",
+ .parent = &clk_h,
+ .enable = s3c2410_clkcon_enable,
+ .ctrlbit = S3C2410_CLKCON_LCDC,
+};
+
+static struct clk clk_gpio = {
+ .name = "gpio",
+ .parent = &clk_p,
+ .enable = s3c2410_clkcon_enable,
+ .ctrlbit = S3C2410_CLKCON_GPIO,
+};
+
+static struct clk clk_usb_host = {
+ .name = "usb-host",
+ .parent = &clk_h,
+ .enable = s3c2410_clkcon_enable,
+ .ctrlbit = S3C2410_CLKCON_USBH,
+};
+
+static struct clk clk_usb_device = {
+ .name = "usb-device",
+ .parent = &clk_h,
+ .enable = s3c2410_clkcon_enable,
+ .ctrlbit = S3C2410_CLKCON_USBD,
+};
+
+static struct clk clk_timers = {
+ .name = "timers",
+ .parent = &clk_p,
+ .enable = s3c2410_clkcon_enable,
+ .ctrlbit = S3C2410_CLKCON_PWMT,
+};
+
+struct clk s3c24xx_clk_uart0 = {
+ .name = "uart",
+ .devname = "s3c2410-uart.0",
+ .parent = &clk_p,
+ .enable = s3c2410_clkcon_enable,
+ .ctrlbit = S3C2410_CLKCON_UART0,
+};
+
+struct clk s3c24xx_clk_uart1 = {
+ .name = "uart",
+ .devname = "s3c2410-uart.1",
+ .parent = &clk_p,
+ .enable = s3c2410_clkcon_enable,
+ .ctrlbit = S3C2410_CLKCON_UART1,
+};
+
+struct clk s3c24xx_clk_uart2 = {
+ .name = "uart",
+ .devname = "s3c2410-uart.2",
+ .parent = &clk_p,
+ .enable = s3c2410_clkcon_enable,
+ .ctrlbit = S3C2410_CLKCON_UART2,
+};
+
+static struct clk clk_rtc = {
+ .name = "rtc",
+ .parent = &clk_p,
+ .enable = s3c2410_clkcon_enable,
+ .ctrlbit = S3C2410_CLKCON_RTC,
+};
+
+static struct clk clk_watchdog = {
+ .name = "watchdog",
+ .parent = &clk_p,
+ .ctrlbit = 0,
+};
+
+static struct clk clk_usb_bus_host = {
+ .name = "usb-bus-host",
+ .parent = &clk_usb_bus,
+};
+
+static struct clk clk_usb_bus_gadget = {
+ .name = "usb-bus-gadget",
+ .parent = &clk_usb_bus,
+};
+
+static struct clk *init_clocks[] = {
+ &clk_lcd,
+ &clk_gpio,
+ &clk_usb_host,
+ &clk_usb_device,
+ &clk_timers,
+ &s3c24xx_clk_uart0,
+ &s3c24xx_clk_uart1,
+ &s3c24xx_clk_uart2,
+ &clk_rtc,
+ &clk_watchdog,
+ &clk_usb_bus_host,
+ &clk_usb_bus_gadget,
};
/* s3c2410_baseclk_add()
@@ -195,7 +230,6 @@ int __init s3c2410_baseclk_add(void)
{
unsigned long clkslow = __raw_readl(S3C2410_CLKSLOW);
unsigned long clkcon = __raw_readl(S3C2410_CLKCON);
- struct clk *clkp;
struct clk *xtal;
int ret;
int ptr;
@@ -207,8 +241,9 @@ int __init s3c2410_baseclk_add(void)
/* register clocks from clock array */
- clkp = init_clocks;
- for (ptr = 0; ptr < ARRAY_SIZE(init_clocks); ptr++, clkp++) {
+ for (ptr = 0; ptr < ARRAY_SIZE(init_clocks); ptr++) {
+ struct clk *clkp = init_clocks[ptr];
+
/* ensure that we note the clock state */
clkp->usage = clkcon & clkp->ctrlbit ? 1 : 0;
diff --git a/arch/arm/mach-s3c24xx/clock-s3c2440.c b/arch/arm/mach-s3c24xx/clock-s3c2440.c
index 1069b5680826..aaf006d1d6dc 100644
--- a/arch/arm/mach-s3c24xx/clock-s3c2440.c
+++ b/arch/arm/mach-s3c24xx/clock-s3c2440.c
@@ -166,6 +166,9 @@ static struct clk_lookup s3c2440_clk_lookup[] = {
CLKDEV_INIT(NULL, "clk_uart_baud1", &s3c24xx_uclk),
CLKDEV_INIT(NULL, "clk_uart_baud2", &clk_p),
CLKDEV_INIT(NULL, "clk_uart_baud3", &s3c2440_clk_fclk_n),
+ CLKDEV_INIT("s3c2440-uart.0", "uart", &s3c24xx_clk_uart0),
+ CLKDEV_INIT("s3c2440-uart.1", "uart", &s3c24xx_clk_uart1),
+ CLKDEV_INIT("s3c2440-uart.2", "uart", &s3c24xx_clk_uart2),
CLKDEV_INIT("s3c2440-camif", "camera", &s3c2440_clk_cam_upll),
};
diff --git a/arch/arm/mach-shmobile/headsmp-scu.S b/arch/arm/mach-shmobile/headsmp-scu.S
index 6f9865467258..bfd920083a3b 100644
--- a/arch/arm/mach-shmobile/headsmp-scu.S
+++ b/arch/arm/mach-shmobile/headsmp-scu.S
@@ -23,7 +23,6 @@
#include <linux/init.h>
#include <asm/memory.h>
- __CPUINIT
/*
* Boot code for secondary CPUs.
*
diff --git a/arch/arm/mach-shmobile/headsmp.S b/arch/arm/mach-shmobile/headsmp.S
index 559d1ce5f57e..a9d212498987 100644
--- a/arch/arm/mach-shmobile/headsmp.S
+++ b/arch/arm/mach-shmobile/headsmp.S
@@ -14,8 +14,6 @@
#include <linux/init.h>
#include <asm/memory.h>
- __CPUINIT
-
ENTRY(shmobile_invalidate_start)
bl v7_invalidate_l1
b secondary_startup
diff --git a/arch/arm/mach-shmobile/smp-emev2.c b/arch/arm/mach-shmobile/smp-emev2.c
index 80991b35f4ac..22a05a869d25 100644
--- a/arch/arm/mach-shmobile/smp-emev2.c
+++ b/arch/arm/mach-shmobile/smp-emev2.c
@@ -30,7 +30,7 @@
#define EMEV2_SCU_BASE 0x1e000000
-static int __cpuinit emev2_boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int emev2_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
arch_send_wakeup_ipi_mask(cpumask_of(cpu_logical_map(cpu)));
return 0;
diff --git a/arch/arm/mach-shmobile/smp-r8a7779.c b/arch/arm/mach-shmobile/smp-r8a7779.c
index 526cfaae81c1..9bdf810f2a87 100644
--- a/arch/arm/mach-shmobile/smp-r8a7779.c
+++ b/arch/arm/mach-shmobile/smp-r8a7779.c
@@ -81,7 +81,7 @@ static int r8a7779_platform_cpu_kill(unsigned int cpu)
return ret ? ret : 1;
}
-static int __cpuinit r8a7779_boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int r8a7779_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
struct r8a7779_pm_ch *ch = NULL;
int ret = -EIO;
diff --git a/arch/arm/mach-shmobile/smp-sh73a0.c b/arch/arm/mach-shmobile/smp-sh73a0.c
index d613113a04bd..d5fc3ed4e315 100644
--- a/arch/arm/mach-shmobile/smp-sh73a0.c
+++ b/arch/arm/mach-shmobile/smp-sh73a0.c
@@ -48,7 +48,7 @@ void __init sh73a0_register_twd(void)
}
#endif
-static int __cpuinit sh73a0_boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int sh73a0_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
cpu = cpu_logical_map(cpu);
diff --git a/arch/arm/mach-socfpga/headsmp.S b/arch/arm/mach-socfpga/headsmp.S
index 9004bfb1756e..95c115d8b5ee 100644
--- a/arch/arm/mach-socfpga/headsmp.S
+++ b/arch/arm/mach-socfpga/headsmp.S
@@ -10,7 +10,6 @@
#include <linux/linkage.h>
#include <linux/init.h>
- __CPUINIT
.arch armv7-a
ENTRY(secondary_trampoline)
diff --git a/arch/arm/mach-socfpga/platsmp.c b/arch/arm/mach-socfpga/platsmp.c
index b51ce8c7929d..5356a72bc8ce 100644
--- a/arch/arm/mach-socfpga/platsmp.c
+++ b/arch/arm/mach-socfpga/platsmp.c
@@ -29,7 +29,7 @@
#include "core.h"
-static int __cpuinit socfpga_boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int socfpga_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
int trampoline_size = &secondary_trampoline_end - &secondary_trampoline;
diff --git a/arch/arm/mach-spear/generic.h b/arch/arm/mach-spear/generic.h
index 904f2c907b46..a99d90a4d09c 100644
--- a/arch/arm/mach-spear/generic.h
+++ b/arch/arm/mach-spear/generic.h
@@ -37,7 +37,7 @@ void __init spear13xx_l2x0_init(void);
void spear_restart(enum reboot_mode, const char *);
void spear13xx_secondary_startup(void);
-void __cpuinit spear13xx_cpu_die(unsigned int cpu);
+void spear13xx_cpu_die(unsigned int cpu);
extern struct smp_operations spear13xx_smp_ops;
diff --git a/arch/arm/mach-spear/platsmp.c b/arch/arm/mach-spear/platsmp.c
index 9c4c722c954e..5c4a19887b2b 100644
--- a/arch/arm/mach-spear/platsmp.c
+++ b/arch/arm/mach-spear/platsmp.c
@@ -24,7 +24,7 @@ static DEFINE_SPINLOCK(boot_lock);
static void __iomem *scu_base = IOMEM(VA_SCU_BASE);
-static void __cpuinit spear13xx_secondary_init(unsigned int cpu)
+static void spear13xx_secondary_init(unsigned int cpu)
{
/*
* let the primary processor know we're out of the
@@ -40,7 +40,7 @@ static void __cpuinit spear13xx_secondary_init(unsigned int cpu)
spin_unlock(&boot_lock);
}
-static int __cpuinit spear13xx_boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int spear13xx_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
unsigned long timeout;
diff --git a/arch/arm/mach-sti/Kconfig b/arch/arm/mach-sti/Kconfig
index d04e3bfe1918..835833e3c4f8 100644
--- a/arch/arm/mach-sti/Kconfig
+++ b/arch/arm/mach-sti/Kconfig
@@ -11,8 +11,9 @@ menuconfig ARCH_STI
select HAVE_SMP
select HAVE_ARM_SCU if SMP
select ARCH_REQUIRE_GPIOLIB
- select ARM_ERRATA_720789
select ARM_ERRATA_754322
+ select ARM_ERRATA_764369
+ select ARM_ERRATA_775420
select PL310_ERRATA_753970 if CACHE_PL310
select PL310_ERRATA_769419 if CACHE_PL310
help
diff --git a/arch/arm/mach-sti/platsmp.c b/arch/arm/mach-sti/platsmp.c
index 977a863468fc..dce50d983a8e 100644
--- a/arch/arm/mach-sti/platsmp.c
+++ b/arch/arm/mach-sti/platsmp.c
@@ -27,7 +27,7 @@
#include "smp.h"
-static void __cpuinit write_pen_release(int val)
+static void write_pen_release(int val)
{
pen_release = val;
smp_wmb();
@@ -37,7 +37,7 @@ static void __cpuinit write_pen_release(int val)
static DEFINE_SPINLOCK(boot_lock);
-void __cpuinit sti_secondary_init(unsigned int cpu)
+void sti_secondary_init(unsigned int cpu)
{
trace_hardirqs_off();
@@ -54,7 +54,7 @@ void __cpuinit sti_secondary_init(unsigned int cpu)
spin_unlock(&boot_lock);
}
-int __cpuinit sti_boot_secondary(unsigned int cpu, struct task_struct *idle)
+int sti_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
unsigned long timeout;
diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c
index 24db4ac428ae..97b33a2a2d75 100644
--- a/arch/arm/mach-tegra/platsmp.c
+++ b/arch/arm/mach-tegra/platsmp.c
@@ -35,7 +35,7 @@
static cpumask_t tegra_cpu_init_mask;
-static void __cpuinit tegra_secondary_init(unsigned int cpu)
+static void tegra_secondary_init(unsigned int cpu)
{
cpumask_set_cpu(cpu, &tegra_cpu_init_mask);
}
@@ -167,7 +167,7 @@ static int tegra114_boot_secondary(unsigned int cpu, struct task_struct *idle)
return ret;
}
-static int __cpuinit tegra_boot_secondary(unsigned int cpu,
+static int tegra_boot_secondary(unsigned int cpu,
struct task_struct *idle)
{
if (IS_ENABLED(CONFIG_ARCH_TEGRA_2x_SOC) && tegra_chip_id == TEGRA20)
diff --git a/arch/arm/mach-tegra/pm.c b/arch/arm/mach-tegra/pm.c
index 94e69bee3da5..261fec140c06 100644
--- a/arch/arm/mach-tegra/pm.c
+++ b/arch/arm/mach-tegra/pm.c
@@ -191,7 +191,7 @@ static const char *lp_state[TEGRA_MAX_SUSPEND_MODE] = {
[TEGRA_SUSPEND_LP0] = "LP0",
};
-static int __cpuinit tegra_suspend_enter(suspend_state_t state)
+static int tegra_suspend_enter(suspend_state_t state)
{
enum tegra_suspend_mode mode = tegra_pmc_get_suspend_mode();
diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c
index 14d90469392f..1f296e796a4f 100644
--- a/arch/arm/mach-ux500/platsmp.c
+++ b/arch/arm/mach-ux500/platsmp.c
@@ -54,7 +54,7 @@ static void __iomem *scu_base_addr(void)
static DEFINE_SPINLOCK(boot_lock);
-static void __cpuinit ux500_secondary_init(unsigned int cpu)
+static void ux500_secondary_init(unsigned int cpu)
{
/*
* let the primary processor know we're out of the
@@ -69,7 +69,7 @@ static void __cpuinit ux500_secondary_init(unsigned int cpu)
spin_unlock(&boot_lock);
}
-static int __cpuinit ux500_boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int ux500_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
unsigned long timeout;
diff --git a/arch/arm/mach-zynq/common.c b/arch/arm/mach-zynq/common.c
index 5b799c29886e..5f252569c689 100644
--- a/arch/arm/mach-zynq/common.c
+++ b/arch/arm/mach-zynq/common.c
@@ -91,7 +91,7 @@ static void __init zynq_map_io(void)
zynq_scu_map_io();
}
-static void zynq_system_reset(char mode, const char *cmd)
+static void zynq_system_reset(enum reboot_mode mode, const char *cmd)
{
zynq_slcr_system_reset();
}
diff --git a/arch/arm/mach-zynq/common.h b/arch/arm/mach-zynq/common.h
index fbbd0e21c404..3040d219570f 100644
--- a/arch/arm/mach-zynq/common.h
+++ b/arch/arm/mach-zynq/common.h
@@ -27,7 +27,7 @@ extern void secondary_startup(void);
extern char zynq_secondary_trampoline;
extern char zynq_secondary_trampoline_jump;
extern char zynq_secondary_trampoline_end;
-extern int __cpuinit zynq_cpun_start(u32 address, int cpu);
+extern int zynq_cpun_start(u32 address, int cpu);
extern struct smp_operations zynq_smp_ops __initdata;
#endif
diff --git a/arch/arm/mach-zynq/headsmp.S b/arch/arm/mach-zynq/headsmp.S
index d183cd234a9b..d4cd5f34fe5c 100644
--- a/arch/arm/mach-zynq/headsmp.S
+++ b/arch/arm/mach-zynq/headsmp.S
@@ -9,8 +9,6 @@
#include <linux/linkage.h>
#include <linux/init.h>
- __CPUINIT
-
ENTRY(zynq_secondary_trampoline)
ldr r0, [pc]
bx r0
diff --git a/arch/arm/mach-zynq/platsmp.c b/arch/arm/mach-zynq/platsmp.c
index 023f225493f2..689fbbc3d9c8 100644
--- a/arch/arm/mach-zynq/platsmp.c
+++ b/arch/arm/mach-zynq/platsmp.c
@@ -30,11 +30,11 @@
/*
* Store number of cores in the system
* Because of scu_get_core_count() must be in __init section and can't
- * be called from zynq_cpun_start() because it is in __cpuinit section.
+ * be called from zynq_cpun_start() because it is not in __init section.
*/
static int ncores;
-int __cpuinit zynq_cpun_start(u32 address, int cpu)
+int zynq_cpun_start(u32 address, int cpu)
{
u32 trampoline_code_size = &zynq_secondary_trampoline_end -
&zynq_secondary_trampoline;
@@ -92,7 +92,7 @@ int __cpuinit zynq_cpun_start(u32 address, int cpu)
}
EXPORT_SYMBOL(zynq_cpun_start);
-static int __cpuinit zynq_boot_secondary(unsigned int cpu,
+static int zynq_boot_secondary(unsigned int cpu,
struct task_struct *idle)
{
return zynq_cpun_start(virt_to_phys(secondary_startup), cpu);
diff --git a/arch/arm/mm/proc-arm1020.S b/arch/arm/mm/proc-arm1020.S
index 2bb61e703d6c..d1a2d05971e0 100644
--- a/arch/arm/mm/proc-arm1020.S
+++ b/arch/arm/mm/proc-arm1020.S
@@ -443,8 +443,6 @@ ENTRY(cpu_arm1020_set_pte_ext)
#endif /* CONFIG_MMU */
mov pc, lr
- __CPUINIT
-
.type __arm1020_setup, #function
__arm1020_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-arm1020e.S b/arch/arm/mm/proc-arm1020e.S
index 8f96aa40f510..9d89405c3d03 100644
--- a/arch/arm/mm/proc-arm1020e.S
+++ b/arch/arm/mm/proc-arm1020e.S
@@ -425,8 +425,6 @@ ENTRY(cpu_arm1020e_set_pte_ext)
#endif /* CONFIG_MMU */
mov pc, lr
- __CPUINIT
-
.type __arm1020e_setup, #function
__arm1020e_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-arm1022.S b/arch/arm/mm/proc-arm1022.S
index 8ebe4a469a22..6f01a0ae3b30 100644
--- a/arch/arm/mm/proc-arm1022.S
+++ b/arch/arm/mm/proc-arm1022.S
@@ -407,8 +407,6 @@ ENTRY(cpu_arm1022_set_pte_ext)
#endif /* CONFIG_MMU */
mov pc, lr
- __CPUINIT
-
.type __arm1022_setup, #function
__arm1022_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-arm1026.S b/arch/arm/mm/proc-arm1026.S
index 093fc7e520c3..4799a24b43e6 100644
--- a/arch/arm/mm/proc-arm1026.S
+++ b/arch/arm/mm/proc-arm1026.S
@@ -396,9 +396,6 @@ ENTRY(cpu_arm1026_set_pte_ext)
#endif /* CONFIG_MMU */
mov pc, lr
-
- __CPUINIT
-
.type __arm1026_setup, #function
__arm1026_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-arm720.S b/arch/arm/mm/proc-arm720.S
index 0ac908c7ade1..d42c37f9f5bc 100644
--- a/arch/arm/mm/proc-arm720.S
+++ b/arch/arm/mm/proc-arm720.S
@@ -116,8 +116,6 @@ ENTRY(cpu_arm720_reset)
ENDPROC(cpu_arm720_reset)
.popsection
- __CPUINIT
-
.type __arm710_setup, #function
__arm710_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-arm740.S b/arch/arm/mm/proc-arm740.S
index fde2d2a794cf..9b0ae90cbf17 100644
--- a/arch/arm/mm/proc-arm740.S
+++ b/arch/arm/mm/proc-arm740.S
@@ -60,8 +60,6 @@ ENTRY(cpu_arm740_reset)
ENDPROC(cpu_arm740_reset)
.popsection
- __CPUINIT
-
.type __arm740_setup, #function
__arm740_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-arm7tdmi.S b/arch/arm/mm/proc-arm7tdmi.S
index 6ddea3e464bd..f6cc3f63ce39 100644
--- a/arch/arm/mm/proc-arm7tdmi.S
+++ b/arch/arm/mm/proc-arm7tdmi.S
@@ -51,8 +51,6 @@ ENTRY(cpu_arm7tdmi_reset)
ENDPROC(cpu_arm7tdmi_reset)
.popsection
- __CPUINIT
-
.type __arm7tdmi_setup, #function
__arm7tdmi_setup:
mov pc, lr
diff --git a/arch/arm/mm/proc-arm920.S b/arch/arm/mm/proc-arm920.S
index 2556cf1c2da1..549557df6d57 100644
--- a/arch/arm/mm/proc-arm920.S
+++ b/arch/arm/mm/proc-arm920.S
@@ -410,8 +410,6 @@ ENTRY(cpu_arm920_do_resume)
ENDPROC(cpu_arm920_do_resume)
#endif
- __CPUINIT
-
.type __arm920_setup, #function
__arm920_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-arm922.S b/arch/arm/mm/proc-arm922.S
index 4464c49d7449..2a758b06c6f6 100644
--- a/arch/arm/mm/proc-arm922.S
+++ b/arch/arm/mm/proc-arm922.S
@@ -388,8 +388,6 @@ ENTRY(cpu_arm922_set_pte_ext)
#endif /* CONFIG_MMU */
mov pc, lr
- __CPUINIT
-
.type __arm922_setup, #function
__arm922_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-arm925.S b/arch/arm/mm/proc-arm925.S
index 281eb9b9c1d6..97448c3acf38 100644
--- a/arch/arm/mm/proc-arm925.S
+++ b/arch/arm/mm/proc-arm925.S
@@ -438,8 +438,6 @@ ENTRY(cpu_arm925_set_pte_ext)
#endif /* CONFIG_MMU */
mov pc, lr
- __CPUINIT
-
.type __arm925_setup, #function
__arm925_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-arm926.S b/arch/arm/mm/proc-arm926.S
index 344c8a548cc0..0f098f407c9f 100644
--- a/arch/arm/mm/proc-arm926.S
+++ b/arch/arm/mm/proc-arm926.S
@@ -425,8 +425,6 @@ ENTRY(cpu_arm926_do_resume)
ENDPROC(cpu_arm926_do_resume)
#endif
- __CPUINIT
-
.type __arm926_setup, #function
__arm926_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-arm940.S b/arch/arm/mm/proc-arm940.S
index 8da189d4a402..1c39a704ff6e 100644
--- a/arch/arm/mm/proc-arm940.S
+++ b/arch/arm/mm/proc-arm940.S
@@ -273,8 +273,6 @@ ENDPROC(arm940_dma_unmap_area)
@ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
define_cache_functions arm940
- __CPUINIT
-
.type __arm940_setup, #function
__arm940_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-arm946.S b/arch/arm/mm/proc-arm946.S
index f666cf34075a..0289cd905e73 100644
--- a/arch/arm/mm/proc-arm946.S
+++ b/arch/arm/mm/proc-arm946.S
@@ -326,8 +326,6 @@ ENTRY(cpu_arm946_dcache_clean_area)
mcr p15, 0, r0, c7, c10, 4 @ drain WB
mov pc, lr
- __CPUINIT
-
.type __arm946_setup, #function
__arm946_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-arm9tdmi.S b/arch/arm/mm/proc-arm9tdmi.S
index 8881391dfb9e..f51197ba754a 100644
--- a/arch/arm/mm/proc-arm9tdmi.S
+++ b/arch/arm/mm/proc-arm9tdmi.S
@@ -51,8 +51,6 @@ ENTRY(cpu_arm9tdmi_reset)
ENDPROC(cpu_arm9tdmi_reset)
.popsection
- __CPUINIT
-
.type __arm9tdmi_setup, #function
__arm9tdmi_setup:
mov pc, lr
diff --git a/arch/arm/mm/proc-fa526.S b/arch/arm/mm/proc-fa526.S
index aaeb6c127c7a..2dfc0f1d3bfd 100644
--- a/arch/arm/mm/proc-fa526.S
+++ b/arch/arm/mm/proc-fa526.S
@@ -135,8 +135,6 @@ ENTRY(cpu_fa526_set_pte_ext)
#endif
mov pc, lr
- __CPUINIT
-
.type __fa526_setup, #function
__fa526_setup:
/* On return of this routine, r0 must carry correct flags for CFG register */
diff --git a/arch/arm/mm/proc-feroceon.S b/arch/arm/mm/proc-feroceon.S
index 4106b09e0c29..d5146b98c8d1 100644
--- a/arch/arm/mm/proc-feroceon.S
+++ b/arch/arm/mm/proc-feroceon.S
@@ -514,8 +514,6 @@ ENTRY(cpu_feroceon_set_pte_ext)
#endif
mov pc, lr
- __CPUINIT
-
.type __feroceon_setup, #function
__feroceon_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-mohawk.S b/arch/arm/mm/proc-mohawk.S
index 0b60dd3d742a..40acba595731 100644
--- a/arch/arm/mm/proc-mohawk.S
+++ b/arch/arm/mm/proc-mohawk.S
@@ -383,8 +383,6 @@ ENTRY(cpu_mohawk_do_resume)
ENDPROC(cpu_mohawk_do_resume)
#endif
- __CPUINIT
-
.type __mohawk_setup, #function
__mohawk_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-sa110.S b/arch/arm/mm/proc-sa110.S
index 775d70fba937..c45319c8f1d9 100644
--- a/arch/arm/mm/proc-sa110.S
+++ b/arch/arm/mm/proc-sa110.S
@@ -159,8 +159,6 @@ ENTRY(cpu_sa110_set_pte_ext)
#endif
mov pc, lr
- __CPUINIT
-
.type __sa110_setup, #function
__sa110_setup:
mov r10, #0
diff --git a/arch/arm/mm/proc-sa1100.S b/arch/arm/mm/proc-sa1100.S
index d92dfd081429..09d241ae2dbe 100644
--- a/arch/arm/mm/proc-sa1100.S
+++ b/arch/arm/mm/proc-sa1100.S
@@ -198,8 +198,6 @@ ENTRY(cpu_sa1100_do_resume)
ENDPROC(cpu_sa1100_do_resume)
#endif
- __CPUINIT
-
.type __sa1100_setup, #function
__sa1100_setup:
mov r0, #0
diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S
index 2d1ef87328a1..1128064fddcb 100644
--- a/arch/arm/mm/proc-v6.S
+++ b/arch/arm/mm/proc-v6.S
@@ -180,8 +180,6 @@ ENDPROC(cpu_v6_do_resume)
.align
- __CPUINIT
-
/*
* __v6_setup
*
diff --git a/arch/arm/mm/proc-v7-2level.S b/arch/arm/mm/proc-v7-2level.S
index 9704097c450e..f64afb9f1bd5 100644
--- a/arch/arm/mm/proc-v7-2level.S
+++ b/arch/arm/mm/proc-v7-2level.S
@@ -160,8 +160,6 @@ ENDPROC(cpu_v7_set_pte_ext)
mcr p15, 0, \ttbr1, c2, c0, 1 @ load TTB1
.endm
- __CPUINIT
-
/* AT
* TFR EV X F I D LR S
* .EEE ..EE PUI. .T.T 4RVI ZWRS BLDP WCAM
@@ -172,5 +170,3 @@ ENDPROC(cpu_v7_set_pte_ext)
.type v7_crval, #object
v7_crval:
crval clear=0x2120c302, mmuset=0x10c03c7d, ucset=0x00c01c7c
-
- .previous
diff --git a/arch/arm/mm/proc-v7-3level.S b/arch/arm/mm/proc-v7-3level.S
index 5ffe1956c6d9..c36ac69488c8 100644
--- a/arch/arm/mm/proc-v7-3level.S
+++ b/arch/arm/mm/proc-v7-3level.S
@@ -140,8 +140,6 @@ ENDPROC(cpu_v7_set_pte_ext)
mcrr p15, 0, \ttbr0, \zero, c2 @ load TTBR0
.endm
- __CPUINIT
-
/*
* AT
* TFR EV X F IHD LR S
@@ -153,5 +151,3 @@ ENDPROC(cpu_v7_set_pte_ext)
.type v7_crval, #object
v7_crval:
crval clear=0x0120c302, mmuset=0x30c23c7d, ucset=0x00c01c7c
-
- .previous
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index 7ef3ad05df39..5c6d5a3050ea 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -167,8 +167,6 @@ ENDPROC(cpu_pj4b_do_idle)
#endif
- __CPUINIT
-
/*
* __v7_setup
*
diff --git a/arch/arm/mm/proc-xsc3.S b/arch/arm/mm/proc-xsc3.S
index e8efd83b6f25..dc1645890042 100644
--- a/arch/arm/mm/proc-xsc3.S
+++ b/arch/arm/mm/proc-xsc3.S
@@ -446,8 +446,6 @@ ENTRY(cpu_xsc3_do_resume)
ENDPROC(cpu_xsc3_do_resume)
#endif
- __CPUINIT
-
.type __xsc3_setup, #function
__xsc3_setup:
mov r0, #PSR_F_BIT|PSR_I_BIT|SVC_MODE
diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S
index e766f889bfd6..d19b1cfcad91 100644
--- a/arch/arm/mm/proc-xscale.S
+++ b/arch/arm/mm/proc-xscale.S
@@ -558,8 +558,6 @@ ENTRY(cpu_xscale_do_resume)
ENDPROC(cpu_xscale_do_resume)
#endif
- __CPUINIT
-
.type __xscale_setup, #function
__xscale_setup:
mcr p15, 0, ip, c7, c7, 0 @ invalidate I, D caches & BTB
diff --git a/arch/arm/plat-samsung/Kconfig b/arch/arm/plat-samsung/Kconfig
index 3dc5cbea86cc..a5b5ff6e68d2 100644
--- a/arch/arm/plat-samsung/Kconfig
+++ b/arch/arm/plat-samsung/Kconfig
@@ -29,6 +29,13 @@ config PLAT_S5P
help
Base platform code for Samsung's S5P series SoC.
+config SAMSUNG_PM
+ bool
+ depends on PM && (PLAT_S3C24XX || ARCH_S3C64XX || ARCH_S5P64X0 || S5P_PM)
+ default y
+ help
+ Base platform power management code for samsung code
+
if PLAT_SAMSUNG
# boot configurations
diff --git a/arch/arm/plat-samsung/Makefile b/arch/arm/plat-samsung/Makefile
index 98d07d8fc7a7..199bbe304d02 100644
--- a/arch/arm/plat-samsung/Makefile
+++ b/arch/arm/plat-samsung/Makefile
@@ -51,7 +51,7 @@ obj-$(CONFIG_SAMSUNG_DMADEV) += dma-ops.o
# PM support
-obj-$(CONFIG_PM) += pm.o
+obj-$(CONFIG_SAMSUNG_PM) += pm.o
obj-$(CONFIG_SAMSUNG_PM_GPIO) += pm-gpio.o
obj-$(CONFIG_SAMSUNG_PM_CHECK) += pm-check.o
diff --git a/arch/arm/plat-samsung/include/plat/clock.h b/arch/arm/plat-samsung/include/plat/clock.h
index a62753dc15ba..df45d6edc98d 100644
--- a/arch/arm/plat-samsung/include/plat/clock.h
+++ b/arch/arm/plat-samsung/include/plat/clock.h
@@ -83,6 +83,11 @@ extern struct clk clk_ext;
extern struct clksrc_clk clk_epllref;
extern struct clksrc_clk clk_esysclk;
+/* S3C24XX UART clocks */
+extern struct clk s3c24xx_clk_uart0;
+extern struct clk s3c24xx_clk_uart1;
+extern struct clk s3c24xx_clk_uart2;
+
/* S3C64XX specific clocks */
extern struct clk clk_h2;
extern struct clk clk_27m;
diff --git a/arch/arm/plat-samsung/include/plat/pm.h b/arch/arm/plat-samsung/include/plat/pm.h
index 5d47ca35cabd..6bc1a8f471e3 100644
--- a/arch/arm/plat-samsung/include/plat/pm.h
+++ b/arch/arm/plat-samsung/include/plat/pm.h
@@ -19,7 +19,7 @@
struct device;
-#ifdef CONFIG_PM
+#ifdef CONFIG_SAMSUNG_PM
extern __init int s3c_pm_init(void);
extern __init int s3c64xx_pm_init(void);
@@ -58,8 +58,6 @@ extern unsigned char pm_uart_udivslot; /* true to save UART UDIVSLOT */
/* from sleep.S */
-extern void s3c_cpu_resume(void);
-
extern int s3c2410_cpu_suspend(unsigned long);
/* sleep save info */
@@ -106,12 +104,14 @@ extern void s3c_pm_do_save(struct sleep_save *ptr, int count);
extern void s3c_pm_do_restore(struct sleep_save *ptr, int count);
extern void s3c_pm_do_restore_core(struct sleep_save *ptr, int count);
-#ifdef CONFIG_PM
+#ifdef CONFIG_SAMSUNG_PM
extern int s3c_irq_wake(struct irq_data *data, unsigned int state);
extern int s3c_irqext_wake(struct irq_data *data, unsigned int state);
+extern void s3c_cpu_resume(void);
#else
#define s3c_irq_wake NULL
#define s3c_irqext_wake NULL
+#define s3c_cpu_resume NULL
#endif
/* PM debug functions */
diff --git a/arch/arm/plat-samsung/pm.c b/arch/arm/plat-samsung/pm.c
index ea3613642451..d0c23010b693 100644
--- a/arch/arm/plat-samsung/pm.c
+++ b/arch/arm/plat-samsung/pm.c
@@ -80,7 +80,7 @@ unsigned char pm_uart_udivslot;
#ifdef CONFIG_SAMSUNG_PM_DEBUG
-static struct pm_uart_save uart_save[CONFIG_SERIAL_SAMSUNG_UARTS];
+static struct pm_uart_save uart_save;
static void s3c_pm_save_uart(unsigned int uart, struct pm_uart_save *save)
{
@@ -101,11 +101,7 @@ static void s3c_pm_save_uart(unsigned int uart, struct pm_uart_save *save)
static void s3c_pm_save_uarts(void)
{
- struct pm_uart_save *save = uart_save;
- unsigned int uart;
-
- for (uart = 0; uart < CONFIG_SERIAL_SAMSUNG_UARTS; uart++, save++)
- s3c_pm_save_uart(uart, save);
+ s3c_pm_save_uart(CONFIG_DEBUG_S3C_UART, &uart_save);
}
static void s3c_pm_restore_uart(unsigned int uart, struct pm_uart_save *save)
@@ -126,11 +122,7 @@ static void s3c_pm_restore_uart(unsigned int uart, struct pm_uart_save *save)
static void s3c_pm_restore_uarts(void)
{
- struct pm_uart_save *save = uart_save;
- unsigned int uart;
-
- for (uart = 0; uart < CONFIG_SERIAL_SAMSUNG_UARTS; uart++, save++)
- s3c_pm_restore_uart(uart, save);
+ s3c_pm_restore_uart(CONFIG_DEBUG_S3C_UART, &uart_save);
}
#else
static void s3c_pm_save_uarts(void) { }
diff --git a/arch/arm/plat-versatile/platsmp.c b/arch/arm/plat-versatile/platsmp.c
index 1e1b2d769748..39895d892c3b 100644
--- a/arch/arm/plat-versatile/platsmp.c
+++ b/arch/arm/plat-versatile/platsmp.c
@@ -23,7 +23,7 @@
* observers, irrespective of whether they're taking part in coherency
* or not. This is necessary for the hotplug code to work reliably.
*/
-static void __cpuinit write_pen_release(int val)
+static void write_pen_release(int val)
{
pen_release = val;
smp_wmb();
@@ -33,7 +33,7 @@ static void __cpuinit write_pen_release(int val)
static DEFINE_SPINLOCK(boot_lock);
-void __cpuinit versatile_secondary_init(unsigned int cpu)
+void versatile_secondary_init(unsigned int cpu)
{
/*
* let the primary processor know we're out of the
@@ -48,7 +48,7 @@ void __cpuinit versatile_secondary_init(unsigned int cpu)
spin_unlock(&boot_lock);
}
-int __cpuinit versatile_boot_secondary(unsigned int cpu, struct task_struct *idle)
+int versatile_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
unsigned long timeout;
diff --git a/arch/arm64/include/asm/arch_timer.h b/arch/arm64/include/asm/arch_timer.h
index d56ed11ba9a3..98abd476992d 100644
--- a/arch/arm64/include/asm/arch_timer.h
+++ b/arch/arm64/include/asm/arch_timer.h
@@ -97,7 +97,7 @@ static inline u32 arch_timer_get_cntfrq(void)
return val;
}
-static inline void __cpuinit arch_counter_set_user_access(void)
+static inline void arch_counter_set_user_access(void)
{
u32 cntkctl;
diff --git a/arch/arm64/include/asm/debug-monitors.h b/arch/arm64/include/asm/debug-monitors.h
index ef8235c68c09..a2232d07be9d 100644
--- a/arch/arm64/include/asm/debug-monitors.h
+++ b/arch/arm64/include/asm/debug-monitors.h
@@ -83,14 +83,7 @@ static inline int reinstall_suspended_bps(struct pt_regs *regs)
}
#endif
-#ifdef CONFIG_COMPAT
int aarch32_break_handler(struct pt_regs *regs);
-#else
-static int aarch32_break_handler(struct pt_regs *regs)
-{
- return -EFAULT;
-}
-#endif
#endif /* __ASSEMBLY */
#endif /* __KERNEL__ */
diff --git a/arch/arm64/include/asm/system_misc.h b/arch/arm64/include/asm/system_misc.h
index a6e1750369ef..7a18fabbe0f6 100644
--- a/arch/arm64/include/asm/system_misc.h
+++ b/arch/arm64/include/asm/system_misc.h
@@ -23,6 +23,7 @@
#include <linux/compiler.h>
#include <linux/linkage.h>
#include <linux/irqflags.h>
+#include <linux/reboot.h>
struct pt_regs;
@@ -41,7 +42,7 @@ extern void show_pte(struct mm_struct *mm, unsigned long addr);
extern void __show_regs(struct pt_regs *);
void soft_restart(unsigned long);
-extern void (*arm_pm_restart)(char str, const char *cmd);
+extern void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
#define UDBG_UNDEFINED (1 << 0)
#define UDBG_SYSCALL (1 << 1)
diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h
index 3659e460071d..23a3c4791d86 100644
--- a/arch/arm64/include/asm/thread_info.h
+++ b/arch/arm64/include/asm/thread_info.h
@@ -24,10 +24,10 @@
#include <linux/compiler.h>
#ifndef CONFIG_ARM64_64K_PAGES
-#define THREAD_SIZE_ORDER 1
+#define THREAD_SIZE_ORDER 2
#endif
-#define THREAD_SIZE 8192
+#define THREAD_SIZE 16384
#define THREAD_START_SP (THREAD_SIZE - 16)
#ifndef __ASSEMBLY__
diff --git a/arch/arm64/include/asm/virt.h b/arch/arm64/include/asm/virt.h
index 439827271e3d..26e310c54344 100644
--- a/arch/arm64/include/asm/virt.h
+++ b/arch/arm64/include/asm/virt.h
@@ -21,6 +21,7 @@
#define BOOT_CPU_MODE_EL2 (0x0e12b007)
#ifndef __ASSEMBLY__
+#include <asm/cacheflush.h>
/*
* __boot_cpu_mode records what mode CPUs were booted in.
@@ -36,9 +37,20 @@ extern u32 __boot_cpu_mode[2];
void __hyp_set_vectors(phys_addr_t phys_vector_base);
phys_addr_t __hyp_get_vectors(void);
+static inline void sync_boot_mode(void)
+{
+ /*
+ * As secondaries write to __boot_cpu_mode with caches disabled, we
+ * must flush the corresponding cache entries to ensure the visibility
+ * of their writes.
+ */
+ __flush_dcache_area(__boot_cpu_mode, sizeof(__boot_cpu_mode));
+}
+
/* Reports the availability of HYP mode */
static inline bool is_hyp_mode_available(void)
{
+ sync_boot_mode();
return (__boot_cpu_mode[0] == BOOT_CPU_MODE_EL2 &&
__boot_cpu_mode[1] == BOOT_CPU_MODE_EL2);
}
@@ -46,6 +58,7 @@ static inline bool is_hyp_mode_available(void)
/* Check if the bootloader has booted CPUs in different modes */
static inline bool is_hyp_mode_mismatched(void)
{
+ sync_boot_mode();
return __boot_cpu_mode[0] != __boot_cpu_mode[1];
}
diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c
index 08018e3df580..cbfacf7fb438 100644
--- a/arch/arm64/kernel/debug-monitors.c
+++ b/arch/arm64/kernel/debug-monitors.c
@@ -141,7 +141,7 @@ static void clear_os_lock(void *unused)
isb();
}
-static int __cpuinit os_lock_notify(struct notifier_block *self,
+static int os_lock_notify(struct notifier_block *self,
unsigned long action, void *data)
{
int cpu = (unsigned long)data;
@@ -150,11 +150,11 @@ static int __cpuinit os_lock_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata os_lock_nb = {
+static struct notifier_block os_lock_nb = {
.notifier_call = os_lock_notify,
};
-static int __cpuinit debug_monitors_init(void)
+static int debug_monitors_init(void)
{
/* Clear the OS lock. */
smp_call_function(clear_os_lock, NULL, 1);
diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
index 1d1314280a03..6ad781b21c08 100644
--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -121,7 +121,7 @@
.macro get_thread_info, rd
mov \rd, sp
- and \rd, \rd, #~((1 << 13) - 1) // top of 8K stack
+ and \rd, \rd, #~(THREAD_SIZE - 1) // top of stack
.endm
/*
diff --git a/arch/arm64/kernel/hw_breakpoint.c b/arch/arm64/kernel/hw_breakpoint.c
index 5ab825c59db9..329218ca9ffb 100644
--- a/arch/arm64/kernel/hw_breakpoint.c
+++ b/arch/arm64/kernel/hw_breakpoint.c
@@ -821,7 +821,7 @@ static void reset_ctrl_regs(void *unused)
}
}
-static int __cpuinit hw_breakpoint_reset_notify(struct notifier_block *self,
+static int hw_breakpoint_reset_notify(struct notifier_block *self,
unsigned long action,
void *hcpu)
{
@@ -831,7 +831,7 @@ static int __cpuinit hw_breakpoint_reset_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata hw_breakpoint_reset_nb = {
+static struct notifier_block hw_breakpoint_reset_nb = {
.notifier_call = hw_breakpoint_reset_notify,
};
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
index 46f02c3b5015..57fb55c44c90 100644
--- a/arch/arm64/kernel/process.c
+++ b/arch/arm64/kernel/process.c
@@ -81,7 +81,7 @@ void soft_restart(unsigned long addr)
void (*pm_power_off)(void);
EXPORT_SYMBOL_GPL(pm_power_off);
-void (*arm_pm_restart)(char str, const char *cmd);
+void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
EXPORT_SYMBOL_GPL(arm_pm_restart);
void arch_cpu_idle_prepare(void)
@@ -132,7 +132,7 @@ void machine_restart(char *cmd)
/* Now call the architecture specific reboot code. */
if (arm_pm_restart)
- arm_pm_restart('h', cmd);
+ arm_pm_restart(reboot_mode, cmd);
/*
* Whoops - the architecture was unable to reboot.
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index 5d54e3717bf8..fee5cce83450 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -71,7 +71,7 @@ static DEFINE_RAW_SPINLOCK(boot_lock);
* in coherency or not. This is necessary for the hotplug code to work
* reliably.
*/
-static void __cpuinit write_pen_release(u64 val)
+static void write_pen_release(u64 val)
{
void *start = (void *)&secondary_holding_pen_release;
unsigned long size = sizeof(secondary_holding_pen_release);
@@ -84,7 +84,7 @@ static void __cpuinit write_pen_release(u64 val)
* Boot a secondary CPU, and assign it the specified idle task.
* This also gives us the initial stack to use for this CPU.
*/
-static int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int boot_secondary(unsigned int cpu, struct task_struct *idle)
{
unsigned long timeout;
@@ -122,7 +122,7 @@ static int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
static DECLARE_COMPLETION(cpu_running);
-int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *idle)
+int __cpu_up(unsigned int cpu, struct task_struct *idle)
{
int ret;
@@ -162,7 +162,7 @@ int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *idle)
* This is the secondary CPU boot entry. We're using this CPUs
* idle thread stack, but a set of temporary page tables.
*/
-asmlinkage void __cpuinit secondary_start_kernel(void)
+asmlinkage void secondary_start_kernel(void)
{
struct mm_struct *mm = &init_mm;
unsigned int cpu = smp_processor_id();
@@ -200,13 +200,6 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
raw_spin_unlock(&boot_lock);
/*
- * Enable local interrupts.
- */
- notify_cpu_starting(cpu);
- local_irq_enable();
- local_fiq_enable();
-
- /*
* OK, now it's safe to let the boot CPU continue. Wait for
* the CPU migration code to notice that the CPU is online
* before we continue.
@@ -215,6 +208,14 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
complete(&cpu_running);
/*
+ * Enable GIC and timers.
+ */
+ notify_cpu_starting(cpu);
+
+ local_irq_enable();
+ local_fiq_enable();
+
+ /*
* OK, it's off to the idle thread for us
*/
cpu_startup_entry(CPUHP_ONLINE);
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index 0ecac8980aae..6c8ba25bf6bb 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -152,25 +152,8 @@ void do_bad_area(unsigned long addr, unsigned int esr, struct pt_regs *regs)
#define ESR_CM (1 << 8)
#define ESR_LNX_EXEC (1 << 24)
-/*
- * Check that the permissions on the VMA allow for the fault which occurred.
- * If we encountered a write fault, we must have write permission, otherwise
- * we allow any permission.
- */
-static inline bool access_error(unsigned int esr, struct vm_area_struct *vma)
-{
- unsigned int mask = VM_READ | VM_WRITE | VM_EXEC;
-
- if (esr & ESR_WRITE)
- mask = VM_WRITE;
- if (esr & ESR_LNX_EXEC)
- mask = VM_EXEC;
-
- return vma->vm_flags & mask ? false : true;
-}
-
static int __do_page_fault(struct mm_struct *mm, unsigned long addr,
- unsigned int esr, unsigned int flags,
+ unsigned int mm_flags, unsigned long vm_flags,
struct task_struct *tsk)
{
struct vm_area_struct *vma;
@@ -188,12 +171,17 @@ static int __do_page_fault(struct mm_struct *mm, unsigned long addr,
* it.
*/
good_area:
- if (access_error(esr, vma)) {
+ /*
+ * Check that the permissions on the VMA allow for the fault which
+ * occurred. If we encountered a write or exec fault, we must have
+ * appropriate permissions, otherwise we allow any permission.
+ */
+ if (!(vma->vm_flags & vm_flags)) {
fault = VM_FAULT_BADACCESS;
goto out;
}
- return handle_mm_fault(mm, vma, addr & PAGE_MASK, flags);
+ return handle_mm_fault(mm, vma, addr & PAGE_MASK, mm_flags);
check_stack:
if (vma->vm_flags & VM_GROWSDOWN && !expand_stack(vma, addr))
@@ -208,9 +196,15 @@ static int __kprobes do_page_fault(unsigned long addr, unsigned int esr,
struct task_struct *tsk;
struct mm_struct *mm;
int fault, sig, code;
- bool write = (esr & ESR_WRITE) && !(esr & ESR_CM);
- unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE |
- (write ? FAULT_FLAG_WRITE : 0);
+ unsigned long vm_flags = VM_READ | VM_WRITE | VM_EXEC;
+ unsigned int mm_flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+
+ if (esr & ESR_LNX_EXEC) {
+ vm_flags = VM_EXEC;
+ } else if ((esr & ESR_WRITE) && !(esr & ESR_CM)) {
+ vm_flags = VM_WRITE;
+ mm_flags |= FAULT_FLAG_WRITE;
+ }
tsk = current;
mm = tsk->mm;
@@ -248,7 +242,7 @@ retry:
#endif
}
- fault = __do_page_fault(mm, addr, esr, flags, tsk);
+ fault = __do_page_fault(mm, addr, mm_flags, vm_flags, tsk);
/*
* If we need to retry but a fatal signal is pending, handle the
@@ -265,7 +259,7 @@ retry:
*/
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, addr);
- if (flags & FAULT_FLAG_ALLOW_RETRY) {
+ if (mm_flags & FAULT_FLAG_ALLOW_RETRY) {
if (fault & VM_FAULT_MAJOR) {
tsk->maj_flt++;
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, regs,
@@ -280,7 +274,7 @@ retry:
* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk of
* starvation.
*/
- flags &= ~FAULT_FLAG_ALLOW_RETRY;
+ mm_flags &= ~FAULT_FLAG_ALLOW_RETRY;
goto retry;
}
}
diff --git a/arch/blackfin/kernel/perf_event.c b/arch/blackfin/kernel/perf_event.c
index e47d19ae3e06..974e55496db3 100644
--- a/arch/blackfin/kernel/perf_event.c
+++ b/arch/blackfin/kernel/perf_event.c
@@ -468,7 +468,7 @@ static void bfin_pmu_setup(int cpu)
memset(cpuhw, 0, sizeof(struct cpu_hw_events));
}
-static int __cpuinit
+static int
bfin_pmu_notifier(struct notifier_block *self, unsigned long action, void *hcpu)
{
unsigned int cpu = (long)hcpu;
diff --git a/arch/blackfin/kernel/setup.c b/arch/blackfin/kernel/setup.c
index 107b306b06f1..19ad0637e8ff 100644
--- a/arch/blackfin/kernel/setup.c
+++ b/arch/blackfin/kernel/setup.c
@@ -99,7 +99,7 @@ void __init generate_cplb_tables(void)
}
#endif
-void __cpuinit bfin_setup_caches(unsigned int cpu)
+void bfin_setup_caches(unsigned int cpu)
{
#ifdef CONFIG_BFIN_ICACHE
bfin_icache_init(icplb_tbl[cpu]);
@@ -165,7 +165,7 @@ void __cpuinit bfin_setup_caches(unsigned int cpu)
#endif
}
-void __cpuinit bfin_setup_cpudata(unsigned int cpu)
+void bfin_setup_cpudata(unsigned int cpu)
{
struct blackfin_cpudata *cpudata = &per_cpu(cpu_data, cpu);
diff --git a/arch/blackfin/mach-bf561/smp.c b/arch/blackfin/mach-bf561/smp.c
index c77a23bc9de3..11789beca75a 100644
--- a/arch/blackfin/mach-bf561/smp.c
+++ b/arch/blackfin/mach-bf561/smp.c
@@ -48,7 +48,7 @@ int __init setup_profiling_timer(unsigned int multiplier) /* not supported */
return -EINVAL;
}
-void __cpuinit platform_secondary_init(unsigned int cpu)
+void platform_secondary_init(unsigned int cpu)
{
/* Clone setup for peripheral interrupt sources from CoreA. */
bfin_write_SICB_IMASK0(bfin_read_SIC_IMASK0());
@@ -73,7 +73,7 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
spin_unlock(&boot_lock);
}
-int __cpuinit platform_boot_secondary(unsigned int cpu, struct task_struct *idle)
+int platform_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
unsigned long timeout;
@@ -154,7 +154,7 @@ void platform_clear_ipi(unsigned int cpu, int irq)
* Setup core B's local core timer.
* In SMP, core timer is used for clock event device.
*/
-void __cpuinit bfin_local_timer_setup(void)
+void bfin_local_timer_setup(void)
{
#if defined(CONFIG_TICKSOURCE_CORETMR)
struct irq_data *data = irq_get_irq_data(IRQ_CORETMR);
diff --git a/arch/blackfin/mach-common/cache-c.c b/arch/blackfin/mach-common/cache-c.c
index a60a24f5035d..0e1e451fd7d8 100644
--- a/arch/blackfin/mach-common/cache-c.c
+++ b/arch/blackfin/mach-common/cache-c.c
@@ -52,7 +52,7 @@ bfin_cache_init(struct cplb_entry *cplb_tbl, unsigned long cplb_addr,
}
#ifdef CONFIG_BFIN_ICACHE
-void __cpuinit bfin_icache_init(struct cplb_entry *icplb_tbl)
+void bfin_icache_init(struct cplb_entry *icplb_tbl)
{
bfin_cache_init(icplb_tbl, ICPLB_ADDR0, ICPLB_DATA0, IMEM_CONTROL,
(IMC | ENICPLB));
@@ -60,7 +60,7 @@ void __cpuinit bfin_icache_init(struct cplb_entry *icplb_tbl)
#endif
#ifdef CONFIG_BFIN_DCACHE
-void __cpuinit bfin_dcache_init(struct cplb_entry *dcplb_tbl)
+void bfin_dcache_init(struct cplb_entry *dcplb_tbl)
{
/*
* Anomaly notes:
diff --git a/arch/blackfin/mach-common/ints-priority.c b/arch/blackfin/mach-common/ints-priority.c
index 6c0c6816a51a..d143fd8d2bc5 100644
--- a/arch/blackfin/mach-common/ints-priority.c
+++ b/arch/blackfin/mach-common/ints-priority.c
@@ -1281,7 +1281,7 @@ static struct irq_chip bfin_gpio_irqchip = {
.irq_set_wake = bfin_gpio_set_wake,
};
-void __cpuinit init_exception_vectors(void)
+void init_exception_vectors(void)
{
/* cannot program in software:
* evt0 - emulation (jtag)
diff --git a/arch/blackfin/mach-common/smp.c b/arch/blackfin/mach-common/smp.c
index 961d8392e5e3..82f301c117a5 100644
--- a/arch/blackfin/mach-common/smp.c
+++ b/arch/blackfin/mach-common/smp.c
@@ -46,7 +46,7 @@ struct corelock_slot corelock __attribute__ ((__section__(".l2.bss")));
unsigned long blackfin_iflush_l1_entry[NR_CPUS];
#endif
-struct blackfin_initial_pda __cpuinitdata initial_pda_coreb;
+struct blackfin_initial_pda initial_pda_coreb;
enum ipi_message_type {
BFIN_IPI_NONE,
@@ -147,7 +147,7 @@ static irqreturn_t ipi_handler_int1(int irq, void *dev_instance)
platform_clear_ipi(cpu, IRQ_SUPPLE_1);
bfin_ipi_data = &__get_cpu_var(bfin_ipi);
- while ((pending = xchg(&bfin_ipi_data->bits, 0)) != 0) {
+ while ((pending = atomic_xchg(&bfin_ipi_data->bits, 0)) != 0) {
msg = 0;
do {
msg = find_next_bit(&pending, BITS_PER_LONG, msg + 1);
@@ -182,8 +182,8 @@ static void bfin_ipi_init(void)
struct ipi_data *bfin_ipi_data;
for_each_possible_cpu(cpu) {
bfin_ipi_data = &per_cpu(bfin_ipi, cpu);
- bfin_ipi_data->bits = 0;
- bfin_ipi_data->count = 0;
+ atomic_set(&bfin_ipi_data->bits, 0);
+ atomic_set(&bfin_ipi_data->count, 0);
}
}
@@ -246,7 +246,7 @@ void smp_send_stop(void)
return;
}
-int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *idle)
+int __cpu_up(unsigned int cpu, struct task_struct *idle)
{
int ret;
@@ -259,7 +259,7 @@ int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *idle)
return ret;
}
-static void __cpuinit setup_secondary(unsigned int cpu)
+static void setup_secondary(unsigned int cpu)
{
unsigned long ilat;
@@ -277,7 +277,7 @@ static void __cpuinit setup_secondary(unsigned int cpu)
IMASK_IVG10 | IMASK_IVG9 | IMASK_IVG8 | IMASK_IVG7 | IMASK_IVGHW;
}
-void __cpuinit secondary_start_kernel(void)
+void secondary_start_kernel(void)
{
unsigned int cpu = smp_processor_id();
struct mm_struct *mm = &init_mm;
@@ -402,7 +402,7 @@ EXPORT_SYMBOL(resync_core_dcache);
#endif
#ifdef CONFIG_HOTPLUG_CPU
-int __cpuexit __cpu_disable(void)
+int __cpu_disable(void)
{
unsigned int cpu = smp_processor_id();
@@ -415,7 +415,7 @@ int __cpuexit __cpu_disable(void)
static DECLARE_COMPLETION(cpu_killed);
-int __cpuexit __cpu_die(unsigned int cpu)
+int __cpu_die(unsigned int cpu)
{
return wait_for_completion_timeout(&cpu_killed, 5000);
}
diff --git a/arch/cris/arch-v32/kernel/smp.c b/arch/cris/arch-v32/kernel/smp.c
index cdd12028de0c..fe8e6039db2a 100644
--- a/arch/cris/arch-v32/kernel/smp.c
+++ b/arch/cris/arch-v32/kernel/smp.c
@@ -197,7 +197,7 @@ int setup_profiling_timer(unsigned int multiplier)
*/
unsigned long cache_decay_ticks = 1;
-int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
+int __cpu_up(unsigned int cpu, struct task_struct *tidle)
{
smp_boot_one_cpu(cpu, tidle);
return cpu_online(cpu) ? 0 : -ENOSYS;
diff --git a/arch/frv/kernel/setup.c b/arch/frv/kernel/setup.c
index ae3a6706419b..9f3a7a62d787 100644
--- a/arch/frv/kernel/setup.c
+++ b/arch/frv/kernel/setup.c
@@ -709,7 +709,7 @@ static void __init reserve_dma_coherent(void)
/*
* calibrate the delay loop
*/
-void __cpuinit calibrate_delay(void)
+void calibrate_delay(void)
{
loops_per_jiffy = __delay_loops_MHz * (1000000 / HZ);
diff --git a/arch/hexagon/kernel/setup.c b/arch/hexagon/kernel/setup.c
index bfe13311d70d..29d1f1b00016 100644
--- a/arch/hexagon/kernel/setup.c
+++ b/arch/hexagon/kernel/setup.c
@@ -41,7 +41,7 @@ static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE;
int on_simulator;
-void __cpuinit calibrate_delay(void)
+void calibrate_delay(void)
{
loops_per_jiffy = thread_freq_mhz * 1000000 / HZ;
}
diff --git a/arch/hexagon/kernel/smp.c b/arch/hexagon/kernel/smp.c
index 0e364ca43198..9faaa940452b 100644
--- a/arch/hexagon/kernel/smp.c
+++ b/arch/hexagon/kernel/smp.c
@@ -146,7 +146,7 @@ void __init smp_prepare_boot_cpu(void)
* to point to current thread info
*/
-void __cpuinit start_secondary(void)
+void start_secondary(void)
{
unsigned int cpu;
unsigned long thread_ptr;
@@ -194,7 +194,7 @@ void __cpuinit start_secondary(void)
* maintains control until "cpu_online(cpu)" is set.
*/
-int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *idle)
+int __cpu_up(unsigned int cpu, struct task_struct *idle)
{
struct thread_info *thread = (struct thread_info *)idle->stack;
void *stack_start;
diff --git a/arch/m32r/kernel/smpboot.c b/arch/m32r/kernel/smpboot.c
index 0ac558adc605..bb21f4f63170 100644
--- a/arch/m32r/kernel/smpboot.c
+++ b/arch/m32r/kernel/smpboot.c
@@ -343,7 +343,7 @@ static void __init do_boot_cpu(int phys_id)
}
}
-int __cpuinit __cpu_up(unsigned int cpu_id, struct task_struct *tidle)
+int __cpu_up(unsigned int cpu_id, struct task_struct *tidle)
{
int timeout;
diff --git a/arch/metag/kernel/perf/perf_event.c b/arch/metag/kernel/perf/perf_event.c
index 5b18888ee364..5cc4d4dcf3cf 100644
--- a/arch/metag/kernel/perf/perf_event.c
+++ b/arch/metag/kernel/perf/perf_event.c
@@ -813,8 +813,8 @@ static struct metag_pmu _metag_pmu = {
};
/* PMU CPU hotplug notifier */
-static int __cpuinit metag_pmu_cpu_notify(struct notifier_block *b,
- unsigned long action, void *hcpu)
+static int metag_pmu_cpu_notify(struct notifier_block *b, unsigned long action,
+ void *hcpu)
{
unsigned int cpu = (unsigned int)hcpu;
struct cpu_hw_events *cpuc = &per_cpu(cpu_hw_events, cpu);
@@ -828,7 +828,7 @@ static int __cpuinit metag_pmu_cpu_notify(struct notifier_block *b,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata metag_pmu_notifier = {
+static struct notifier_block metag_pmu_notifier = {
.notifier_call = metag_pmu_cpu_notify,
};
diff --git a/arch/metag/kernel/smp.c b/arch/metag/kernel/smp.c
index e413875cf6d2..7c0113142981 100644
--- a/arch/metag/kernel/smp.c
+++ b/arch/metag/kernel/smp.c
@@ -68,7 +68,7 @@ static DECLARE_COMPLETION(cpu_running);
/*
* "thread" is assumed to be a valid Meta hardware thread ID.
*/
-int __cpuinit boot_secondary(unsigned int thread, struct task_struct *idle)
+int boot_secondary(unsigned int thread, struct task_struct *idle)
{
u32 val;
@@ -118,11 +118,9 @@ int __cpuinit boot_secondary(unsigned int thread, struct task_struct *idle)
* If the cache partition has changed, prints a message to the log describing
* those changes.
*/
-static __cpuinit void describe_cachepart_change(unsigned int thread,
- const char *label,
- unsigned int sz,
- unsigned int old,
- unsigned int new)
+static void describe_cachepart_change(unsigned int thread, const char *label,
+ unsigned int sz, unsigned int old,
+ unsigned int new)
{
unsigned int lor1, land1, gor1, gand1;
unsigned int lor2, land2, gor2, gand2;
@@ -170,7 +168,7 @@ static __cpuinit void describe_cachepart_change(unsigned int thread,
* Ensures that coherency is enabled and that the threads share the same cache
* partitions.
*/
-static __cpuinit void setup_smp_cache(unsigned int thread)
+static void setup_smp_cache(unsigned int thread)
{
unsigned int this_thread, lflags;
unsigned int dcsz, dcpart_this, dcpart_old, dcpart_new;
@@ -215,7 +213,7 @@ static __cpuinit void setup_smp_cache(unsigned int thread)
icpart_old, icpart_new);
}
-int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *idle)
+int __cpu_up(unsigned int cpu, struct task_struct *idle)
{
unsigned int thread = cpu_2_hwthread_id[cpu];
int ret;
@@ -268,7 +266,7 @@ static DECLARE_COMPLETION(cpu_killed);
/*
* __cpu_disable runs on the processor to be shutdown.
*/
-int __cpuexit __cpu_disable(void)
+int __cpu_disable(void)
{
unsigned int cpu = smp_processor_id();
@@ -299,7 +297,7 @@ int __cpuexit __cpu_disable(void)
* called on the thread which is asking for a CPU to be shutdown -
* waits until shutdown has completed, or it is timed out.
*/
-void __cpuexit __cpu_die(unsigned int cpu)
+void __cpu_die(unsigned int cpu)
{
if (!wait_for_completion_timeout(&cpu_killed, msecs_to_jiffies(1)))
pr_err("CPU%u: unable to kill\n", cpu);
@@ -311,7 +309,7 @@ void __cpuexit __cpu_die(unsigned int cpu)
* Note that we do not return from this function. If this cpu is
* brought online again it will need to run secondary_startup().
*/
-void __cpuexit cpu_die(void)
+void cpu_die(void)
{
local_irq_disable();
idle_task_exit();
@@ -326,7 +324,7 @@ void __cpuexit cpu_die(void)
* Called by both boot and secondaries to move global data into
* per-processor storage.
*/
-void __cpuinit smp_store_cpu_info(unsigned int cpuid)
+void smp_store_cpu_info(unsigned int cpuid)
{
struct cpuinfo_metag *cpu_info = &per_cpu(cpu_data, cpuid);
diff --git a/arch/metag/kernel/traps.c b/arch/metag/kernel/traps.c
index c00ade0228ef..25f9d1c2ffec 100644
--- a/arch/metag/kernel/traps.c
+++ b/arch/metag/kernel/traps.c
@@ -812,7 +812,7 @@ static void set_trigger_mask(unsigned int mask)
}
#endif
-void __cpuinit per_cpu_trap_init(unsigned long cpu)
+void per_cpu_trap_init(unsigned long cpu)
{
TBIRES int_context;
unsigned int thread = cpu_2_hwthread_id[cpu];
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 4758a8fd3e99..c3abed332301 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -1702,6 +1702,7 @@ endchoice
config KVM_GUEST
bool "KVM Guest Kernel"
+ depends on BROKEN_ON_SMP
help
Select this option if building a guest kernel for KVM (Trap & Emulate) mode
diff --git a/arch/mips/ath79/setup.c b/arch/mips/ath79/setup.c
index 8be4e856b8b8..80f4ecd42b0d 100644
--- a/arch/mips/ath79/setup.c
+++ b/arch/mips/ath79/setup.c
@@ -182,7 +182,7 @@ const char *get_system_type(void)
return ath79_sys_type;
}
-unsigned int __cpuinit get_c0_compare_int(void)
+unsigned int get_c0_compare_int(void)
{
return CP0_LEGACY_COMPARE_IRQ;
}
diff --git a/arch/mips/cavium-octeon/octeon-irq.c b/arch/mips/cavium-octeon/octeon-irq.c
index 7181def6037a..9d36774bded1 100644
--- a/arch/mips/cavium-octeon/octeon-irq.c
+++ b/arch/mips/cavium-octeon/octeon-irq.c
@@ -1095,7 +1095,7 @@ static void octeon_irq_ip3_ciu(void)
static bool octeon_irq_use_ip4;
-static void __cpuinit octeon_irq_local_enable_ip4(void *arg)
+static void octeon_irq_local_enable_ip4(void *arg)
{
set_c0_status(STATUSF_IP4);
}
@@ -1110,21 +1110,21 @@ static void (*octeon_irq_ip2)(void);
static void (*octeon_irq_ip3)(void);
static void (*octeon_irq_ip4)(void);
-void __cpuinitdata (*octeon_irq_setup_secondary)(void);
+void (*octeon_irq_setup_secondary)(void);
-void __cpuinit octeon_irq_set_ip4_handler(octeon_irq_ip4_handler_t h)
+void octeon_irq_set_ip4_handler(octeon_irq_ip4_handler_t h)
{
octeon_irq_ip4 = h;
octeon_irq_use_ip4 = true;
on_each_cpu(octeon_irq_local_enable_ip4, NULL, 1);
}
-static void __cpuinit octeon_irq_percpu_enable(void)
+static void octeon_irq_percpu_enable(void)
{
irq_cpu_online();
}
-static void __cpuinit octeon_irq_init_ciu_percpu(void)
+static void octeon_irq_init_ciu_percpu(void)
{
int coreid = cvmx_get_core_num();
@@ -1167,7 +1167,7 @@ static void octeon_irq_init_ciu2_percpu(void)
cvmx_read_csr(CVMX_CIU2_SUM_PPX_IP2(coreid));
}
-static void __cpuinit octeon_irq_setup_secondary_ciu(void)
+static void octeon_irq_setup_secondary_ciu(void)
{
octeon_irq_init_ciu_percpu();
octeon_irq_percpu_enable();
diff --git a/arch/mips/cavium-octeon/octeon-platform.c b/arch/mips/cavium-octeon/octeon-platform.c
index 7b746e7bf7a1..1830874ff1e2 100644
--- a/arch/mips/cavium-octeon/octeon-platform.c
+++ b/arch/mips/cavium-octeon/octeon-platform.c
@@ -334,9 +334,10 @@ static void __init octeon_fdt_pip_iface(int pip, int idx, u64 *pmac)
char name_buffer[20];
int iface;
int p;
- int count;
+ int count = 0;
- count = cvmx_helper_interface_enumerate(idx);
+ if (cvmx_helper_interface_enumerate(idx) == 0)
+ count = cvmx_helper_ports_on_interface(idx);
snprintf(name_buffer, sizeof(name_buffer), "interface@%d", idx);
iface = fdt_subnode_offset(initial_boot_params, pip, name_buffer);
diff --git a/arch/mips/cavium-octeon/smp.c b/arch/mips/cavium-octeon/smp.c
index 295137dfdc37..138cc80c5928 100644
--- a/arch/mips/cavium-octeon/smp.c
+++ b/arch/mips/cavium-octeon/smp.c
@@ -173,7 +173,7 @@ static void octeon_boot_secondary(int cpu, struct task_struct *idle)
* After we've done initial boot, this function is called to allow the
* board code to clean up state, if needed
*/
-static void __cpuinit octeon_init_secondary(void)
+static void octeon_init_secondary(void)
{
unsigned int sr;
@@ -375,7 +375,7 @@ static int octeon_update_boot_vector(unsigned int cpu)
return 0;
}
-static int __cpuinit octeon_cpu_callback(struct notifier_block *nfb,
+static int octeon_cpu_callback(struct notifier_block *nfb,
unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long)hcpu;
@@ -394,7 +394,7 @@ static int __cpuinit octeon_cpu_callback(struct notifier_block *nfb,
return NOTIFY_OK;
}
-static int __cpuinit register_cavium_notifier(void)
+static int register_cavium_notifier(void)
{
hotcpu_notifier(octeon_cpu_callback, 0);
return 0;
diff --git a/arch/mips/include/asm/uasm.h b/arch/mips/include/asm/uasm.h
index 370d967725c2..c33a9564fb41 100644
--- a/arch/mips/include/asm/uasm.h
+++ b/arch/mips/include/asm/uasm.h
@@ -13,12 +13,8 @@
#ifdef CONFIG_EXPORT_UASM
#include <linux/export.h>
-#define __uasminit
-#define __uasminitdata
#define UASM_EXPORT_SYMBOL(sym) EXPORT_SYMBOL(sym)
#else
-#define __uasminit __cpuinit
-#define __uasminitdata __cpuinitdata
#define UASM_EXPORT_SYMBOL(sym)
#endif
@@ -54,43 +50,36 @@
#endif
#define Ip_u1u2u3(op) \
-void __uasminit \
-ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b, unsigned int c)
+void ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b, unsigned int c)
#define Ip_u2u1u3(op) \
-void __uasminit \
-ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b, unsigned int c)
+void ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b, unsigned int c)
#define Ip_u3u1u2(op) \
-void __uasminit \
-ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b, unsigned int c)
+void ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b, unsigned int c)
#define Ip_u1u2s3(op) \
-void __uasminit \
-ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b, signed int c)
+void ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b, signed int c)
#define Ip_u2s3u1(op) \
-void __uasminit \
-ISAOPC(op)(u32 **buf, unsigned int a, signed int b, unsigned int c)
+void ISAOPC(op)(u32 **buf, unsigned int a, signed int b, unsigned int c)
#define Ip_u2u1s3(op) \
-void __uasminit \
-ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b, signed int c)
+void ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b, signed int c)
#define Ip_u2u1msbu3(op) \
-void __uasminit \
-ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b, unsigned int c, \
+void ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b, unsigned int c, \
unsigned int d)
#define Ip_u1u2(op) \
-void __uasminit ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b)
+void ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b)
#define Ip_u1s2(op) \
-void __uasminit ISAOPC(op)(u32 **buf, unsigned int a, signed int b)
+void ISAOPC(op)(u32 **buf, unsigned int a, signed int b)
-#define Ip_u1(op) void __uasminit ISAOPC(op)(u32 **buf, unsigned int a)
+#define Ip_u1(op) void ISAOPC(op)(u32 **buf, unsigned int a)
-#define Ip_0(op) void __uasminit ISAOPC(op)(u32 **buf)
+#define Ip_0(op) void ISAOPC(op)(u32 **buf)
Ip_u2u1s3(_addiu);
Ip_u3u1u2(_addu);
@@ -163,7 +152,7 @@ struct uasm_label {
int lab;
};
-void __uasminit ISAFUNC(uasm_build_label)(struct uasm_label **lab, u32 *addr,
+void ISAFUNC(uasm_build_label)(struct uasm_label **lab, u32 *addr,
int lid);
#ifdef CONFIG_64BIT
int ISAFUNC(uasm_in_compat_space_p)(long addr);
@@ -174,7 +163,7 @@ void ISAFUNC(UASM_i_LA_mostly)(u32 **buf, unsigned int rs, long addr);
void ISAFUNC(UASM_i_LA)(u32 **buf, unsigned int rs, long addr);
#define UASM_L_LA(lb) \
-static inline void __uasminit ISAFUNC(uasm_l##lb)(struct uasm_label **lab, u32 *addr) \
+static inline void ISAFUNC(uasm_l##lb)(struct uasm_label **lab, u32 *addr) \
{ \
ISAFUNC(uasm_build_label)(lab, addr, label##lb); \
}
diff --git a/arch/mips/kernel/bmips_vec.S b/arch/mips/kernel/bmips_vec.S
index 64c4fd62cf08..f739aedcb509 100644
--- a/arch/mips/kernel/bmips_vec.S
+++ b/arch/mips/kernel/bmips_vec.S
@@ -28,8 +28,6 @@
.set mips0
.endm
- __CPUINIT
-
/***********************************************************************
* Alternate CPU1 startup vector for BMIPS4350
*
@@ -216,8 +214,6 @@ END(bmips_smp_int_vec)
* Certain CPUs support extending kseg0 to 1024MB.
***********************************************************************/
- __CPUINIT
-
LEAF(bmips_enable_xks01)
#if defined(CONFIG_XKS01)
diff --git a/arch/mips/kernel/cevt-bcm1480.c b/arch/mips/kernel/cevt-bcm1480.c
index 15f618b40cf6..7976457184b1 100644
--- a/arch/mips/kernel/cevt-bcm1480.c
+++ b/arch/mips/kernel/cevt-bcm1480.c
@@ -109,7 +109,7 @@ static DEFINE_PER_CPU(struct clock_event_device, sibyte_hpt_clockevent);
static DEFINE_PER_CPU(struct irqaction, sibyte_hpt_irqaction);
static DEFINE_PER_CPU(char [18], sibyte_hpt_name);
-void __cpuinit sb1480_clockevent_init(void)
+void sb1480_clockevent_init(void)
{
unsigned int cpu = smp_processor_id();
unsigned int irq = K_BCM1480_INT_TIMER_0 + cpu;
diff --git a/arch/mips/kernel/cevt-gic.c b/arch/mips/kernel/cevt-gic.c
index 730eaf92c018..594cbbf16d62 100644
--- a/arch/mips/kernel/cevt-gic.c
+++ b/arch/mips/kernel/cevt-gic.c
@@ -59,7 +59,7 @@ void gic_event_handler(struct clock_event_device *dev)
{
}
-int __cpuinit gic_clockevent_init(void)
+int gic_clockevent_init(void)
{
unsigned int cpu = smp_processor_id();
struct clock_event_device *cd;
diff --git a/arch/mips/kernel/cevt-r4k.c b/arch/mips/kernel/cevt-r4k.c
index 02033eaf8825..50d3f5a8d6bb 100644
--- a/arch/mips/kernel/cevt-r4k.c
+++ b/arch/mips/kernel/cevt-r4k.c
@@ -171,7 +171,7 @@ int c0_compare_int_usable(void)
}
#ifndef CONFIG_MIPS_MT_SMTC
-int __cpuinit r4k_clockevent_init(void)
+int r4k_clockevent_init(void)
{
unsigned int cpu = smp_processor_id();
struct clock_event_device *cd;
diff --git a/arch/mips/kernel/cevt-sb1250.c b/arch/mips/kernel/cevt-sb1250.c
index 200f2778bf36..5ea6d6b1de15 100644
--- a/arch/mips/kernel/cevt-sb1250.c
+++ b/arch/mips/kernel/cevt-sb1250.c
@@ -107,7 +107,7 @@ static DEFINE_PER_CPU(struct clock_event_device, sibyte_hpt_clockevent);
static DEFINE_PER_CPU(struct irqaction, sibyte_hpt_irqaction);
static DEFINE_PER_CPU(char [18], sibyte_hpt_name);
-void __cpuinit sb1250_clockevent_init(void)
+void sb1250_clockevent_init(void)
{
unsigned int cpu = smp_processor_id();
unsigned int irq = K_INT_TIMER_0 + cpu;
diff --git a/arch/mips/kernel/cevt-smtc.c b/arch/mips/kernel/cevt-smtc.c
index 9de5ed7ef1a3..b6cf0a60d896 100644
--- a/arch/mips/kernel/cevt-smtc.c
+++ b/arch/mips/kernel/cevt-smtc.c
@@ -248,7 +248,7 @@ irqreturn_t c0_compare_interrupt(int irq, void *dev_id)
}
-int __cpuinit smtc_clockevent_init(void)
+int smtc_clockevent_init(void)
{
uint64_t mips_freq = mips_hpt_frequency;
unsigned int cpu = smp_processor_id();
diff --git a/arch/mips/kernel/cpu-bugs64.c b/arch/mips/kernel/cpu-bugs64.c
index 0c61df281ce6..2d80b5f1aeae 100644
--- a/arch/mips/kernel/cpu-bugs64.c
+++ b/arch/mips/kernel/cpu-bugs64.c
@@ -168,7 +168,7 @@ static inline void check_mult_sh(void)
panic(bug64hit, !R4000_WAR ? r4kwar : nowar);
}
-static volatile int daddi_ov __cpuinitdata;
+static volatile int daddi_ov;
asmlinkage void __init do_daddi_ov(struct pt_regs *regs)
{
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
index c7b1b3c5a761..4c6167a17875 100644
--- a/arch/mips/kernel/cpu-probe.c
+++ b/arch/mips/kernel/cpu-probe.c
@@ -27,7 +27,7 @@
#include <asm/spram.h>
#include <asm/uaccess.h>
-static int __cpuinitdata mips_fpu_disabled;
+static int mips_fpu_disabled;
static int __init fpu_disable(char *s)
{
@@ -39,7 +39,7 @@ static int __init fpu_disable(char *s)
__setup("nofpu", fpu_disable);
-int __cpuinitdata mips_dsp_disabled;
+int mips_dsp_disabled;
static int __init dsp_disable(char *s)
{
@@ -134,7 +134,7 @@ static inline void cpu_probe_vmbits(struct cpuinfo_mips *c)
#endif
}
-static void __cpuinit set_isa(struct cpuinfo_mips *c, unsigned int isa)
+static void set_isa(struct cpuinfo_mips *c, unsigned int isa)
{
switch (isa) {
case MIPS_CPU_ISA_M64R2:
@@ -159,7 +159,7 @@ static void __cpuinit set_isa(struct cpuinfo_mips *c, unsigned int isa)
}
}
-static char unknown_isa[] __cpuinitdata = KERN_ERR \
+static char unknown_isa[] = KERN_ERR \
"Unsupported ISA type, c0.config0: %d.";
static inline unsigned int decode_config0(struct cpuinfo_mips *c)
@@ -290,7 +290,7 @@ static inline unsigned int decode_config4(struct cpuinfo_mips *c)
return config4 & MIPS_CONF_M;
}
-static void __cpuinit decode_configs(struct cpuinfo_mips *c)
+static void decode_configs(struct cpuinfo_mips *c)
{
int ok;
@@ -962,7 +962,7 @@ EXPORT_SYMBOL(__ua_limit);
const char *__cpu_name[NR_CPUS];
const char *__elf_platform;
-__cpuinit void cpu_probe(void)
+void cpu_probe(void)
{
struct cpuinfo_mips *c = &current_cpu_data;
unsigned int cpu = smp_processor_id();
@@ -1047,7 +1047,7 @@ __cpuinit void cpu_probe(void)
#endif
}
-__cpuinit void cpu_report(void)
+void cpu_report(void)
{
struct cpuinfo_mips *c = &current_cpu_data;
diff --git a/arch/mips/kernel/head.S b/arch/mips/kernel/head.S
index 099912324423..7b6a5b3e3acf 100644
--- a/arch/mips/kernel/head.S
+++ b/arch/mips/kernel/head.S
@@ -158,8 +158,6 @@ NESTED(kernel_entry, 16, sp) # kernel entry point
j start_kernel
END(kernel_entry)
- __CPUINIT
-
#ifdef CONFIG_SMP
/*
* SMP slave cpus entry point. Board specific code for bootstrap calls this
@@ -188,5 +186,3 @@ NESTED(smp_bootstrap, 16, sp)
j start_secondary
END(smp_bootstrap)
#endif /* CONFIG_SMP */
-
- __FINIT
diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c
index aea6c0885838..c0bb4d59076a 100644
--- a/arch/mips/kernel/smp-bmips.c
+++ b/arch/mips/kernel/smp-bmips.c
@@ -173,7 +173,7 @@ static void bmips_boot_secondary(int cpu, struct task_struct *idle)
else {
#if defined(CONFIG_CPU_BMIPS4350) || defined(CONFIG_CPU_BMIPS4380)
/* Reset slave TP1 if booting from TP0 */
- if (cpu_logical_map(cpu) == 0)
+ if (cpu_logical_map(cpu) == 1)
set_c0_brcm_cmt_ctrl(0x01);
#elif defined(CONFIG_CPU_BMIPS5000)
if (cpu & 0x01)
@@ -398,7 +398,7 @@ struct plat_smp_ops bmips_smp_ops = {
* UP BMIPS systems as well.
***********************************************************************/
-static void __cpuinit bmips_wr_vec(unsigned long dst, char *start, char *end)
+static void bmips_wr_vec(unsigned long dst, char *start, char *end)
{
memcpy((void *)dst, start, end - start);
dma_cache_wback((unsigned long)start, end - start);
@@ -406,7 +406,7 @@ static void __cpuinit bmips_wr_vec(unsigned long dst, char *start, char *end)
instruction_hazard();
}
-static inline void __cpuinit bmips_nmi_handler_setup(void)
+static inline void bmips_nmi_handler_setup(void)
{
bmips_wr_vec(BMIPS_NMI_RESET_VEC, &bmips_reset_nmi_vec,
&bmips_reset_nmi_vec_end);
@@ -414,7 +414,7 @@ static inline void __cpuinit bmips_nmi_handler_setup(void)
&bmips_smp_int_vec_end);
}
-void __cpuinit bmips_ebase_setup(void)
+void bmips_ebase_setup(void)
{
unsigned long new_ebase = ebase;
void __iomem __maybe_unused *cbr;
diff --git a/arch/mips/kernel/smp-mt.c b/arch/mips/kernel/smp-mt.c
index 3e5164c11cac..57a3f7a2b370 100644
--- a/arch/mips/kernel/smp-mt.c
+++ b/arch/mips/kernel/smp-mt.c
@@ -149,7 +149,7 @@ static void vsmp_send_ipi_mask(const struct cpumask *mask, unsigned int action)
vsmp_send_ipi_single(i, action);
}
-static void __cpuinit vsmp_init_secondary(void)
+static void vsmp_init_secondary(void)
{
#ifdef CONFIG_IRQ_GIC
/* This is Malta specific: IPI,performance and timer interrupts */
@@ -162,7 +162,7 @@ static void __cpuinit vsmp_init_secondary(void)
STATUSF_IP6 | STATUSF_IP7);
}
-static void __cpuinit vsmp_smp_finish(void)
+static void vsmp_smp_finish(void)
{
/* CDFIXME: remove this? */
write_c0_compare(read_c0_count() + (8* mips_hpt_frequency/HZ));
@@ -188,7 +188,7 @@ static void vsmp_cpus_done(void)
* (unsigned long)idle->thread_info the gp
* assumes a 1:1 mapping of TC => VPE
*/
-static void __cpuinit vsmp_boot_secondary(int cpu, struct task_struct *idle)
+static void vsmp_boot_secondary(int cpu, struct task_struct *idle)
{
struct thread_info *gp = task_thread_info(idle);
dvpe();
diff --git a/arch/mips/kernel/smp-up.c b/arch/mips/kernel/smp-up.c
index 00500fea2750..7fde3e4d978f 100644
--- a/arch/mips/kernel/smp-up.c
+++ b/arch/mips/kernel/smp-up.c
@@ -28,11 +28,11 @@ static inline void up_send_ipi_mask(const struct cpumask *mask,
* After we've done initial boot, this function is called to allow the
* board code to clean up state, if needed
*/
-static void __cpuinit up_init_secondary(void)
+static void up_init_secondary(void)
{
}
-static void __cpuinit up_smp_finish(void)
+static void up_smp_finish(void)
{
}
@@ -44,7 +44,7 @@ static void up_cpus_done(void)
/*
* Firmware CPU startup hook
*/
-static void __cpuinit up_boot_secondary(int cpu, struct task_struct *idle)
+static void up_boot_secondary(int cpu, struct task_struct *idle)
{
}
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c
index 6e7862ab46cc..5c208ed8f856 100644
--- a/arch/mips/kernel/smp.c
+++ b/arch/mips/kernel/smp.c
@@ -86,7 +86,7 @@ static inline void set_cpu_sibling_map(int cpu)
struct plat_smp_ops *mp_ops;
EXPORT_SYMBOL(mp_ops);
-__cpuinit void register_smp_ops(struct plat_smp_ops *ops)
+void register_smp_ops(struct plat_smp_ops *ops)
{
if (mp_ops)
printk(KERN_WARNING "Overriding previously set SMP ops\n");
@@ -98,7 +98,7 @@ __cpuinit void register_smp_ops(struct plat_smp_ops *ops)
* First C code run on the secondary CPUs after being started up by
* the master.
*/
-asmlinkage __cpuinit void start_secondary(void)
+asmlinkage void start_secondary(void)
{
unsigned int cpu;
@@ -197,7 +197,7 @@ void smp_prepare_boot_cpu(void)
cpu_set(0, cpu_callin_map);
}
-int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
+int __cpu_up(unsigned int cpu, struct task_struct *tidle)
{
mp_ops->boot_secondary(cpu, tidle);
diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c
index 75a4fd709841..dfc1b911be04 100644
--- a/arch/mips/kernel/smtc.c
+++ b/arch/mips/kernel/smtc.c
@@ -645,7 +645,7 @@ void smtc_prepare_cpus(int cpus)
* (unsigned long)idle->thread_info the gp
*
*/
-void __cpuinit smtc_boot_secondary(int cpu, struct task_struct *idle)
+void smtc_boot_secondary(int cpu, struct task_struct *idle)
{
extern u32 kernelsp[NR_CPUS];
unsigned long flags;
diff --git a/arch/mips/kernel/spram.c b/arch/mips/kernel/spram.c
index 6af08d896e20..93f86817f20a 100644
--- a/arch/mips/kernel/spram.c
+++ b/arch/mips/kernel/spram.c
@@ -37,7 +37,7 @@
/*
* Different semantics to the set_c0_* function built by __BUILD_SET_C0
*/
-static __cpuinit unsigned int bis_c0_errctl(unsigned int set)
+static unsigned int bis_c0_errctl(unsigned int set)
{
unsigned int res;
res = read_c0_errctl();
@@ -45,7 +45,7 @@ static __cpuinit unsigned int bis_c0_errctl(unsigned int set)
return res;
}
-static __cpuinit void ispram_store_tag(unsigned int offset, unsigned int data)
+static void ispram_store_tag(unsigned int offset, unsigned int data)
{
unsigned int errctl;
@@ -64,7 +64,7 @@ static __cpuinit void ispram_store_tag(unsigned int offset, unsigned int data)
}
-static __cpuinit unsigned int ispram_load_tag(unsigned int offset)
+static unsigned int ispram_load_tag(unsigned int offset)
{
unsigned int data;
unsigned int errctl;
@@ -82,7 +82,7 @@ static __cpuinit unsigned int ispram_load_tag(unsigned int offset)
return data;
}
-static __cpuinit void dspram_store_tag(unsigned int offset, unsigned int data)
+static void dspram_store_tag(unsigned int offset, unsigned int data)
{
unsigned int errctl;
@@ -98,7 +98,7 @@ static __cpuinit void dspram_store_tag(unsigned int offset, unsigned int data)
}
-static __cpuinit unsigned int dspram_load_tag(unsigned int offset)
+static unsigned int dspram_load_tag(unsigned int offset)
{
unsigned int data;
unsigned int errctl;
@@ -115,7 +115,7 @@ static __cpuinit unsigned int dspram_load_tag(unsigned int offset)
return data;
}
-static __cpuinit void probe_spram(char *type,
+static void probe_spram(char *type,
unsigned int base,
unsigned int (*read)(unsigned int),
void (*write)(unsigned int, unsigned int))
@@ -196,7 +196,7 @@ static __cpuinit void probe_spram(char *type,
offset += 2 * SPRAM_TAG_STRIDE;
}
}
-void __cpuinit spram_config(void)
+void spram_config(void)
{
struct cpuinfo_mips *c = &current_cpu_data;
unsigned int config0;
diff --git a/arch/mips/kernel/sync-r4k.c b/arch/mips/kernel/sync-r4k.c
index 1ff43d5ac2c4..84536bf4a154 100644
--- a/arch/mips/kernel/sync-r4k.c
+++ b/arch/mips/kernel/sync-r4k.c
@@ -20,15 +20,15 @@
#include <asm/barrier.h>
#include <asm/mipsregs.h>
-static atomic_t __cpuinitdata count_start_flag = ATOMIC_INIT(0);
-static atomic_t __cpuinitdata count_count_start = ATOMIC_INIT(0);
-static atomic_t __cpuinitdata count_count_stop = ATOMIC_INIT(0);
-static atomic_t __cpuinitdata count_reference = ATOMIC_INIT(0);
+static atomic_t count_start_flag = ATOMIC_INIT(0);
+static atomic_t count_count_start = ATOMIC_INIT(0);
+static atomic_t count_count_stop = ATOMIC_INIT(0);
+static atomic_t count_reference = ATOMIC_INIT(0);
#define COUNTON 100
#define NR_LOOPS 5
-void __cpuinit synchronise_count_master(int cpu)
+void synchronise_count_master(int cpu)
{
int i;
unsigned long flags;
@@ -106,7 +106,7 @@ void __cpuinit synchronise_count_master(int cpu)
printk("done.\n");
}
-void __cpuinit synchronise_count_slave(int cpu)
+void synchronise_count_slave(int cpu)
{
int i;
unsigned int initcount;
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index 0903d70b2cfe..aec3408edd4b 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -90,7 +90,7 @@ void (*board_nmi_handler_setup)(void);
void (*board_ejtag_handler_setup)(void);
void (*board_bind_eic_interrupt)(int irq, int regset);
void (*board_ebase_setup)(void);
-void __cpuinitdata(*board_cache_error_setup)(void);
+void(*board_cache_error_setup)(void);
static void show_raw_backtrace(unsigned long reg29)
{
@@ -1242,7 +1242,6 @@ asmlinkage void do_mcheck(struct pt_regs *regs)
panic("Caught Machine Check exception - %scaused by multiple "
"matching entries in the TLB.",
(multi_match) ? "" : "not ");
- exception_exit(prev_state);
}
asmlinkage void do_mt(struct pt_regs *regs)
@@ -1682,7 +1681,7 @@ int cp0_compare_irq_shift;
int cp0_perfcount_irq;
EXPORT_SYMBOL_GPL(cp0_perfcount_irq);
-static int __cpuinitdata noulri;
+static int noulri;
static int __init ulri_disable(char *s)
{
@@ -1693,7 +1692,7 @@ static int __init ulri_disable(char *s)
}
__setup("noulri", ulri_disable);
-void __cpuinit per_cpu_trap_init(bool is_boot_cpu)
+void per_cpu_trap_init(bool is_boot_cpu)
{
unsigned int cpu = smp_processor_id();
unsigned int status_set = ST0_CU0;
@@ -1810,7 +1809,7 @@ void __cpuinit per_cpu_trap_init(bool is_boot_cpu)
}
/* Install CPU exception handler */
-void __cpuinit set_handler(unsigned long offset, void *addr, unsigned long size)
+void set_handler(unsigned long offset, void *addr, unsigned long size)
{
#ifdef CONFIG_CPU_MICROMIPS
memcpy((void *)(ebase + offset), ((unsigned char *)addr - 1), size);
@@ -1820,7 +1819,7 @@ void __cpuinit set_handler(unsigned long offset, void *addr, unsigned long size)
local_flush_icache_range(ebase + offset, ebase + offset + size);
}
-static char panic_null_cerr[] __cpuinitdata =
+static char panic_null_cerr[] =
"Trying to set NULL cache error exception handler";
/*
@@ -1828,7 +1827,7 @@ static char panic_null_cerr[] __cpuinitdata =
* This is suitable only for the cache error exception which is the only
* exception handler that is being run uncached.
*/
-void __cpuinit set_uncached_handler(unsigned long offset, void *addr,
+void set_uncached_handler(unsigned long offset, void *addr,
unsigned long size)
{
unsigned long uncached_ebase = CKSEG1ADDR(ebase);
diff --git a/arch/mips/kernel/watch.c b/arch/mips/kernel/watch.c
index cbdc4de85bb4..2a03abb5bd2c 100644
--- a/arch/mips/kernel/watch.c
+++ b/arch/mips/kernel/watch.c
@@ -100,7 +100,7 @@ void mips_clear_watch_registers(void)
}
}
-__cpuinit void mips_probe_watch_registers(struct cpuinfo_mips *c)
+void mips_probe_watch_registers(struct cpuinfo_mips *c)
{
unsigned int t;
diff --git a/arch/mips/kvm/Kconfig b/arch/mips/kvm/Kconfig
index 2c15590e55f7..30e334e823bd 100644
--- a/arch/mips/kvm/Kconfig
+++ b/arch/mips/kvm/Kconfig
@@ -5,7 +5,6 @@ source "virt/kvm/Kconfig"
menuconfig VIRTUALIZATION
bool "Virtualization"
- depends on HAVE_KVM
---help---
Say Y here to get to see options for using your Linux host to run
other operating systems inside virtual machines (guests).
diff --git a/arch/mips/lantiq/irq.c b/arch/mips/lantiq/irq.c
index 51194875f158..eb3e18659630 100644
--- a/arch/mips/lantiq/irq.c
+++ b/arch/mips/lantiq/irq.c
@@ -461,7 +461,7 @@ int __init icu_of_init(struct device_node *node, struct device_node *parent)
return 0;
}
-unsigned int __cpuinit get_c0_compare_int(void)
+unsigned int get_c0_compare_int(void)
{
return MIPS_CPU_TIMER_IRQ;
}
diff --git a/arch/mips/lib/uncached.c b/arch/mips/lib/uncached.c
index 65e3dfc4e585..d8522f8e842a 100644
--- a/arch/mips/lib/uncached.c
+++ b/arch/mips/lib/uncached.c
@@ -36,7 +36,7 @@
* values, so we can avoid sharing the same stack area between a cached
* and the uncached mode.
*/
-unsigned long __cpuinit run_uncached(void *func)
+unsigned long run_uncached(void *func)
{
register long sp __asm__("$sp");
register long ret __asm__("$2");
diff --git a/arch/mips/mm/c-octeon.c b/arch/mips/mm/c-octeon.c
index 8557fb552863..a0bcdbb81d41 100644
--- a/arch/mips/mm/c-octeon.c
+++ b/arch/mips/mm/c-octeon.c
@@ -180,7 +180,7 @@ static void octeon_flush_kernel_vmap_range(unsigned long vaddr, int size)
* Probe Octeon's caches
*
*/
-static void __cpuinit probe_octeon(void)
+static void probe_octeon(void)
{
unsigned long icache_size;
unsigned long dcache_size;
@@ -251,7 +251,7 @@ static void __cpuinit probe_octeon(void)
}
}
-static void __cpuinit octeon_cache_error_setup(void)
+static void octeon_cache_error_setup(void)
{
extern char except_vec2_octeon;
set_handler(0x100, &except_vec2_octeon, 0x80);
@@ -261,7 +261,7 @@ static void __cpuinit octeon_cache_error_setup(void)
* Setup the Octeon cache flush routines
*
*/
-void __cpuinit octeon_cache_init(void)
+void octeon_cache_init(void)
{
probe_octeon();
diff --git a/arch/mips/mm/c-r3k.c b/arch/mips/mm/c-r3k.c
index 704dc735a59d..2fcde0c8ea02 100644
--- a/arch/mips/mm/c-r3k.c
+++ b/arch/mips/mm/c-r3k.c
@@ -26,7 +26,7 @@
static unsigned long icache_size, dcache_size; /* Size in bytes */
static unsigned long icache_lsize, dcache_lsize; /* Size in bytes */
-unsigned long __cpuinit r3k_cache_size(unsigned long ca_flags)
+unsigned long r3k_cache_size(unsigned long ca_flags)
{
unsigned long flags, status, dummy, size;
volatile unsigned long *p;
@@ -61,7 +61,7 @@ unsigned long __cpuinit r3k_cache_size(unsigned long ca_flags)
return size * sizeof(*p);
}
-unsigned long __cpuinit r3k_cache_lsize(unsigned long ca_flags)
+unsigned long r3k_cache_lsize(unsigned long ca_flags)
{
unsigned long flags, status, lsize, i;
volatile unsigned long *p;
@@ -90,7 +90,7 @@ unsigned long __cpuinit r3k_cache_lsize(unsigned long ca_flags)
return lsize * sizeof(*p);
}
-static void __cpuinit r3k_probe_cache(void)
+static void r3k_probe_cache(void)
{
dcache_size = r3k_cache_size(ST0_ISC);
if (dcache_size)
@@ -312,7 +312,7 @@ static void r3k_dma_cache_wback_inv(unsigned long start, unsigned long size)
r3k_flush_dcache_range(start, start + size);
}
-void __cpuinit r3k_cache_init(void)
+void r3k_cache_init(void)
{
extern void build_clear_page(void);
extern void build_copy_page(void);
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
index 21813beec7a5..f749f687ee87 100644
--- a/arch/mips/mm/c-r4k.c
+++ b/arch/mips/mm/c-r4k.c
@@ -107,7 +107,7 @@ static inline void r4k_blast_dcache_page_dc64(unsigned long addr)
blast_dcache64_page(addr);
}
-static void __cpuinit r4k_blast_dcache_page_setup(void)
+static void r4k_blast_dcache_page_setup(void)
{
unsigned long dc_lsize = cpu_dcache_line_size();
@@ -123,7 +123,7 @@ static void __cpuinit r4k_blast_dcache_page_setup(void)
static void (* r4k_blast_dcache_page_indexed)(unsigned long addr);
-static void __cpuinit r4k_blast_dcache_page_indexed_setup(void)
+static void r4k_blast_dcache_page_indexed_setup(void)
{
unsigned long dc_lsize = cpu_dcache_line_size();
@@ -140,7 +140,7 @@ static void __cpuinit r4k_blast_dcache_page_indexed_setup(void)
void (* r4k_blast_dcache)(void);
EXPORT_SYMBOL(r4k_blast_dcache);
-static void __cpuinit r4k_blast_dcache_setup(void)
+static void r4k_blast_dcache_setup(void)
{
unsigned long dc_lsize = cpu_dcache_line_size();
@@ -227,7 +227,7 @@ static inline void tx49_blast_icache32_page_indexed(unsigned long page)
static void (* r4k_blast_icache_page)(unsigned long addr);
-static void __cpuinit r4k_blast_icache_page_setup(void)
+static void r4k_blast_icache_page_setup(void)
{
unsigned long ic_lsize = cpu_icache_line_size();
@@ -244,7 +244,7 @@ static void __cpuinit r4k_blast_icache_page_setup(void)
static void (* r4k_blast_icache_page_indexed)(unsigned long addr);
-static void __cpuinit r4k_blast_icache_page_indexed_setup(void)
+static void r4k_blast_icache_page_indexed_setup(void)
{
unsigned long ic_lsize = cpu_icache_line_size();
@@ -269,7 +269,7 @@ static void __cpuinit r4k_blast_icache_page_indexed_setup(void)
void (* r4k_blast_icache)(void);
EXPORT_SYMBOL(r4k_blast_icache);
-static void __cpuinit r4k_blast_icache_setup(void)
+static void r4k_blast_icache_setup(void)
{
unsigned long ic_lsize = cpu_icache_line_size();
@@ -290,7 +290,7 @@ static void __cpuinit r4k_blast_icache_setup(void)
static void (* r4k_blast_scache_page)(unsigned long addr);
-static void __cpuinit r4k_blast_scache_page_setup(void)
+static void r4k_blast_scache_page_setup(void)
{
unsigned long sc_lsize = cpu_scache_line_size();
@@ -308,7 +308,7 @@ static void __cpuinit r4k_blast_scache_page_setup(void)
static void (* r4k_blast_scache_page_indexed)(unsigned long addr);
-static void __cpuinit r4k_blast_scache_page_indexed_setup(void)
+static void r4k_blast_scache_page_indexed_setup(void)
{
unsigned long sc_lsize = cpu_scache_line_size();
@@ -326,7 +326,7 @@ static void __cpuinit r4k_blast_scache_page_indexed_setup(void)
static void (* r4k_blast_scache)(void);
-static void __cpuinit r4k_blast_scache_setup(void)
+static void r4k_blast_scache_setup(void)
{
unsigned long sc_lsize = cpu_scache_line_size();
@@ -797,11 +797,11 @@ static inline void alias_74k_erratum(struct cpuinfo_mips *c)
}
}
-static char *way_string[] __cpuinitdata = { NULL, "direct mapped", "2-way",
+static char *way_string[] = { NULL, "direct mapped", "2-way",
"3-way", "4-way", "5-way", "6-way", "7-way", "8-way"
};
-static void __cpuinit probe_pcache(void)
+static void probe_pcache(void)
{
struct cpuinfo_mips *c = &current_cpu_data;
unsigned int config = read_c0_config();
@@ -1119,7 +1119,7 @@ static void __cpuinit probe_pcache(void)
* executes in KSEG1 space or else you will crash and burn badly. You have
* been warned.
*/
-static int __cpuinit probe_scache(void)
+static int probe_scache(void)
{
unsigned long flags, addr, begin, end, pow2;
unsigned int config = read_c0_config();
@@ -1196,7 +1196,7 @@ extern int r5k_sc_init(void);
extern int rm7k_sc_init(void);
extern int mips_sc_init(void);
-static void __cpuinit setup_scache(void)
+static void setup_scache(void)
{
struct cpuinfo_mips *c = &current_cpu_data;
unsigned int config = read_c0_config();
@@ -1329,7 +1329,7 @@ static void nxp_pr4450_fixup_config(void)
NXP_BARRIER();
}
-static int __cpuinitdata cca = -1;
+static int cca = -1;
static int __init cca_setup(char *str)
{
@@ -1340,7 +1340,7 @@ static int __init cca_setup(char *str)
early_param("cca", cca_setup);
-static void __cpuinit coherency_setup(void)
+static void coherency_setup(void)
{
if (cca < 0 || cca > 7)
cca = read_c0_config() & CONF_CM_CMASK;
@@ -1380,7 +1380,7 @@ static void __cpuinit coherency_setup(void)
}
}
-static void __cpuinit r4k_cache_error_setup(void)
+static void r4k_cache_error_setup(void)
{
extern char __weak except_vec2_generic;
extern char __weak except_vec2_sb1;
@@ -1398,7 +1398,7 @@ static void __cpuinit r4k_cache_error_setup(void)
}
}
-void __cpuinit r4k_cache_init(void)
+void r4k_cache_init(void)
{
extern void build_clear_page(void);
extern void build_copy_page(void);
diff --git a/arch/mips/mm/c-tx39.c b/arch/mips/mm/c-tx39.c
index ba9da270289f..8d909dbbf37f 100644
--- a/arch/mips/mm/c-tx39.c
+++ b/arch/mips/mm/c-tx39.c
@@ -344,7 +344,7 @@ static __init void tx39_probe_cache(void)
}
}
-void __cpuinit tx39_cache_init(void)
+void tx39_cache_init(void)
{
extern void build_clear_page(void);
extern void build_copy_page(void);
diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c
index 5aeb3eb0b72f..15f813c303b4 100644
--- a/arch/mips/mm/cache.c
+++ b/arch/mips/mm/cache.c
@@ -182,7 +182,7 @@ static inline void setup_protection_map(void)
}
}
-void __cpuinit cpu_cache_init(void)
+void cpu_cache_init(void)
{
if (cpu_has_3k_cache) {
extern void __weak r3k_cache_init(void);
diff --git a/arch/mips/mm/cex-sb1.S b/arch/mips/mm/cex-sb1.S
index fe1d887e8d70..191cf6e0c725 100644
--- a/arch/mips/mm/cex-sb1.S
+++ b/arch/mips/mm/cex-sb1.S
@@ -49,8 +49,6 @@
* (0x170-0x17f) are used to preserve k0, k1, and ra.
*/
- __CPUINIT
-
LEAF(except_vec2_sb1)
/*
* If this error is recoverable, we need to exit the handler
@@ -142,8 +140,6 @@ unrecoverable:
END(except_vec2_sb1)
- __FINIT
-
LEAF(handle_vec2_sb1)
mfc0 k0,CP0_CONFIG
li k1,~CONF_CM_CMASK
diff --git a/arch/mips/mm/page.c b/arch/mips/mm/page.c
index 2c0bd580b9da..218c2109a55d 100644
--- a/arch/mips/mm/page.c
+++ b/arch/mips/mm/page.c
@@ -66,29 +66,29 @@ UASM_L_LA(_copy_pref_both)
UASM_L_LA(_copy_pref_store)
/* We need one branch and therefore one relocation per target label. */
-static struct uasm_label __cpuinitdata labels[5];
-static struct uasm_reloc __cpuinitdata relocs[5];
+static struct uasm_label labels[5];
+static struct uasm_reloc relocs[5];
#define cpu_is_r4600_v1_x() ((read_c0_prid() & 0xfffffff0) == 0x00002010)
#define cpu_is_r4600_v2_x() ((read_c0_prid() & 0xfffffff0) == 0x00002020)
-static int pref_bias_clear_store __cpuinitdata;
-static int pref_bias_copy_load __cpuinitdata;
-static int pref_bias_copy_store __cpuinitdata;
+static int pref_bias_clear_store;
+static int pref_bias_copy_load;
+static int pref_bias_copy_store;
-static u32 pref_src_mode __cpuinitdata;
-static u32 pref_dst_mode __cpuinitdata;
+static u32 pref_src_mode;
+static u32 pref_dst_mode;
-static int clear_word_size __cpuinitdata;
-static int copy_word_size __cpuinitdata;
+static int clear_word_size;
+static int copy_word_size;
-static int half_clear_loop_size __cpuinitdata;
-static int half_copy_loop_size __cpuinitdata;
+static int half_clear_loop_size;
+static int half_copy_loop_size;
-static int cache_line_size __cpuinitdata;
+static int cache_line_size;
#define cache_line_mask() (cache_line_size - 1)
-static inline void __cpuinit
+static inline void
pg_addiu(u32 **buf, unsigned int reg1, unsigned int reg2, unsigned int off)
{
if (cpu_has_64bit_gp_regs && DADDI_WAR && r4k_daddiu_bug()) {
@@ -108,7 +108,7 @@ pg_addiu(u32 **buf, unsigned int reg1, unsigned int reg2, unsigned int off)
}
}
-static void __cpuinit set_prefetch_parameters(void)
+static void set_prefetch_parameters(void)
{
if (cpu_has_64bit_gp_regs || cpu_has_64bit_zero_reg)
clear_word_size = 8;
@@ -199,7 +199,7 @@ static void __cpuinit set_prefetch_parameters(void)
4 * copy_word_size));
}
-static void __cpuinit build_clear_store(u32 **buf, int off)
+static void build_clear_store(u32 **buf, int off)
{
if (cpu_has_64bit_gp_regs || cpu_has_64bit_zero_reg) {
uasm_i_sd(buf, ZERO, off, A0);
@@ -208,7 +208,7 @@ static void __cpuinit build_clear_store(u32 **buf, int off)
}
}
-static inline void __cpuinit build_clear_pref(u32 **buf, int off)
+static inline void build_clear_pref(u32 **buf, int off)
{
if (off & cache_line_mask())
return;
@@ -240,7 +240,7 @@ extern u32 __clear_page_end;
extern u32 __copy_page_start;
extern u32 __copy_page_end;
-void __cpuinit build_clear_page(void)
+void build_clear_page(void)
{
int off;
u32 *buf = &__clear_page_start;
@@ -333,7 +333,7 @@ void __cpuinit build_clear_page(void)
pr_debug("\t.set pop\n");
}
-static void __cpuinit build_copy_load(u32 **buf, int reg, int off)
+static void build_copy_load(u32 **buf, int reg, int off)
{
if (cpu_has_64bit_gp_regs) {
uasm_i_ld(buf, reg, off, A1);
@@ -342,7 +342,7 @@ static void __cpuinit build_copy_load(u32 **buf, int reg, int off)
}
}
-static void __cpuinit build_copy_store(u32 **buf, int reg, int off)
+static void build_copy_store(u32 **buf, int reg, int off)
{
if (cpu_has_64bit_gp_regs) {
uasm_i_sd(buf, reg, off, A0);
@@ -387,7 +387,7 @@ static inline void build_copy_store_pref(u32 **buf, int off)
}
}
-void __cpuinit build_copy_page(void)
+void build_copy_page(void)
{
int off;
u32 *buf = &__copy_page_start;
diff --git a/arch/mips/mm/sc-ip22.c b/arch/mips/mm/sc-ip22.c
index c6aaed934d53..dc7c5a5214a9 100644
--- a/arch/mips/mm/sc-ip22.c
+++ b/arch/mips/mm/sc-ip22.c
@@ -167,7 +167,7 @@ static struct bcache_ops indy_sc_ops = {
.bc_inv = indy_sc_wback_invalidate
};
-void __cpuinit indy_sc_init(void)
+void indy_sc_init(void)
{
if (indy_sc_probe()) {
indy_sc_enable();
diff --git a/arch/mips/mm/sc-mips.c b/arch/mips/mm/sc-mips.c
index df96da7e939b..5d01392e3518 100644
--- a/arch/mips/mm/sc-mips.c
+++ b/arch/mips/mm/sc-mips.c
@@ -132,7 +132,7 @@ static inline int __init mips_sc_probe(void)
return 1;
}
-int __cpuinit mips_sc_init(void)
+int mips_sc_init(void)
{
int found = mips_sc_probe();
if (found) {
diff --git a/arch/mips/mm/sc-r5k.c b/arch/mips/mm/sc-r5k.c
index 8bc67720e145..0216ed6eaa2a 100644
--- a/arch/mips/mm/sc-r5k.c
+++ b/arch/mips/mm/sc-r5k.c
@@ -98,7 +98,7 @@ static struct bcache_ops r5k_sc_ops = {
.bc_inv = r5k_dma_cache_inv_sc
};
-void __cpuinit r5k_sc_init(void)
+void r5k_sc_init(void)
{
if (r5k_sc_probe()) {
r5k_sc_enable();
diff --git a/arch/mips/mm/sc-rm7k.c b/arch/mips/mm/sc-rm7k.c
index 274af3be1442..aaffbba33706 100644
--- a/arch/mips/mm/sc-rm7k.c
+++ b/arch/mips/mm/sc-rm7k.c
@@ -104,7 +104,7 @@ static void blast_rm7k_tcache(void)
/*
* This function is executed in uncached address space.
*/
-static __cpuinit void __rm7k_tc_enable(void)
+static void __rm7k_tc_enable(void)
{
int i;
@@ -117,7 +117,7 @@ static __cpuinit void __rm7k_tc_enable(void)
cache_op(Index_Store_Tag_T, CKSEG0ADDR(i));
}
-static __cpuinit void rm7k_tc_enable(void)
+static void rm7k_tc_enable(void)
{
if (read_c0_config() & RM7K_CONF_TE)
return;
@@ -130,7 +130,7 @@ static __cpuinit void rm7k_tc_enable(void)
/*
* This function is executed in uncached address space.
*/
-static __cpuinit void __rm7k_sc_enable(void)
+static void __rm7k_sc_enable(void)
{
int i;
@@ -143,7 +143,7 @@ static __cpuinit void __rm7k_sc_enable(void)
cache_op(Index_Store_Tag_SD, CKSEG0ADDR(i));
}
-static __cpuinit void rm7k_sc_enable(void)
+static void rm7k_sc_enable(void)
{
if (read_c0_config() & RM7K_CONF_SE)
return;
@@ -184,7 +184,7 @@ static struct bcache_ops rm7k_sc_ops = {
* This is a probing function like the one found in c-r4k.c, we look for the
* wrap around point with different addresses.
*/
-static __cpuinit void __probe_tcache(void)
+static void __probe_tcache(void)
{
unsigned long flags, addr, begin, end, pow2;
@@ -226,7 +226,7 @@ static __cpuinit void __probe_tcache(void)
local_irq_restore(flags);
}
-void __cpuinit rm7k_sc_init(void)
+void rm7k_sc_init(void)
{
struct cpuinfo_mips *c = &current_cpu_data;
unsigned int config = read_c0_config();
diff --git a/arch/mips/mm/tlb-r3k.c b/arch/mips/mm/tlb-r3k.c
index a63d1ed0827f..9aca10994cd2 100644
--- a/arch/mips/mm/tlb-r3k.c
+++ b/arch/mips/mm/tlb-r3k.c
@@ -276,7 +276,7 @@ void add_wired_entry(unsigned long entrylo0, unsigned long entrylo1,
}
}
-void __cpuinit tlb_init(void)
+void tlb_init(void)
{
local_flush_tlb_all();
diff --git a/arch/mips/mm/tlb-r4k.c b/arch/mips/mm/tlb-r4k.c
index c643de4c473a..00b26a67a06d 100644
--- a/arch/mips/mm/tlb-r4k.c
+++ b/arch/mips/mm/tlb-r4k.c
@@ -389,7 +389,7 @@ int __init has_transparent_hugepage(void)
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
-static int __cpuinitdata ntlb;
+static int ntlb;
static int __init set_ntlb(char *str)
{
get_option(&str, &ntlb);
@@ -398,7 +398,7 @@ static int __init set_ntlb(char *str)
__setup("ntlb=", set_ntlb);
-void __cpuinit tlb_init(void)
+void tlb_init(void)
{
/*
* You should never change this register:
diff --git a/arch/mips/mm/tlb-r8k.c b/arch/mips/mm/tlb-r8k.c
index 91c2499f806a..6a99733a4440 100644
--- a/arch/mips/mm/tlb-r8k.c
+++ b/arch/mips/mm/tlb-r8k.c
@@ -213,14 +213,14 @@ void __update_tlb(struct vm_area_struct * vma, unsigned long address, pte_t pte)
local_irq_restore(flags);
}
-static void __cpuinit probe_tlb(unsigned long config)
+static void probe_tlb(unsigned long config)
{
struct cpuinfo_mips *c = &current_cpu_data;
c->tlbsize = 3 * 128; /* 3 sets each 128 entries */
}
-void __cpuinit tlb_init(void)
+void tlb_init(void)
{
unsigned int config = read_c0_config();
unsigned long status;
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c
index 9ab0f907a52c..556cb4815770 100644
--- a/arch/mips/mm/tlbex.c
+++ b/arch/mips/mm/tlbex.c
@@ -136,7 +136,7 @@ static int scratchpad_offset(int i)
* why; it's not an issue caused by the core RTL.
*
*/
-static int __cpuinit m4kc_tlbp_war(void)
+static int m4kc_tlbp_war(void)
{
return (current_cpu_data.processor_id & 0xffff00) ==
(PRID_COMP_MIPS | PRID_IMP_4KC);
@@ -181,11 +181,9 @@ UASM_L_LA(_large_segbits_fault)
UASM_L_LA(_tlb_huge_update)
#endif
-static int __cpuinitdata hazard_instance;
+static int hazard_instance;
-static void __cpuinit uasm_bgezl_hazard(u32 **p,
- struct uasm_reloc **r,
- int instance)
+static void uasm_bgezl_hazard(u32 **p, struct uasm_reloc **r, int instance)
{
switch (instance) {
case 0 ... 7:
@@ -196,9 +194,7 @@ static void __cpuinit uasm_bgezl_hazard(u32 **p,
}
}
-static void __cpuinit uasm_bgezl_label(struct uasm_label **l,
- u32 **p,
- int instance)
+static void uasm_bgezl_label(struct uasm_label **l, u32 **p, int instance)
{
switch (instance) {
case 0 ... 7:
@@ -295,15 +291,15 @@ static inline void dump_handler(const char *symbol, const u32 *handler, int coun
* We deliberately chose a buffer size of 128, so we won't scribble
* over anything important on overflow before we panic.
*/
-static u32 tlb_handler[128] __cpuinitdata;
+static u32 tlb_handler[128];
/* simply assume worst case size for labels and relocs */
-static struct uasm_label labels[128] __cpuinitdata;
-static struct uasm_reloc relocs[128] __cpuinitdata;
+static struct uasm_label labels[128];
+static struct uasm_reloc relocs[128];
-static int check_for_high_segbits __cpuinitdata;
+static int check_for_high_segbits;
-static unsigned int kscratch_used_mask __cpuinitdata;
+static unsigned int kscratch_used_mask;
static inline int __maybe_unused c0_kscratch(void)
{
@@ -316,7 +312,7 @@ static inline int __maybe_unused c0_kscratch(void)
}
}
-static int __cpuinit allocate_kscratch(void)
+static int allocate_kscratch(void)
{
int r;
unsigned int a = cpu_data[0].kscratch_mask & ~kscratch_used_mask;
@@ -333,11 +329,11 @@ static int __cpuinit allocate_kscratch(void)
return r;
}
-static int scratch_reg __cpuinitdata;
-static int pgd_reg __cpuinitdata;
+static int scratch_reg;
+static int pgd_reg;
enum vmalloc64_mode {not_refill, refill_scratch, refill_noscratch};
-static struct work_registers __cpuinit build_get_work_registers(u32 **p)
+static struct work_registers build_get_work_registers(u32 **p)
{
struct work_registers r;
@@ -393,7 +389,7 @@ static struct work_registers __cpuinit build_get_work_registers(u32 **p)
return r;
}
-static void __cpuinit build_restore_work_registers(u32 **p)
+static void build_restore_work_registers(u32 **p)
{
if (scratch_reg >= 0) {
UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
@@ -418,7 +414,7 @@ extern unsigned long pgd_current[];
/*
* The R3000 TLB handler is simple.
*/
-static void __cpuinit build_r3000_tlb_refill_handler(void)
+static void build_r3000_tlb_refill_handler(void)
{
long pgdc = (long)pgd_current;
u32 *p;
@@ -463,7 +459,7 @@ static void __cpuinit build_r3000_tlb_refill_handler(void)
* other one.To keep things simple, we first assume linear space,
* then we relocate it to the final handler layout as needed.
*/
-static u32 final_handler[64] __cpuinitdata;
+static u32 final_handler[64];
/*
* Hazards
@@ -487,7 +483,7 @@ static u32 final_handler[64] __cpuinitdata;
*
* As if we MIPS hackers wouldn't know how to nop pipelines happy ...
*/
-static void __cpuinit __maybe_unused build_tlb_probe_entry(u32 **p)
+static void __maybe_unused build_tlb_probe_entry(u32 **p)
{
switch (current_cpu_type()) {
/* Found by experiment: R4600 v2.0/R4700 needs this, too. */
@@ -511,9 +507,9 @@ static void __cpuinit __maybe_unused build_tlb_probe_entry(u32 **p)
*/
enum tlb_write_entry { tlb_random, tlb_indexed };
-static void __cpuinit build_tlb_write_entry(u32 **p, struct uasm_label **l,
- struct uasm_reloc **r,
- enum tlb_write_entry wmode)
+static void build_tlb_write_entry(u32 **p, struct uasm_label **l,
+ struct uasm_reloc **r,
+ enum tlb_write_entry wmode)
{
void(*tlbw)(u32 **) = NULL;
@@ -647,8 +643,8 @@ static void __cpuinit build_tlb_write_entry(u32 **p, struct uasm_label **l,
}
}
-static __cpuinit __maybe_unused void build_convert_pte_to_entrylo(u32 **p,
- unsigned int reg)
+static __maybe_unused void build_convert_pte_to_entrylo(u32 **p,
+ unsigned int reg)
{
if (cpu_has_rixi) {
UASM_i_ROTR(p, reg, reg, ilog2(_PAGE_GLOBAL));
@@ -663,11 +659,9 @@ static __cpuinit __maybe_unused void build_convert_pte_to_entrylo(u32 **p,
#ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT
-static __cpuinit void build_restore_pagemask(u32 **p,
- struct uasm_reloc **r,
- unsigned int tmp,
- enum label_id lid,
- int restore_scratch)
+static void build_restore_pagemask(u32 **p, struct uasm_reloc **r,
+ unsigned int tmp, enum label_id lid,
+ int restore_scratch)
{
if (restore_scratch) {
/* Reset default page size */
@@ -706,12 +700,11 @@ static __cpuinit void build_restore_pagemask(u32 **p,
}
}
-static __cpuinit void build_huge_tlb_write_entry(u32 **p,
- struct uasm_label **l,
- struct uasm_reloc **r,
- unsigned int tmp,
- enum tlb_write_entry wmode,
- int restore_scratch)
+static void build_huge_tlb_write_entry(u32 **p, struct uasm_label **l,
+ struct uasm_reloc **r,
+ unsigned int tmp,
+ enum tlb_write_entry wmode,
+ int restore_scratch)
{
/* Set huge page tlb entry size */
uasm_i_lui(p, tmp, PM_HUGE_MASK >> 16);
@@ -726,9 +719,9 @@ static __cpuinit void build_huge_tlb_write_entry(u32 **p,
/*
* Check if Huge PTE is present, if so then jump to LABEL.
*/
-static void __cpuinit
+static void
build_is_huge_pte(u32 **p, struct uasm_reloc **r, unsigned int tmp,
- unsigned int pmd, int lid)
+ unsigned int pmd, int lid)
{
UASM_i_LW(p, tmp, 0, pmd);
if (use_bbit_insns()) {
@@ -739,9 +732,8 @@ build_is_huge_pte(u32 **p, struct uasm_reloc **r, unsigned int tmp,
}
}
-static __cpuinit void build_huge_update_entries(u32 **p,
- unsigned int pte,
- unsigned int tmp)
+static void build_huge_update_entries(u32 **p, unsigned int pte,
+ unsigned int tmp)
{
int small_sequence;
@@ -771,11 +763,10 @@ static __cpuinit void build_huge_update_entries(u32 **p,
UASM_i_MTC0(p, pte, C0_ENTRYLO1); /* load it */
}
-static __cpuinit void build_huge_handler_tail(u32 **p,
- struct uasm_reloc **r,
- struct uasm_label **l,
- unsigned int pte,
- unsigned int ptr)
+static void build_huge_handler_tail(u32 **p, struct uasm_reloc **r,
+ struct uasm_label **l,
+ unsigned int pte,
+ unsigned int ptr)
{
#ifdef CONFIG_SMP
UASM_i_SC(p, pte, 0, ptr);
@@ -794,7 +785,7 @@ static __cpuinit void build_huge_handler_tail(u32 **p,
* TMP and PTR are scratch.
* TMP will be clobbered, PTR will hold the pmd entry.
*/
-static void __cpuinit
+static void
build_get_pmde64(u32 **p, struct uasm_label **l, struct uasm_reloc **r,
unsigned int tmp, unsigned int ptr)
{
@@ -886,7 +877,7 @@ build_get_pmde64(u32 **p, struct uasm_label **l, struct uasm_reloc **r,
* BVADDR is the faulting address, PTR is scratch.
* PTR will hold the pgd for vmalloc.
*/
-static void __cpuinit
+static void
build_get_pgd_vmalloc64(u32 **p, struct uasm_label **l, struct uasm_reloc **r,
unsigned int bvaddr, unsigned int ptr,
enum vmalloc64_mode mode)
@@ -956,7 +947,7 @@ build_get_pgd_vmalloc64(u32 **p, struct uasm_label **l, struct uasm_reloc **r,
* TMP and PTR are scratch.
* TMP will be clobbered, PTR will hold the pgd entry.
*/
-static void __cpuinit __maybe_unused
+static void __maybe_unused
build_get_pgde32(u32 **p, unsigned int tmp, unsigned int ptr)
{
long pgdc = (long)pgd_current;
@@ -991,7 +982,7 @@ build_get_pgde32(u32 **p, unsigned int tmp, unsigned int ptr)
#endif /* !CONFIG_64BIT */
-static void __cpuinit build_adjust_context(u32 **p, unsigned int ctx)
+static void build_adjust_context(u32 **p, unsigned int ctx)
{
unsigned int shift = 4 - (PTE_T_LOG2 + 1) + PAGE_SHIFT - 12;
unsigned int mask = (PTRS_PER_PTE / 2 - 1) << (PTE_T_LOG2 + 1);
@@ -1017,7 +1008,7 @@ static void __cpuinit build_adjust_context(u32 **p, unsigned int ctx)
uasm_i_andi(p, ctx, ctx, mask);
}
-static void __cpuinit build_get_ptep(u32 **p, unsigned int tmp, unsigned int ptr)
+static void build_get_ptep(u32 **p, unsigned int tmp, unsigned int ptr)
{
/*
* Bug workaround for the Nevada. It seems as if under certain
@@ -1042,8 +1033,7 @@ static void __cpuinit build_get_ptep(u32 **p, unsigned int tmp, unsigned int ptr
UASM_i_ADDU(p, ptr, ptr, tmp); /* add in offset */
}
-static void __cpuinit build_update_entries(u32 **p, unsigned int tmp,
- unsigned int ptep)
+static void build_update_entries(u32 **p, unsigned int tmp, unsigned int ptep)
{
/*
* 64bit address support (36bit on a 32bit CPU) in a 32bit
@@ -1104,7 +1094,7 @@ struct mips_huge_tlb_info {
int restore_scratch;
};
-static struct mips_huge_tlb_info __cpuinit
+static struct mips_huge_tlb_info
build_fast_tlb_refill_handler (u32 **p, struct uasm_label **l,
struct uasm_reloc **r, unsigned int tmp,
unsigned int ptr, int c0_scratch_reg)
@@ -1282,7 +1272,7 @@ build_fast_tlb_refill_handler (u32 **p, struct uasm_label **l,
*/
#define MIPS64_REFILL_INSNS 32
-static void __cpuinit build_r4000_tlb_refill_handler(void)
+static void build_r4000_tlb_refill_handler(void)
{
u32 *p = tlb_handler;
struct uasm_label *l = labels;
@@ -1462,11 +1452,11 @@ extern u32 handle_tlbm[], handle_tlbm_end[];
#ifdef CONFIG_MIPS_PGD_C0_CONTEXT
extern u32 tlbmiss_handler_setup_pgd[], tlbmiss_handler_setup_pgd_end[];
-static void __cpuinit build_r4000_setup_pgd(void)
+static void build_r4000_setup_pgd(void)
{
const int a0 = 4;
const int a1 = 5;
- u32 *p = tlbmiss_handler_setup_pgd_array;
+ u32 *p = tlbmiss_handler_setup_pgd;
const int tlbmiss_handler_setup_pgd_size =
tlbmiss_handler_setup_pgd_end - tlbmiss_handler_setup_pgd;
struct uasm_label *l = labels;
@@ -1513,7 +1503,7 @@ static void __cpuinit build_r4000_setup_pgd(void)
}
#endif
-static void __cpuinit
+static void
iPTE_LW(u32 **p, unsigned int pte, unsigned int ptr)
{
#ifdef CONFIG_SMP
@@ -1533,7 +1523,7 @@ iPTE_LW(u32 **p, unsigned int pte, unsigned int ptr)
#endif
}
-static void __cpuinit
+static void
iPTE_SW(u32 **p, struct uasm_reloc **r, unsigned int pte, unsigned int ptr,
unsigned int mode)
{
@@ -1593,7 +1583,7 @@ iPTE_SW(u32 **p, struct uasm_reloc **r, unsigned int pte, unsigned int ptr,
* the page table where this PTE is located, PTE will be re-loaded
* with it's original value.
*/
-static void __cpuinit
+static void
build_pte_present(u32 **p, struct uasm_reloc **r,
int pte, int ptr, int scratch, enum label_id lid)
{
@@ -1621,7 +1611,7 @@ build_pte_present(u32 **p, struct uasm_reloc **r,
}
/* Make PTE valid, store result in PTR. */
-static void __cpuinit
+static void
build_make_valid(u32 **p, struct uasm_reloc **r, unsigned int pte,
unsigned int ptr)
{
@@ -1634,7 +1624,7 @@ build_make_valid(u32 **p, struct uasm_reloc **r, unsigned int pte,
* Check if PTE can be written to, if not branch to LABEL. Regardless
* restore PTE with value from PTR when done.
*/
-static void __cpuinit
+static void
build_pte_writable(u32 **p, struct uasm_reloc **r,
unsigned int pte, unsigned int ptr, int scratch,
enum label_id lid)
@@ -1654,7 +1644,7 @@ build_pte_writable(u32 **p, struct uasm_reloc **r,
/* Make PTE writable, update software status bits as well, then store
* at PTR.
*/
-static void __cpuinit
+static void
build_make_write(u32 **p, struct uasm_reloc **r, unsigned int pte,
unsigned int ptr)
{
@@ -1668,7 +1658,7 @@ build_make_write(u32 **p, struct uasm_reloc **r, unsigned int pte,
* Check if PTE can be modified, if not branch to LABEL. Regardless
* restore PTE with value from PTR when done.
*/
-static void __cpuinit
+static void
build_pte_modifiable(u32 **p, struct uasm_reloc **r,
unsigned int pte, unsigned int ptr, int scratch,
enum label_id lid)
@@ -1697,7 +1687,7 @@ build_pte_modifiable(u32 **p, struct uasm_reloc **r,
* This places the pte into ENTRYLO0 and writes it with tlbwi.
* Then it returns.
*/
-static void __cpuinit
+static void
build_r3000_pte_reload_tlbwi(u32 **p, unsigned int pte, unsigned int tmp)
{
uasm_i_mtc0(p, pte, C0_ENTRYLO0); /* cp0 delay */
@@ -1713,7 +1703,7 @@ build_r3000_pte_reload_tlbwi(u32 **p, unsigned int pte, unsigned int tmp)
* may have the probe fail bit set as a result of a trap on a
* kseg2 access, i.e. without refill. Then it returns.
*/
-static void __cpuinit
+static void
build_r3000_tlb_reload_write(u32 **p, struct uasm_label **l,
struct uasm_reloc **r, unsigned int pte,
unsigned int tmp)
@@ -1731,7 +1721,7 @@ build_r3000_tlb_reload_write(u32 **p, struct uasm_label **l,
uasm_i_rfe(p); /* branch delay */
}
-static void __cpuinit
+static void
build_r3000_tlbchange_handler_head(u32 **p, unsigned int pte,
unsigned int ptr)
{
@@ -1751,7 +1741,7 @@ build_r3000_tlbchange_handler_head(u32 **p, unsigned int pte,
uasm_i_tlbp(p); /* load delay */
}
-static void __cpuinit build_r3000_tlb_load_handler(void)
+static void build_r3000_tlb_load_handler(void)
{
u32 *p = handle_tlbl;
const int handle_tlbl_size = handle_tlbl_end - handle_tlbl;
@@ -1782,7 +1772,7 @@ static void __cpuinit build_r3000_tlb_load_handler(void)
dump_handler("r3000_tlb_load", handle_tlbl, handle_tlbl_size);
}
-static void __cpuinit build_r3000_tlb_store_handler(void)
+static void build_r3000_tlb_store_handler(void)
{
u32 *p = handle_tlbs;
const int handle_tlbs_size = handle_tlbs_end - handle_tlbs;
@@ -1803,7 +1793,7 @@ static void __cpuinit build_r3000_tlb_store_handler(void)
uasm_i_j(&p, (unsigned long)tlb_do_page_fault_1 & 0x0fffffff);
uasm_i_nop(&p);
- if (p >= handle_tlbs)
+ if (p >= handle_tlbs_end)
panic("TLB store handler fastpath space exceeded");
uasm_resolve_relocs(relocs, labels);
@@ -1813,7 +1803,7 @@ static void __cpuinit build_r3000_tlb_store_handler(void)
dump_handler("r3000_tlb_store", handle_tlbs, handle_tlbs_size);
}
-static void __cpuinit build_r3000_tlb_modify_handler(void)
+static void build_r3000_tlb_modify_handler(void)
{
u32 *p = handle_tlbm;
const int handle_tlbm_size = handle_tlbm_end - handle_tlbm;
@@ -1848,7 +1838,7 @@ static void __cpuinit build_r3000_tlb_modify_handler(void)
/*
* R4000 style TLB load/store/modify handlers.
*/
-static struct work_registers __cpuinit
+static struct work_registers
build_r4000_tlbchange_handler_head(u32 **p, struct uasm_label **l,
struct uasm_reloc **r)
{
@@ -1884,7 +1874,7 @@ build_r4000_tlbchange_handler_head(u32 **p, struct uasm_label **l,
return wr;
}
-static void __cpuinit
+static void
build_r4000_tlbchange_handler_tail(u32 **p, struct uasm_label **l,
struct uasm_reloc **r, unsigned int tmp,
unsigned int ptr)
@@ -1902,7 +1892,7 @@ build_r4000_tlbchange_handler_tail(u32 **p, struct uasm_label **l,
#endif
}
-static void __cpuinit build_r4000_tlb_load_handler(void)
+static void build_r4000_tlb_load_handler(void)
{
u32 *p = handle_tlbl;
const int handle_tlbl_size = handle_tlbl_end - handle_tlbl;
@@ -2085,7 +2075,7 @@ static void __cpuinit build_r4000_tlb_load_handler(void)
dump_handler("r4000_tlb_load", handle_tlbl, handle_tlbl_size);
}
-static void __cpuinit build_r4000_tlb_store_handler(void)
+static void build_r4000_tlb_store_handler(void)
{
u32 *p = handle_tlbs;
const int handle_tlbs_size = handle_tlbs_end - handle_tlbs;
@@ -2140,7 +2130,7 @@ static void __cpuinit build_r4000_tlb_store_handler(void)
dump_handler("r4000_tlb_store", handle_tlbs, handle_tlbs_size);
}
-static void __cpuinit build_r4000_tlb_modify_handler(void)
+static void build_r4000_tlb_modify_handler(void)
{
u32 *p = handle_tlbm;
const int handle_tlbm_size = handle_tlbm_end - handle_tlbm;
@@ -2196,7 +2186,7 @@ static void __cpuinit build_r4000_tlb_modify_handler(void)
dump_handler("r4000_tlb_modify", handle_tlbm, handle_tlbm_size);
}
-static void __cpuinit flush_tlb_handlers(void)
+static void flush_tlb_handlers(void)
{
local_flush_icache_range((unsigned long)handle_tlbl,
(unsigned long)handle_tlbl_end);
@@ -2210,7 +2200,7 @@ static void __cpuinit flush_tlb_handlers(void)
#endif
}
-void __cpuinit build_tlb_refill_handler(void)
+void build_tlb_refill_handler(void)
{
/*
* The refill handler is generated per-CPU, multi-node systems
diff --git a/arch/mips/mm/uasm-micromips.c b/arch/mips/mm/uasm-micromips.c
index 162ee6d62788..060000fa653c 100644
--- a/arch/mips/mm/uasm-micromips.c
+++ b/arch/mips/mm/uasm-micromips.c
@@ -49,7 +49,7 @@
#include "uasm.c"
-static struct insn insn_table_MM[] __uasminitdata = {
+static struct insn insn_table_MM[] = {
{ insn_addu, M(mm_pool32a_op, 0, 0, 0, 0, mm_addu32_op), RT | RS | RD },
{ insn_addiu, M(mm_addiu32_op, 0, 0, 0, 0, 0), RT | RS | SIMM },
{ insn_and, M(mm_pool32a_op, 0, 0, 0, 0, mm_and_op), RT | RS | RD },
@@ -118,7 +118,7 @@ static struct insn insn_table_MM[] __uasminitdata = {
#undef M
-static inline __uasminit u32 build_bimm(s32 arg)
+static inline u32 build_bimm(s32 arg)
{
WARN(arg > 0xffff || arg < -0x10000,
KERN_WARNING "Micro-assembler field overflow\n");
@@ -128,7 +128,7 @@ static inline __uasminit u32 build_bimm(s32 arg)
return ((arg < 0) ? (1 << 15) : 0) | ((arg >> 1) & 0x7fff);
}
-static inline __uasminit u32 build_jimm(u32 arg)
+static inline u32 build_jimm(u32 arg)
{
WARN(arg & ~((JIMM_MASK << 2) | 1),
@@ -141,7 +141,7 @@ static inline __uasminit u32 build_jimm(u32 arg)
* The order of opcode arguments is implicitly left to right,
* starting with RS and ending with FUNC or IMM.
*/
-static void __uasminit build_insn(u32 **buf, enum opcode opc, ...)
+static void build_insn(u32 **buf, enum opcode opc, ...)
{
struct insn *ip = NULL;
unsigned int i;
@@ -199,7 +199,7 @@ static void __uasminit build_insn(u32 **buf, enum opcode opc, ...)
(*buf)++;
}
-static inline void __uasminit
+static inline void
__resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab)
{
long laddr = (long)lab->addr;
diff --git a/arch/mips/mm/uasm-mips.c b/arch/mips/mm/uasm-mips.c
index 5fcdd8fe3e83..0c724589854e 100644
--- a/arch/mips/mm/uasm-mips.c
+++ b/arch/mips/mm/uasm-mips.c
@@ -49,7 +49,7 @@
#include "uasm.c"
-static struct insn insn_table[] __uasminitdata = {
+static struct insn insn_table[] = {
{ insn_addiu, M(addiu_op, 0, 0, 0, 0, 0), RS | RT | SIMM },
{ insn_addu, M(spec_op, 0, 0, 0, 0, addu_op), RS | RT | RD },
{ insn_andi, M(andi_op, 0, 0, 0, 0, 0), RS | RT | UIMM },
@@ -119,7 +119,7 @@ static struct insn insn_table[] __uasminitdata = {
#undef M
-static inline __uasminit u32 build_bimm(s32 arg)
+static inline u32 build_bimm(s32 arg)
{
WARN(arg > 0x1ffff || arg < -0x20000,
KERN_WARNING "Micro-assembler field overflow\n");
@@ -129,7 +129,7 @@ static inline __uasminit u32 build_bimm(s32 arg)
return ((arg < 0) ? (1 << 15) : 0) | ((arg >> 2) & 0x7fff);
}
-static inline __uasminit u32 build_jimm(u32 arg)
+static inline u32 build_jimm(u32 arg)
{
WARN(arg & ~(JIMM_MASK << 2),
KERN_WARNING "Micro-assembler field overflow\n");
@@ -141,7 +141,7 @@ static inline __uasminit u32 build_jimm(u32 arg)
* The order of opcode arguments is implicitly left to right,
* starting with RS and ending with FUNC or IMM.
*/
-static void __uasminit build_insn(u32 **buf, enum opcode opc, ...)
+static void build_insn(u32 **buf, enum opcode opc, ...)
{
struct insn *ip = NULL;
unsigned int i;
@@ -187,7 +187,7 @@ static void __uasminit build_insn(u32 **buf, enum opcode opc, ...)
(*buf)++;
}
-static inline void __uasminit
+static inline void
__resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab)
{
long laddr = (long)lab->addr;
diff --git a/arch/mips/mm/uasm.c b/arch/mips/mm/uasm.c
index 7eb5e4355d25..b9d14b6c7f58 100644
--- a/arch/mips/mm/uasm.c
+++ b/arch/mips/mm/uasm.c
@@ -63,35 +63,35 @@ struct insn {
enum fields fields;
};
-static inline __uasminit u32 build_rs(u32 arg)
+static inline u32 build_rs(u32 arg)
{
WARN(arg & ~RS_MASK, KERN_WARNING "Micro-assembler field overflow\n");
return (arg & RS_MASK) << RS_SH;
}
-static inline __uasminit u32 build_rt(u32 arg)
+static inline u32 build_rt(u32 arg)
{
WARN(arg & ~RT_MASK, KERN_WARNING "Micro-assembler field overflow\n");
return (arg & RT_MASK) << RT_SH;
}
-static inline __uasminit u32 build_rd(u32 arg)
+static inline u32 build_rd(u32 arg)
{
WARN(arg & ~RD_MASK, KERN_WARNING "Micro-assembler field overflow\n");
return (arg & RD_MASK) << RD_SH;
}
-static inline __uasminit u32 build_re(u32 arg)
+static inline u32 build_re(u32 arg)
{
WARN(arg & ~RE_MASK, KERN_WARNING "Micro-assembler field overflow\n");
return (arg & RE_MASK) << RE_SH;
}
-static inline __uasminit u32 build_simm(s32 arg)
+static inline u32 build_simm(s32 arg)
{
WARN(arg > 0x7fff || arg < -0x8000,
KERN_WARNING "Micro-assembler field overflow\n");
@@ -99,14 +99,14 @@ static inline __uasminit u32 build_simm(s32 arg)
return arg & 0xffff;
}
-static inline __uasminit u32 build_uimm(u32 arg)
+static inline u32 build_uimm(u32 arg)
{
WARN(arg & ~IMM_MASK, KERN_WARNING "Micro-assembler field overflow\n");
return arg & IMM_MASK;
}
-static inline __uasminit u32 build_scimm(u32 arg)
+static inline u32 build_scimm(u32 arg)
{
WARN(arg & ~SCIMM_MASK,
KERN_WARNING "Micro-assembler field overflow\n");
@@ -114,21 +114,21 @@ static inline __uasminit u32 build_scimm(u32 arg)
return (arg & SCIMM_MASK) << SCIMM_SH;
}
-static inline __uasminit u32 build_func(u32 arg)
+static inline u32 build_func(u32 arg)
{
WARN(arg & ~FUNC_MASK, KERN_WARNING "Micro-assembler field overflow\n");
return arg & FUNC_MASK;
}
-static inline __uasminit u32 build_set(u32 arg)
+static inline u32 build_set(u32 arg)
{
WARN(arg & ~SET_MASK, KERN_WARNING "Micro-assembler field overflow\n");
return arg & SET_MASK;
}
-static void __uasminit build_insn(u32 **buf, enum opcode opc, ...);
+static void build_insn(u32 **buf, enum opcode opc, ...);
#define I_u1u2u3(op) \
Ip_u1u2u3(op) \
@@ -286,7 +286,7 @@ I_u3u1u2(_ldx)
#ifdef CONFIG_CPU_CAVIUM_OCTEON
#include <asm/octeon/octeon.h>
-void __uasminit ISAFUNC(uasm_i_pref)(u32 **buf, unsigned int a, signed int b,
+void ISAFUNC(uasm_i_pref)(u32 **buf, unsigned int a, signed int b,
unsigned int c)
{
if (OCTEON_IS_MODEL(OCTEON_CN63XX_PASS1_X) && a <= 24 && a != 5)
@@ -304,7 +304,7 @@ I_u2s3u1(_pref)
#endif
/* Handle labels. */
-void __uasminit ISAFUNC(uasm_build_label)(struct uasm_label **lab, u32 *addr, int lid)
+void ISAFUNC(uasm_build_label)(struct uasm_label **lab, u32 *addr, int lid)
{
(*lab)->addr = addr;
(*lab)->lab = lid;
@@ -312,7 +312,7 @@ void __uasminit ISAFUNC(uasm_build_label)(struct uasm_label **lab, u32 *addr, in
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_build_label));
-int __uasminit ISAFUNC(uasm_in_compat_space_p)(long addr)
+int ISAFUNC(uasm_in_compat_space_p)(long addr)
{
/* Is this address in 32bit compat space? */
#ifdef CONFIG_64BIT
@@ -323,7 +323,7 @@ int __uasminit ISAFUNC(uasm_in_compat_space_p)(long addr)
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_in_compat_space_p));
-static int __uasminit uasm_rel_highest(long val)
+static int uasm_rel_highest(long val)
{
#ifdef CONFIG_64BIT
return ((((val + 0x800080008000L) >> 48) & 0xffff) ^ 0x8000) - 0x8000;
@@ -332,7 +332,7 @@ static int __uasminit uasm_rel_highest(long val)
#endif
}
-static int __uasminit uasm_rel_higher(long val)
+static int uasm_rel_higher(long val)
{
#ifdef CONFIG_64BIT
return ((((val + 0x80008000L) >> 32) & 0xffff) ^ 0x8000) - 0x8000;
@@ -341,19 +341,19 @@ static int __uasminit uasm_rel_higher(long val)
#endif
}
-int __uasminit ISAFUNC(uasm_rel_hi)(long val)
+int ISAFUNC(uasm_rel_hi)(long val)
{
return ((((val + 0x8000L) >> 16) & 0xffff) ^ 0x8000) - 0x8000;
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_rel_hi));
-int __uasminit ISAFUNC(uasm_rel_lo)(long val)
+int ISAFUNC(uasm_rel_lo)(long val)
{
return ((val & 0xffff) ^ 0x8000) - 0x8000;
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_rel_lo));
-void __uasminit ISAFUNC(UASM_i_LA_mostly)(u32 **buf, unsigned int rs, long addr)
+void ISAFUNC(UASM_i_LA_mostly)(u32 **buf, unsigned int rs, long addr)
{
if (!ISAFUNC(uasm_in_compat_space_p)(addr)) {
ISAFUNC(uasm_i_lui)(buf, rs, uasm_rel_highest(addr));
@@ -371,7 +371,7 @@ void __uasminit ISAFUNC(UASM_i_LA_mostly)(u32 **buf, unsigned int rs, long addr)
}
UASM_EXPORT_SYMBOL(ISAFUNC(UASM_i_LA_mostly));
-void __uasminit ISAFUNC(UASM_i_LA)(u32 **buf, unsigned int rs, long addr)
+void ISAFUNC(UASM_i_LA)(u32 **buf, unsigned int rs, long addr)
{
ISAFUNC(UASM_i_LA_mostly)(buf, rs, addr);
if (ISAFUNC(uasm_rel_lo(addr))) {
@@ -386,8 +386,7 @@ void __uasminit ISAFUNC(UASM_i_LA)(u32 **buf, unsigned int rs, long addr)
UASM_EXPORT_SYMBOL(ISAFUNC(UASM_i_LA));
/* Handle relocations. */
-void __uasminit
-ISAFUNC(uasm_r_mips_pc16)(struct uasm_reloc **rel, u32 *addr, int lid)
+void ISAFUNC(uasm_r_mips_pc16)(struct uasm_reloc **rel, u32 *addr, int lid)
{
(*rel)->addr = addr;
(*rel)->type = R_MIPS_PC16;
@@ -396,11 +395,11 @@ ISAFUNC(uasm_r_mips_pc16)(struct uasm_reloc **rel, u32 *addr, int lid)
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_r_mips_pc16));
-static inline void __uasminit
-__resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab);
+static inline void __resolve_relocs(struct uasm_reloc *rel,
+ struct uasm_label *lab);
-void __uasminit
-ISAFUNC(uasm_resolve_relocs)(struct uasm_reloc *rel, struct uasm_label *lab)
+void ISAFUNC(uasm_resolve_relocs)(struct uasm_reloc *rel,
+ struct uasm_label *lab)
{
struct uasm_label *l;
@@ -411,8 +410,8 @@ ISAFUNC(uasm_resolve_relocs)(struct uasm_reloc *rel, struct uasm_label *lab)
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_resolve_relocs));
-void __uasminit
-ISAFUNC(uasm_move_relocs)(struct uasm_reloc *rel, u32 *first, u32 *end, long off)
+void ISAFUNC(uasm_move_relocs)(struct uasm_reloc *rel, u32 *first, u32 *end,
+ long off)
{
for (; rel->lab != UASM_LABEL_INVALID; rel++)
if (rel->addr >= first && rel->addr < end)
@@ -420,8 +419,8 @@ ISAFUNC(uasm_move_relocs)(struct uasm_reloc *rel, u32 *first, u32 *end, long off
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_move_relocs));
-void __uasminit
-ISAFUNC(uasm_move_labels)(struct uasm_label *lab, u32 *first, u32 *end, long off)
+void ISAFUNC(uasm_move_labels)(struct uasm_label *lab, u32 *first, u32 *end,
+ long off)
{
for (; lab->lab != UASM_LABEL_INVALID; lab++)
if (lab->addr >= first && lab->addr < end)
@@ -429,9 +428,8 @@ ISAFUNC(uasm_move_labels)(struct uasm_label *lab, u32 *first, u32 *end, long off
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_move_labels));
-void __uasminit
-ISAFUNC(uasm_copy_handler)(struct uasm_reloc *rel, struct uasm_label *lab, u32 *first,
- u32 *end, u32 *target)
+void ISAFUNC(uasm_copy_handler)(struct uasm_reloc *rel, struct uasm_label *lab,
+ u32 *first, u32 *end, u32 *target)
{
long off = (long)(target - first);
@@ -442,7 +440,7 @@ ISAFUNC(uasm_copy_handler)(struct uasm_reloc *rel, struct uasm_label *lab, u32 *
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_copy_handler));
-int __uasminit ISAFUNC(uasm_insn_has_bdelay)(struct uasm_reloc *rel, u32 *addr)
+int ISAFUNC(uasm_insn_has_bdelay)(struct uasm_reloc *rel, u32 *addr)
{
for (; rel->lab != UASM_LABEL_INVALID; rel++) {
if (rel->addr == addr
@@ -456,83 +454,79 @@ int __uasminit ISAFUNC(uasm_insn_has_bdelay)(struct uasm_reloc *rel, u32 *addr)
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_insn_has_bdelay));
/* Convenience functions for labeled branches. */
-void __uasminit
-ISAFUNC(uasm_il_bltz)(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid)
+void ISAFUNC(uasm_il_bltz)(u32 **p, struct uasm_reloc **r, unsigned int reg,
+ int lid)
{
uasm_r_mips_pc16(r, *p, lid);
ISAFUNC(uasm_i_bltz)(p, reg, 0);
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_il_bltz));
-void __uasminit
-ISAFUNC(uasm_il_b)(u32 **p, struct uasm_reloc **r, int lid)
+void ISAFUNC(uasm_il_b)(u32 **p, struct uasm_reloc **r, int lid)
{
uasm_r_mips_pc16(r, *p, lid);
ISAFUNC(uasm_i_b)(p, 0);
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_il_b));
-void __uasminit
-ISAFUNC(uasm_il_beqz)(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid)
+void ISAFUNC(uasm_il_beqz)(u32 **p, struct uasm_reloc **r, unsigned int reg,
+ int lid)
{
uasm_r_mips_pc16(r, *p, lid);
ISAFUNC(uasm_i_beqz)(p, reg, 0);
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_il_beqz));
-void __uasminit
-ISAFUNC(uasm_il_beqzl)(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid)
+void ISAFUNC(uasm_il_beqzl)(u32 **p, struct uasm_reloc **r, unsigned int reg,
+ int lid)
{
uasm_r_mips_pc16(r, *p, lid);
ISAFUNC(uasm_i_beqzl)(p, reg, 0);
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_il_beqzl));
-void __uasminit
-ISAFUNC(uasm_il_bne)(u32 **p, struct uasm_reloc **r, unsigned int reg1,
- unsigned int reg2, int lid)
+void ISAFUNC(uasm_il_bne)(u32 **p, struct uasm_reloc **r, unsigned int reg1,
+ unsigned int reg2, int lid)
{
uasm_r_mips_pc16(r, *p, lid);
ISAFUNC(uasm_i_bne)(p, reg1, reg2, 0);
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_il_bne));
-void __uasminit
-ISAFUNC(uasm_il_bnez)(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid)
+void ISAFUNC(uasm_il_bnez)(u32 **p, struct uasm_reloc **r, unsigned int reg,
+ int lid)
{
uasm_r_mips_pc16(r, *p, lid);
ISAFUNC(uasm_i_bnez)(p, reg, 0);
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_il_bnez));
-void __uasminit
-ISAFUNC(uasm_il_bgezl)(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid)
+void ISAFUNC(uasm_il_bgezl)(u32 **p, struct uasm_reloc **r, unsigned int reg,
+ int lid)
{
uasm_r_mips_pc16(r, *p, lid);
ISAFUNC(uasm_i_bgezl)(p, reg, 0);
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_il_bgezl));
-void __uasminit
-ISAFUNC(uasm_il_bgez)(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid)
+void ISAFUNC(uasm_il_bgez)(u32 **p, struct uasm_reloc **r, unsigned int reg,
+ int lid)
{
uasm_r_mips_pc16(r, *p, lid);
ISAFUNC(uasm_i_bgez)(p, reg, 0);
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_il_bgez));
-void __uasminit
-ISAFUNC(uasm_il_bbit0)(u32 **p, struct uasm_reloc **r, unsigned int reg,
- unsigned int bit, int lid)
+void ISAFUNC(uasm_il_bbit0)(u32 **p, struct uasm_reloc **r, unsigned int reg,
+ unsigned int bit, int lid)
{
uasm_r_mips_pc16(r, *p, lid);
ISAFUNC(uasm_i_bbit0)(p, reg, bit, 0);
}
UASM_EXPORT_SYMBOL(ISAFUNC(uasm_il_bbit0));
-void __uasminit
-ISAFUNC(uasm_il_bbit1)(u32 **p, struct uasm_reloc **r, unsigned int reg,
- unsigned int bit, int lid)
+void ISAFUNC(uasm_il_bbit1)(u32 **p, struct uasm_reloc **r, unsigned int reg,
+ unsigned int bit, int lid)
{
uasm_r_mips_pc16(r, *p, lid);
ISAFUNC(uasm_i_bbit1)(p, reg, bit, 0);
diff --git a/arch/mips/mti-malta/malta-smtc.c b/arch/mips/mti-malta/malta-smtc.c
index becbf47506a5..c4849904f013 100644
--- a/arch/mips/mti-malta/malta-smtc.c
+++ b/arch/mips/mti-malta/malta-smtc.c
@@ -32,7 +32,7 @@ static void msmtc_send_ipi_mask(const struct cpumask *mask, unsigned int action)
/*
* Post-config but pre-boot cleanup entry point
*/
-static void __cpuinit msmtc_init_secondary(void)
+static void msmtc_init_secondary(void)
{
int myvpe;
@@ -53,7 +53,7 @@ static void __cpuinit msmtc_init_secondary(void)
/*
* Platform "CPU" startup hook
*/
-static void __cpuinit msmtc_boot_secondary(int cpu, struct task_struct *idle)
+static void msmtc_boot_secondary(int cpu, struct task_struct *idle)
{
smtc_boot_secondary(cpu, idle);
}
@@ -61,7 +61,7 @@ static void __cpuinit msmtc_boot_secondary(int cpu, struct task_struct *idle)
/*
* SMP initialization finalization entry point
*/
-static void __cpuinit msmtc_smp_finish(void)
+static void msmtc_smp_finish(void)
{
smtc_smp_finish();
}
diff --git a/arch/mips/mti-malta/malta-time.c b/arch/mips/mti-malta/malta-time.c
index 0ad305f75802..53aad4a35375 100644
--- a/arch/mips/mti-malta/malta-time.c
+++ b/arch/mips/mti-malta/malta-time.c
@@ -150,7 +150,7 @@ static void __init plat_perf_setup(void)
}
}
-unsigned int __cpuinit get_c0_compare_int(void)
+unsigned int get_c0_compare_int(void)
{
#ifdef MSC01E_INT_BASE
if (cpu_has_veic) {
diff --git a/arch/mips/mti-sead3/sead3-time.c b/arch/mips/mti-sead3/sead3-time.c
index 96b42eb9b5e2..a43ea3cc0a3b 100644
--- a/arch/mips/mti-sead3/sead3-time.c
+++ b/arch/mips/mti-sead3/sead3-time.c
@@ -91,7 +91,7 @@ static void __init plat_perf_setup(void)
}
}
-unsigned int __cpuinit get_c0_compare_int(void)
+unsigned int get_c0_compare_int(void)
{
if (cpu_has_vint)
set_vi_handler(cp0_compare_irq, mips_timer_dispatch);
diff --git a/arch/mips/netlogic/common/irq.c b/arch/mips/netlogic/common/irq.c
index 73facb2b33bb..1c7e3a1b81ab 100644
--- a/arch/mips/netlogic/common/irq.c
+++ b/arch/mips/netlogic/common/irq.c
@@ -40,6 +40,10 @@
#include <linux/slab.h>
#include <linux/irq.h>
+#include <linux/irqdomain.h>
+#include <linux/of_address.h>
+#include <linux/of_irq.h>
+
#include <asm/errno.h>
#include <asm/signal.h>
#include <asm/ptrace.h>
@@ -223,17 +227,6 @@ static void nlm_init_node_irqs(int node)
nodep->irqmask = irqmask;
}
-void __init arch_init_irq(void)
-{
- /* Initialize the irq descriptors */
- nlm_init_percpu_irqs();
- nlm_init_node_irqs(0);
- write_c0_eimr(nlm_current_node()->irqmask);
-#if defined(CONFIG_CPU_XLR)
- nlm_setup_fmn_irq();
-#endif
-}
-
void nlm_smp_irq_init(int hwcpuid)
{
int node, cpu;
@@ -266,3 +259,56 @@ asmlinkage void plat_irq_dispatch(void)
/* top level irq handling */
do_IRQ(nlm_irq_to_xirq(node, i));
}
+
+#ifdef CONFIG_OF
+static struct irq_domain *xlp_pic_domain;
+
+static const struct irq_domain_ops xlp_pic_irq_domain_ops = {
+ .xlate = irq_domain_xlate_onetwocell,
+};
+
+static int __init xlp_of_pic_init(struct device_node *node,
+ struct device_node *parent)
+{
+ const int n_picirqs = PIC_IRT_LAST_IRQ - PIC_IRQ_BASE + 1;
+ struct resource res;
+ int socid, ret;
+
+ /* we need a hack to get the PIC's SoC chip id */
+ ret = of_address_to_resource(node, 0, &res);
+ if (ret < 0) {
+ pr_err("PIC %s: reg property not found!\n", node->name);
+ return -EINVAL;
+ }
+ socid = (res.start >> 18) & 0x3;
+ xlp_pic_domain = irq_domain_add_legacy(node, n_picirqs,
+ nlm_irq_to_xirq(socid, PIC_IRQ_BASE), PIC_IRQ_BASE,
+ &xlp_pic_irq_domain_ops, NULL);
+ if (xlp_pic_domain == NULL) {
+ pr_err("PIC %s: Creating legacy domain failed!\n", node->name);
+ return -EINVAL;
+ }
+ pr_info("Node %d: IRQ domain created for PIC@%pa\n", socid,
+ &res.start);
+ return 0;
+}
+
+static struct of_device_id __initdata xlp_pic_irq_ids[] = {
+ { .compatible = "netlogic,xlp-pic", .data = xlp_of_pic_init },
+ {},
+};
+#endif
+
+void __init arch_init_irq(void)
+{
+ /* Initialize the irq descriptors */
+ nlm_init_percpu_irqs();
+ nlm_init_node_irqs(0);
+ write_c0_eimr(nlm_current_node()->irqmask);
+#if defined(CONFIG_CPU_XLR)
+ nlm_setup_fmn_irq();
+#endif
+#if defined(CONFIG_OF)
+ of_irq_init(xlp_pic_irq_ids);
+#endif
+}
diff --git a/arch/mips/netlogic/common/smp.c b/arch/mips/netlogic/common/smp.c
index 885d293b61da..4e35d9c453e2 100644
--- a/arch/mips/netlogic/common/smp.c
+++ b/arch/mips/netlogic/common/smp.c
@@ -116,7 +116,7 @@ void nlm_early_init_secondary(int cpu)
/*
* Code to run on secondary just after probing the CPU
*/
-static void __cpuinit nlm_init_secondary(void)
+static void nlm_init_secondary(void)
{
int hwtid;
@@ -252,7 +252,7 @@ unsupp:
return 0;
}
-int __cpuinit nlm_wakeup_secondary_cpus(void)
+int nlm_wakeup_secondary_cpus(void)
{
u32 *reset_data;
int threadmode;
diff --git a/arch/mips/netlogic/common/smpboot.S b/arch/mips/netlogic/common/smpboot.S
index 528c46c5a170..aa6cff0a229b 100644
--- a/arch/mips/netlogic/common/smpboot.S
+++ b/arch/mips/netlogic/common/smpboot.S
@@ -70,7 +70,6 @@ FEXPORT(xlp_boot_core0_siblings) /* "Master" cpu starts from here */
nop
/* not reached */
- __CPUINIT
NESTED(nlm_boot_secondary_cpus, 16, sp)
/* Initialize CP0 Status */
move t1, zero
@@ -94,7 +93,6 @@ NESTED(nlm_boot_secondary_cpus, 16, sp)
jr t0
nop
END(nlm_boot_secondary_cpus)
- __FINIT
/*
* In case of RMIboot bootloader which is used on XLR boards, the CPUs
@@ -102,7 +100,6 @@ END(nlm_boot_secondary_cpus)
* This will get them out of the bootloader code and into linux. Needed
* because the bootloader area will be taken and initialized by linux.
*/
- __CPUINIT
NESTED(nlm_rmiboot_preboot, 16, sp)
mfc0 t0, $15, 1 /* read ebase */
andi t0, 0x1f /* t0 has the processor_id() */
@@ -140,4 +137,3 @@ NESTED(nlm_rmiboot_preboot, 16, sp)
b 1b
nop
END(nlm_rmiboot_preboot)
- __FINIT
diff --git a/arch/mips/netlogic/common/time.c b/arch/mips/netlogic/common/time.c
index 5c56555380bb..045a396c57ce 100644
--- a/arch/mips/netlogic/common/time.c
+++ b/arch/mips/netlogic/common/time.c
@@ -54,7 +54,7 @@
#error "Unknown CPU"
#endif
-unsigned int __cpuinit get_c0_compare_int(void)
+unsigned int get_c0_compare_int(void)
{
return IRQ_TIMER;
}
diff --git a/arch/mips/netlogic/dts/xlp_evp.dts b/arch/mips/netlogic/dts/xlp_evp.dts
index e14f42308064..06407033678e 100644
--- a/arch/mips/netlogic/dts/xlp_evp.dts
+++ b/arch/mips/netlogic/dts/xlp_evp.dts
@@ -76,10 +76,11 @@
};
};
pic: pic@4000 {
- interrupt-controller;
+ compatible = "netlogic,xlp-pic";
#address-cells = <0>;
#interrupt-cells = <1>;
reg = <0 0x4000 0x200>;
+ interrupt-controller;
};
nor_flash@1,0 {
diff --git a/arch/mips/netlogic/dts/xlp_svp.dts b/arch/mips/netlogic/dts/xlp_svp.dts
index 8af4bdbe5d99..9c5db102df53 100644
--- a/arch/mips/netlogic/dts/xlp_svp.dts
+++ b/arch/mips/netlogic/dts/xlp_svp.dts
@@ -76,10 +76,11 @@
};
};
pic: pic@4000 {
- interrupt-controller;
+ compatible = "netlogic,xlp-pic";
#address-cells = <0>;
#interrupt-cells = <1>;
reg = <0 0x4000 0x200>;
+ interrupt-controller;
};
nor_flash@1,0 {
diff --git a/arch/mips/netlogic/xlp/usb-init.c b/arch/mips/netlogic/xlp/usb-init.c
index 9c401dd78337..ef3897ef0dc7 100644
--- a/arch/mips/netlogic/xlp/usb-init.c
+++ b/arch/mips/netlogic/xlp/usb-init.c
@@ -119,7 +119,7 @@ static u64 xlp_usb_dmamask = ~(u32)0;
static void nlm_usb_fixup_final(struct pci_dev *dev)
{
dev->dev.dma_mask = &xlp_usb_dmamask;
- dev->dev.coherent_dma_mask = DMA_BIT_MASK(64);
+ dev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
switch (dev->devfn) {
case 0x10:
dev->irq = PIC_EHCI_0_IRQ;
diff --git a/arch/mips/netlogic/xlr/wakeup.c b/arch/mips/netlogic/xlr/wakeup.c
index c06e4c9f0478..9fb81fa6272a 100644
--- a/arch/mips/netlogic/xlr/wakeup.c
+++ b/arch/mips/netlogic/xlr/wakeup.c
@@ -49,7 +49,7 @@
#include <asm/netlogic/xlr/iomap.h>
#include <asm/netlogic/xlr/pic.h>
-int __cpuinit xlr_wakeup_secondary_cpus(void)
+int xlr_wakeup_secondary_cpus(void)
{
struct nlm_soc_info *nodep;
unsigned int i, j, boot_cpu;
diff --git a/arch/mips/pci/pci-ip27.c b/arch/mips/pci/pci-ip27.c
index 7b2ac81e1f59..162b4cb29dba 100644
--- a/arch/mips/pci/pci-ip27.c
+++ b/arch/mips/pci/pci-ip27.c
@@ -42,7 +42,7 @@ int irq_to_slot[MAX_PCI_BUSSES * MAX_DEVICES_PER_PCIBUS];
extern struct pci_ops bridge_pci_ops;
-int __cpuinit bridge_probe(nasid_t nasid, int widget_id, int masterwid)
+int bridge_probe(nasid_t nasid, int widget_id, int masterwid)
{
unsigned long offset = NODE_OFFSET(nasid);
struct bridge_controller *bc;
diff --git a/arch/mips/pmcs-msp71xx/msp_smtc.c b/arch/mips/pmcs-msp71xx/msp_smtc.c
index c8dcc1c01e18..6b5607fce279 100644
--- a/arch/mips/pmcs-msp71xx/msp_smtc.c
+++ b/arch/mips/pmcs-msp71xx/msp_smtc.c
@@ -33,7 +33,7 @@ static void msp_smtc_send_ipi_mask(const struct cpumask *mask,
/*
* Post-config but pre-boot cleanup entry point
*/
-static void __cpuinit msp_smtc_init_secondary(void)
+static void msp_smtc_init_secondary(void)
{
int myvpe;
@@ -48,8 +48,7 @@ static void __cpuinit msp_smtc_init_secondary(void)
/*
* Platform "CPU" startup hook
*/
-static void __cpuinit msp_smtc_boot_secondary(int cpu,
- struct task_struct *idle)
+static void msp_smtc_boot_secondary(int cpu, struct task_struct *idle)
{
smtc_boot_secondary(cpu, idle);
}
@@ -57,7 +56,7 @@ static void __cpuinit msp_smtc_boot_secondary(int cpu,
/*
* SMP initialization finalization entry point
*/
-static void __cpuinit msp_smtc_smp_finish(void)
+static void msp_smtc_smp_finish(void)
{
smtc_smp_finish();
}
diff --git a/arch/mips/pmcs-msp71xx/msp_time.c b/arch/mips/pmcs-msp71xx/msp_time.c
index 8f12ecc55ace..fea917be0ff1 100644
--- a/arch/mips/pmcs-msp71xx/msp_time.c
+++ b/arch/mips/pmcs-msp71xx/msp_time.c
@@ -88,7 +88,7 @@ void __init plat_time_init(void)
mips_hpt_frequency = cpu_rate/2;
}
-unsigned int __cpuinit get_c0_compare_int(void)
+unsigned int get_c0_compare_int(void)
{
/* MIPS_MT modes may want timer for second VPE */
if ((get_current_vpe()) && !tim_installed) {
diff --git a/arch/mips/pnx833x/common/interrupts.c b/arch/mips/pnx833x/common/interrupts.c
index a4a90596c0ad..e460865873c1 100644
--- a/arch/mips/pnx833x/common/interrupts.c
+++ b/arch/mips/pnx833x/common/interrupts.c
@@ -281,7 +281,7 @@ void __init arch_init_irq(void)
write_c0_status(read_c0_status() | IE_IRQ2);
}
-unsigned int __cpuinit get_c0_compare_int(void)
+unsigned int get_c0_compare_int(void)
{
if (cpu_has_vint)
set_vi_handler(cp0_compare_irq, pnx833x_timer_dispatch);
diff --git a/arch/mips/powertv/time.c b/arch/mips/powertv/time.c
index 9fd7b67f2af7..f38b0d45eca9 100644
--- a/arch/mips/powertv/time.c
+++ b/arch/mips/powertv/time.c
@@ -25,7 +25,7 @@
#include "powertv-clock.h"
-unsigned int __cpuinit get_c0_compare_int(void)
+unsigned int get_c0_compare_int(void)
{
return irq_mips_timer;
}
diff --git a/arch/mips/ralink/irq.c b/arch/mips/ralink/irq.c
index 320b1f1043ff..781b3d14a489 100644
--- a/arch/mips/ralink/irq.c
+++ b/arch/mips/ralink/irq.c
@@ -73,7 +73,7 @@ static struct irq_chip ralink_intc_irq_chip = {
.irq_mask_ack = ralink_intc_irq_mask,
};
-unsigned int __cpuinit get_c0_compare_int(void)
+unsigned int get_c0_compare_int(void)
{
return CP0_LEGACY_COMPARE_IRQ;
}
diff --git a/arch/mips/sgi-ip27/ip27-init.c b/arch/mips/sgi-ip27/ip27-init.c
index d41b1c6fb032..ee736bd103f8 100644
--- a/arch/mips/sgi-ip27/ip27-init.c
+++ b/arch/mips/sgi-ip27/ip27-init.c
@@ -54,7 +54,7 @@ extern void pcibr_setup(cnodeid_t);
extern void xtalk_probe_node(cnodeid_t nid);
-static void __cpuinit per_hub_init(cnodeid_t cnode)
+static void per_hub_init(cnodeid_t cnode)
{
struct hub_data *hub = hub_data(cnode);
nasid_t nasid = COMPACT_TO_NASID_NODEID(cnode);
@@ -110,7 +110,7 @@ static void __cpuinit per_hub_init(cnodeid_t cnode)
}
}
-void __cpuinit per_cpu_init(void)
+void per_cpu_init(void)
{
int cpu = smp_processor_id();
int slice = LOCAL_HUB_L(PI_CPU_NUM);
diff --git a/arch/mips/sgi-ip27/ip27-smp.c b/arch/mips/sgi-ip27/ip27-smp.c
index f94638141b20..f4ea8aa79ba2 100644
--- a/arch/mips/sgi-ip27/ip27-smp.c
+++ b/arch/mips/sgi-ip27/ip27-smp.c
@@ -173,12 +173,12 @@ static void ip27_send_ipi_mask(const struct cpumask *mask, unsigned int action)
ip27_send_ipi_single(i, action);
}
-static void __cpuinit ip27_init_secondary(void)
+static void ip27_init_secondary(void)
{
per_cpu_init();
}
-static void __cpuinit ip27_smp_finish(void)
+static void ip27_smp_finish(void)
{
extern void hub_rt_clock_event_init(void);
@@ -195,7 +195,7 @@ static void __init ip27_cpus_done(void)
* set sp to the kernel stack of the newly created idle process, gp to the proc
* struct so that current_thread_info() will work.
*/
-static void __cpuinit ip27_boot_secondary(int cpu, struct task_struct *idle)
+static void ip27_boot_secondary(int cpu, struct task_struct *idle)
{
unsigned long gp = (unsigned long)task_thread_info(idle);
unsigned long sp = __KSTK_TOS(idle);
diff --git a/arch/mips/sgi-ip27/ip27-timer.c b/arch/mips/sgi-ip27/ip27-timer.c
index 2e21b761cb9c..1d97eaba0c5f 100644
--- a/arch/mips/sgi-ip27/ip27-timer.c
+++ b/arch/mips/sgi-ip27/ip27-timer.c
@@ -106,7 +106,7 @@ struct irqaction hub_rt_irqaction = {
#define NSEC_PER_CYCLE 800
#define CYCLES_PER_SEC (NSEC_PER_SEC / NSEC_PER_CYCLE)
-void __cpuinit hub_rt_clock_event_init(void)
+void hub_rt_clock_event_init(void)
{
unsigned int cpu = smp_processor_id();
struct clock_event_device *cd = &per_cpu(hub_rt_clockevent, cpu);
@@ -173,7 +173,7 @@ void __init plat_time_init(void)
hub_rt_clock_event_init();
}
-void __cpuinit cpu_time_init(void)
+void cpu_time_init(void)
{
lboard_t *board;
klcpu_t *cpu;
@@ -194,7 +194,7 @@ void __cpuinit cpu_time_init(void)
set_c0_status(SRB_TIMOCLK);
}
-void __cpuinit hub_rtc_init(cnodeid_t cnode)
+void hub_rtc_init(cnodeid_t cnode)
{
/*
diff --git a/arch/mips/sgi-ip27/ip27-xtalk.c b/arch/mips/sgi-ip27/ip27-xtalk.c
index a4df7d0f6f12..d59b820f528d 100644
--- a/arch/mips/sgi-ip27/ip27-xtalk.c
+++ b/arch/mips/sgi-ip27/ip27-xtalk.c
@@ -23,7 +23,7 @@
extern int bridge_probe(nasid_t nasid, int widget, int masterwid);
-static int __cpuinit probe_one_port(nasid_t nasid, int widget, int masterwid)
+static int probe_one_port(nasid_t nasid, int widget, int masterwid)
{
widgetreg_t widget_id;
xwidget_part_num_t partnum;
@@ -47,7 +47,7 @@ static int __cpuinit probe_one_port(nasid_t nasid, int widget, int masterwid)
return 0;
}
-static int __cpuinit xbow_probe(nasid_t nasid)
+static int xbow_probe(nasid_t nasid)
{
lboard_t *brd;
klxbow_t *xbow_p;
@@ -100,7 +100,7 @@ static int __cpuinit xbow_probe(nasid_t nasid)
return 0;
}
-void __cpuinit xtalk_probe_node(cnodeid_t nid)
+void xtalk_probe_node(cnodeid_t nid)
{
volatile u64 hubreg;
nasid_t nasid;
diff --git a/arch/mips/sibyte/bcm1480/smp.c b/arch/mips/sibyte/bcm1480/smp.c
index de88e22694a0..54e2c4de15c1 100644
--- a/arch/mips/sibyte/bcm1480/smp.c
+++ b/arch/mips/sibyte/bcm1480/smp.c
@@ -60,7 +60,7 @@ static void *mailbox_0_regs[] = {
/*
* SMP init and finish on secondary CPUs
*/
-void __cpuinit bcm1480_smp_init(void)
+void bcm1480_smp_init(void)
{
unsigned int imask = STATUSF_IP4 | STATUSF_IP3 | STATUSF_IP2 |
STATUSF_IP1 | STATUSF_IP0;
@@ -95,7 +95,7 @@ static void bcm1480_send_ipi_mask(const struct cpumask *mask,
/*
* Code to run on secondary just after probing the CPU
*/
-static void __cpuinit bcm1480_init_secondary(void)
+static void bcm1480_init_secondary(void)
{
extern void bcm1480_smp_init(void);
@@ -106,7 +106,7 @@ static void __cpuinit bcm1480_init_secondary(void)
* Do any tidying up before marking online and running the idle
* loop
*/
-static void __cpuinit bcm1480_smp_finish(void)
+static void bcm1480_smp_finish(void)
{
extern void sb1480_clockevent_init(void);
@@ -125,7 +125,7 @@ static void bcm1480_cpus_done(void)
* Setup the PC, SP, and GP of a secondary processor and start it
* running!
*/
-static void __cpuinit bcm1480_boot_secondary(int cpu, struct task_struct *idle)
+static void bcm1480_boot_secondary(int cpu, struct task_struct *idle)
{
int retval;
diff --git a/arch/mips/sibyte/sb1250/smp.c b/arch/mips/sibyte/sb1250/smp.c
index 285cfef4ebc0..d7b942db0ea5 100644
--- a/arch/mips/sibyte/sb1250/smp.c
+++ b/arch/mips/sibyte/sb1250/smp.c
@@ -48,7 +48,7 @@ static void *mailbox_regs[] = {
/*
* SMP init and finish on secondary CPUs
*/
-void __cpuinit sb1250_smp_init(void)
+void sb1250_smp_init(void)
{
unsigned int imask = STATUSF_IP4 | STATUSF_IP3 | STATUSF_IP2 |
STATUSF_IP1 | STATUSF_IP0;
@@ -83,7 +83,7 @@ static inline void sb1250_send_ipi_mask(const struct cpumask *mask,
/*
* Code to run on secondary just after probing the CPU
*/
-static void __cpuinit sb1250_init_secondary(void)
+static void sb1250_init_secondary(void)
{
extern void sb1250_smp_init(void);
@@ -94,7 +94,7 @@ static void __cpuinit sb1250_init_secondary(void)
* Do any tidying up before marking online and running the idle
* loop
*/
-static void __cpuinit sb1250_smp_finish(void)
+static void sb1250_smp_finish(void)
{
extern void sb1250_clockevent_init(void);
@@ -113,7 +113,7 @@ static void sb1250_cpus_done(void)
* Setup the PC, SP, and GP of a secondary processor and start it
* running!
*/
-static void __cpuinit sb1250_boot_secondary(int cpu, struct task_struct *idle)
+static void sb1250_boot_secondary(int cpu, struct task_struct *idle)
{
int retval;
diff --git a/arch/openrisc/kernel/setup.c b/arch/openrisc/kernel/setup.c
index f4d5bedc3b4f..d7359ffbcbdd 100644
--- a/arch/openrisc/kernel/setup.c
+++ b/arch/openrisc/kernel/setup.c
@@ -267,7 +267,7 @@ void __init detect_unit_config(unsigned long upr, unsigned long mask,
*
*/
-void __cpuinit calibrate_delay(void)
+void calibrate_delay(void)
{
const int *val;
struct device_node *cpu = NULL;
diff --git a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c
index f65fa480c905..22395901d47b 100644
--- a/arch/parisc/kernel/firmware.c
+++ b/arch/parisc/kernel/firmware.c
@@ -150,7 +150,7 @@ static void convert_to_wide(unsigned long *addr)
}
#ifdef CONFIG_64BIT
-void __cpuinit set_firmware_width_unlocked(void)
+void set_firmware_width_unlocked(void)
{
int ret;
@@ -167,7 +167,7 @@ void __cpuinit set_firmware_width_unlocked(void)
* This function must be called before any pdc_* function that uses the
* convert_to_wide function.
*/
-void __cpuinit set_firmware_width(void)
+void set_firmware_width(void)
{
unsigned long flags;
spin_lock_irqsave(&pdc_lock, flags);
@@ -175,11 +175,13 @@ void __cpuinit set_firmware_width(void)
spin_unlock_irqrestore(&pdc_lock, flags);
}
#else
-void __cpuinit set_firmware_width_unlocked(void) {
+void set_firmware_width_unlocked(void)
+{
return;
}
-void __cpuinit set_firmware_width(void) {
+void set_firmware_width(void)
+{
return;
}
#endif /*CONFIG_64BIT*/
@@ -301,7 +303,7 @@ int pdc_chassis_warn(unsigned long *warn)
return retval;
}
-int __cpuinit pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info)
+int pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info)
{
int ret;
@@ -322,7 +324,7 @@ int __cpuinit pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info)
* This PDC call returns the presence and status of all the coprocessors
* attached to the processor.
*/
-int __cpuinit pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info)
+int pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info)
{
int ret;
unsigned long flags;
diff --git a/arch/parisc/kernel/hardware.c b/arch/parisc/kernel/hardware.c
index 872275659d98..06cb3992907e 100644
--- a/arch/parisc/kernel/hardware.c
+++ b/arch/parisc/kernel/hardware.c
@@ -1367,7 +1367,7 @@ const char *parisc_hardware_description(struct parisc_device_id *id)
/* Interpret hversion (ret[0]) from PDC_MODEL(4)/PDC_MODEL_INFO(0) */
-enum cpu_type __cpuinit
+enum cpu_type
parisc_get_cpu_type(unsigned long hversion)
{
struct hp_cpu_type_mask *ptr;
diff --git a/arch/parisc/kernel/processor.c b/arch/parisc/kernel/processor.c
index 8a96c8ab9fe6..b68d977ce30f 100644
--- a/arch/parisc/kernel/processor.c
+++ b/arch/parisc/kernel/processor.c
@@ -73,7 +73,7 @@ extern int update_cr16_clocksource(void); /* from time.c */
*
* FIXME: doesn't do much yet...
*/
-static void __cpuinit
+static void
init_percpu_prof(unsigned long cpunum)
{
struct cpuinfo_parisc *p;
@@ -92,7 +92,7 @@ init_percpu_prof(unsigned long cpunum)
* (return 1). If so, initialize the chip and tell other partners in crime
* they have work to do.
*/
-static int __cpuinit processor_probe(struct parisc_device *dev)
+static int processor_probe(struct parisc_device *dev)
{
unsigned long txn_addr;
unsigned long cpuid;
@@ -299,7 +299,7 @@ void __init collect_boot_cpu_data(void)
*
* o Enable CPU profiling hooks.
*/
-int __cpuinit init_per_cpu(int cpunum)
+int init_per_cpu(int cpunum)
{
int ret;
struct pdc_coproc_cfg coproc_cfg;
diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c
index e3614fb343e5..8a252f2d6c08 100644
--- a/arch/parisc/kernel/smp.c
+++ b/arch/parisc/kernel/smp.c
@@ -62,9 +62,9 @@ static int smp_debug_lvl = 0;
volatile struct task_struct *smp_init_current_idle_task;
/* track which CPU is booting */
-static volatile int cpu_now_booting __cpuinitdata;
+static volatile int cpu_now_booting;
-static int parisc_max_cpus __cpuinitdata = 1;
+static int parisc_max_cpus = 1;
static DEFINE_PER_CPU(spinlock_t, ipi_lock);
@@ -328,7 +328,7 @@ void __init smp_callin(void)
/*
* Bring one cpu online.
*/
-int __cpuinit smp_boot_one_cpu(int cpuid, struct task_struct *idle)
+int smp_boot_one_cpu(int cpuid, struct task_struct *idle)
{
const struct cpuinfo_parisc *p = &per_cpu(cpu_data, cpuid);
long timeout;
@@ -424,7 +424,7 @@ void smp_cpus_done(unsigned int cpu_max)
}
-int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
+int __cpu_up(unsigned int cpu, struct task_struct *tidle)
{
if (cpu != 0 && cpu < parisc_max_cpus)
smp_boot_one_cpu(cpu, tidle);
diff --git a/arch/powerpc/include/asm/eeh.h b/arch/powerpc/include/asm/eeh.h
index 09a8743143f3..d3e5e9bc8f94 100644
--- a/arch/powerpc/include/asm/eeh.h
+++ b/arch/powerpc/include/asm/eeh.h
@@ -55,6 +55,8 @@ struct device_node;
#define EEH_PE_RECOVERING (1 << 1) /* Recovering PE */
#define EEH_PE_PHB_DEAD (1 << 2) /* Dead PHB */
+#define EEH_PE_KEEP (1 << 8) /* Keep PE on hotplug */
+
struct eeh_pe {
int type; /* PE type: PHB/Bus/Device */
int state; /* PE EEH dependent mode */
@@ -72,8 +74,8 @@ struct eeh_pe {
struct list_head child; /* Child PEs */
};
-#define eeh_pe_for_each_dev(pe, edev) \
- list_for_each_entry(edev, &pe->edevs, list)
+#define eeh_pe_for_each_dev(pe, edev, tmp) \
+ list_for_each_entry_safe(edev, tmp, &pe->edevs, list)
/*
* The struct is used to trace EEH state for the associated
@@ -82,7 +84,13 @@ struct eeh_pe {
* another tree except the currently existing tree of PCI
* buses and PCI devices
*/
-#define EEH_DEV_IRQ_DISABLED (1<<0) /* Interrupt disabled */
+#define EEH_DEV_BRIDGE (1 << 0) /* PCI bridge */
+#define EEH_DEV_ROOT_PORT (1 << 1) /* PCIe root port */
+#define EEH_DEV_DS_PORT (1 << 2) /* Downstream port */
+#define EEH_DEV_IRQ_DISABLED (1 << 3) /* Interrupt disabled */
+#define EEH_DEV_DISCONNECTED (1 << 4) /* Removing from PE */
+
+#define EEH_DEV_SYSFS (1 << 8) /* Sysfs created */
struct eeh_dev {
int mode; /* EEH mode */
@@ -90,11 +98,13 @@ struct eeh_dev {
int config_addr; /* Config address */
int pe_config_addr; /* PE config address */
u32 config_space[16]; /* Saved PCI config space */
+ u8 pcie_cap; /* Saved PCIe capability */
struct eeh_pe *pe; /* Associated PE */
struct list_head list; /* Form link list in the PE */
struct pci_controller *phb; /* Associated PHB */
struct device_node *dn; /* Associated device node */
struct pci_dev *pdev; /* Associated PCI device */
+ struct pci_bus *bus; /* PCI bus for partial hotplug */
};
static inline struct device_node *eeh_dev_to_of_node(struct eeh_dev *edev)
@@ -193,8 +203,10 @@ int eeh_phb_pe_create(struct pci_controller *phb);
struct eeh_pe *eeh_phb_pe_get(struct pci_controller *phb);
struct eeh_pe *eeh_pe_get(struct eeh_dev *edev);
int eeh_add_to_parent_pe(struct eeh_dev *edev);
-int eeh_rmv_from_parent_pe(struct eeh_dev *edev, int purge_pe);
+int eeh_rmv_from_parent_pe(struct eeh_dev *edev);
void eeh_pe_update_time_stamp(struct eeh_pe *pe);
+void *eeh_pe_traverse(struct eeh_pe *root,
+ eeh_traverse_func fn, void *flag);
void *eeh_pe_dev_traverse(struct eeh_pe *root,
eeh_traverse_func fn, void *flag);
void eeh_pe_restore_bars(struct eeh_pe *pe);
@@ -209,10 +221,12 @@ unsigned long eeh_check_failure(const volatile void __iomem *token,
unsigned long val);
int eeh_dev_check_failure(struct eeh_dev *edev);
void eeh_addr_cache_build(void);
+void eeh_add_device_early(struct device_node *);
void eeh_add_device_tree_early(struct device_node *);
+void eeh_add_device_late(struct pci_dev *);
void eeh_add_device_tree_late(struct pci_bus *);
void eeh_add_sysfs_files(struct pci_bus *);
-void eeh_remove_bus_device(struct pci_dev *, int);
+void eeh_remove_device(struct pci_dev *);
/**
* EEH_POSSIBLE_ERROR() -- test for possible MMIO failure.
@@ -252,13 +266,17 @@ static inline unsigned long eeh_check_failure(const volatile void __iomem *token
static inline void eeh_addr_cache_build(void) { }
+static inline void eeh_add_device_early(struct device_node *dn) { }
+
static inline void eeh_add_device_tree_early(struct device_node *dn) { }
+static inline void eeh_add_device_late(struct pci_dev *dev) { }
+
static inline void eeh_add_device_tree_late(struct pci_bus *bus) { }
static inline void eeh_add_sysfs_files(struct pci_bus *bus) { }
-static inline void eeh_remove_bus_device(struct pci_dev *dev, int purge_pe) { }
+static inline void eeh_remove_device(struct pci_dev *dev) { }
#define EEH_POSSIBLE_ERROR(val, type) (0)
#define EEH_IO_ERROR_VALUE(size) (-1UL)
diff --git a/arch/powerpc/include/asm/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h
index ba713f166fa5..10be1dd01c6b 100644
--- a/arch/powerpc/include/asm/hw_irq.h
+++ b/arch/powerpc/include/asm/hw_irq.h
@@ -96,10 +96,11 @@ static inline bool arch_irqs_disabled(void)
#endif
#define hard_irq_disable() do { \
- u8 _was_enabled = get_paca()->soft_enabled; \
+ u8 _was_enabled; \
__hard_irq_disable(); \
- get_paca()->soft_enabled = 0; \
- get_paca()->irq_happened |= PACA_IRQ_HARD_DIS; \
+ _was_enabled = local_paca->soft_enabled; \
+ local_paca->soft_enabled = 0; \
+ local_paca->irq_happened |= PACA_IRQ_HARD_DIS; \
if (_was_enabled) \
trace_hardirqs_off(); \
} while(0)
diff --git a/arch/powerpc/include/asm/module.h b/arch/powerpc/include/asm/module.h
index c1df590ec444..49fa55bfbac4 100644
--- a/arch/powerpc/include/asm/module.h
+++ b/arch/powerpc/include/asm/module.h
@@ -82,10 +82,9 @@ struct exception_table_entry;
void sort_ex_table(struct exception_table_entry *start,
struct exception_table_entry *finish);
-#ifdef CONFIG_MODVERSIONS
+#if defined(CONFIG_MODVERSIONS) && defined(CONFIG_PPC64)
#define ARCH_RELOCATES_KCRCTAB
-
-extern const unsigned long reloc_start[];
+#define reloc_start PHYSICAL_START
#endif
#endif /* __KERNEL__ */
#endif /* _ASM_POWERPC_MODULE_H */
diff --git a/arch/powerpc/include/asm/pci-bridge.h b/arch/powerpc/include/asm/pci-bridge.h
index 2c1d8cb9b265..32d0d2018faf 100644
--- a/arch/powerpc/include/asm/pci-bridge.h
+++ b/arch/powerpc/include/asm/pci-bridge.h
@@ -209,7 +209,6 @@ static inline struct eeh_dev *of_node_to_eeh_dev(struct device_node *dn)
extern struct pci_bus *pcibios_find_pci_bus(struct device_node *dn);
/** Remove all of the PCI devices under this bus */
-extern void __pcibios_remove_pci_devices(struct pci_bus *bus, int purge_pe);
extern void pcibios_remove_pci_devices(struct pci_bus *bus);
/** Discover new pci devices under this bus, and add them */
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
index 5d7d9c2a5473..a6840e4e24f7 100644
--- a/arch/powerpc/include/asm/reg.h
+++ b/arch/powerpc/include/asm/reg.h
@@ -1088,7 +1088,8 @@
#define PVR_970MP 0x0044
#define PVR_970GX 0x0045
#define PVR_POWER7p 0x004A
-#define PVR_POWER8 0x004B
+#define PVR_POWER8E 0x004B
+#define PVR_POWER8 0x004D
#define PVR_BE 0x0070
#define PVR_PA6T 0x0090
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c
index 2a45d0f04385..22973a74df73 100644
--- a/arch/powerpc/kernel/cputable.c
+++ b/arch/powerpc/kernel/cputable.c
@@ -494,9 +494,27 @@ static struct cpu_spec __initdata cpu_specs[] = {
.cpu_restore = __restore_cpu_power7,
.platform = "power7+",
},
- { /* Power8 */
+ { /* Power8E */
.pvr_mask = 0xffff0000,
.pvr_value = 0x004b0000,
+ .cpu_name = "POWER8E (raw)",
+ .cpu_features = CPU_FTRS_POWER8,
+ .cpu_user_features = COMMON_USER_POWER8,
+ .cpu_user_features2 = COMMON_USER2_POWER8,
+ .mmu_features = MMU_FTRS_POWER8,
+ .icache_bsize = 128,
+ .dcache_bsize = 128,
+ .num_pmcs = 6,
+ .pmc_type = PPC_PMC_IBM,
+ .oprofile_cpu_type = "ppc64/power8",
+ .oprofile_type = PPC_OPROFILE_INVALID,
+ .cpu_setup = __setup_cpu_power8,
+ .cpu_restore = __restore_cpu_power8,
+ .platform = "power8",
+ },
+ { /* Power8 */
+ .pvr_mask = 0xffff0000,
+ .pvr_value = 0x004d0000,
.cpu_name = "POWER8 (raw)",
.cpu_features = CPU_FTRS_POWER8,
.cpu_user_features = COMMON_USER_POWER8,
diff --git a/arch/powerpc/kernel/eeh.c b/arch/powerpc/kernel/eeh.c
index 39954fe941b8..ea9414c8088d 100644
--- a/arch/powerpc/kernel/eeh.c
+++ b/arch/powerpc/kernel/eeh.c
@@ -231,7 +231,7 @@ static size_t eeh_gather_pci_data(struct eeh_dev *edev, char * buf, size_t len)
void eeh_slot_error_detail(struct eeh_pe *pe, int severity)
{
size_t loglen = 0;
- struct eeh_dev *edev;
+ struct eeh_dev *edev, *tmp;
bool valid_cfg_log = true;
/*
@@ -251,7 +251,7 @@ void eeh_slot_error_detail(struct eeh_pe *pe, int severity)
eeh_pe_restore_bars(pe);
pci_regs_buf[0] = 0;
- eeh_pe_for_each_dev(pe, edev) {
+ eeh_pe_for_each_dev(pe, edev, tmp) {
loglen += eeh_gather_pci_data(edev, pci_regs_buf + loglen,
EEH_PCI_REGS_LOG_LEN - loglen);
}
@@ -499,8 +499,6 @@ unsigned long eeh_check_failure(const volatile void __iomem *token, unsigned lon
}
eeh_dev_check_failure(edev);
-
- pci_dev_put(eeh_dev_to_pci_dev(edev));
return val;
}
@@ -838,7 +836,7 @@ core_initcall_sync(eeh_init);
* on the CEC architecture, type of the device, on earlier boot
* command-line arguments & etc.
*/
-static void eeh_add_device_early(struct device_node *dn)
+void eeh_add_device_early(struct device_node *dn)
{
struct pci_controller *phb;
@@ -886,7 +884,7 @@ EXPORT_SYMBOL_GPL(eeh_add_device_tree_early);
* This routine must be used to complete EEH initialization for PCI
* devices that were added after system boot (e.g. hotplug, dlpar).
*/
-static void eeh_add_device_late(struct pci_dev *dev)
+void eeh_add_device_late(struct pci_dev *dev)
{
struct device_node *dn;
struct eeh_dev *edev;
@@ -902,9 +900,23 @@ static void eeh_add_device_late(struct pci_dev *dev)
pr_debug("EEH: Already referenced !\n");
return;
}
- WARN_ON(edev->pdev);
- pci_dev_get(dev);
+ /*
+ * The EEH cache might not be removed correctly because of
+ * unbalanced kref to the device during unplug time, which
+ * relies on pcibios_release_device(). So we have to remove
+ * that here explicitly.
+ */
+ if (edev->pdev) {
+ eeh_rmv_from_parent_pe(edev);
+ eeh_addr_cache_rmv_dev(edev->pdev);
+ eeh_sysfs_remove_device(edev->pdev);
+ edev->mode &= ~EEH_DEV_SYSFS;
+
+ edev->pdev = NULL;
+ dev->dev.archdata.edev = NULL;
+ }
+
edev->pdev = dev;
dev->dev.archdata.edev = edev;
@@ -967,7 +979,6 @@ EXPORT_SYMBOL_GPL(eeh_add_sysfs_files);
/**
* eeh_remove_device - Undo EEH setup for the indicated pci device
* @dev: pci device to be removed
- * @purge_pe: remove the PE or not
*
* This routine should be called when a device is removed from
* a running system (e.g. by hotplug or dlpar). It unregisters
@@ -975,7 +986,7 @@ EXPORT_SYMBOL_GPL(eeh_add_sysfs_files);
* this device will no longer be detected after this call; thus,
* i/o errors affecting this slot may leave this device unusable.
*/
-static void eeh_remove_device(struct pci_dev *dev, int purge_pe)
+void eeh_remove_device(struct pci_dev *dev)
{
struct eeh_dev *edev;
@@ -986,42 +997,29 @@ static void eeh_remove_device(struct pci_dev *dev, int purge_pe)
/* Unregister the device with the EEH/PCI address search system */
pr_debug("EEH: Removing device %s\n", pci_name(dev));
- if (!edev || !edev->pdev) {
+ if (!edev || !edev->pdev || !edev->pe) {
pr_debug("EEH: Not referenced !\n");
return;
}
+
+ /*
+ * During the hotplug for EEH error recovery, we need the EEH
+ * device attached to the parent PE in order for BAR restore
+ * a bit later. So we keep it for BAR restore and remove it
+ * from the parent PE during the BAR resotre.
+ */
edev->pdev = NULL;
dev->dev.archdata.edev = NULL;
- pci_dev_put(dev);
+ if (!(edev->pe->state & EEH_PE_KEEP))
+ eeh_rmv_from_parent_pe(edev);
+ else
+ edev->mode |= EEH_DEV_DISCONNECTED;
- eeh_rmv_from_parent_pe(edev, purge_pe);
eeh_addr_cache_rmv_dev(dev);
eeh_sysfs_remove_device(dev);
+ edev->mode &= ~EEH_DEV_SYSFS;
}
-/**
- * eeh_remove_bus_device - Undo EEH setup for the indicated PCI device
- * @dev: PCI device
- * @purge_pe: remove the corresponding PE or not
- *
- * This routine must be called when a device is removed from the
- * running system through hotplug or dlpar. The corresponding
- * PCI address cache will be removed.
- */
-void eeh_remove_bus_device(struct pci_dev *dev, int purge_pe)
-{
- struct pci_bus *bus = dev->subordinate;
- struct pci_dev *child, *tmp;
-
- eeh_remove_device(dev, purge_pe);
-
- if (bus && dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
- list_for_each_entry_safe(child, tmp, &bus->devices, bus_list)
- eeh_remove_bus_device(child, purge_pe);
- }
-}
-EXPORT_SYMBOL_GPL(eeh_remove_bus_device);
-
static int proc_eeh_show(struct seq_file *m, void *v)
{
if (0 == eeh_subsystem_enabled) {
diff --git a/arch/powerpc/kernel/eeh_cache.c b/arch/powerpc/kernel/eeh_cache.c
index f9ac1232a746..e8c9fd546a5c 100644
--- a/arch/powerpc/kernel/eeh_cache.c
+++ b/arch/powerpc/kernel/eeh_cache.c
@@ -68,16 +68,12 @@ static inline struct eeh_dev *__eeh_addr_cache_get_device(unsigned long addr)
struct pci_io_addr_range *piar;
piar = rb_entry(n, struct pci_io_addr_range, rb_node);
- if (addr < piar->addr_lo) {
+ if (addr < piar->addr_lo)
n = n->rb_left;
- } else {
- if (addr > piar->addr_hi) {
- n = n->rb_right;
- } else {
- pci_dev_get(piar->pcidev);
- return piar->edev;
- }
- }
+ else if (addr > piar->addr_hi)
+ n = n->rb_right;
+ else
+ return piar->edev;
}
return NULL;
@@ -156,7 +152,6 @@ eeh_addr_cache_insert(struct pci_dev *dev, unsigned long alo,
if (!piar)
return NULL;
- pci_dev_get(dev);
piar->addr_lo = alo;
piar->addr_hi = ahi;
piar->edev = pci_dev_to_eeh_dev(dev);
@@ -250,7 +245,6 @@ restart:
if (piar->pcidev == dev) {
rb_erase(n, &pci_io_addr_cache_root.rb_root);
- pci_dev_put(piar->pcidev);
kfree(piar);
goto restart;
}
@@ -302,12 +296,10 @@ void eeh_addr_cache_build(void)
if (!edev)
continue;
- pci_dev_get(dev); /* matching put is in eeh_remove_device() */
dev->dev.archdata.edev = edev;
edev->pdev = dev;
eeh_addr_cache_insert_dev(dev);
-
eeh_sysfs_add_device(dev);
}
diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
index 2b1ce17cae50..36bed5a12750 100644
--- a/arch/powerpc/kernel/eeh_driver.c
+++ b/arch/powerpc/kernel/eeh_driver.c
@@ -143,10 +143,14 @@ static void eeh_disable_irq(struct pci_dev *dev)
static void eeh_enable_irq(struct pci_dev *dev)
{
struct eeh_dev *edev = pci_dev_to_eeh_dev(dev);
+ struct irq_desc *desc;
if ((edev->mode) & EEH_DEV_IRQ_DISABLED) {
edev->mode &= ~EEH_DEV_IRQ_DISABLED;
- enable_irq(dev->irq);
+
+ desc = irq_to_desc(dev->irq);
+ if (desc && desc->depth > 0)
+ enable_irq(dev->irq);
}
}
@@ -338,6 +342,54 @@ static void *eeh_report_failure(void *data, void *userdata)
return NULL;
}
+static void *eeh_rmv_device(void *data, void *userdata)
+{
+ struct pci_driver *driver;
+ struct eeh_dev *edev = (struct eeh_dev *)data;
+ struct pci_dev *dev = eeh_dev_to_pci_dev(edev);
+ int *removed = (int *)userdata;
+
+ /*
+ * Actually, we should remove the PCI bridges as well.
+ * However, that's lots of complexity to do that,
+ * particularly some of devices under the bridge might
+ * support EEH. So we just care about PCI devices for
+ * simplicity here.
+ */
+ if (!dev || (dev->hdr_type & PCI_HEADER_TYPE_BRIDGE))
+ return NULL;
+ driver = eeh_pcid_get(dev);
+ if (driver && driver->err_handler)
+ return NULL;
+
+ /* Remove it from PCI subsystem */
+ pr_debug("EEH: Removing %s without EEH sensitive driver\n",
+ pci_name(dev));
+ edev->bus = dev->bus;
+ edev->mode |= EEH_DEV_DISCONNECTED;
+ (*removed)++;
+
+ pci_stop_and_remove_bus_device(dev);
+
+ return NULL;
+}
+
+static void *eeh_pe_detach_dev(void *data, void *userdata)
+{
+ struct eeh_pe *pe = (struct eeh_pe *)data;
+ struct eeh_dev *edev, *tmp;
+
+ eeh_pe_for_each_dev(pe, edev, tmp) {
+ if (!(edev->mode & EEH_DEV_DISCONNECTED))
+ continue;
+
+ edev->mode &= ~(EEH_DEV_DISCONNECTED | EEH_DEV_IRQ_DISABLED);
+ eeh_rmv_from_parent_pe(edev);
+ }
+
+ return NULL;
+}
+
/**
* eeh_reset_device - Perform actual reset of a pci slot
* @pe: EEH PE
@@ -349,8 +401,9 @@ static void *eeh_report_failure(void *data, void *userdata)
*/
static int eeh_reset_device(struct eeh_pe *pe, struct pci_bus *bus)
{
+ struct pci_bus *frozen_bus = eeh_pe_bus_get(pe);
struct timeval tstamp;
- int cnt, rc;
+ int cnt, rc, removed = 0;
/* pcibios will clear the counter; save the value */
cnt = pe->freeze_count;
@@ -362,8 +415,11 @@ static int eeh_reset_device(struct eeh_pe *pe, struct pci_bus *bus)
* devices are expected to be attached soon when calling
* into pcibios_add_pci_devices().
*/
+ eeh_pe_state_mark(pe, EEH_PE_KEEP);
if (bus)
- __pcibios_remove_pci_devices(bus, 0);
+ pcibios_remove_pci_devices(bus);
+ else if (frozen_bus)
+ eeh_pe_dev_traverse(pe, eeh_rmv_device, &removed);
/* Reset the pci controller. (Asserts RST#; resets config space).
* Reconfigure bridges and devices. Don't try to bring the system
@@ -384,9 +440,24 @@ static int eeh_reset_device(struct eeh_pe *pe, struct pci_bus *bus)
* potentially weird things happen.
*/
if (bus) {
+ pr_info("EEH: Sleep 5s ahead of complete hotplug\n");
ssleep(5);
+
+ /*
+ * The EEH device is still connected with its parent
+ * PE. We should disconnect it so the binding can be
+ * rebuilt when adding PCI devices.
+ */
+ eeh_pe_traverse(pe, eeh_pe_detach_dev, NULL);
pcibios_add_pci_devices(bus);
+ } else if (frozen_bus && removed) {
+ pr_info("EEH: Sleep 5s ahead of partial hotplug\n");
+ ssleep(5);
+
+ eeh_pe_traverse(pe, eeh_pe_detach_dev, NULL);
+ pcibios_add_pci_devices(frozen_bus);
}
+ eeh_pe_state_clear(pe, EEH_PE_KEEP);
pe->tstamp = tstamp;
pe->freeze_count = cnt;
diff --git a/arch/powerpc/kernel/eeh_pe.c b/arch/powerpc/kernel/eeh_pe.c
index 016588a6f5ed..f9450537e335 100644
--- a/arch/powerpc/kernel/eeh_pe.c
+++ b/arch/powerpc/kernel/eeh_pe.c
@@ -149,8 +149,8 @@ static struct eeh_pe *eeh_pe_next(struct eeh_pe *pe,
* callback returns something other than NULL, or no more PEs
* to be traversed.
*/
-static void *eeh_pe_traverse(struct eeh_pe *root,
- eeh_traverse_func fn, void *flag)
+void *eeh_pe_traverse(struct eeh_pe *root,
+ eeh_traverse_func fn, void *flag)
{
struct eeh_pe *pe;
void *ret;
@@ -176,7 +176,7 @@ void *eeh_pe_dev_traverse(struct eeh_pe *root,
eeh_traverse_func fn, void *flag)
{
struct eeh_pe *pe;
- struct eeh_dev *edev;
+ struct eeh_dev *edev, *tmp;
void *ret;
if (!root) {
@@ -186,7 +186,7 @@ void *eeh_pe_dev_traverse(struct eeh_pe *root,
/* Traverse root PE */
for (pe = root; pe; pe = eeh_pe_next(pe, root)) {
- eeh_pe_for_each_dev(pe, edev) {
+ eeh_pe_for_each_dev(pe, edev, tmp) {
ret = fn(edev, flag);
if (ret)
return ret;
@@ -333,7 +333,7 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
while (parent) {
if (!(parent->type & EEH_PE_INVALID))
break;
- parent->type &= ~EEH_PE_INVALID;
+ parent->type &= ~(EEH_PE_INVALID | EEH_PE_KEEP);
parent = parent->parent;
}
pr_debug("EEH: Add %s to Device PE#%x, Parent PE#%x\n",
@@ -397,21 +397,20 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
/**
* eeh_rmv_from_parent_pe - Remove one EEH device from the associated PE
* @edev: EEH device
- * @purge_pe: remove PE or not
*
* The PE hierarchy tree might be changed when doing PCI hotplug.
* Also, the PCI devices or buses could be removed from the system
* during EEH recovery. So we have to call the function remove the
* corresponding PE accordingly if necessary.
*/
-int eeh_rmv_from_parent_pe(struct eeh_dev *edev, int purge_pe)
+int eeh_rmv_from_parent_pe(struct eeh_dev *edev)
{
struct eeh_pe *pe, *parent, *child;
int cnt;
if (!edev->pe) {
- pr_warning("%s: No PE found for EEH device %s\n",
- __func__, edev->dn->full_name);
+ pr_debug("%s: No PE found for EEH device %s\n",
+ __func__, edev->dn->full_name);
return -EEXIST;
}
@@ -431,7 +430,7 @@ int eeh_rmv_from_parent_pe(struct eeh_dev *edev, int purge_pe)
if (pe->type & EEH_PE_PHB)
break;
- if (purge_pe) {
+ if (!(pe->state & EEH_PE_KEEP)) {
if (list_empty(&pe->edevs) &&
list_empty(&pe->child_list)) {
list_del(&pe->child);
@@ -502,7 +501,7 @@ static void *__eeh_pe_state_mark(void *data, void *flag)
{
struct eeh_pe *pe = (struct eeh_pe *)data;
int state = *((int *)flag);
- struct eeh_dev *tmp;
+ struct eeh_dev *edev, *tmp;
struct pci_dev *pdev;
/*
@@ -512,8 +511,8 @@ static void *__eeh_pe_state_mark(void *data, void *flag)
* the PCI device driver.
*/
pe->state |= state;
- eeh_pe_for_each_dev(pe, tmp) {
- pdev = eeh_dev_to_pci_dev(tmp);
+ eeh_pe_for_each_dev(pe, edev, tmp) {
+ pdev = eeh_dev_to_pci_dev(edev);
if (pdev)
pdev->error_state = pci_channel_io_frozen;
}
@@ -579,7 +578,7 @@ void eeh_pe_state_clear(struct eeh_pe *pe, int state)
* blocked on normal path during the stage. So we need utilize
* eeh operations, which is always permitted.
*/
-static void eeh_bridge_check_link(struct pci_dev *pdev,
+static void eeh_bridge_check_link(struct eeh_dev *edev,
struct device_node *dn)
{
int cap;
@@ -590,16 +589,17 @@ static void eeh_bridge_check_link(struct pci_dev *pdev,
* We only check root port and downstream ports of
* PCIe switches
*/
- if (!pci_is_pcie(pdev) ||
- (pci_pcie_type(pdev) != PCI_EXP_TYPE_ROOT_PORT &&
- pci_pcie_type(pdev) != PCI_EXP_TYPE_DOWNSTREAM))
+ if (!(edev->mode & (EEH_DEV_ROOT_PORT | EEH_DEV_DS_PORT)))
return;
- pr_debug("%s: Check PCIe link for %s ...\n",
- __func__, pci_name(pdev));
+ pr_debug("%s: Check PCIe link for %04x:%02x:%02x.%01x ...\n",
+ __func__, edev->phb->global_number,
+ edev->config_addr >> 8,
+ PCI_SLOT(edev->config_addr & 0xFF),
+ PCI_FUNC(edev->config_addr & 0xFF));
/* Check slot status */
- cap = pdev->pcie_cap;
+ cap = edev->pcie_cap;
eeh_ops->read_config(dn, cap + PCI_EXP_SLTSTA, 2, &val);
if (!(val & PCI_EXP_SLTSTA_PDS)) {
pr_debug(" No card in the slot (0x%04x) !\n", val);
@@ -653,8 +653,7 @@ static void eeh_bridge_check_link(struct pci_dev *pdev,
#define BYTE_SWAP(OFF) (8*((OFF)/4)+3-(OFF))
#define SAVED_BYTE(OFF) (((u8 *)(edev->config_space))[BYTE_SWAP(OFF)])
-static void eeh_restore_bridge_bars(struct pci_dev *pdev,
- struct eeh_dev *edev,
+static void eeh_restore_bridge_bars(struct eeh_dev *edev,
struct device_node *dn)
{
int i;
@@ -680,7 +679,7 @@ static void eeh_restore_bridge_bars(struct pci_dev *pdev,
eeh_ops->write_config(dn, PCI_COMMAND, 4, edev->config_space[1]);
/* Check the PCIe link is ready */
- eeh_bridge_check_link(pdev, dn);
+ eeh_bridge_check_link(edev, dn);
}
static void eeh_restore_device_bars(struct eeh_dev *edev,
@@ -729,19 +728,12 @@ static void eeh_restore_device_bars(struct eeh_dev *edev,
*/
static void *eeh_restore_one_device_bars(void *data, void *flag)
{
- struct pci_dev *pdev = NULL;
struct eeh_dev *edev = (struct eeh_dev *)data;
struct device_node *dn = eeh_dev_to_of_node(edev);
- /* Trace the PCI bridge */
- if (eeh_probe_mode_dev()) {
- pdev = eeh_dev_to_pci_dev(edev);
- if (pdev->hdr_type != PCI_HEADER_TYPE_BRIDGE)
- pdev = NULL;
- }
-
- if (pdev)
- eeh_restore_bridge_bars(pdev, edev, dn);
+ /* Do special restore for bridges */
+ if (edev->mode & EEH_DEV_BRIDGE)
+ eeh_restore_bridge_bars(edev, dn);
else
eeh_restore_device_bars(edev, dn);
diff --git a/arch/powerpc/kernel/eeh_sysfs.c b/arch/powerpc/kernel/eeh_sysfs.c
index e7ae3484918c..5d753d4f2c75 100644
--- a/arch/powerpc/kernel/eeh_sysfs.c
+++ b/arch/powerpc/kernel/eeh_sysfs.c
@@ -56,19 +56,40 @@ EEH_SHOW_ATTR(eeh_pe_config_addr, pe_config_addr, "0x%x");
void eeh_sysfs_add_device(struct pci_dev *pdev)
{
+ struct eeh_dev *edev = pci_dev_to_eeh_dev(pdev);
int rc=0;
+ if (edev && (edev->mode & EEH_DEV_SYSFS))
+ return;
+
rc += device_create_file(&pdev->dev, &dev_attr_eeh_mode);
rc += device_create_file(&pdev->dev, &dev_attr_eeh_config_addr);
rc += device_create_file(&pdev->dev, &dev_attr_eeh_pe_config_addr);
if (rc)
printk(KERN_WARNING "EEH: Unable to create sysfs entries\n");
+ else if (edev)
+ edev->mode |= EEH_DEV_SYSFS;
}
void eeh_sysfs_remove_device(struct pci_dev *pdev)
{
+ struct eeh_dev *edev = pci_dev_to_eeh_dev(pdev);
+
+ /*
+ * The parent directory might have been removed. We needn't
+ * continue for that case.
+ */
+ if (!pdev->dev.kobj.sd) {
+ if (edev)
+ edev->mode &= ~EEH_DEV_SYSFS;
+ return;
+ }
+
device_remove_file(&pdev->dev, &dev_attr_eeh_mode);
device_remove_file(&pdev->dev, &dev_attr_eeh_config_addr);
device_remove_file(&pdev->dev, &dev_attr_eeh_pe_config_addr);
+
+ if (edev)
+ edev->mode &= ~EEH_DEV_SYSFS;
}
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
index f46914a0f33e..7d22a675fe1a 100644
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c
@@ -1462,6 +1462,8 @@ void pcibios_finish_adding_to_bus(struct pci_bus *bus)
/* Allocate bus and devices resources */
pcibios_allocate_bus_resources(bus);
pcibios_claim_one_bus(bus);
+ if (!pci_has_flag(PCI_PROBE_ONLY))
+ pci_assign_unassigned_bus_resources(bus);
/* Fixup EEH */
eeh_add_device_tree_late(bus);
diff --git a/arch/powerpc/kernel/pci-hotplug.c b/arch/powerpc/kernel/pci-hotplug.c
index 3f608800c06b..c1e17ae68a08 100644
--- a/arch/powerpc/kernel/pci-hotplug.c
+++ b/arch/powerpc/kernel/pci-hotplug.c
@@ -22,45 +22,40 @@
#include <asm/eeh.h>
/**
- * __pcibios_remove_pci_devices - remove all devices under this bus
+ * pcibios_release_device - release PCI device
+ * @dev: PCI device
+ *
+ * The function is called before releasing the indicated PCI device.
+ */
+void pcibios_release_device(struct pci_dev *dev)
+{
+ eeh_remove_device(dev);
+}
+
+/**
+ * pcibios_remove_pci_devices - remove all devices under this bus
* @bus: the indicated PCI bus
- * @purge_pe: destroy the PE on removal of PCI devices
*
* Remove all of the PCI devices under this bus both from the
* linux pci device tree, and from the powerpc EEH address cache.
- * By default, the corresponding PE will be destroied during the
- * normal PCI hotplug path. For PCI hotplug during EEH recovery,
- * the corresponding PE won't be destroied and deallocated.
*/
-void __pcibios_remove_pci_devices(struct pci_bus *bus, int purge_pe)
+void pcibios_remove_pci_devices(struct pci_bus *bus)
{
struct pci_dev *dev, *tmp;
struct pci_bus *child_bus;
/* First go down child busses */
list_for_each_entry(child_bus, &bus->children, node)
- __pcibios_remove_pci_devices(child_bus, purge_pe);
+ pcibios_remove_pci_devices(child_bus);
pr_debug("PCI: Removing devices on bus %04x:%02x\n",
pci_domain_nr(bus), bus->number);
list_for_each_entry_safe(dev, tmp, &bus->devices, bus_list) {
- pr_debug(" * Removing %s...\n", pci_name(dev));
- eeh_remove_bus_device(dev, purge_pe);
+ pr_debug(" Removing %s...\n", pci_name(dev));
pci_stop_and_remove_bus_device(dev);
}
}
-/**
- * pcibios_remove_pci_devices - remove all devices under this bus
- * @bus: the indicated PCI bus
- *
- * Remove all of the PCI devices under this bus both from the
- * linux pci device tree, and from the powerpc EEH address cache.
- */
-void pcibios_remove_pci_devices(struct pci_bus *bus)
-{
- __pcibios_remove_pci_devices(bus, 1);
-}
EXPORT_SYMBOL_GPL(pcibios_remove_pci_devices);
/**
@@ -76,7 +71,7 @@ EXPORT_SYMBOL_GPL(pcibios_remove_pci_devices);
*/
void pcibios_add_pci_devices(struct pci_bus * bus)
{
- int slotno, num, mode, pass, max;
+ int slotno, mode, pass, max;
struct pci_dev *dev;
struct device_node *dn = pci_bus_to_OF_node(bus);
@@ -90,11 +85,15 @@ void pcibios_add_pci_devices(struct pci_bus * bus)
/* use ofdt-based probe */
of_rescan_bus(dn, bus);
} else if (mode == PCI_PROBE_NORMAL) {
- /* use legacy probe */
+ /*
+ * Use legacy probe. In the partial hotplug case, we
+ * probably have grandchildren devices unplugged. So
+ * we don't check the return value from pci_scan_slot() in
+ * order for fully rescan all the way down to pick them up.
+ * They can have been removed during partial hotplug.
+ */
slotno = PCI_SLOT(PCI_DN(dn->child)->devfn);
- num = pci_scan_slot(bus, PCI_DEVFN(slotno, 0));
- if (!num)
- return;
+ pci_scan_slot(bus, PCI_DEVFN(slotno, 0));
pcibios_setup_bus_devices(bus);
max = bus->busn_res.start;
for (pass = 0; pass < 2; pass++) {
diff --git a/arch/powerpc/kernel/pci_of_scan.c b/arch/powerpc/kernel/pci_of_scan.c
index 6b0ba5854d99..15d9105323bf 100644
--- a/arch/powerpc/kernel/pci_of_scan.c
+++ b/arch/powerpc/kernel/pci_of_scan.c
@@ -230,11 +230,14 @@ void of_scan_pci_bridge(struct pci_dev *dev)
return;
}
- bus = pci_add_new_bus(dev->bus, dev, busrange[0]);
+ bus = pci_find_bus(pci_domain_nr(dev->bus), busrange[0]);
if (!bus) {
- printk(KERN_ERR "Failed to create pci bus for %s\n",
- node->full_name);
- return;
+ bus = pci_add_new_bus(dev->bus, dev, busrange[0]);
+ if (!bus) {
+ printk(KERN_ERR "Failed to create pci bus for %s\n",
+ node->full_name);
+ return;
+ }
}
bus->primary = dev->bus->number;
@@ -292,6 +295,38 @@ void of_scan_pci_bridge(struct pci_dev *dev)
}
EXPORT_SYMBOL(of_scan_pci_bridge);
+static struct pci_dev *of_scan_pci_dev(struct pci_bus *bus,
+ struct device_node *dn)
+{
+ struct pci_dev *dev = NULL;
+ const u32 *reg;
+ int reglen, devfn;
+
+ pr_debug(" * %s\n", dn->full_name);
+ if (!of_device_is_available(dn))
+ return NULL;
+
+ reg = of_get_property(dn, "reg", &reglen);
+ if (reg == NULL || reglen < 20)
+ return NULL;
+ devfn = (reg[0] >> 8) & 0xff;
+
+ /* Check if the PCI device is already there */
+ dev = pci_get_slot(bus, devfn);
+ if (dev) {
+ pci_dev_put(dev);
+ return dev;
+ }
+
+ /* create a new pci_dev for this device */
+ dev = of_create_pci_dev(dn, bus, devfn);
+ if (!dev)
+ return NULL;
+
+ pr_debug(" dev header type: %x\n", dev->hdr_type);
+ return dev;
+}
+
/**
* __of_scan_bus - given a PCI bus node, setup bus and scan for child devices
* @node: device tree node for the PCI bus
@@ -302,8 +337,6 @@ static void __of_scan_bus(struct device_node *node, struct pci_bus *bus,
int rescan_existing)
{
struct device_node *child;
- const u32 *reg;
- int reglen, devfn;
struct pci_dev *dev;
pr_debug("of_scan_bus(%s) bus no %d...\n",
@@ -311,16 +344,7 @@ static void __of_scan_bus(struct device_node *node, struct pci_bus *bus,
/* Scan direct children */
for_each_child_of_node(node, child) {
- pr_debug(" * %s\n", child->full_name);
- if (!of_device_is_available(child))
- continue;
- reg = of_get_property(child, "reg", &reglen);
- if (reg == NULL || reglen < 20)
- continue;
- devfn = (reg[0] >> 8) & 0xff;
-
- /* create a new pci_dev for this device */
- dev = of_create_pci_dev(child, bus, devfn);
+ dev = of_scan_pci_dev(bus, child);
if (!dev)
continue;
pr_debug(" dev header type: %x\n", dev->hdr_type);
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index 5eccda9fd33f..607902424e73 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -644,7 +644,8 @@ unsigned char ibm_architecture_vec[] = {
W(0xfffe0000), W(0x003a0000), /* POWER5/POWER5+ */
W(0xffff0000), W(0x003e0000), /* POWER6 */
W(0xffff0000), W(0x003f0000), /* POWER7 */
- W(0xffff0000), W(0x004b0000), /* POWER8 */
+ W(0xffff0000), W(0x004b0000), /* POWER8E */
+ W(0xffff0000), W(0x004d0000), /* POWER8 */
W(0xffffffff), W(0x0f000004), /* all 2.07-compliant */
W(0xffffffff), W(0x0f000003), /* all 2.06-compliant */
W(0xffffffff), W(0x0f000002), /* all 2.05-compliant */
@@ -706,7 +707,7 @@ unsigned char ibm_architecture_vec[] = {
* must match by the macro below. Update the definition if
* the structure layout changes.
*/
-#define IBM_ARCH_VEC_NRCORES_OFFSET 117
+#define IBM_ARCH_VEC_NRCORES_OFFSET 125
W(NR_CPUS), /* number of cores supported */
0,
0,
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
index 654e479802f2..f096e72262f4 100644
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -38,9 +38,6 @@ jiffies = jiffies_64 + 4;
#endif
SECTIONS
{
- . = 0;
- reloc_start = .;
-
. = KERNELBASE;
/*
diff --git a/arch/powerpc/mm/hash_native_64.c b/arch/powerpc/mm/hash_native_64.c
index 3f0c30ae4791..c33d939120c9 100644
--- a/arch/powerpc/mm/hash_native_64.c
+++ b/arch/powerpc/mm/hash_native_64.c
@@ -43,6 +43,7 @@ static inline void __tlbie(unsigned long vpn, int psize, int apsize, int ssize)
{
unsigned long va;
unsigned int penc;
+ unsigned long sllp;
/*
* We need 14 to 65 bits of va for a tlibe of 4K page
@@ -64,7 +65,9 @@ static inline void __tlbie(unsigned long vpn, int psize, int apsize, int ssize)
/* clear out bits after (52) [0....52.....63] */
va &= ~((1ul << (64 - 52)) - 1);
va |= ssize << 8;
- va |= mmu_psize_defs[apsize].sllp << 6;
+ sllp = ((mmu_psize_defs[apsize].sllp & SLB_VSID_L) >> 6) |
+ ((mmu_psize_defs[apsize].sllp & SLB_VSID_LP) >> 4);
+ va |= sllp << 5;
asm volatile(ASM_FTR_IFCLR("tlbie %0,0", PPC_TLBIE(%1,%0), %2)
: : "r" (va), "r"(0), "i" (CPU_FTR_ARCH_206)
: "memory");
@@ -98,6 +101,7 @@ static inline void __tlbiel(unsigned long vpn, int psize, int apsize, int ssize)
{
unsigned long va;
unsigned int penc;
+ unsigned long sllp;
/* VPN_SHIFT can be atmost 12 */
va = vpn << VPN_SHIFT;
@@ -113,7 +117,9 @@ static inline void __tlbiel(unsigned long vpn, int psize, int apsize, int ssize)
/* clear out bits after(52) [0....52.....63] */
va &= ~((1ul << (64 - 52)) - 1);
va |= ssize << 8;
- va |= mmu_psize_defs[apsize].sllp << 6;
+ sllp = ((mmu_psize_defs[apsize].sllp & SLB_VSID_L) >> 6) |
+ ((mmu_psize_defs[apsize].sllp & SLB_VSID_LP) >> 4);
+ va |= sllp << 5;
asm volatile(".long 0x7c000224 | (%0 << 11) | (0 << 21)"
: : "r"(va) : "memory");
break;
@@ -554,6 +560,7 @@ static void hpte_decode(struct hash_pte *hpte, unsigned long slot,
seg_off |= vpi << shift;
}
*vpn = vsid << (SID_SHIFT - VPN_SHIFT) | seg_off >> VPN_SHIFT;
+ break;
case MMU_SEGSIZE_1T:
/* We only have 40 - 23 bits of seg_off in avpn */
seg_off = (avpn & 0x1ffff) << 23;
@@ -563,6 +570,7 @@ static void hpte_decode(struct hash_pte *hpte, unsigned long slot,
seg_off |= vpi << shift;
}
*vpn = vsid << (SID_SHIFT_1T - VPN_SHIFT) | seg_off >> VPN_SHIFT;
+ break;
default:
*vpn = size = 0;
}
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index a3985aee77fe..24a45f91c65f 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -1252,8 +1252,11 @@ nocheck:
ret = 0;
out:
- if (has_branch_stack(event))
+ if (has_branch_stack(event)) {
power_pmu_bhrb_enable(event);
+ cpuhw->bhrb_filter = ppmu->bhrb_filter_map(
+ event->attr.branch_sample_type);
+ }
perf_pmu_enable(event->pmu);
local_irq_restore(flags);
diff --git a/arch/powerpc/perf/power8-pmu.c b/arch/powerpc/perf/power8-pmu.c
index 96a64d6a8bdf..7466374d2787 100644
--- a/arch/powerpc/perf/power8-pmu.c
+++ b/arch/powerpc/perf/power8-pmu.c
@@ -561,18 +561,13 @@ static int power8_generic_events[] = {
static u64 power8_bhrb_filter_map(u64 branch_sample_type)
{
u64 pmu_bhrb_filter = 0;
- u64 br_privilege = branch_sample_type & ONLY_PLM;
- /* BHRB and regular PMU events share the same prvillege state
+ /* BHRB and regular PMU events share the same privilege state
* filter configuration. BHRB is always recorded along with a
- * regular PMU event. So privilege state filter criteria for BHRB
- * and the companion PMU events has to be the same. As a default
- * "perf record" tool sets all privillege bits ON when no filter
- * criteria is provided in the command line. So as along as all
- * privillege bits are ON or they are OFF, we are good to go.
+ * regular PMU event. As the privilege state filter is handled
+ * in the basic PMC configuration of the accompanying regular
+ * PMU event, we ignore any separate BHRB specific request.
*/
- if ((br_privilege != 7) && (br_privilege != 0))
- return -1;
/* No branch filter requested */
if (branch_sample_type & PERF_SAMPLE_BRANCH_ANY)
@@ -621,10 +616,19 @@ static struct power_pmu power8_pmu = {
static int __init init_power8_pmu(void)
{
+ int rc;
+
if (!cur_cpu_spec->oprofile_cpu_type ||
strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power8"))
return -ENODEV;
- return register_power_pmu(&power8_pmu);
+ rc = register_power_pmu(&power8_pmu);
+ if (rc)
+ return rc;
+
+ /* Tell userspace that EBB is supported */
+ cur_cpu_spec->cpu_user_features2 |= PPC_FEATURE2_EBB;
+
+ return 0;
}
early_initcall(init_power8_pmu);
diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c
index 969cce73055a..79663d26e6ea 100644
--- a/arch/powerpc/platforms/powernv/eeh-powernv.c
+++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
@@ -114,7 +114,7 @@ static int powernv_eeh_dev_probe(struct pci_dev *dev, void *flag)
* the root bridge. So it's not reasonable to continue
* the probing.
*/
- if (!dn || !edev)
+ if (!dn || !edev || edev->pe)
return 0;
/* Skip for PCI-ISA bridge */
@@ -122,8 +122,19 @@ static int powernv_eeh_dev_probe(struct pci_dev *dev, void *flag)
return 0;
/* Initialize eeh device */
- edev->class_code = dev->class;
- edev->mode = 0;
+ edev->class_code = dev->class;
+ edev->mode &= 0xFFFFFF00;
+ if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE)
+ edev->mode |= EEH_DEV_BRIDGE;
+ if (pci_is_pcie(dev)) {
+ edev->pcie_cap = pci_pcie_cap(dev);
+
+ if (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT)
+ edev->mode |= EEH_DEV_ROOT_PORT;
+ else if (pci_pcie_type(dev) == PCI_EXP_TYPE_DOWNSTREAM)
+ edev->mode |= EEH_DEV_DS_PORT;
+ }
+
edev->config_addr = ((dev->bus->number << 8) | dev->devfn);
edev->pe_config_addr = phb->bdfn_to_pe(phb, dev->bus, dev->devfn & 0xff);
diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 49b57b9f835d..d8140b125e62 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -1266,7 +1266,7 @@ void __init pnv_pci_init_ioda_phb(struct device_node *np,
opal_pci_set_pe(phb_id, 0, 0, 7, 1, 1 , OPAL_MAP_PE);
}
-void pnv_pci_init_ioda2_phb(struct device_node *np)
+void __init pnv_pci_init_ioda2_phb(struct device_node *np)
{
pnv_pci_init_ioda_phb(np, 0, PNV_PHB_IODA2);
}
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig
index 1bd3399146ed..62b4f8025de0 100644
--- a/arch/powerpc/platforms/pseries/Kconfig
+++ b/arch/powerpc/platforms/pseries/Kconfig
@@ -19,7 +19,6 @@ config PPC_PSERIES
select ZLIB_DEFLATE
select PPC_DOORBELL
select HAVE_CONTEXT_TRACKING
- select HOTPLUG if SMP
select HOTPLUG_CPU if SMP
default y
diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/platforms/pseries/eeh_pseries.c
index b456b157d33d..7fbc25b1813f 100644
--- a/arch/powerpc/platforms/pseries/eeh_pseries.c
+++ b/arch/powerpc/platforms/pseries/eeh_pseries.c
@@ -133,6 +133,48 @@ static int pseries_eeh_init(void)
return 0;
}
+static int pseries_eeh_cap_start(struct device_node *dn)
+{
+ struct pci_dn *pdn = PCI_DN(dn);
+ u32 status;
+
+ if (!pdn)
+ return 0;
+
+ rtas_read_config(pdn, PCI_STATUS, 2, &status);
+ if (!(status & PCI_STATUS_CAP_LIST))
+ return 0;
+
+ return PCI_CAPABILITY_LIST;
+}
+
+
+static int pseries_eeh_find_cap(struct device_node *dn, int cap)
+{
+ struct pci_dn *pdn = PCI_DN(dn);
+ int pos = pseries_eeh_cap_start(dn);
+ int cnt = 48; /* Maximal number of capabilities */
+ u32 id;
+
+ if (!pos)
+ return 0;
+
+ while (cnt--) {
+ rtas_read_config(pdn, pos, 1, &pos);
+ if (pos < 0x40)
+ break;
+ pos &= ~3;
+ rtas_read_config(pdn, pos + PCI_CAP_LIST_ID, 1, &id);
+ if (id == 0xff)
+ break;
+ if (id == cap)
+ return pos;
+ pos += PCI_CAP_LIST_NEXT;
+ }
+
+ return 0;
+}
+
/**
* pseries_eeh_of_probe - EEH probe on the given device
* @dn: OF node
@@ -146,14 +188,16 @@ static void *pseries_eeh_of_probe(struct device_node *dn, void *flag)
{
struct eeh_dev *edev;
struct eeh_pe pe;
+ struct pci_dn *pdn = PCI_DN(dn);
const u32 *class_code, *vendor_id, *device_id;
const u32 *regs;
+ u32 pcie_flags;
int enable = 0;
int ret;
/* Retrieve OF node and eeh device */
edev = of_node_to_eeh_dev(dn);
- if (!of_device_is_available(dn))
+ if (edev->pe || !of_device_is_available(dn))
return NULL;
/* Retrieve class/vendor/device IDs */
@@ -167,9 +211,26 @@ static void *pseries_eeh_of_probe(struct device_node *dn, void *flag)
if (dn->type && !strcmp(dn->type, "isa"))
return NULL;
- /* Update class code and mode of eeh device */
+ /*
+ * Update class code and mode of eeh device. We need
+ * correctly reflects that current device is root port
+ * or PCIe switch downstream port.
+ */
edev->class_code = *class_code;
- edev->mode = 0;
+ edev->pcie_cap = pseries_eeh_find_cap(dn, PCI_CAP_ID_EXP);
+ edev->mode &= 0xFFFFFF00;
+ if ((edev->class_code >> 8) == PCI_CLASS_BRIDGE_PCI) {
+ edev->mode |= EEH_DEV_BRIDGE;
+ if (edev->pcie_cap) {
+ rtas_read_config(pdn, edev->pcie_cap + PCI_EXP_FLAGS,
+ 2, &pcie_flags);
+ pcie_flags = (pcie_flags & PCI_EXP_FLAGS_TYPE) >> 4;
+ if (pcie_flags == PCI_EXP_TYPE_ROOT_PORT)
+ edev->mode |= EEH_DEV_ROOT_PORT;
+ else if (pcie_flags == PCI_EXP_TYPE_DOWNSTREAM)
+ edev->mode |= EEH_DEV_DS_PORT;
+ }
+ }
/* Retrieve the device address */
regs = of_get_property(dn, "reg", NULL);
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
index 02d6e21619bb..8bad880bd177 100644
--- a/arch/powerpc/platforms/pseries/lpar.c
+++ b/arch/powerpc/platforms/pseries/lpar.c
@@ -146,7 +146,7 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group,
flags = 0;
/* Make pHyp happy */
- if ((rflags & _PAGE_NO_CACHE) & !(rflags & _PAGE_WRITETHRU))
+ if ((rflags & _PAGE_NO_CACHE) && !(rflags & _PAGE_WRITETHRU))
hpte_r &= ~_PAGE_COHERENT;
if (firmware_has_feature(FW_FEATURE_XCMO) && !(hpte_r & HPTE_R_N))
flags |= H_COALESCE_CAND;
diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c
index 7b3cbde8c783..721c0586b284 100644
--- a/arch/powerpc/platforms/pseries/ras.c
+++ b/arch/powerpc/platforms/pseries/ras.c
@@ -287,6 +287,9 @@ static struct rtas_error_log *fwnmi_get_errinfo(struct pt_regs *regs)
unsigned long *savep;
struct rtas_error_log *h, *errhdr = NULL;
+ /* Mask top two bits */
+ regs->gpr[3] &= ~(0x3UL << 62);
+
if (!VALID_FWNMI_BUFFER(regs->gpr[3])) {
printk(KERN_ERR "FWNMI: corrupt r3 0x%016lx\n", regs->gpr[3]);
return NULL;
diff --git a/arch/s390/include/asm/processor.h b/arch/s390/include/asm/processor.h
index 6b499870662f..b0e6435b2f02 100644
--- a/arch/s390/include/asm/processor.h
+++ b/arch/s390/include/asm/processor.h
@@ -91,7 +91,15 @@ struct thread_struct {
#endif
};
-#define PER_FLAG_NO_TE 1UL /* Flag to disable transactions. */
+/* Flag to disable transactions. */
+#define PER_FLAG_NO_TE 1UL
+/* Flag to enable random transaction aborts. */
+#define PER_FLAG_TE_ABORT_RAND 2UL
+/* Flag to specify random transaction abort mode:
+ * - abort each transaction at a random instruction before TEND if set.
+ * - abort random transactions at a random instruction if cleared.
+ */
+#define PER_FLAG_TE_ABORT_RAND_TEND 4UL
typedef struct thread_struct thread_struct;
diff --git a/arch/s390/include/asm/switch_to.h b/arch/s390/include/asm/switch_to.h
index f3a9e0f92704..80b6f11263c4 100644
--- a/arch/s390/include/asm/switch_to.h
+++ b/arch/s390/include/asm/switch_to.h
@@ -10,7 +10,7 @@
#include <linux/thread_info.h>
extern struct task_struct *__switch_to(void *, void *);
-extern void update_per_regs(struct task_struct *task);
+extern void update_cr_regs(struct task_struct *task);
static inline void save_fp_regs(s390_fp_regs *fpregs)
{
@@ -86,7 +86,7 @@ static inline void restore_access_regs(unsigned int *acrs)
restore_fp_regs(&next->thread.fp_regs); \
restore_access_regs(&next->thread.acrs[0]); \
restore_ri_cb(next->thread.ri_cb, prev->thread.ri_cb); \
- update_per_regs(next); \
+ update_cr_regs(next); \
} \
prev = __switch_to(prev,next); \
} while (0)
diff --git a/arch/s390/include/uapi/asm/ptrace.h b/arch/s390/include/uapi/asm/ptrace.h
index 3aa9f1ec5b29..7a84619e315e 100644
--- a/arch/s390/include/uapi/asm/ptrace.h
+++ b/arch/s390/include/uapi/asm/ptrace.h
@@ -400,6 +400,7 @@ typedef struct
#define PTRACE_POKE_SYSTEM_CALL 0x5008
#define PTRACE_ENABLE_TE 0x5009
#define PTRACE_DISABLE_TE 0x5010
+#define PTRACE_TE_ABORT_RAND 0x5011
/*
* PT_PROT definition is loosely based on hppa bsd definition in
diff --git a/arch/s390/kernel/cache.c b/arch/s390/kernel/cache.c
index 64b24650e4f8..dd62071624be 100644
--- a/arch/s390/kernel/cache.c
+++ b/arch/s390/kernel/cache.c
@@ -173,7 +173,7 @@ error:
}
}
-static struct cache_dir *__cpuinit cache_create_cache_dir(int cpu)
+static struct cache_dir *cache_create_cache_dir(int cpu)
{
struct cache_dir *cache_dir;
struct kobject *kobj = NULL;
@@ -289,9 +289,8 @@ static struct kobj_type cache_index_type = {
.default_attrs = cache_index_default_attrs,
};
-static int __cpuinit cache_create_index_dir(struct cache_dir *cache_dir,
- struct cache *cache, int index,
- int cpu)
+static int cache_create_index_dir(struct cache_dir *cache_dir,
+ struct cache *cache, int index, int cpu)
{
struct cache_index_dir *index_dir;
int rc;
@@ -313,7 +312,7 @@ out:
return rc;
}
-static int __cpuinit cache_add_cpu(int cpu)
+static int cache_add_cpu(int cpu)
{
struct cache_dir *cache_dir;
struct cache *cache;
@@ -335,7 +334,7 @@ static int __cpuinit cache_add_cpu(int cpu)
return 0;
}
-static void __cpuinit cache_remove_cpu(int cpu)
+static void cache_remove_cpu(int cpu)
{
struct cache_index_dir *index, *next;
struct cache_dir *cache_dir;
@@ -354,8 +353,8 @@ static void __cpuinit cache_remove_cpu(int cpu)
cache_dir_cpu[cpu] = NULL;
}
-static int __cpuinit cache_hotplug(struct notifier_block *nfb,
- unsigned long action, void *hcpu)
+static int cache_hotplug(struct notifier_block *nfb, unsigned long action,
+ void *hcpu)
{
int cpu = (long)hcpu;
int rc = 0;
diff --git a/arch/s390/kernel/crash_dump.c b/arch/s390/kernel/crash_dump.c
index f703d91bf720..d8f355657171 100644
--- a/arch/s390/kernel/crash_dump.c
+++ b/arch/s390/kernel/crash_dump.c
@@ -21,6 +21,48 @@
#define PTR_SUB(x, y) (((char *) (x)) - ((unsigned long) (y)))
#define PTR_DIFF(x, y) ((unsigned long)(((char *) (x)) - ((unsigned long) (y))))
+
+/*
+ * Return physical address for virtual address
+ */
+static inline void *load_real_addr(void *addr)
+{
+ unsigned long real_addr;
+
+ asm volatile(
+ " lra %0,0(%1)\n"
+ " jz 0f\n"
+ " la %0,0\n"
+ "0:"
+ : "=a" (real_addr) : "a" (addr) : "cc");
+ return (void *)real_addr;
+}
+
+/*
+ * Copy up to one page to vmalloc or real memory
+ */
+static ssize_t copy_page_real(void *buf, void *src, size_t csize)
+{
+ size_t size;
+
+ if (is_vmalloc_addr(buf)) {
+ BUG_ON(csize >= PAGE_SIZE);
+ /* If buf is not page aligned, copy first part */
+ size = min(roundup(__pa(buf), PAGE_SIZE) - __pa(buf), csize);
+ if (size) {
+ if (memcpy_real(load_real_addr(buf), src, size))
+ return -EFAULT;
+ buf += size;
+ src += size;
+ }
+ /* Copy second part */
+ size = csize - size;
+ return (size) ? memcpy_real(load_real_addr(buf), src, size) : 0;
+ } else {
+ return memcpy_real(buf, src, csize);
+ }
+}
+
/*
* Copy one page from "oldmem"
*
@@ -32,6 +74,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
size_t csize, unsigned long offset, int userbuf)
{
unsigned long src;
+ int rc;
if (!csize)
return 0;
@@ -43,11 +86,11 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
src < OLDMEM_BASE + OLDMEM_SIZE)
src -= OLDMEM_BASE;
if (userbuf)
- copy_to_user_real((void __force __user *) buf, (void *) src,
- csize);
+ rc = copy_to_user_real((void __force __user *) buf,
+ (void *) src, csize);
else
- memcpy_real(buf, (void *) src, csize);
- return csize;
+ rc = copy_page_real(buf, (void *) src, csize);
+ return (rc == 0) ? csize : rc;
}
/*
diff --git a/arch/s390/kernel/perf_cpum_cf.c b/arch/s390/kernel/perf_cpum_cf.c
index 390d9ae57bb2..fb99c2057b85 100644
--- a/arch/s390/kernel/perf_cpum_cf.c
+++ b/arch/s390/kernel/perf_cpum_cf.c
@@ -639,8 +639,8 @@ static struct pmu cpumf_pmu = {
.cancel_txn = cpumf_pmu_cancel_txn,
};
-static int __cpuinit cpumf_pmu_notifier(struct notifier_block *self,
- unsigned long action, void *hcpu)
+static int cpumf_pmu_notifier(struct notifier_block *self, unsigned long action,
+ void *hcpu)
{
unsigned int cpu = (long) hcpu;
int flags;
diff --git a/arch/s390/kernel/processor.c b/arch/s390/kernel/processor.c
index 753c41d0ffd3..24612029f450 100644
--- a/arch/s390/kernel/processor.c
+++ b/arch/s390/kernel/processor.c
@@ -21,7 +21,7 @@ static DEFINE_PER_CPU(struct cpuid, cpu_id);
/*
* cpu_init - initializes state that is per-CPU.
*/
-void __cpuinit cpu_init(void)
+void cpu_init(void)
{
struct s390_idle_data *idle = &__get_cpu_var(s390_idle);
struct cpuid *id = &__get_cpu_var(cpu_id);
diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c
index a314c57f4e94..e9fadb04e3c6 100644
--- a/arch/s390/kernel/ptrace.c
+++ b/arch/s390/kernel/ptrace.c
@@ -47,7 +47,7 @@ enum s390_regset {
REGSET_GENERAL_EXTENDED,
};
-void update_per_regs(struct task_struct *task)
+void update_cr_regs(struct task_struct *task)
{
struct pt_regs *regs = task_pt_regs(task);
struct thread_struct *thread = &task->thread;
@@ -56,17 +56,25 @@ void update_per_regs(struct task_struct *task)
#ifdef CONFIG_64BIT
/* Take care of the enable/disable of transactional execution. */
if (MACHINE_HAS_TE) {
- unsigned long cr0, cr0_new;
+ unsigned long cr[3], cr_new[3];
- __ctl_store(cr0, 0, 0);
- /* set or clear transaction execution bits 8 and 9. */
+ __ctl_store(cr, 0, 2);
+ cr_new[1] = cr[1];
+ /* Set or clear transaction execution TXC/PIFO bits 8 and 9. */
if (task->thread.per_flags & PER_FLAG_NO_TE)
- cr0_new = cr0 & ~(3UL << 54);
+ cr_new[0] = cr[0] & ~(3UL << 54);
else
- cr0_new = cr0 | (3UL << 54);
- /* Only load control register 0 if necessary. */
- if (cr0 != cr0_new)
- __ctl_load(cr0_new, 0, 0);
+ cr_new[0] = cr[0] | (3UL << 54);
+ /* Set or clear transaction execution TDC bits 62 and 63. */
+ cr_new[2] = cr[2] & ~3UL;
+ if (task->thread.per_flags & PER_FLAG_TE_ABORT_RAND) {
+ if (task->thread.per_flags & PER_FLAG_TE_ABORT_RAND_TEND)
+ cr_new[2] |= 1UL;
+ else
+ cr_new[2] |= 2UL;
+ }
+ if (memcmp(&cr_new, &cr, sizeof(cr)))
+ __ctl_load(cr_new, 0, 2);
}
#endif
/* Copy user specified PER registers */
@@ -100,14 +108,14 @@ void user_enable_single_step(struct task_struct *task)
{
set_tsk_thread_flag(task, TIF_SINGLE_STEP);
if (task == current)
- update_per_regs(task);
+ update_cr_regs(task);
}
void user_disable_single_step(struct task_struct *task)
{
clear_tsk_thread_flag(task, TIF_SINGLE_STEP);
if (task == current)
- update_per_regs(task);
+ update_cr_regs(task);
}
/*
@@ -447,6 +455,26 @@ long arch_ptrace(struct task_struct *child, long request,
if (!MACHINE_HAS_TE)
return -EIO;
child->thread.per_flags |= PER_FLAG_NO_TE;
+ child->thread.per_flags &= ~PER_FLAG_TE_ABORT_RAND;
+ return 0;
+ case PTRACE_TE_ABORT_RAND:
+ if (!MACHINE_HAS_TE || (child->thread.per_flags & PER_FLAG_NO_TE))
+ return -EIO;
+ switch (data) {
+ case 0UL:
+ child->thread.per_flags &= ~PER_FLAG_TE_ABORT_RAND;
+ break;
+ case 1UL:
+ child->thread.per_flags |= PER_FLAG_TE_ABORT_RAND;
+ child->thread.per_flags |= PER_FLAG_TE_ABORT_RAND_TEND;
+ break;
+ case 2UL:
+ child->thread.per_flags |= PER_FLAG_TE_ABORT_RAND;
+ child->thread.per_flags &= ~PER_FLAG_TE_ABORT_RAND_TEND;
+ break;
+ default:
+ return -EINVAL;
+ }
return 0;
default:
/* Removing high order bit from addr (only for 31 bit). */
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index 15a016c10563..d386c4e9d2e5 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -165,7 +165,7 @@ static void pcpu_ec_call(struct pcpu *pcpu, int ec_bit)
pcpu_sigp_retry(pcpu, order, 0);
}
-static int __cpuinit pcpu_alloc_lowcore(struct pcpu *pcpu, int cpu)
+static int pcpu_alloc_lowcore(struct pcpu *pcpu, int cpu)
{
struct _lowcore *lc;
@@ -616,10 +616,9 @@ static struct sclp_cpu_info *smp_get_cpu_info(void)
return info;
}
-static int __cpuinit smp_add_present_cpu(int cpu);
+static int smp_add_present_cpu(int cpu);
-static int __cpuinit __smp_rescan_cpus(struct sclp_cpu_info *info,
- int sysfs_add)
+static int __smp_rescan_cpus(struct sclp_cpu_info *info, int sysfs_add)
{
struct pcpu *pcpu;
cpumask_t avail;
@@ -685,7 +684,7 @@ static void __init smp_detect_cpus(void)
/*
* Activate a secondary processor.
*/
-static void __cpuinit smp_start_secondary(void *cpuvoid)
+static void smp_start_secondary(void *cpuvoid)
{
S390_lowcore.last_update_clock = get_tod_clock();
S390_lowcore.restart_stack = (unsigned long) restart_stack;
@@ -708,7 +707,7 @@ static void __cpuinit smp_start_secondary(void *cpuvoid)
}
/* Upping and downing of CPUs */
-int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
+int __cpu_up(unsigned int cpu, struct task_struct *tidle)
{
struct pcpu *pcpu;
int rc;
@@ -964,8 +963,8 @@ static struct attribute_group cpu_online_attr_group = {
.attrs = cpu_online_attrs,
};
-static int __cpuinit smp_cpu_notify(struct notifier_block *self,
- unsigned long action, void *hcpu)
+static int smp_cpu_notify(struct notifier_block *self, unsigned long action,
+ void *hcpu)
{
unsigned int cpu = (unsigned int)(long)hcpu;
struct cpu *c = &pcpu_devices[cpu].cpu;
@@ -983,7 +982,7 @@ static int __cpuinit smp_cpu_notify(struct notifier_block *self,
return notifier_from_errno(err);
}
-static int __cpuinit smp_add_present_cpu(int cpu)
+static int smp_add_present_cpu(int cpu)
{
struct cpu *c = &pcpu_devices[cpu].cpu;
struct device *s = &c->dev;
diff --git a/arch/s390/kernel/sysinfo.c b/arch/s390/kernel/sysinfo.c
index 62f89d98e880..811f542b8ed4 100644
--- a/arch/s390/kernel/sysinfo.c
+++ b/arch/s390/kernel/sysinfo.c
@@ -418,7 +418,7 @@ void s390_adjust_jiffies(void)
/*
* calibrate the delay loop
*/
-void __cpuinit calibrate_delay(void)
+void calibrate_delay(void)
{
s390_adjust_jiffies();
/* Print the good old Bogomips line .. */
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c
index 3fb09359eda6..9b9c1b78ec67 100644
--- a/arch/s390/kernel/vtime.c
+++ b/arch/s390/kernel/vtime.c
@@ -371,14 +371,14 @@ EXPORT_SYMBOL(del_virt_timer);
/*
* Start the virtual CPU timer on the current CPU.
*/
-void __cpuinit init_cpu_vtimer(void)
+void init_cpu_vtimer(void)
{
/* set initial cpu timer */
set_vtimer(VTIMER_MAX_SLICE);
}
-static int __cpuinit s390_nohz_notify(struct notifier_block *self,
- unsigned long action, void *hcpu)
+static int s390_nohz_notify(struct notifier_block *self, unsigned long action,
+ void *hcpu)
{
struct s390_idle_data *idle;
long cpu = (long) hcpu;
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
index 047c3e4c59a2..f00aefb66a4e 100644
--- a/arch/s390/mm/fault.c
+++ b/arch/s390/mm/fault.c
@@ -639,8 +639,8 @@ out:
put_task_struct(tsk);
}
-static int __cpuinit pfault_cpu_notify(struct notifier_block *self,
- unsigned long action, void *hcpu)
+static int pfault_cpu_notify(struct notifier_block *self, unsigned long action,
+ void *hcpu)
{
struct thread_struct *thread, *next;
struct task_struct *tsk;
diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c
index 82f165f8078c..d5f10a43a58f 100644
--- a/arch/s390/net/bpf_jit_comp.c
+++ b/arch/s390/net/bpf_jit_comp.c
@@ -9,6 +9,8 @@
#include <linux/netdevice.h>
#include <linux/if_vlan.h>
#include <linux/filter.h>
+#include <linux/random.h>
+#include <linux/init.h>
#include <asm/cacheflush.h>
#include <asm/processor.h>
#include <asm/facility.h>
@@ -221,6 +223,37 @@ static void bpf_jit_epilogue(struct bpf_jit *jit)
EMIT2(0x07fe);
}
+/* Helper to find the offset of pkt_type in sk_buff
+ * Make sure its still a 3bit field starting at the MSBs within a byte.
+ */
+#define PKT_TYPE_MAX 0xe0
+static int pkt_type_offset;
+
+static int __init bpf_pkt_type_offset_init(void)
+{
+ struct sk_buff skb_probe = {
+ .pkt_type = ~0,
+ };
+ char *ct = (char *)&skb_probe;
+ int off;
+
+ pkt_type_offset = -1;
+ for (off = 0; off < sizeof(struct sk_buff); off++) {
+ if (!ct[off])
+ continue;
+ if (ct[off] == PKT_TYPE_MAX)
+ pkt_type_offset = off;
+ else {
+ /* Found non matching bit pattern, fix needed. */
+ WARN_ON_ONCE(1);
+ pkt_type_offset = -1;
+ return -1;
+ }
+ }
+ return 0;
+}
+device_initcall(bpf_pkt_type_offset_init);
+
/*
* make sure we dont leak kernel information to user
*/
@@ -720,6 +753,16 @@ call_fn: /* lg %r1,<d(function)>(%r13) */
EMIT4_DISP(0x88500000, 12);
}
break;
+ case BPF_S_ANC_PKTTYPE:
+ if (pkt_type_offset < 0)
+ goto out;
+ /* lhi %r5,0 */
+ EMIT4(0xa7580000);
+ /* ic %r5,<d(pkt_type_offset)>(%r2) */
+ EMIT4_DISP(0x43502000, pkt_type_offset);
+ /* srl %r5,5 */
+ EMIT4_DISP(0x88500000, 5);
+ break;
case BPF_S_ANC_CPU: /* A = smp_processor_id() */
#ifdef CONFIG_SMP
/* l %r5,<d(cpu_nr)> */
@@ -738,8 +781,41 @@ out:
return -1;
}
+/*
+ * Note: for security reasons, bpf code will follow a randomly
+ * sized amount of illegal instructions.
+ */
+struct bpf_binary_header {
+ unsigned int pages;
+ u8 image[];
+};
+
+static struct bpf_binary_header *bpf_alloc_binary(unsigned int bpfsize,
+ u8 **image_ptr)
+{
+ struct bpf_binary_header *header;
+ unsigned int sz, hole;
+
+ /* Most BPF filters are really small, but if some of them fill a page,
+ * allow at least 128 extra bytes for illegal instructions.
+ */
+ sz = round_up(bpfsize + sizeof(*header) + 128, PAGE_SIZE);
+ header = module_alloc(sz);
+ if (!header)
+ return NULL;
+ memset(header, 0, sz);
+ header->pages = sz / PAGE_SIZE;
+ hole = sz - bpfsize + sizeof(*header);
+ /* Insert random number of illegal instructions before BPF code
+ * and make sure the first instruction starts at an even address.
+ */
+ *image_ptr = &header->image[(prandom_u32() % hole) & -2];
+ return header;
+}
+
void bpf_jit_compile(struct sk_filter *fp)
{
+ struct bpf_binary_header *header = NULL;
unsigned long size, prg_len, lit_len;
struct bpf_jit jit, cjit;
unsigned int *addrs;
@@ -772,12 +848,11 @@ void bpf_jit_compile(struct sk_filter *fp)
} else if (jit.prg == cjit.prg && jit.lit == cjit.lit) {
prg_len = jit.prg - jit.start;
lit_len = jit.lit - jit.mid;
- size = max_t(unsigned long, prg_len + lit_len,
- sizeof(struct work_struct));
+ size = prg_len + lit_len;
if (size >= BPF_SIZE_MAX)
goto out;
- jit.start = module_alloc(size);
- if (!jit.start)
+ header = bpf_alloc_binary(size, &jit.start);
+ if (!header)
goto out;
jit.prg = jit.mid = jit.start + prg_len;
jit.lit = jit.end = jit.start + prg_len + lit_len;
@@ -788,37 +863,25 @@ void bpf_jit_compile(struct sk_filter *fp)
cjit = jit;
}
if (bpf_jit_enable > 1) {
- pr_err("flen=%d proglen=%lu pass=%d image=%p\n",
- fp->len, jit.end - jit.start, pass, jit.start);
- if (jit.start) {
- printk(KERN_ERR "JIT code:\n");
+ bpf_jit_dump(fp->len, jit.end - jit.start, pass, jit.start);
+ if (jit.start)
print_fn_code(jit.start, jit.mid - jit.start);
- print_hex_dump(KERN_ERR, "JIT literals:\n",
- DUMP_PREFIX_ADDRESS, 16, 1,
- jit.mid, jit.end - jit.mid, false);
- }
}
- if (jit.start)
+ if (jit.start) {
+ set_memory_ro((unsigned long)header, header->pages);
fp->bpf_func = (void *) jit.start;
+ }
out:
kfree(addrs);
}
-static void jit_free_defer(struct work_struct *arg)
-{
- module_free(NULL, arg);
-}
-
-/* run from softirq, we must use a work_struct to call
- * module_free() from process context
- */
void bpf_jit_free(struct sk_filter *fp)
{
- struct work_struct *work;
+ unsigned long addr = (unsigned long)fp->bpf_func & PAGE_MASK;
+ struct bpf_binary_header *header = (void *)addr;
if (fp->bpf_func == sk_run_filter)
return;
- work = (struct work_struct *)fp->bpf_func;
- INIT_WORK(work, jit_free_defer);
- schedule_work(work);
+ set_memory_rw(addr, header->pages);
+ module_free(NULL, header);
}
diff --git a/arch/score/mm/tlb-score.c b/arch/score/mm/tlb-score.c
index 6fdb100244c8..004073717de0 100644
--- a/arch/score/mm/tlb-score.c
+++ b/arch/score/mm/tlb-score.c
@@ -240,7 +240,7 @@ void __update_tlb(struct vm_area_struct *vma, unsigned long address, pte_t pte)
local_irq_restore(flags);
}
-void __cpuinit tlb_init(void)
+void tlb_init(void)
{
tlblock_set(0);
local_flush_tlb_all();
diff --git a/arch/sh/kernel/cpu/init.c b/arch/sh/kernel/cpu/init.c
index 61a07dafcd46..ecf83cd158dc 100644
--- a/arch/sh/kernel/cpu/init.c
+++ b/arch/sh/kernel/cpu/init.c
@@ -43,9 +43,9 @@
* peripherals (nofpu, nodsp, and so forth).
*/
#define onchip_setup(x) \
-static int x##_disabled __cpuinitdata = !cpu_has_##x; \
+static int x##_disabled = !cpu_has_##x; \
\
-static int __cpuinit x##_setup(char *opts) \
+static int x##_setup(char *opts) \
{ \
x##_disabled = 1; \
return 1; \
@@ -59,7 +59,7 @@ onchip_setup(dsp);
#define CPUOPM 0xff2f0000
#define CPUOPM_RABD (1 << 5)
-static void __cpuinit speculative_execution_init(void)
+static void speculative_execution_init(void)
{
/* Clear RABD */
__raw_writel(__raw_readl(CPUOPM) & ~CPUOPM_RABD, CPUOPM);
@@ -78,7 +78,7 @@ static void __cpuinit speculative_execution_init(void)
#define EXPMASK_BRDSSLP (1 << 1)
#define EXPMASK_MMCAW (1 << 4)
-static void __cpuinit expmask_init(void)
+static void expmask_init(void)
{
unsigned long expmask = __raw_readl(EXPMASK);
@@ -217,7 +217,7 @@ static void detect_cache_shape(void)
l2_cache_shape = -1; /* No S-cache */
}
-static void __cpuinit fpu_init(void)
+static void fpu_init(void)
{
/* Disable the FPU */
if (fpu_disabled && (current_cpu_data.flags & CPU_HAS_FPU)) {
@@ -230,7 +230,7 @@ static void __cpuinit fpu_init(void)
}
#ifdef CONFIG_SH_DSP
-static void __cpuinit release_dsp(void)
+static void release_dsp(void)
{
unsigned long sr;
@@ -244,7 +244,7 @@ static void __cpuinit release_dsp(void)
);
}
-static void __cpuinit dsp_init(void)
+static void dsp_init(void)
{
unsigned long sr;
@@ -276,7 +276,7 @@ static void __cpuinit dsp_init(void)
release_dsp();
}
#else
-static inline void __cpuinit dsp_init(void) { }
+static inline void dsp_init(void) { }
#endif /* CONFIG_SH_DSP */
/**
@@ -295,7 +295,7 @@ static inline void __cpuinit dsp_init(void) { }
* Each processor family is still responsible for doing its own probing
* and cache configuration in cpu_probe().
*/
-asmlinkage void __cpuinit cpu_init(void)
+asmlinkage void cpu_init(void)
{
current_thread_info()->cpu = hard_smp_processor_id();
diff --git a/arch/sh/kernel/cpu/sh2/probe.c b/arch/sh/kernel/cpu/sh2/probe.c
index bab8e75958ae..6c687ae812ef 100644
--- a/arch/sh/kernel/cpu/sh2/probe.c
+++ b/arch/sh/kernel/cpu/sh2/probe.c
@@ -13,7 +13,7 @@
#include <asm/processor.h>
#include <asm/cache.h>
-void __cpuinit cpu_probe(void)
+void cpu_probe(void)
{
#if defined(CONFIG_CPU_SUBTYPE_SH7619)
boot_cpu_data.type = CPU_SH7619;
diff --git a/arch/sh/kernel/cpu/sh2a/probe.c b/arch/sh/kernel/cpu/sh2a/probe.c
index 5170b6aa4129..3f87971082f1 100644
--- a/arch/sh/kernel/cpu/sh2a/probe.c
+++ b/arch/sh/kernel/cpu/sh2a/probe.c
@@ -13,7 +13,7 @@
#include <asm/processor.h>
#include <asm/cache.h>
-void __cpuinit cpu_probe(void)
+void cpu_probe(void)
{
boot_cpu_data.family = CPU_FAMILY_SH2A;
diff --git a/arch/sh/kernel/cpu/sh3/probe.c b/arch/sh/kernel/cpu/sh3/probe.c
index bf23c322e164..426e1e1dcedc 100644
--- a/arch/sh/kernel/cpu/sh3/probe.c
+++ b/arch/sh/kernel/cpu/sh3/probe.c
@@ -16,7 +16,7 @@
#include <asm/cache.h>
#include <asm/io.h>
-void __cpuinit cpu_probe(void)
+void cpu_probe(void)
{
unsigned long addr0, addr1, data0, data1, data2, data3;
diff --git a/arch/sh/kernel/cpu/sh4/probe.c b/arch/sh/kernel/cpu/sh4/probe.c
index 0fbbd50bc8ad..a521bcf50695 100644
--- a/arch/sh/kernel/cpu/sh4/probe.c
+++ b/arch/sh/kernel/cpu/sh4/probe.c
@@ -15,7 +15,7 @@
#include <asm/processor.h>
#include <asm/cache.h>
-void __cpuinit cpu_probe(void)
+void cpu_probe(void)
{
unsigned long pvr, prr, cvr;
unsigned long size;
diff --git a/arch/sh/kernel/cpu/sh4a/smp-shx3.c b/arch/sh/kernel/cpu/sh4a/smp-shx3.c
index 03f2b55757cf..4a298808789c 100644
--- a/arch/sh/kernel/cpu/sh4a/smp-shx3.c
+++ b/arch/sh/kernel/cpu/sh4a/smp-shx3.c
@@ -124,7 +124,7 @@ static void shx3_update_boot_vector(unsigned int cpu)
__raw_writel(STBCR_RESET, STBCR_REG(cpu));
}
-static int __cpuinit
+static int
shx3_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned int)hcpu;
@@ -143,11 +143,11 @@ shx3_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata shx3_cpu_notifier = {
+static struct notifier_block shx3_cpu_notifier = {
.notifier_call = shx3_cpu_callback,
};
-static int __cpuinit register_shx3_cpu_notifier(void)
+static int register_shx3_cpu_notifier(void)
{
register_hotcpu_notifier(&shx3_cpu_notifier);
return 0;
diff --git a/arch/sh/kernel/cpu/sh5/probe.c b/arch/sh/kernel/cpu/sh5/probe.c
index 9e882409e4e9..eca427c2f2f3 100644
--- a/arch/sh/kernel/cpu/sh5/probe.c
+++ b/arch/sh/kernel/cpu/sh5/probe.c
@@ -17,7 +17,7 @@
#include <asm/cache.h>
#include <asm/tlb.h>
-void __cpuinit cpu_probe(void)
+void cpu_probe(void)
{
unsigned long long cir;
diff --git a/arch/sh/kernel/perf_event.c b/arch/sh/kernel/perf_event.c
index 068b8a2759b5..b9cefebda55c 100644
--- a/arch/sh/kernel/perf_event.c
+++ b/arch/sh/kernel/perf_event.c
@@ -367,7 +367,7 @@ static void sh_pmu_setup(int cpu)
memset(cpuhw, 0, sizeof(struct cpu_hw_events));
}
-static int __cpuinit
+static int
sh_pmu_notifier(struct notifier_block *self, unsigned long action, void *hcpu)
{
unsigned int cpu = (long)hcpu;
@@ -384,7 +384,7 @@ sh_pmu_notifier(struct notifier_block *self, unsigned long action, void *hcpu)
return NOTIFY_OK;
}
-int __cpuinit register_sh_pmu(struct sh_pmu *_pmu)
+int register_sh_pmu(struct sh_pmu *_pmu)
{
if (sh_pmu)
return -EBUSY;
diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c
index 055d91b70305..53bc6c4c84ec 100644
--- a/arch/sh/kernel/process.c
+++ b/arch/sh/kernel/process.c
@@ -65,7 +65,7 @@ void arch_task_cache_init(void)
# define HAVE_SOFTFP 0
#endif
-void __cpuinit init_thread_xstate(void)
+void init_thread_xstate(void)
{
if (boot_cpu_data.flags & CPU_HAS_FPU)
xstate_size = sizeof(struct sh_fpu_hard_struct);
diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c
index ebe7a7d97215..1cf90e947dbf 100644
--- a/arch/sh/kernel/setup.c
+++ b/arch/sh/kernel/setup.c
@@ -172,7 +172,7 @@ disable:
#endif
}
-void __cpuinit calibrate_delay(void)
+void calibrate_delay(void)
{
struct clk *clk = clk_get(NULL, "cpu_clk");
diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c
index 45696451f0ea..86a7936a980b 100644
--- a/arch/sh/kernel/smp.c
+++ b/arch/sh/kernel/smp.c
@@ -37,7 +37,7 @@ struct plat_smp_ops *mp_ops = NULL;
/* State of each CPU */
DEFINE_PER_CPU(int, cpu_state) = { 0 };
-void __cpuinit register_smp_ops(struct plat_smp_ops *ops)
+void register_smp_ops(struct plat_smp_ops *ops)
{
if (mp_ops)
printk(KERN_WARNING "Overriding previously set SMP ops\n");
@@ -45,7 +45,7 @@ void __cpuinit register_smp_ops(struct plat_smp_ops *ops)
mp_ops = ops;
}
-static inline void __cpuinit smp_store_cpu_info(unsigned int cpu)
+static inline void smp_store_cpu_info(unsigned int cpu)
{
struct sh_cpuinfo *c = cpu_data + cpu;
@@ -174,7 +174,7 @@ void native_play_dead(void)
}
#endif
-asmlinkage void __cpuinit start_secondary(void)
+asmlinkage void start_secondary(void)
{
unsigned int cpu = smp_processor_id();
struct mm_struct *mm = &init_mm;
@@ -215,7 +215,7 @@ extern struct {
void *thread_info;
} stack_start;
-int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tsk)
+int __cpu_up(unsigned int cpu, struct task_struct *tsk)
{
unsigned long timeout;
diff --git a/arch/sh/kernel/traps_32.c b/arch/sh/kernel/traps_32.c
index 5f513a64dedf..68e99f09171d 100644
--- a/arch/sh/kernel/traps_32.c
+++ b/arch/sh/kernel/traps_32.c
@@ -741,7 +741,7 @@ asmlinkage void do_exception_error(unsigned long r4, unsigned long r5,
die_if_kernel("exception", regs, ex);
}
-void __cpuinit per_cpu_trap_init(void)
+void per_cpu_trap_init(void)
{
extern void *vbr_base;
diff --git a/arch/sh/kernel/traps_64.c b/arch/sh/kernel/traps_64.c
index f87d20da1791..112ea11c030d 100644
--- a/arch/sh/kernel/traps_64.c
+++ b/arch/sh/kernel/traps_64.c
@@ -810,7 +810,7 @@ asmlinkage void do_debug_interrupt(unsigned long code, struct pt_regs *regs)
poke_real_address_q(DM_EXP_CAUSE_PHY, 0x0);
}
-void __cpuinit per_cpu_trap_init(void)
+void per_cpu_trap_init(void)
{
/* Nothing to do for now, VBR initialization later. */
}
diff --git a/arch/sh/mm/tlb-sh5.c b/arch/sh/mm/tlb-sh5.c
index ff1c40a31cbc..e4bb2a8e0a69 100644
--- a/arch/sh/mm/tlb-sh5.c
+++ b/arch/sh/mm/tlb-sh5.c
@@ -17,7 +17,7 @@
/**
* sh64_tlb_init - Perform initial setup for the DTLB and ITLB.
*/
-int __cpuinit sh64_tlb_init(void)
+int sh64_tlb_init(void)
{
/* Assign some sane DTLB defaults */
cpu_data->dtlb.entries = 64;
diff --git a/arch/sparc/kernel/ds.c b/arch/sparc/kernel/ds.c
index 11d460f6f9cc..62d6b153ffa2 100644
--- a/arch/sparc/kernel/ds.c
+++ b/arch/sparc/kernel/ds.c
@@ -528,10 +528,8 @@ static void dr_cpu_mark(struct ds_data *resp, int cpu, int ncpus,
}
}
-static int __cpuinit dr_cpu_configure(struct ds_info *dp,
- struct ds_cap_state *cp,
- u64 req_num,
- cpumask_t *mask)
+static int dr_cpu_configure(struct ds_info *dp, struct ds_cap_state *cp,
+ u64 req_num, cpumask_t *mask)
{
struct ds_data *resp;
int resp_len, ncpus, cpu;
@@ -627,9 +625,8 @@ static int dr_cpu_unconfigure(struct ds_info *dp,
return 0;
}
-static void __cpuinit dr_cpu_data(struct ds_info *dp,
- struct ds_cap_state *cp,
- void *buf, int len)
+static void dr_cpu_data(struct ds_info *dp, struct ds_cap_state *cp, void *buf,
+ int len)
{
struct ds_data *data = buf;
struct dr_cpu_tag *tag = (struct dr_cpu_tag *) (data + 1);
diff --git a/arch/sparc/kernel/entry.h b/arch/sparc/kernel/entry.h
index cc3c5cb47cda..9c179fbfb219 100644
--- a/arch/sparc/kernel/entry.h
+++ b/arch/sparc/kernel/entry.h
@@ -250,7 +250,7 @@ extern struct ino_bucket *ivector_table;
extern unsigned long ivector_table_pa;
extern void init_irqwork_curcpu(void);
-extern void __cpuinit sun4v_register_mondo_queues(int this_cpu);
+extern void sun4v_register_mondo_queues(int this_cpu);
#endif /* CONFIG_SPARC32 */
#endif /* _ENTRY_H */
diff --git a/arch/sparc/kernel/hvtramp.S b/arch/sparc/kernel/hvtramp.S
index 605c960b2fa6..4eb1a5a1d544 100644
--- a/arch/sparc/kernel/hvtramp.S
+++ b/arch/sparc/kernel/hvtramp.S
@@ -16,7 +16,6 @@
#include <asm/asi.h>
#include <asm/pil.h>
- __CPUINIT
.align 8
.globl hv_cpu_startup, hv_cpu_startup_end
diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
index 9bcbbe2c4e7e..d4840cec2c55 100644
--- a/arch/sparc/kernel/irq_64.c
+++ b/arch/sparc/kernel/irq_64.c
@@ -835,7 +835,8 @@ void notrace init_irqwork_curcpu(void)
* Therefore you cannot make any OBP calls, not even prom_printf,
* from these two routines.
*/
-static void __cpuinit notrace register_one_mondo(unsigned long paddr, unsigned long type, unsigned long qmask)
+static void notrace register_one_mondo(unsigned long paddr, unsigned long type,
+ unsigned long qmask)
{
unsigned long num_entries = (qmask + 1) / 64;
unsigned long status;
@@ -848,7 +849,7 @@ static void __cpuinit notrace register_one_mondo(unsigned long paddr, unsigned l
}
}
-void __cpuinit notrace sun4v_register_mondo_queues(int this_cpu)
+void notrace sun4v_register_mondo_queues(int this_cpu)
{
struct trap_per_cpu *tb = &trap_block[this_cpu];
diff --git a/arch/sparc/kernel/leon_smp.c b/arch/sparc/kernel/leon_smp.c
index d7aa524b7283..6edf955f987c 100644
--- a/arch/sparc/kernel/leon_smp.c
+++ b/arch/sparc/kernel/leon_smp.c
@@ -54,7 +54,7 @@ extern ctxd_t *srmmu_ctx_table_phys;
static int smp_processors_ready;
extern volatile unsigned long cpu_callin_map[NR_CPUS];
extern cpumask_t smp_commenced_mask;
-void __cpuinit leon_configure_cache_smp(void);
+void leon_configure_cache_smp(void);
static void leon_ipi_init(void);
/* IRQ number of LEON IPIs */
@@ -69,12 +69,12 @@ static inline unsigned long do_swap(volatile unsigned long *ptr,
return val;
}
-void __cpuinit leon_cpu_pre_starting(void *arg)
+void leon_cpu_pre_starting(void *arg)
{
leon_configure_cache_smp();
}
-void __cpuinit leon_cpu_pre_online(void *arg)
+void leon_cpu_pre_online(void *arg)
{
int cpuid = hard_smp_processor_id();
@@ -106,7 +106,7 @@ void __cpuinit leon_cpu_pre_online(void *arg)
extern struct linux_prom_registers smp_penguin_ctable;
-void __cpuinit leon_configure_cache_smp(void)
+void leon_configure_cache_smp(void)
{
unsigned long cfg = sparc_leon3_get_dcachecfg();
int me = smp_processor_id();
@@ -186,7 +186,7 @@ void __init leon_boot_cpus(void)
}
-int __cpuinit leon_boot_one_cpu(int i, struct task_struct *idle)
+int leon_boot_one_cpu(int i, struct task_struct *idle)
{
int timeout;
diff --git a/arch/sparc/kernel/mdesc.c b/arch/sparc/kernel/mdesc.c
index 831c001604e8..b90bf23e3aab 100644
--- a/arch/sparc/kernel/mdesc.c
+++ b/arch/sparc/kernel/mdesc.c
@@ -571,9 +571,7 @@ static void __init report_platform_properties(void)
mdesc_release(hp);
}
-static void __cpuinit fill_in_one_cache(cpuinfo_sparc *c,
- struct mdesc_handle *hp,
- u64 mp)
+static void fill_in_one_cache(cpuinfo_sparc *c, struct mdesc_handle *hp, u64 mp)
{
const u64 *level = mdesc_get_property(hp, mp, "level", NULL);
const u64 *size = mdesc_get_property(hp, mp, "size", NULL);
@@ -616,7 +614,7 @@ static void __cpuinit fill_in_one_cache(cpuinfo_sparc *c,
}
}
-static void __cpuinit mark_core_ids(struct mdesc_handle *hp, u64 mp, int core_id)
+static void mark_core_ids(struct mdesc_handle *hp, u64 mp, int core_id)
{
u64 a;
@@ -649,7 +647,7 @@ static void __cpuinit mark_core_ids(struct mdesc_handle *hp, u64 mp, int core_id
}
}
-static void __cpuinit set_core_ids(struct mdesc_handle *hp)
+static void set_core_ids(struct mdesc_handle *hp)
{
int idx;
u64 mp;
@@ -674,7 +672,7 @@ static void __cpuinit set_core_ids(struct mdesc_handle *hp)
}
}
-static void __cpuinit mark_proc_ids(struct mdesc_handle *hp, u64 mp, int proc_id)
+static void mark_proc_ids(struct mdesc_handle *hp, u64 mp, int proc_id)
{
u64 a;
@@ -693,7 +691,7 @@ static void __cpuinit mark_proc_ids(struct mdesc_handle *hp, u64 mp, int proc_id
}
}
-static void __cpuinit __set_proc_ids(struct mdesc_handle *hp, const char *exec_unit_name)
+static void __set_proc_ids(struct mdesc_handle *hp, const char *exec_unit_name)
{
int idx;
u64 mp;
@@ -714,14 +712,14 @@ static void __cpuinit __set_proc_ids(struct mdesc_handle *hp, const char *exec_u
}
}
-static void __cpuinit set_proc_ids(struct mdesc_handle *hp)
+static void set_proc_ids(struct mdesc_handle *hp)
{
__set_proc_ids(hp, "exec_unit");
__set_proc_ids(hp, "exec-unit");
}
-static void __cpuinit get_one_mondo_bits(const u64 *p, unsigned int *mask,
- unsigned long def, unsigned long max)
+static void get_one_mondo_bits(const u64 *p, unsigned int *mask,
+ unsigned long def, unsigned long max)
{
u64 val;
@@ -742,8 +740,8 @@ use_default:
*mask = ((1U << def) * 64U) - 1U;
}
-static void __cpuinit get_mondo_data(struct mdesc_handle *hp, u64 mp,
- struct trap_per_cpu *tb)
+static void get_mondo_data(struct mdesc_handle *hp, u64 mp,
+ struct trap_per_cpu *tb)
{
static int printed;
const u64 *val;
@@ -769,7 +767,7 @@ static void __cpuinit get_mondo_data(struct mdesc_handle *hp, u64 mp,
}
}
-static void * __cpuinit mdesc_iterate_over_cpus(void *(*func)(struct mdesc_handle *, u64, int, void *), void *arg, cpumask_t *mask)
+static void *mdesc_iterate_over_cpus(void *(*func)(struct mdesc_handle *, u64, int, void *), void *arg, cpumask_t *mask)
{
struct mdesc_handle *hp = mdesc_grab();
void *ret = NULL;
@@ -799,7 +797,8 @@ out:
return ret;
}
-static void * __cpuinit record_one_cpu(struct mdesc_handle *hp, u64 mp, int cpuid, void *arg)
+static void *record_one_cpu(struct mdesc_handle *hp, u64 mp, int cpuid,
+ void *arg)
{
ncpus_probed++;
#ifdef CONFIG_SMP
@@ -808,7 +807,7 @@ static void * __cpuinit record_one_cpu(struct mdesc_handle *hp, u64 mp, int cpui
return NULL;
}
-void __cpuinit mdesc_populate_present_mask(cpumask_t *mask)
+void mdesc_populate_present_mask(cpumask_t *mask)
{
if (tlb_type != hypervisor)
return;
@@ -841,7 +840,8 @@ void __init mdesc_get_page_sizes(cpumask_t *mask, unsigned long *pgsz_mask)
mdesc_iterate_over_cpus(check_one_pgsz, pgsz_mask, mask);
}
-static void * __cpuinit fill_in_one_cpu(struct mdesc_handle *hp, u64 mp, int cpuid, void *arg)
+static void *fill_in_one_cpu(struct mdesc_handle *hp, u64 mp, int cpuid,
+ void *arg)
{
const u64 *cfreq = mdesc_get_property(hp, mp, "clock-frequency", NULL);
struct trap_per_cpu *tb;
@@ -890,7 +890,7 @@ static void * __cpuinit fill_in_one_cpu(struct mdesc_handle *hp, u64 mp, int cpu
return NULL;
}
-void __cpuinit mdesc_fill_in_cpu_data(cpumask_t *mask)
+void mdesc_fill_in_cpu_data(cpumask_t *mask)
{
struct mdesc_handle *hp;
diff --git a/arch/sparc/kernel/smp_32.c b/arch/sparc/kernel/smp_32.c
index e3f2b81c23f1..a102bfba6ea8 100644
--- a/arch/sparc/kernel/smp_32.c
+++ b/arch/sparc/kernel/smp_32.c
@@ -39,7 +39,7 @@
#include "kernel.h"
#include "irq.h"
-volatile unsigned long cpu_callin_map[NR_CPUS] __cpuinitdata = {0,};
+volatile unsigned long cpu_callin_map[NR_CPUS] = {0,};
cpumask_t smp_commenced_mask = CPU_MASK_NONE;
@@ -53,7 +53,7 @@ const struct sparc32_ipi_ops *sparc32_ipi_ops;
* instruction which is much better...
*/
-void __cpuinit smp_store_cpu_info(int id)
+void smp_store_cpu_info(int id)
{
int cpu_node;
int mid;
@@ -120,7 +120,7 @@ void cpu_panic(void)
panic("SMP bolixed\n");
}
-struct linux_prom_registers smp_penguin_ctable __cpuinitdata = { 0 };
+struct linux_prom_registers smp_penguin_ctable = { 0 };
void smp_send_reschedule(int cpu)
{
@@ -259,10 +259,10 @@ void __init smp_prepare_boot_cpu(void)
set_cpu_possible(cpuid, true);
}
-int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
+int __cpu_up(unsigned int cpu, struct task_struct *tidle)
{
- extern int __cpuinit smp4m_boot_one_cpu(int, struct task_struct *);
- extern int __cpuinit smp4d_boot_one_cpu(int, struct task_struct *);
+ extern int smp4m_boot_one_cpu(int, struct task_struct *);
+ extern int smp4d_boot_one_cpu(int, struct task_struct *);
int ret=0;
switch(sparc_cpu_model) {
@@ -297,7 +297,7 @@ int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
return ret;
}
-void __cpuinit arch_cpu_pre_starting(void *arg)
+void arch_cpu_pre_starting(void *arg)
{
local_ops->cache_all();
local_ops->tlb_all();
@@ -317,7 +317,7 @@ void __cpuinit arch_cpu_pre_starting(void *arg)
}
}
-void __cpuinit arch_cpu_pre_online(void *arg)
+void arch_cpu_pre_online(void *arg)
{
unsigned int cpuid = hard_smp_processor_id();
@@ -344,7 +344,7 @@ void __cpuinit arch_cpu_pre_online(void *arg)
}
}
-void __cpuinit sparc_start_secondary(void *arg)
+void sparc_start_secondary(void *arg)
{
unsigned int cpu;
@@ -375,7 +375,7 @@ void __cpuinit sparc_start_secondary(void *arg)
BUG();
}
-void __cpuinit smp_callin(void)
+void smp_callin(void)
{
sparc_start_secondary(NULL);
}
diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c
index 77539eda928c..e142545244f2 100644
--- a/arch/sparc/kernel/smp_64.c
+++ b/arch/sparc/kernel/smp_64.c
@@ -87,7 +87,7 @@ extern void setup_sparc64_timer(void);
static volatile unsigned long callin_flag = 0;
-void __cpuinit smp_callin(void)
+void smp_callin(void)
{
int cpuid = hard_smp_processor_id();
@@ -281,7 +281,8 @@ static unsigned long kimage_addr_to_ra(void *p)
return kern_base + (val - KERNBASE);
}
-static void __cpuinit ldom_startcpu_cpuid(unsigned int cpu, unsigned long thread_reg, void **descrp)
+static void ldom_startcpu_cpuid(unsigned int cpu, unsigned long thread_reg,
+ void **descrp)
{
extern unsigned long sparc64_ttable_tl0;
extern unsigned long kern_locked_tte_data;
@@ -342,7 +343,7 @@ extern unsigned long sparc64_cpu_startup;
*/
static struct thread_info *cpu_new_thread = NULL;
-static int __cpuinit smp_boot_one_cpu(unsigned int cpu, struct task_struct *idle)
+static int smp_boot_one_cpu(unsigned int cpu, struct task_struct *idle)
{
unsigned long entry =
(unsigned long)(&sparc64_cpu_startup);
@@ -1266,7 +1267,7 @@ void smp_fill_in_sib_core_maps(void)
}
}
-int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
+int __cpu_up(unsigned int cpu, struct task_struct *tidle)
{
int ret = smp_boot_one_cpu(cpu, tidle);
diff --git a/arch/sparc/kernel/sun4d_smp.c b/arch/sparc/kernel/sun4d_smp.c
index c9eb82f23d92..d5c319553fd0 100644
--- a/arch/sparc/kernel/sun4d_smp.c
+++ b/arch/sparc/kernel/sun4d_smp.c
@@ -50,7 +50,7 @@ static inline void show_leds(int cpuid)
"i" (ASI_M_CTL));
}
-void __cpuinit sun4d_cpu_pre_starting(void *arg)
+void sun4d_cpu_pre_starting(void *arg)
{
int cpuid = hard_smp_processor_id();
@@ -62,7 +62,7 @@ void __cpuinit sun4d_cpu_pre_starting(void *arg)
cc_set_imsk((cc_get_imsk() & ~0x8000) | 0x4000);
}
-void __cpuinit sun4d_cpu_pre_online(void *arg)
+void sun4d_cpu_pre_online(void *arg)
{
unsigned long flags;
int cpuid;
@@ -118,7 +118,7 @@ void __init smp4d_boot_cpus(void)
local_ops->cache_all();
}
-int __cpuinit smp4d_boot_one_cpu(int i, struct task_struct *idle)
+int smp4d_boot_one_cpu(int i, struct task_struct *idle)
{
unsigned long *entry = &sun4d_cpu_startup;
int timeout;
diff --git a/arch/sparc/kernel/sun4m_smp.c b/arch/sparc/kernel/sun4m_smp.c
index 8a65f158153d..d3408e72d20c 100644
--- a/arch/sparc/kernel/sun4m_smp.c
+++ b/arch/sparc/kernel/sun4m_smp.c
@@ -34,11 +34,11 @@ swap_ulong(volatile unsigned long *ptr, unsigned long val)
return val;
}
-void __cpuinit sun4m_cpu_pre_starting(void *arg)
+void sun4m_cpu_pre_starting(void *arg)
{
}
-void __cpuinit sun4m_cpu_pre_online(void *arg)
+void sun4m_cpu_pre_online(void *arg)
{
int cpuid = hard_smp_processor_id();
@@ -75,7 +75,7 @@ void __init smp4m_boot_cpus(void)
local_ops->cache_all();
}
-int __cpuinit smp4m_boot_one_cpu(int i, struct task_struct *idle)
+int smp4m_boot_one_cpu(int i, struct task_struct *idle)
{
unsigned long *entry = &sun4m_cpu_startup;
int timeout;
diff --git a/arch/sparc/kernel/sysfs.c b/arch/sparc/kernel/sysfs.c
index 654e8aad3bbe..c21c673e5f7c 100644
--- a/arch/sparc/kernel/sysfs.c
+++ b/arch/sparc/kernel/sysfs.c
@@ -246,7 +246,7 @@ static void unregister_cpu_online(unsigned int cpu)
}
#endif
-static int __cpuinit sysfs_cpu_notify(struct notifier_block *self,
+static int sysfs_cpu_notify(struct notifier_block *self,
unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned int)(long)hcpu;
@@ -266,7 +266,7 @@ static int __cpuinit sysfs_cpu_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata sysfs_cpu_nb = {
+static struct notifier_block sysfs_cpu_nb = {
.notifier_call = sysfs_cpu_notify,
};
diff --git a/arch/sparc/kernel/trampoline_32.S b/arch/sparc/kernel/trampoline_32.S
index 6cdb08cdabf0..76dcbd3c988a 100644
--- a/arch/sparc/kernel/trampoline_32.S
+++ b/arch/sparc/kernel/trampoline_32.S
@@ -18,7 +18,6 @@
.globl sun4m_cpu_startup
.globl sun4d_cpu_startup
- __CPUINIT
.align 4
/* When we start up a cpu for the first time it enters this routine.
@@ -94,7 +93,6 @@ smp_panic:
/* CPUID in bootbus can be found at PA 0xff0140000 */
#define SUN4D_BOOTBUS_CPUID 0xf0140000
- __CPUINIT
.align 4
sun4d_cpu_startup:
@@ -146,7 +144,6 @@ sun4d_cpu_startup:
b,a smp_panic
- __CPUINIT
.align 4
.global leon_smp_cpu_startup, smp_penguin_ctable
diff --git a/arch/sparc/kernel/trampoline_64.S b/arch/sparc/kernel/trampoline_64.S
index 2e973a26fbda..e0b1e13a0736 100644
--- a/arch/sparc/kernel/trampoline_64.S
+++ b/arch/sparc/kernel/trampoline_64.S
@@ -32,13 +32,11 @@ itlb_load:
dtlb_load:
.asciz "SUNW,dtlb-load"
- /* XXX __cpuinit this thing XXX */
#define TRAMP_STACK_SIZE 1024
.align 16
tramp_stack:
.skip TRAMP_STACK_SIZE
- __CPUINIT
.align 8
.globl sparc64_cpu_startup, sparc64_cpu_startup_end
sparc64_cpu_startup:
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index a9c42a7ffb6a..ed82edad1a39 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -1694,7 +1694,7 @@ static void __init sun4v_ktsb_init(void)
#endif
}
-void __cpuinit sun4v_ktsb_register(void)
+void sun4v_ktsb_register(void)
{
unsigned long pa, ret;
diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c
index 036c2797dece..5d721df48a72 100644
--- a/arch/sparc/mm/srmmu.c
+++ b/arch/sparc/mm/srmmu.c
@@ -858,7 +858,7 @@ static void __init map_kernel(void)
}
}
-void (*poke_srmmu)(void) __cpuinitdata = NULL;
+void (*poke_srmmu)(void) = NULL;
extern unsigned long bootmem_init(unsigned long *pages_avail);
@@ -1055,7 +1055,7 @@ static void __init init_vac_layout(void)
(int)vac_cache_size, (int)vac_line_size);
}
-static void __cpuinit poke_hypersparc(void)
+static void poke_hypersparc(void)
{
volatile unsigned long clear;
unsigned long mreg = srmmu_get_mmureg();
@@ -1107,7 +1107,7 @@ static void __init init_hypersparc(void)
hypersparc_setup_blockops();
}
-static void __cpuinit poke_swift(void)
+static void poke_swift(void)
{
unsigned long mreg;
@@ -1287,7 +1287,7 @@ static void turbosparc_flush_tlb_page(struct vm_area_struct *vma, unsigned long
}
-static void __cpuinit poke_turbosparc(void)
+static void poke_turbosparc(void)
{
unsigned long mreg = srmmu_get_mmureg();
unsigned long ccreg;
@@ -1350,7 +1350,7 @@ static void __init init_turbosparc(void)
poke_srmmu = poke_turbosparc;
}
-static void __cpuinit poke_tsunami(void)
+static void poke_tsunami(void)
{
unsigned long mreg = srmmu_get_mmureg();
@@ -1391,7 +1391,7 @@ static void __init init_tsunami(void)
tsunami_setup_blockops();
}
-static void __cpuinit poke_viking(void)
+static void poke_viking(void)
{
unsigned long mreg = srmmu_get_mmureg();
static int smp_catch;
diff --git a/arch/tile/kernel/irq.c b/arch/tile/kernel/irq.c
index 02e628065012..3ccf2cd7182e 100644
--- a/arch/tile/kernel/irq.c
+++ b/arch/tile/kernel/irq.c
@@ -220,7 +220,7 @@ void __init init_IRQ(void)
ipi_init();
}
-void __cpuinit setup_irq_regs(void)
+void setup_irq_regs(void)
{
/* Enable interrupt delivery. */
unmask_irqs(~0UL);
diff --git a/arch/tile/kernel/messaging.c b/arch/tile/kernel/messaging.c
index 0858ee6b520f..00331af9525d 100644
--- a/arch/tile/kernel/messaging.c
+++ b/arch/tile/kernel/messaging.c
@@ -25,7 +25,7 @@
/* All messages are stored here */
static DEFINE_PER_CPU(HV_MsgState, msg_state);
-void __cpuinit init_messaging(void)
+void init_messaging(void)
{
/* Allocate storage for messages in kernel space */
HV_MsgState *state = &__get_cpu_var(msg_state);
diff --git a/arch/tile/kernel/setup.c b/arch/tile/kernel/setup.c
index 68b542677f6a..eceb8344280f 100644
--- a/arch/tile/kernel/setup.c
+++ b/arch/tile/kernel/setup.c
@@ -58,8 +58,8 @@ struct pglist_data node_data[MAX_NUMNODES] __read_mostly;
EXPORT_SYMBOL(node_data);
/* Information on the NUMA nodes that we compute early */
-unsigned long __cpuinitdata node_start_pfn[MAX_NUMNODES];
-unsigned long __cpuinitdata node_end_pfn[MAX_NUMNODES];
+unsigned long node_start_pfn[MAX_NUMNODES];
+unsigned long node_end_pfn[MAX_NUMNODES];
unsigned long __initdata node_memmap_pfn[MAX_NUMNODES];
unsigned long __initdata node_percpu_pfn[MAX_NUMNODES];
unsigned long __initdata node_free_pfn[MAX_NUMNODES];
@@ -84,7 +84,7 @@ unsigned long __initdata boot_pc = (unsigned long)start_kernel;
#ifdef CONFIG_HIGHMEM
/* Page frame index of end of lowmem on each controller. */
-unsigned long __cpuinitdata node_lowmem_end_pfn[MAX_NUMNODES];
+unsigned long node_lowmem_end_pfn[MAX_NUMNODES];
/* Number of pages that can be mapped into lowmem. */
static unsigned long __initdata mappable_physpages;
@@ -290,7 +290,7 @@ static void *__init setup_pa_va_mapping(void)
* This is up to 4 mappings for lowmem, one mapping per memory
* controller, plus one for our text segment.
*/
-static void __cpuinit store_permanent_mappings(void)
+static void store_permanent_mappings(void)
{
int i;
@@ -935,7 +935,7 @@ subsys_initcall(topology_init);
* So the values we set up here in the hypervisor may be overridden on
* the boot cpu as arguments are parsed.
*/
-static __cpuinit void init_super_pages(void)
+static void init_super_pages(void)
{
#ifdef CONFIG_HUGETLB_SUPER_PAGES
int i;
@@ -950,7 +950,7 @@ static __cpuinit void init_super_pages(void)
*
* Called from setup_arch() on the boot cpu, or online_secondary().
*/
-void __cpuinit setup_cpu(int boot)
+void setup_cpu(int boot)
{
/* The boot cpu sets up its permanent mappings much earlier. */
if (!boot)
diff --git a/arch/tile/kernel/smpboot.c b/arch/tile/kernel/smpboot.c
index 44bab29bf2f3..a535655b7089 100644
--- a/arch/tile/kernel/smpboot.c
+++ b/arch/tile/kernel/smpboot.c
@@ -133,14 +133,14 @@ static __init int reset_init_affinity(void)
}
late_initcall(reset_init_affinity);
-static struct cpumask cpu_started __cpuinitdata;
+static struct cpumask cpu_started;
/*
* Activate a secondary processor. Very minimal; don't add anything
* to this path without knowing what you're doing, since SMP booting
* is pretty fragile.
*/
-static void __cpuinit start_secondary(void)
+static void start_secondary(void)
{
int cpuid = smp_processor_id();
@@ -183,7 +183,7 @@ static void __cpuinit start_secondary(void)
/*
* Bring a secondary processor online.
*/
-void __cpuinit online_secondary(void)
+void online_secondary(void)
{
/*
* low-memory mappings have been cleared, flush them from
@@ -210,7 +210,7 @@ void __cpuinit online_secondary(void)
cpu_startup_entry(CPUHP_ONLINE);
}
-int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
+int __cpu_up(unsigned int cpu, struct task_struct *tidle)
{
/* Wait 5s total for all CPUs for them to come online */
static int timeout;
diff --git a/arch/tile/kernel/time.c b/arch/tile/kernel/time.c
index 5ac397ec6986..7c353d8c2da9 100644
--- a/arch/tile/kernel/time.c
+++ b/arch/tile/kernel/time.c
@@ -159,7 +159,7 @@ static DEFINE_PER_CPU(struct clock_event_device, tile_timer) = {
.set_mode = tile_timer_set_mode,
};
-void __cpuinit setup_tile_timer(void)
+void setup_tile_timer(void)
{
struct clock_event_device *evt = &__get_cpu_var(tile_timer);
diff --git a/arch/um/include/shared/frame_kern.h b/arch/um/include/shared/frame_kern.h
index e584e40ee832..f2ca5702a4e2 100644
--- a/arch/um/include/shared/frame_kern.h
+++ b/arch/um/include/shared/frame_kern.h
@@ -6,13 +6,13 @@
#ifndef __FRAME_KERN_H_
#define __FRAME_KERN_H_
-extern int setup_signal_stack_sc(unsigned long stack_top, int sig,
+extern int setup_signal_stack_sc(unsigned long stack_top, int sig,
struct k_sigaction *ka,
- struct pt_regs *regs,
+ struct pt_regs *regs,
sigset_t *mask);
-extern int setup_signal_stack_si(unsigned long stack_top, int sig,
+extern int setup_signal_stack_si(unsigned long stack_top, int sig,
struct k_sigaction *ka,
- struct pt_regs *regs, siginfo_t *info,
+ struct pt_regs *regs, struct siginfo *info,
sigset_t *mask);
#endif
diff --git a/arch/um/kernel/signal.c b/arch/um/kernel/signal.c
index 3e831b3fd07b..f57e02e7910f 100644
--- a/arch/um/kernel/signal.c
+++ b/arch/um/kernel/signal.c
@@ -19,7 +19,7 @@ EXPORT_SYMBOL(unblock_signals);
* OK, we're invoking a handler
*/
static void handle_signal(struct pt_regs *regs, unsigned long signr,
- struct k_sigaction *ka, siginfo_t *info)
+ struct k_sigaction *ka, struct siginfo *info)
{
sigset_t *oldset = sigmask_to_save();
int singlestep = 0;
@@ -71,7 +71,7 @@ static void handle_signal(struct pt_regs *regs, unsigned long signr,
static int kern_do_signal(struct pt_regs *regs)
{
struct k_sigaction ka_copy;
- siginfo_t info;
+ struct siginfo info;
int sig, handled_sig = 0;
while ((sig = get_signal_to_deliver(&info, &ka_copy, regs, NULL)) > 0) {
diff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c
index ff03067a3b14..007d5503f49b 100644
--- a/arch/um/kernel/skas/mmu.c
+++ b/arch/um/kernel/skas/mmu.c
@@ -123,7 +123,7 @@ void uml_setup_stubs(struct mm_struct *mm)
/* dup_mmap already holds mmap_sem */
err = install_special_mapping(mm, STUB_START, STUB_END - STUB_START,
VM_READ | VM_MAYREAD | VM_EXEC |
- VM_MAYEXEC | VM_DONTCOPY,
+ VM_MAYEXEC | VM_DONTCOPY | VM_PFNMAP,
mm->context.stub_pages);
if (err) {
printk(KERN_ERR "install_special_mapping returned %d\n", err);
diff --git a/arch/um/kernel/skas/uaccess.c b/arch/um/kernel/skas/uaccess.c
index 1d3e0c17340b..4ffb644d6c07 100644
--- a/arch/um/kernel/skas/uaccess.c
+++ b/arch/um/kernel/skas/uaccess.c
@@ -254,6 +254,6 @@ int strnlen_user(const void __user *str, int len)
n = buffer_op((unsigned long) str, len, 0, strnlen_chunk, &count);
if (n == 0)
return count + 1;
- return -EFAULT;
+ return 0;
}
EXPORT_SYMBOL(strnlen_user);
diff --git a/arch/um/os-Linux/mem.c b/arch/um/os-Linux/mem.c
index ba4398056fe9..3c4af77e51a2 100644
--- a/arch/um/os-Linux/mem.c
+++ b/arch/um/os-Linux/mem.c
@@ -53,6 +53,25 @@ static void __init find_tempdir(void)
}
/*
+ * Remove bytes from the front of the buffer and refill it so that if there's a
+ * partial string that we care about, it will be completed, and we can recognize
+ * it.
+ */
+static int pop(int fd, char *buf, size_t size, size_t npop)
+{
+ ssize_t n;
+ size_t len = strlen(&buf[npop]);
+
+ memmove(buf, &buf[npop], len + 1);
+ n = read(fd, &buf[len], size - len - 1);
+ if (n < 0)
+ return -errno;
+
+ buf[len + n] = '\0';
+ return 1;
+}
+
+/*
* This will return 1, with the first character in buf being the
* character following the next instance of c in the file. This will
* read the file as needed. If there's an error, -errno is returned;
@@ -61,7 +80,6 @@ static void __init find_tempdir(void)
static int next(int fd, char *buf, size_t size, char c)
{
ssize_t n;
- size_t len;
char *ptr;
while ((ptr = strchr(buf, c)) == NULL) {
@@ -74,20 +92,129 @@ static int next(int fd, char *buf, size_t size, char c)
buf[n] = '\0';
}
- ptr++;
- len = strlen(ptr);
- memmove(buf, ptr, len + 1);
+ return pop(fd, buf, size, ptr - buf + 1);
+}
+
+/*
+ * Decode an octal-escaped and space-terminated path of the form used by
+ * /proc/mounts. May be used to decode a path in-place. "out" must be at least
+ * as large as the input. The output is always null-terminated. "len" gets the
+ * length of the output, excluding the trailing null. Returns 0 if a full path
+ * was successfully decoded, otherwise an error.
+ */
+static int decode_path(const char *in, char *out, size_t *len)
+{
+ char *first = out;
+ int c;
+ int i;
+ int ret = -EINVAL;
+ while (1) {
+ switch (*in) {
+ case '\0':
+ goto out;
+
+ case ' ':
+ ret = 0;
+ goto out;
+
+ case '\\':
+ in++;
+ c = 0;
+ for (i = 0; i < 3; i++) {
+ if (*in < '0' || *in > '7')
+ goto out;
+ c = (c << 3) | (*in++ - '0');
+ }
+ *(unsigned char *)out++ = (unsigned char) c;
+ break;
+
+ default:
+ *out++ = *in++;
+ break;
+ }
+ }
+
+out:
+ *out = '\0';
+ *len = out - first;
+ return ret;
+}
+
+/*
+ * Computes the length of s when encoded with three-digit octal escape sequences
+ * for the characters in chars.
+ */
+static size_t octal_encoded_length(const char *s, const char *chars)
+{
+ size_t len = strlen(s);
+ while ((s = strpbrk(s, chars)) != NULL) {
+ len += 3;
+ s++;
+ }
+
+ return len;
+}
+
+enum {
+ OUTCOME_NOTHING_MOUNTED,
+ OUTCOME_TMPFS_MOUNT,
+ OUTCOME_NON_TMPFS_MOUNT,
+};
+
+/* Read a line of /proc/mounts data looking for a tmpfs mount at "path". */
+static int read_mount(int fd, char *buf, size_t bufsize, const char *path,
+ int *outcome)
+{
+ int found;
+ int match;
+ char *space;
+ size_t len;
+
+ enum {
+ MATCH_NONE,
+ MATCH_EXACT,
+ MATCH_PARENT,
+ };
+
+ found = next(fd, buf, bufsize, ' ');
+ if (found != 1)
+ return found;
/*
- * Refill the buffer so that if there's a partial string that we care
- * about, it will be completed, and we can recognize it.
+ * If there's no following space in the buffer, then this path is
+ * truncated, so it can't be the one we're looking for.
*/
- n = read(fd, &buf[len], size - len - 1);
- if (n < 0)
- return -errno;
+ space = strchr(buf, ' ');
+ if (space) {
+ match = MATCH_NONE;
+ if (!decode_path(buf, buf, &len)) {
+ if (!strcmp(buf, path))
+ match = MATCH_EXACT;
+ else if (!strncmp(buf, path, len)
+ && (path[len] == '/' || !strcmp(buf, "/")))
+ match = MATCH_PARENT;
+ }
+
+ found = pop(fd, buf, bufsize, space - buf + 1);
+ if (found != 1)
+ return found;
+
+ switch (match) {
+ case MATCH_EXACT:
+ if (!strncmp(buf, "tmpfs", strlen("tmpfs")))
+ *outcome = OUTCOME_TMPFS_MOUNT;
+ else
+ *outcome = OUTCOME_NON_TMPFS_MOUNT;
+ break;
- buf[len + n] = '\0';
- return 1;
+ case MATCH_PARENT:
+ /* This mount obscures any previous ones. */
+ *outcome = OUTCOME_NOTHING_MOUNTED;
+ break;
+ }
+ }
+
+ return next(fd, buf, bufsize, '\n');
}
/* which_tmpdir is called only during early boot */
@@ -106,8 +233,12 @@ static int checked_tmpdir = 0;
*/
static void which_tmpdir(void)
{
- int fd, found;
- char buf[128] = { '\0' };
+ int fd;
+ int found;
+ int outcome;
+ char *path;
+ char *buf;
+ size_t bufsize;
if (checked_tmpdir)
return;
@@ -116,49 +247,66 @@ static void which_tmpdir(void)
printf("Checking for tmpfs mount on /dev/shm...");
+ path = realpath("/dev/shm", NULL);
+ if (!path) {
+ printf("failed to check real path, errno = %d\n", errno);
+ return;
+ }
+ printf("%s...", path);
+
+ /*
+ * The buffer needs to be able to fit the full octal-escaped path, a
+ * space, and a trailing null in order to successfully decode it.
+ */
+ bufsize = octal_encoded_length(path, " \t\n\\") + 2;
+
+ if (bufsize < 128)
+ bufsize = 128;
+
+ buf = malloc(bufsize);
+ if (!buf) {
+ printf("malloc failed, errno = %d\n", errno);
+ goto out;
+ }
+ buf[0] = '\0';
+
fd = open("/proc/mounts", O_RDONLY);
if (fd < 0) {
printf("failed to open /proc/mounts, errno = %d\n", errno);
- return;
+ goto out1;
}
+ outcome = OUTCOME_NOTHING_MOUNTED;
while (1) {
- found = next(fd, buf, ARRAY_SIZE(buf), ' ');
- if (found != 1)
- break;
-
- if (!strncmp(buf, "/dev/shm", strlen("/dev/shm")))
- goto found;
-
- found = next(fd, buf, ARRAY_SIZE(buf), '\n');
+ found = read_mount(fd, buf, bufsize, path, &outcome);
if (found != 1)
break;
}
-err:
- if (found == 0)
- printf("nothing mounted on /dev/shm\n");
- else if (found < 0)
+ if (found < 0) {
printf("read returned errno %d\n", -found);
+ } else {
+ switch (outcome) {
+ case OUTCOME_TMPFS_MOUNT:
+ printf("OK\n");
+ default_tmpdir = "/dev/shm";
+ break;
-out:
- close(fd);
-
- return;
-
-found:
- found = next(fd, buf, ARRAY_SIZE(buf), ' ');
- if (found != 1)
- goto err;
+ case OUTCOME_NON_TMPFS_MOUNT:
+ printf("not tmpfs\n");
+ break;
- if (strncmp(buf, "tmpfs", strlen("tmpfs"))) {
- printf("not tmpfs\n");
- goto out;
+ default:
+ printf("nothing mounted on /dev/shm\n");
+ break;
+ }
}
- printf("OK\n");
- default_tmpdir = "/dev/shm";
- goto out;
+ close(fd);
+out1:
+ free(buf);
+out:
+ free(path);
}
static int __init make_tempfile(const char *template, char **out_tempname,
diff --git a/arch/um/os-Linux/signal.c b/arch/um/os-Linux/signal.c
index 9d9f1b4bf826..905924b773d3 100644
--- a/arch/um/os-Linux/signal.c
+++ b/arch/um/os-Linux/signal.c
@@ -25,7 +25,7 @@ void (*sig_info[NSIG])(int, struct siginfo *, struct uml_pt_regs *) = {
[SIGIO] = sigio_handler,
[SIGVTALRM] = timer_handler };
-static void sig_handler_common(int sig, siginfo_t *si, mcontext_t *mc)
+static void sig_handler_common(int sig, struct siginfo *si, mcontext_t *mc)
{
struct uml_pt_regs r;
int save_errno = errno;
@@ -61,7 +61,7 @@ static void sig_handler_common(int sig, siginfo_t *si, mcontext_t *mc)
static int signals_enabled;
static unsigned int signals_pending;
-void sig_handler(int sig, siginfo_t *si, mcontext_t *mc)
+void sig_handler(int sig, struct siginfo *si, mcontext_t *mc)
{
int enabled;
@@ -120,7 +120,7 @@ void set_sigstack(void *sig_stack, int size)
panic("enabling signal stack failed, errno = %d\n", errno);
}
-static void (*handlers[_NSIG])(int sig, siginfo_t *si, mcontext_t *mc) = {
+static void (*handlers[_NSIG])(int sig, struct siginfo *si, mcontext_t *mc) = {
[SIGSEGV] = sig_handler,
[SIGBUS] = sig_handler,
[SIGILL] = sig_handler,
@@ -162,7 +162,7 @@ static void hard_handler(int sig, siginfo_t *si, void *p)
while ((sig = ffs(pending)) != 0){
sig--;
pending &= ~(1 << sig);
- (*handlers[sig])(sig, si, mc);
+ (*handlers[sig])(sig, (struct siginfo *)si, mc);
}
/*
diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c
index 4625949bf1e4..d531879a4617 100644
--- a/arch/um/os-Linux/skas/process.c
+++ b/arch/um/os-Linux/skas/process.c
@@ -54,7 +54,7 @@ static int ptrace_dump_regs(int pid)
void wait_stub_done(int pid)
{
- int n, status, err;
+ int n, status, err, bad_stop = 0;
while (1) {
CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED | __WALL));
@@ -74,6 +74,8 @@ void wait_stub_done(int pid)
if (((1 << WSTOPSIG(status)) & STUB_DONE_MASK) != 0)
return;
+ else
+ bad_stop = 1;
bad_wait:
err = ptrace_dump_regs(pid);
@@ -83,7 +85,10 @@ bad_wait:
printk(UM_KERN_ERR "wait_stub_done : failed to wait for SIGTRAP, "
"pid = %d, n = %d, errno = %d, status = 0x%x\n", pid, n, errno,
status);
- fatal_sigsegv();
+ if (bad_stop)
+ kill(pid, SIGKILL);
+ else
+ fatal_sigsegv();
}
extern unsigned long current_stub_stack(void);
@@ -409,7 +414,7 @@ void userspace(struct uml_pt_regs *regs)
if (WIFSTOPPED(status)) {
int sig = WSTOPSIG(status);
- ptrace(PTRACE_GETSIGINFO, pid, 0, &si);
+ ptrace(PTRACE_GETSIGINFO, pid, 0, (struct siginfo *)&si);
switch (sig) {
case SIGSEGV:
@@ -417,7 +422,7 @@ void userspace(struct uml_pt_regs *regs)
!ptrace_faultinfo) {
get_skas_faultinfo(pid,
&regs->faultinfo);
- (*sig_info[SIGSEGV])(SIGSEGV, &si,
+ (*sig_info[SIGSEGV])(SIGSEGV, (struct siginfo *)&si,
regs);
}
else handle_segv(pid, regs);
@@ -426,14 +431,14 @@ void userspace(struct uml_pt_regs *regs)
handle_trap(pid, regs, local_using_sysemu);
break;
case SIGTRAP:
- relay_signal(SIGTRAP, &si, regs);
+ relay_signal(SIGTRAP, (struct siginfo *)&si, regs);
break;
case SIGVTALRM:
now = os_nsecs();
if (now < nsecs)
break;
block_signals();
- (*sig_info[sig])(sig, &si, regs);
+ (*sig_info[sig])(sig, (struct siginfo *)&si, regs);
unblock_signals();
nsecs = timer.it_value.tv_sec *
UM_NSEC_PER_SEC +
@@ -447,7 +452,7 @@ void userspace(struct uml_pt_regs *regs)
case SIGFPE:
case SIGWINCH:
block_signals();
- (*sig_info[sig])(sig, &si, regs);
+ (*sig_info[sig])(sig, (struct siginfo *)&si, regs);
unblock_signals();
break;
default:
diff --git a/arch/x86/crypto/Makefile b/arch/x86/crypto/Makefile
index 7d6ba9db1be9..6c63c358a7e6 100644
--- a/arch/x86/crypto/Makefile
+++ b/arch/x86/crypto/Makefile
@@ -27,7 +27,6 @@ obj-$(CONFIG_CRYPTO_SHA1_SSSE3) += sha1-ssse3.o
obj-$(CONFIG_CRYPTO_CRC32_PCLMUL) += crc32-pclmul.o
obj-$(CONFIG_CRYPTO_SHA256_SSSE3) += sha256-ssse3.o
obj-$(CONFIG_CRYPTO_SHA512_SSSE3) += sha512-ssse3.o
-obj-$(CONFIG_CRYPTO_CRCT10DIF_PCLMUL) += crct10dif-pclmul.o
# These modules require assembler to support AVX.
ifeq ($(avx_supported),yes)
@@ -82,4 +81,3 @@ crc32c-intel-$(CONFIG_64BIT) += crc32c-pcl-intel-asm_64.o
crc32-pclmul-y := crc32-pclmul_asm.o crc32-pclmul_glue.o
sha256-ssse3-y := sha256-ssse3-asm.o sha256-avx-asm.o sha256-avx2-asm.o sha256_ssse3_glue.o
sha512-ssse3-y := sha512-ssse3-asm.o sha512-avx-asm.o sha512-avx2-asm.o sha512_ssse3_glue.o
-crct10dif-pclmul-y := crct10dif-pcl-asm_64.o crct10dif-pclmul_glue.o
diff --git a/arch/x86/crypto/crct10dif-pcl-asm_64.S b/arch/x86/crypto/crct10dif-pcl-asm_64.S
deleted file mode 100644
index 35e97569d05f..000000000000
--- a/arch/x86/crypto/crct10dif-pcl-asm_64.S
+++ /dev/null
@@ -1,643 +0,0 @@
-########################################################################
-# Implement fast CRC-T10DIF computation with SSE and PCLMULQDQ instructions
-#
-# Copyright (c) 2013, Intel Corporation
-#
-# Authors:
-# Erdinc Ozturk <erdinc.ozturk@intel.com>
-# Vinodh Gopal <vinodh.gopal@intel.com>
-# James Guilford <james.guilford@intel.com>
-# Tim Chen <tim.c.chen@linux.intel.com>
-#
-# This software is available to you under a choice of one of two
-# licenses. You may choose to be licensed under the terms of the GNU
-# General Public License (GPL) Version 2, available from the file
-# COPYING in the main directory of this source tree, or the
-# OpenIB.org BSD license below:
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the
-# distribution.
-#
-# * Neither the name of the Intel Corporation nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-#
-# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION ""AS IS"" AND ANY
-# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-########################################################################
-# Function API:
-# UINT16 crc_t10dif_pcl(
-# UINT16 init_crc, //initial CRC value, 16 bits
-# const unsigned char *buf, //buffer pointer to calculate CRC on
-# UINT64 len //buffer length in bytes (64-bit data)
-# );
-#
-# Reference paper titled "Fast CRC Computation for Generic
-# Polynomials Using PCLMULQDQ Instruction"
-# URL: http://www.intel.com/content/dam/www/public/us/en/documents
-# /white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf
-#
-#
-
-#include <linux/linkage.h>
-
-.text
-
-#define arg1 %rdi
-#define arg2 %rsi
-#define arg3 %rdx
-
-#define arg1_low32 %edi
-
-ENTRY(crc_t10dif_pcl)
-.align 16
-
- # adjust the 16-bit initial_crc value, scale it to 32 bits
- shl $16, arg1_low32
-
- # Allocate Stack Space
- mov %rsp, %rcx
- sub $16*2, %rsp
- # align stack to 16 byte boundary
- and $~(0x10 - 1), %rsp
-
- # check if smaller than 256
- cmp $256, arg3
-
- # for sizes less than 128, we can't fold 64B at a time...
- jl _less_than_128
-
-
- # load the initial crc value
- movd arg1_low32, %xmm10 # initial crc
-
- # crc value does not need to be byte-reflected, but it needs
- # to be moved to the high part of the register.
- # because data will be byte-reflected and will align with
- # initial crc at correct place.
- pslldq $12, %xmm10
-
- movdqa SHUF_MASK(%rip), %xmm11
- # receive the initial 64B data, xor the initial crc value
- movdqu 16*0(arg2), %xmm0
- movdqu 16*1(arg2), %xmm1
- movdqu 16*2(arg2), %xmm2
- movdqu 16*3(arg2), %xmm3
- movdqu 16*4(arg2), %xmm4
- movdqu 16*5(arg2), %xmm5
- movdqu 16*6(arg2), %xmm6
- movdqu 16*7(arg2), %xmm7
-
- pshufb %xmm11, %xmm0
- # XOR the initial_crc value
- pxor %xmm10, %xmm0
- pshufb %xmm11, %xmm1
- pshufb %xmm11, %xmm2
- pshufb %xmm11, %xmm3
- pshufb %xmm11, %xmm4
- pshufb %xmm11, %xmm5
- pshufb %xmm11, %xmm6
- pshufb %xmm11, %xmm7
-
- movdqa rk3(%rip), %xmm10 #xmm10 has rk3 and rk4
- #imm value of pclmulqdq instruction
- #will determine which constant to use
-
- #################################################################
- # we subtract 256 instead of 128 to save one instruction from the loop
- sub $256, arg3
-
- # at this section of the code, there is 64*x+y (0<=y<64) bytes of
- # buffer. The _fold_64_B_loop will fold 64B at a time
- # until we have 64+y Bytes of buffer
-
-
- # fold 64B at a time. This section of the code folds 4 xmm
- # registers in parallel
-_fold_64_B_loop:
-
- # update the buffer pointer
- add $128, arg2 # buf += 64#
-
- movdqu 16*0(arg2), %xmm9
- movdqu 16*1(arg2), %xmm12
- pshufb %xmm11, %xmm9
- pshufb %xmm11, %xmm12
- movdqa %xmm0, %xmm8
- movdqa %xmm1, %xmm13
- pclmulqdq $0x0 , %xmm10, %xmm0
- pclmulqdq $0x11, %xmm10, %xmm8
- pclmulqdq $0x0 , %xmm10, %xmm1
- pclmulqdq $0x11, %xmm10, %xmm13
- pxor %xmm9 , %xmm0
- xorps %xmm8 , %xmm0
- pxor %xmm12, %xmm1
- xorps %xmm13, %xmm1
-
- movdqu 16*2(arg2), %xmm9
- movdqu 16*3(arg2), %xmm12
- pshufb %xmm11, %xmm9
- pshufb %xmm11, %xmm12
- movdqa %xmm2, %xmm8
- movdqa %xmm3, %xmm13
- pclmulqdq $0x0, %xmm10, %xmm2
- pclmulqdq $0x11, %xmm10, %xmm8
- pclmulqdq $0x0, %xmm10, %xmm3
- pclmulqdq $0x11, %xmm10, %xmm13
- pxor %xmm9 , %xmm2
- xorps %xmm8 , %xmm2
- pxor %xmm12, %xmm3
- xorps %xmm13, %xmm3
-
- movdqu 16*4(arg2), %xmm9
- movdqu 16*5(arg2), %xmm12
- pshufb %xmm11, %xmm9
- pshufb %xmm11, %xmm12
- movdqa %xmm4, %xmm8
- movdqa %xmm5, %xmm13
- pclmulqdq $0x0, %xmm10, %xmm4
- pclmulqdq $0x11, %xmm10, %xmm8
- pclmulqdq $0x0, %xmm10, %xmm5
- pclmulqdq $0x11, %xmm10, %xmm13
- pxor %xmm9 , %xmm4
- xorps %xmm8 , %xmm4
- pxor %xmm12, %xmm5
- xorps %xmm13, %xmm5
-
- movdqu 16*6(arg2), %xmm9
- movdqu 16*7(arg2), %xmm12
- pshufb %xmm11, %xmm9
- pshufb %xmm11, %xmm12
- movdqa %xmm6 , %xmm8
- movdqa %xmm7 , %xmm13
- pclmulqdq $0x0 , %xmm10, %xmm6
- pclmulqdq $0x11, %xmm10, %xmm8
- pclmulqdq $0x0 , %xmm10, %xmm7
- pclmulqdq $0x11, %xmm10, %xmm13
- pxor %xmm9 , %xmm6
- xorps %xmm8 , %xmm6
- pxor %xmm12, %xmm7
- xorps %xmm13, %xmm7
-
- sub $128, arg3
-
- # check if there is another 64B in the buffer to be able to fold
- jge _fold_64_B_loop
- ##################################################################
-
-
- add $128, arg2
- # at this point, the buffer pointer is pointing at the last y Bytes
- # of the buffer the 64B of folded data is in 4 of the xmm
- # registers: xmm0, xmm1, xmm2, xmm3
-
-
- # fold the 8 xmm registers to 1 xmm register with different constants
-
- movdqa rk9(%rip), %xmm10
- movdqa %xmm0, %xmm8
- pclmulqdq $0x11, %xmm10, %xmm0
- pclmulqdq $0x0 , %xmm10, %xmm8
- pxor %xmm8, %xmm7
- xorps %xmm0, %xmm7
-
- movdqa rk11(%rip), %xmm10
- movdqa %xmm1, %xmm8
- pclmulqdq $0x11, %xmm10, %xmm1
- pclmulqdq $0x0 , %xmm10, %xmm8
- pxor %xmm8, %xmm7
- xorps %xmm1, %xmm7
-
- movdqa rk13(%rip), %xmm10
- movdqa %xmm2, %xmm8
- pclmulqdq $0x11, %xmm10, %xmm2
- pclmulqdq $0x0 , %xmm10, %xmm8
- pxor %xmm8, %xmm7
- pxor %xmm2, %xmm7
-
- movdqa rk15(%rip), %xmm10
- movdqa %xmm3, %xmm8
- pclmulqdq $0x11, %xmm10, %xmm3
- pclmulqdq $0x0 , %xmm10, %xmm8
- pxor %xmm8, %xmm7
- xorps %xmm3, %xmm7
-
- movdqa rk17(%rip), %xmm10
- movdqa %xmm4, %xmm8
- pclmulqdq $0x11, %xmm10, %xmm4
- pclmulqdq $0x0 , %xmm10, %xmm8
- pxor %xmm8, %xmm7
- pxor %xmm4, %xmm7
-
- movdqa rk19(%rip), %xmm10
- movdqa %xmm5, %xmm8
- pclmulqdq $0x11, %xmm10, %xmm5
- pclmulqdq $0x0 , %xmm10, %xmm8
- pxor %xmm8, %xmm7
- xorps %xmm5, %xmm7
-
- movdqa rk1(%rip), %xmm10 #xmm10 has rk1 and rk2
- #imm value of pclmulqdq instruction
- #will determine which constant to use
- movdqa %xmm6, %xmm8
- pclmulqdq $0x11, %xmm10, %xmm6
- pclmulqdq $0x0 , %xmm10, %xmm8
- pxor %xmm8, %xmm7
- pxor %xmm6, %xmm7
-
-
- # instead of 64, we add 48 to the loop counter to save 1 instruction
- # from the loop instead of a cmp instruction, we use the negative
- # flag with the jl instruction
- add $128-16, arg3
- jl _final_reduction_for_128
-
- # now we have 16+y bytes left to reduce. 16 Bytes is in register xmm7
- # and the rest is in memory. We can fold 16 bytes at a time if y>=16
- # continue folding 16B at a time
-
-_16B_reduction_loop:
- movdqa %xmm7, %xmm8
- pclmulqdq $0x11, %xmm10, %xmm7
- pclmulqdq $0x0 , %xmm10, %xmm8
- pxor %xmm8, %xmm7
- movdqu (arg2), %xmm0
- pshufb %xmm11, %xmm0
- pxor %xmm0 , %xmm7
- add $16, arg2
- sub $16, arg3
- # instead of a cmp instruction, we utilize the flags with the
- # jge instruction equivalent of: cmp arg3, 16-16
- # check if there is any more 16B in the buffer to be able to fold
- jge _16B_reduction_loop
-
- #now we have 16+z bytes left to reduce, where 0<= z < 16.
- #first, we reduce the data in the xmm7 register
-
-
-_final_reduction_for_128:
- # check if any more data to fold. If not, compute the CRC of
- # the final 128 bits
- add $16, arg3
- je _128_done
-
- # here we are getting data that is less than 16 bytes.
- # since we know that there was data before the pointer, we can
- # offset the input pointer before the actual point, to receive
- # exactly 16 bytes. after that the registers need to be adjusted.
-_get_last_two_xmms:
- movdqa %xmm7, %xmm2
-
- movdqu -16(arg2, arg3), %xmm1
- pshufb %xmm11, %xmm1
-
- # get rid of the extra data that was loaded before
- # load the shift constant
- lea pshufb_shf_table+16(%rip), %rax
- sub arg3, %rax
- movdqu (%rax), %xmm0
-
- # shift xmm2 to the left by arg3 bytes
- pshufb %xmm0, %xmm2
-
- # shift xmm7 to the right by 16-arg3 bytes
- pxor mask1(%rip), %xmm0
- pshufb %xmm0, %xmm7
- pblendvb %xmm2, %xmm1 #xmm0 is implicit
-
- # fold 16 Bytes
- movdqa %xmm1, %xmm2
- movdqa %xmm7, %xmm8
- pclmulqdq $0x11, %xmm10, %xmm7
- pclmulqdq $0x0 , %xmm10, %xmm8
- pxor %xmm8, %xmm7
- pxor %xmm2, %xmm7
-
-_128_done:
- # compute crc of a 128-bit value
- movdqa rk5(%rip), %xmm10 # rk5 and rk6 in xmm10
- movdqa %xmm7, %xmm0
-
- #64b fold
- pclmulqdq $0x1, %xmm10, %xmm7
- pslldq $8 , %xmm0
- pxor %xmm0, %xmm7
-
- #32b fold
- movdqa %xmm7, %xmm0
-
- pand mask2(%rip), %xmm0
-
- psrldq $12, %xmm7
- pclmulqdq $0x10, %xmm10, %xmm7
- pxor %xmm0, %xmm7
-
- #barrett reduction
-_barrett:
- movdqa rk7(%rip), %xmm10 # rk7 and rk8 in xmm10
- movdqa %xmm7, %xmm0
- pclmulqdq $0x01, %xmm10, %xmm7
- pslldq $4, %xmm7
- pclmulqdq $0x11, %xmm10, %xmm7
-
- pslldq $4, %xmm7
- pxor %xmm0, %xmm7
- pextrd $1, %xmm7, %eax
-
-_cleanup:
- # scale the result back to 16 bits
- shr $16, %eax
- mov %rcx, %rsp
- ret
-
-########################################################################
-
-.align 16
-_less_than_128:
-
- # check if there is enough buffer to be able to fold 16B at a time
- cmp $32, arg3
- jl _less_than_32
- movdqa SHUF_MASK(%rip), %xmm11
-
- # now if there is, load the constants
- movdqa rk1(%rip), %xmm10 # rk1 and rk2 in xmm10
-
- movd arg1_low32, %xmm0 # get the initial crc value
- pslldq $12, %xmm0 # align it to its correct place
- movdqu (arg2), %xmm7 # load the plaintext
- pshufb %xmm11, %xmm7 # byte-reflect the plaintext
- pxor %xmm0, %xmm7
-
-
- # update the buffer pointer
- add $16, arg2
-
- # update the counter. subtract 32 instead of 16 to save one
- # instruction from the loop
- sub $32, arg3
-
- jmp _16B_reduction_loop
-
-
-.align 16
-_less_than_32:
- # mov initial crc to the return value. this is necessary for
- # zero-length buffers.
- mov arg1_low32, %eax
- test arg3, arg3
- je _cleanup
-
- movdqa SHUF_MASK(%rip), %xmm11
-
- movd arg1_low32, %xmm0 # get the initial crc value
- pslldq $12, %xmm0 # align it to its correct place
-
- cmp $16, arg3
- je _exact_16_left
- jl _less_than_16_left
-
- movdqu (arg2), %xmm7 # load the plaintext
- pshufb %xmm11, %xmm7 # byte-reflect the plaintext
- pxor %xmm0 , %xmm7 # xor the initial crc value
- add $16, arg2
- sub $16, arg3
- movdqa rk1(%rip), %xmm10 # rk1 and rk2 in xmm10
- jmp _get_last_two_xmms
-
-
-.align 16
-_less_than_16_left:
- # use stack space to load data less than 16 bytes, zero-out
- # the 16B in memory first.
-
- pxor %xmm1, %xmm1
- mov %rsp, %r11
- movdqa %xmm1, (%r11)
-
- cmp $4, arg3
- jl _only_less_than_4
-
- # backup the counter value
- mov arg3, %r9
- cmp $8, arg3
- jl _less_than_8_left
-
- # load 8 Bytes
- mov (arg2), %rax
- mov %rax, (%r11)
- add $8, %r11
- sub $8, arg3
- add $8, arg2
-_less_than_8_left:
-
- cmp $4, arg3
- jl _less_than_4_left
-
- # load 4 Bytes
- mov (arg2), %eax
- mov %eax, (%r11)
- add $4, %r11
- sub $4, arg3
- add $4, arg2
-_less_than_4_left:
-
- cmp $2, arg3
- jl _less_than_2_left
-
- # load 2 Bytes
- mov (arg2), %ax
- mov %ax, (%r11)
- add $2, %r11
- sub $2, arg3
- add $2, arg2
-_less_than_2_left:
- cmp $1, arg3
- jl _zero_left
-
- # load 1 Byte
- mov (arg2), %al
- mov %al, (%r11)
-_zero_left:
- movdqa (%rsp), %xmm7
- pshufb %xmm11, %xmm7
- pxor %xmm0 , %xmm7 # xor the initial crc value
-
- # shl r9, 4
- lea pshufb_shf_table+16(%rip), %rax
- sub %r9, %rax
- movdqu (%rax), %xmm0
- pxor mask1(%rip), %xmm0
-
- pshufb %xmm0, %xmm7
- jmp _128_done
-
-.align 16
-_exact_16_left:
- movdqu (arg2), %xmm7
- pshufb %xmm11, %xmm7
- pxor %xmm0 , %xmm7 # xor the initial crc value
-
- jmp _128_done
-
-_only_less_than_4:
- cmp $3, arg3
- jl _only_less_than_3
-
- # load 3 Bytes
- mov (arg2), %al
- mov %al, (%r11)
-
- mov 1(arg2), %al
- mov %al, 1(%r11)
-
- mov 2(arg2), %al
- mov %al, 2(%r11)
-
- movdqa (%rsp), %xmm7
- pshufb %xmm11, %xmm7
- pxor %xmm0 , %xmm7 # xor the initial crc value
-
- psrldq $5, %xmm7
-
- jmp _barrett
-_only_less_than_3:
- cmp $2, arg3
- jl _only_less_than_2
-
- # load 2 Bytes
- mov (arg2), %al
- mov %al, (%r11)
-
- mov 1(arg2), %al
- mov %al, 1(%r11)
-
- movdqa (%rsp), %xmm7
- pshufb %xmm11, %xmm7
- pxor %xmm0 , %xmm7 # xor the initial crc value
-
- psrldq $6, %xmm7
-
- jmp _barrett
-_only_less_than_2:
-
- # load 1 Byte
- mov (arg2), %al
- mov %al, (%r11)
-
- movdqa (%rsp), %xmm7
- pshufb %xmm11, %xmm7
- pxor %xmm0 , %xmm7 # xor the initial crc value
-
- psrldq $7, %xmm7
-
- jmp _barrett
-
-ENDPROC(crc_t10dif_pcl)
-
-.data
-
-# precomputed constants
-# these constants are precomputed from the poly:
-# 0x8bb70000 (0x8bb7 scaled to 32 bits)
-.align 16
-# Q = 0x18BB70000
-# rk1 = 2^(32*3) mod Q << 32
-# rk2 = 2^(32*5) mod Q << 32
-# rk3 = 2^(32*15) mod Q << 32
-# rk4 = 2^(32*17) mod Q << 32
-# rk5 = 2^(32*3) mod Q << 32
-# rk6 = 2^(32*2) mod Q << 32
-# rk7 = floor(2^64/Q)
-# rk8 = Q
-rk1:
-.quad 0x2d56000000000000
-rk2:
-.quad 0x06df000000000000
-rk3:
-.quad 0x9d9d000000000000
-rk4:
-.quad 0x7cf5000000000000
-rk5:
-.quad 0x2d56000000000000
-rk6:
-.quad 0x1368000000000000
-rk7:
-.quad 0x00000001f65a57f8
-rk8:
-.quad 0x000000018bb70000
-
-rk9:
-.quad 0xceae000000000000
-rk10:
-.quad 0xbfd6000000000000
-rk11:
-.quad 0x1e16000000000000
-rk12:
-.quad 0x713c000000000000
-rk13:
-.quad 0xf7f9000000000000
-rk14:
-.quad 0x80a6000000000000
-rk15:
-.quad 0x044c000000000000
-rk16:
-.quad 0xe658000000000000
-rk17:
-.quad 0xad18000000000000
-rk18:
-.quad 0xa497000000000000
-rk19:
-.quad 0x6ee3000000000000
-rk20:
-.quad 0xe7b5000000000000
-
-
-
-mask1:
-.octa 0x80808080808080808080808080808080
-mask2:
-.octa 0x00000000FFFFFFFFFFFFFFFFFFFFFFFF
-
-SHUF_MASK:
-.octa 0x000102030405060708090A0B0C0D0E0F
-
-pshufb_shf_table:
-# use these values for shift constants for the pshufb instruction
-# different alignments result in values as shown:
-# DDQ 0x008f8e8d8c8b8a898887868584838281 # shl 15 (16-1) / shr1
-# DDQ 0x01008f8e8d8c8b8a8988878685848382 # shl 14 (16-3) / shr2
-# DDQ 0x0201008f8e8d8c8b8a89888786858483 # shl 13 (16-4) / shr3
-# DDQ 0x030201008f8e8d8c8b8a898887868584 # shl 12 (16-4) / shr4
-# DDQ 0x04030201008f8e8d8c8b8a8988878685 # shl 11 (16-5) / shr5
-# DDQ 0x0504030201008f8e8d8c8b8a89888786 # shl 10 (16-6) / shr6
-# DDQ 0x060504030201008f8e8d8c8b8a898887 # shl 9 (16-7) / shr7
-# DDQ 0x07060504030201008f8e8d8c8b8a8988 # shl 8 (16-8) / shr8
-# DDQ 0x0807060504030201008f8e8d8c8b8a89 # shl 7 (16-9) / shr9
-# DDQ 0x090807060504030201008f8e8d8c8b8a # shl 6 (16-10) / shr10
-# DDQ 0x0a090807060504030201008f8e8d8c8b # shl 5 (16-11) / shr11
-# DDQ 0x0b0a090807060504030201008f8e8d8c # shl 4 (16-12) / shr12
-# DDQ 0x0c0b0a090807060504030201008f8e8d # shl 3 (16-13) / shr13
-# DDQ 0x0d0c0b0a090807060504030201008f8e # shl 2 (16-14) / shr14
-# DDQ 0x0e0d0c0b0a090807060504030201008f # shl 1 (16-15) / shr15
-.octa 0x8f8e8d8c8b8a89888786858483828100
-.octa 0x000e0d0c0b0a09080706050403020100
diff --git a/arch/x86/crypto/crct10dif-pclmul_glue.c b/arch/x86/crypto/crct10dif-pclmul_glue.c
deleted file mode 100644
index 7845d7fd54c0..000000000000
--- a/arch/x86/crypto/crct10dif-pclmul_glue.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Cryptographic API.
- *
- * T10 Data Integrity Field CRC16 Crypto Transform using PCLMULQDQ Instructions
- *
- * Copyright (C) 2013 Intel Corporation
- * Author: Tim Chen <tim.c.chen@linux.intel.com>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-
-#include <linux/types.h>
-#include <linux/module.h>
-#include <linux/crc-t10dif.h>
-#include <crypto/internal/hash.h>
-#include <linux/init.h>
-#include <linux/string.h>
-#include <linux/kernel.h>
-#include <asm/i387.h>
-#include <asm/cpufeature.h>
-#include <asm/cpu_device_id.h>
-
-asmlinkage __u16 crc_t10dif_pcl(__u16 crc, const unsigned char *buf,
- size_t len);
-
-struct chksum_desc_ctx {
- __u16 crc;
-};
-
-/*
- * Steps through buffer one byte at at time, calculates reflected
- * crc using table.
- */
-
-static int chksum_init(struct shash_desc *desc)
-{
- struct chksum_desc_ctx *ctx = shash_desc_ctx(desc);
-
- ctx->crc = 0;
-
- return 0;
-}
-
-static int chksum_update(struct shash_desc *desc, const u8 *data,
- unsigned int length)
-{
- struct chksum_desc_ctx *ctx = shash_desc_ctx(desc);
-
- if (irq_fpu_usable()) {
- kernel_fpu_begin();
- ctx->crc = crc_t10dif_pcl(ctx->crc, data, length);
- kernel_fpu_end();
- } else
- ctx->crc = crc_t10dif_generic(ctx->crc, data, length);
- return 0;
-}
-
-static int chksum_final(struct shash_desc *desc, u8 *out)
-{
- struct chksum_desc_ctx *ctx = shash_desc_ctx(desc);
-
- *(__u16 *)out = ctx->crc;
- return 0;
-}
-
-static int __chksum_finup(__u16 *crcp, const u8 *data, unsigned int len,
- u8 *out)
-{
- if (irq_fpu_usable()) {
- kernel_fpu_begin();
- *(__u16 *)out = crc_t10dif_pcl(*crcp, data, len);
- kernel_fpu_end();
- } else
- *(__u16 *)out = crc_t10dif_generic(*crcp, data, len);
- return 0;
-}
-
-static int chksum_finup(struct shash_desc *desc, const u8 *data,
- unsigned int len, u8 *out)
-{
- struct chksum_desc_ctx *ctx = shash_desc_ctx(desc);
-
- return __chksum_finup(&ctx->crc, data, len, out);
-}
-
-static int chksum_digest(struct shash_desc *desc, const u8 *data,
- unsigned int length, u8 *out)
-{
- struct chksum_desc_ctx *ctx = shash_desc_ctx(desc);
-
- return __chksum_finup(&ctx->crc, data, length, out);
-}
-
-static struct shash_alg alg = {
- .digestsize = CRC_T10DIF_DIGEST_SIZE,
- .init = chksum_init,
- .update = chksum_update,
- .final = chksum_final,
- .finup = chksum_finup,
- .digest = chksum_digest,
- .descsize = sizeof(struct chksum_desc_ctx),
- .base = {
- .cra_name = "crct10dif",
- .cra_driver_name = "crct10dif-pclmul",
- .cra_priority = 200,
- .cra_blocksize = CRC_T10DIF_BLOCK_SIZE,
- .cra_module = THIS_MODULE,
- }
-};
-
-static const struct x86_cpu_id crct10dif_cpu_id[] = {
- X86_FEATURE_MATCH(X86_FEATURE_PCLMULQDQ),
- {}
-};
-MODULE_DEVICE_TABLE(x86cpu, crct10dif_cpu_id);
-
-static int __init crct10dif_intel_mod_init(void)
-{
- if (!x86_match_cpu(crct10dif_cpu_id))
- return -ENODEV;
-
- return crypto_register_shash(&alg);
-}
-
-static void __exit crct10dif_intel_mod_fini(void)
-{
- crypto_unregister_shash(&alg);
-}
-
-module_init(crct10dif_intel_mod_init);
-module_exit(crct10dif_intel_mod_fini);
-
-MODULE_AUTHOR("Tim Chen <tim.c.chen@linux.intel.com>");
-MODULE_DESCRIPTION("T10 DIF CRC calculation accelerated with PCLMULQDQ.");
-MODULE_LICENSE("GPL");
-
-MODULE_ALIAS("crct10dif");
-MODULE_ALIAS("crct10dif-pclmul");
diff --git a/arch/x86/include/asm/cpu.h b/arch/x86/include/asm/cpu.h
index 5f9a1243190e..d2b12988d2ed 100644
--- a/arch/x86/include/asm/cpu.h
+++ b/arch/x86/include/asm/cpu.h
@@ -28,7 +28,7 @@ struct x86_cpu {
#ifdef CONFIG_HOTPLUG_CPU
extern int arch_register_cpu(int num);
extern void arch_unregister_cpu(int);
-extern void __cpuinit start_cpu0(void);
+extern void start_cpu0(void);
#ifdef CONFIG_DEBUG_HOTPLUG_CPU0
extern int _debug_hotplug_cpu(int cpu, int action);
#endif
diff --git a/arch/x86/include/asm/microcode.h b/arch/x86/include/asm/microcode.h
index 6bc3985ee473..f98bd6625318 100644
--- a/arch/x86/include/asm/microcode.h
+++ b/arch/x86/include/asm/microcode.h
@@ -60,11 +60,11 @@ static inline void __exit exit_amd_microcode(void) {}
#ifdef CONFIG_MICROCODE_EARLY
#define MAX_UCODE_COUNT 128
extern void __init load_ucode_bsp(void);
-extern void __cpuinit load_ucode_ap(void);
+extern void load_ucode_ap(void);
extern int __init save_microcode_in_initrd(void);
#else
static inline void __init load_ucode_bsp(void) {}
-static inline void __cpuinit load_ucode_ap(void) {}
+static inline void load_ucode_ap(void) {}
static inline int __init save_microcode_in_initrd(void)
{
return 0;
diff --git a/arch/x86/include/asm/microcode_amd.h b/arch/x86/include/asm/microcode_amd.h
index c6b043f40271..50e5c58ced23 100644
--- a/arch/x86/include/asm/microcode_amd.h
+++ b/arch/x86/include/asm/microcode_amd.h
@@ -67,11 +67,11 @@ extern enum ucode_state load_microcode_amd(int cpu, const u8 *data, size_t size)
extern u8 amd_bsp_mpb[MPB_MAX_SIZE];
#endif
extern void __init load_ucode_amd_bsp(void);
-extern void __cpuinit load_ucode_amd_ap(void);
+extern void load_ucode_amd_ap(void);
extern int __init save_microcode_in_initrd_amd(void);
#else
static inline void __init load_ucode_amd_bsp(void) {}
-static inline void __cpuinit load_ucode_amd_ap(void) {}
+static inline void load_ucode_amd_ap(void) {}
static inline int __init save_microcode_in_initrd_amd(void) { return -EINVAL; }
#endif
diff --git a/arch/x86/include/asm/microcode_intel.h b/arch/x86/include/asm/microcode_intel.h
index 87a085333cbf..9067166409bf 100644
--- a/arch/x86/include/asm/microcode_intel.h
+++ b/arch/x86/include/asm/microcode_intel.h
@@ -65,12 +65,12 @@ update_match_revision(struct microcode_header_intel *mc_header, int rev);
#ifdef CONFIG_MICROCODE_INTEL_EARLY
extern void __init load_ucode_intel_bsp(void);
-extern void __cpuinit load_ucode_intel_ap(void);
+extern void load_ucode_intel_ap(void);
extern void show_ucode_info_early(void);
extern int __init save_microcode_in_initrd_intel(void);
#else
static inline __init void load_ucode_intel_bsp(void) {}
-static inline __cpuinit void load_ucode_intel_ap(void) {}
+static inline void load_ucode_intel_ap(void) {}
static inline void show_ucode_info_early(void) {}
static inline int __init save_microcode_in_initrd_intel(void) { return -EINVAL; }
#endif
diff --git a/arch/x86/include/asm/mmconfig.h b/arch/x86/include/asm/mmconfig.h
index 9b119da1d105..04a3fed22cfe 100644
--- a/arch/x86/include/asm/mmconfig.h
+++ b/arch/x86/include/asm/mmconfig.h
@@ -2,8 +2,8 @@
#define _ASM_X86_MMCONFIG_H
#ifdef CONFIG_PCI_MMCONFIG
-extern void __cpuinit fam10h_check_enable_mmcfg(void);
-extern void __cpuinit check_enable_amd_mmconf_dmi(void);
+extern void fam10h_check_enable_mmcfg(void);
+extern void check_enable_amd_mmconf_dmi(void);
#else
static inline void fam10h_check_enable_mmcfg(void) { }
static inline void check_enable_amd_mmconf_dmi(void) { }
diff --git a/arch/x86/include/asm/mpspec.h b/arch/x86/include/asm/mpspec.h
index 3e2f42a4b872..626cf70082d7 100644
--- a/arch/x86/include/asm/mpspec.h
+++ b/arch/x86/include/asm/mpspec.h
@@ -94,7 +94,7 @@ static inline void early_reserve_e820_mpc_new(void) { }
#define default_get_smp_config x86_init_uint_noop
#endif
-void __cpuinit generic_processor_info(int apicid, int version);
+void generic_processor_info(int apicid, int version);
#ifdef CONFIG_ACPI
extern void mp_register_ioapic(int id, u32 address, u32 gsi_base);
extern void mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger,
diff --git a/arch/x86/include/asm/numa.h b/arch/x86/include/asm/numa.h
index 1b99ee5c9f00..4064acae625d 100644
--- a/arch/x86/include/asm/numa.h
+++ b/arch/x86/include/asm/numa.h
@@ -39,7 +39,7 @@ static inline void set_apicid_to_node(int apicid, s16 node)
__apicid_to_node[apicid] = node;
}
-extern int __cpuinit numa_cpu_node(int cpu);
+extern int numa_cpu_node(int cpu);
#else /* CONFIG_NUMA */
static inline void set_apicid_to_node(int apicid, s16 node)
@@ -60,8 +60,8 @@ static inline int numa_cpu_node(int cpu)
extern void numa_set_node(int cpu, int node);
extern void numa_clear_node(int cpu);
extern void __init init_cpu_to_node(void);
-extern void __cpuinit numa_add_cpu(int cpu);
-extern void __cpuinit numa_remove_cpu(int cpu);
+extern void numa_add_cpu(int cpu);
+extern void numa_remove_cpu(int cpu);
#else /* CONFIG_NUMA */
static inline void numa_set_node(int cpu, int node) { }
static inline void numa_clear_node(int cpu) { }
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 29937c4f6ff8..24cf5aefb704 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -164,7 +164,7 @@ extern const struct seq_operations cpuinfo_op;
#define cache_line_size() (boot_cpu_data.x86_cache_alignment)
extern void cpu_detect(struct cpuinfo_x86 *c);
-extern void __cpuinit fpu_detect(struct cpuinfo_x86 *c);
+extern void fpu_detect(struct cpuinfo_x86 *c);
extern void early_cpu_init(void);
extern void identify_boot_cpu(void);
diff --git a/arch/x86/include/asm/prom.h b/arch/x86/include/asm/prom.h
index 60bef663609a..bade6ac3b14f 100644
--- a/arch/x86/include/asm/prom.h
+++ b/arch/x86/include/asm/prom.h
@@ -27,7 +27,7 @@ extern int of_ioapic;
extern u64 initial_dtb;
extern void add_dtb(u64 data);
extern void x86_add_irq_domains(void);
-void __cpuinit x86_of_pci_init(void);
+void x86_of_pci_init(void);
void x86_dtb_init(void);
#else
static inline void add_dtb(u64 data) { }
diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h
index b073aaea747c..4137890e88e3 100644
--- a/arch/x86/include/asm/smp.h
+++ b/arch/x86/include/asm/smp.h
@@ -179,7 +179,7 @@ static inline int wbinvd_on_all_cpus(void)
}
#endif /* CONFIG_SMP */
-extern unsigned disabled_cpus __cpuinitdata;
+extern unsigned disabled_cpus;
#ifdef CONFIG_X86_32_SMP
/*
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index d81a972dd506..2627a81253ee 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -195,7 +195,7 @@ static int __init acpi_parse_madt(struct acpi_table_header *table)
return 0;
}
-static void __cpuinit acpi_register_lapic(int id, u8 enabled)
+static void acpi_register_lapic(int id, u8 enabled)
{
unsigned int ver = 0;
@@ -607,7 +607,7 @@ void __init acpi_set_irq_model_ioapic(void)
#ifdef CONFIG_ACPI_HOTPLUG_CPU
#include <acpi/processor.h>
-static void __cpuinit acpi_map_cpu2node(acpi_handle handle, int cpu, int physid)
+static void acpi_map_cpu2node(acpi_handle handle, int cpu, int physid)
{
#ifdef CONFIG_ACPI_NUMA
int nid;
@@ -620,7 +620,7 @@ static void __cpuinit acpi_map_cpu2node(acpi_handle handle, int cpu, int physid)
#endif
}
-static int __cpuinit _acpi_map_lsapic(acpi_handle handle, int *pcpu)
+static int _acpi_map_lsapic(acpi_handle handle, int *pcpu)
{
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
union acpi_object *obj;
diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c
index 2a34aaf3c8f1..33120100ff5e 100644
--- a/arch/x86/kernel/acpi/sleep.c
+++ b/arch/x86/kernel/acpi/sleep.c
@@ -48,9 +48,20 @@ int x86_acpi_suspend_lowlevel(void)
#ifndef CONFIG_64BIT
native_store_gdt((struct desc_ptr *)&header->pmode_gdt);
+ /*
+ * We have to check that we can write back the value, and not
+ * just read it. At least on 90 nm Pentium M (Family 6, Model
+ * 13), reading an invalid MSR is not guaranteed to trap, see
+ * Erratum X4 in "Intel Pentium M Processor on 90 nm Process
+ * with 2-MB L2 Cache and Intel® Processor A100 and A110 on 90
+ * nm process with 512-KB L2 Cache Specification Update".
+ */
if (!rdmsr_safe(MSR_EFER,
&header->pmode_efer_low,
- &header->pmode_efer_high))
+ &header->pmode_efer_high) &&
+ !wrmsr_safe(MSR_EFER,
+ header->pmode_efer_low,
+ header->pmode_efer_high))
header->pmode_behavior |= (1 << WAKEUP_BEHAVIOR_RESTORE_EFER);
#endif /* !CONFIG_64BIT */
@@ -61,7 +72,10 @@ int x86_acpi_suspend_lowlevel(void)
}
if (!rdmsr_safe(MSR_IA32_MISC_ENABLE,
&header->pmode_misc_en_low,
- &header->pmode_misc_en_high))
+ &header->pmode_misc_en_high) &&
+ !wrmsr_safe(MSR_IA32_MISC_ENABLE,
+ header->pmode_misc_en_low,
+ header->pmode_misc_en_high))
header->pmode_behavior |=
(1 << WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE);
header->realmode_flags = acpi_realmode_flags;
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index 99663b59123a..eca89c53a7f5 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -58,7 +58,7 @@
unsigned int num_processors;
-unsigned disabled_cpus __cpuinitdata;
+unsigned disabled_cpus;
/* Processor that is doing the boot up */
unsigned int boot_cpu_physical_apicid = -1U;
@@ -544,7 +544,7 @@ static DEFINE_PER_CPU(struct clock_event_device, lapic_events);
* Setup the local APIC timer for this CPU. Copy the initialized values
* of the boot CPU and register the clock event in the framework.
*/
-static void __cpuinit setup_APIC_timer(void)
+static void setup_APIC_timer(void)
{
struct clock_event_device *levt = &__get_cpu_var(lapic_events);
@@ -866,7 +866,7 @@ void __init setup_boot_APIC_clock(void)
setup_APIC_timer();
}
-void __cpuinit setup_secondary_APIC_clock(void)
+void setup_secondary_APIC_clock(void)
{
setup_APIC_timer();
}
@@ -1229,7 +1229,7 @@ void __init init_bsp_APIC(void)
apic_write(APIC_LVT1, value);
}
-static void __cpuinit lapic_setup_esr(void)
+static void lapic_setup_esr(void)
{
unsigned int oldvalue, value, maxlvt;
@@ -1276,7 +1276,7 @@ static void __cpuinit lapic_setup_esr(void)
* Used to setup local APIC while initializing BSP or bringin up APs.
* Always called with preemption disabled.
*/
-void __cpuinit setup_local_APIC(void)
+void setup_local_APIC(void)
{
int cpu = smp_processor_id();
unsigned int value, queued;
@@ -1471,7 +1471,7 @@ void __cpuinit setup_local_APIC(void)
#endif
}
-void __cpuinit end_local_APIC_setup(void)
+void end_local_APIC_setup(void)
{
lapic_setup_esr();
@@ -2107,7 +2107,7 @@ void disconnect_bsp_APIC(int virt_wire_setup)
apic_write(APIC_LVT1, value);
}
-void __cpuinit generic_processor_info(int apicid, int version)
+void generic_processor_info(int apicid, int version)
{
int cpu, max = nr_cpu_ids;
bool boot_cpu_detected = physid_isset(boot_cpu_physical_apicid,
@@ -2377,7 +2377,7 @@ static struct syscore_ops lapic_syscore_ops = {
.suspend = lapic_suspend,
};
-static void __cpuinit apic_pm_activate(void)
+static void apic_pm_activate(void)
{
apic_pm_state.active = 1;
}
@@ -2402,7 +2402,7 @@ static void apic_pm_activate(void) { }
#ifdef CONFIG_X86_64
-static int __cpuinit apic_cluster_num(void)
+static int apic_cluster_num(void)
{
int i, clusters, zeros;
unsigned id;
@@ -2447,10 +2447,10 @@ static int __cpuinit apic_cluster_num(void)
return clusters;
}
-static int __cpuinitdata multi_checked;
-static int __cpuinitdata multi;
+static int multi_checked;
+static int multi;
-static int __cpuinit set_multi(const struct dmi_system_id *d)
+static int set_multi(const struct dmi_system_id *d)
{
if (multi)
return 0;
@@ -2459,7 +2459,7 @@ static int __cpuinit set_multi(const struct dmi_system_id *d)
return 0;
}
-static const __cpuinitconst struct dmi_system_id multi_dmi_table[] = {
+static const struct dmi_system_id multi_dmi_table[] = {
{
.callback = set_multi,
.ident = "IBM System Summit2",
@@ -2471,7 +2471,7 @@ static const __cpuinitconst struct dmi_system_id multi_dmi_table[] = {
{}
};
-static void __cpuinit dmi_check_multi(void)
+static void dmi_check_multi(void)
{
if (multi_checked)
return;
@@ -2488,7 +2488,7 @@ static void __cpuinit dmi_check_multi(void)
* multi-chassis.
* Use DMI to check them
*/
-__cpuinit int apic_is_clustered_box(void)
+int apic_is_clustered_box(void)
{
dmi_check_multi();
if (multi)
diff --git a/arch/x86/kernel/apic/apic_numachip.c b/arch/x86/kernel/apic/apic_numachip.c
index 9a9110918ca7..3e67f9e3d7ef 100644
--- a/arch/x86/kernel/apic/apic_numachip.c
+++ b/arch/x86/kernel/apic/apic_numachip.c
@@ -74,7 +74,7 @@ static int numachip_phys_pkg_id(int initial_apic_id, int index_msb)
return initial_apic_id >> index_msb;
}
-static int __cpuinit numachip_wakeup_secondary(int phys_apicid, unsigned long start_rip)
+static int numachip_wakeup_secondary(int phys_apicid, unsigned long start_rip)
{
union numachip_csr_g3_ext_irq_gen int_gen;
diff --git a/arch/x86/kernel/apic/es7000_32.c b/arch/x86/kernel/apic/es7000_32.c
index 0874799a98c6..c55224731b2d 100644
--- a/arch/x86/kernel/apic/es7000_32.c
+++ b/arch/x86/kernel/apic/es7000_32.c
@@ -130,7 +130,7 @@ int es7000_plat;
*/
-static int __cpuinit wakeup_secondary_cpu_via_mip(int cpu, unsigned long eip)
+static int wakeup_secondary_cpu_via_mip(int cpu, unsigned long eip)
{
unsigned long vect = 0, psaival = 0;
diff --git a/arch/x86/kernel/apic/numaq_32.c b/arch/x86/kernel/apic/numaq_32.c
index d661ee95cabf..1e42e8f305ee 100644
--- a/arch/x86/kernel/apic/numaq_32.c
+++ b/arch/x86/kernel/apic/numaq_32.c
@@ -105,7 +105,7 @@ static void __init smp_dump_qct(void)
}
}
-void __cpuinit numaq_tsc_disable(void)
+void numaq_tsc_disable(void)
{
if (!found_numaq)
return;
diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c
index c88baa4ff0e5..140e29db478d 100644
--- a/arch/x86/kernel/apic/x2apic_cluster.c
+++ b/arch/x86/kernel/apic/x2apic_cluster.c
@@ -148,7 +148,7 @@ static void init_x2apic_ldr(void)
/*
* At CPU state changes, update the x2apic cluster sibling info.
*/
-static int __cpuinit
+static int
update_clusterinfo(struct notifier_block *nfb, unsigned long action, void *hcpu)
{
unsigned int this_cpu = (unsigned long)hcpu;
diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
index 63092afb142e..1191ac1c9d25 100644
--- a/arch/x86/kernel/apic/x2apic_uv_x.c
+++ b/arch/x86/kernel/apic/x2apic_uv_x.c
@@ -209,7 +209,7 @@ EXPORT_SYMBOL_GPL(uv_possible_blades);
unsigned long sn_rtc_cycles_per_second;
EXPORT_SYMBOL(sn_rtc_cycles_per_second);
-static int __cpuinit uv_wakeup_secondary(int phys_apicid, unsigned long start_rip)
+static int uv_wakeup_secondary(int phys_apicid, unsigned long start_rip)
{
#ifdef CONFIG_SMP
unsigned long val;
@@ -416,7 +416,7 @@ static struct apic __refdata apic_x2apic_uv_x = {
.safe_wait_icr_idle = native_safe_x2apic_wait_icr_idle,
};
-static __cpuinit void set_x2apic_extra_bits(int pnode)
+static void set_x2apic_extra_bits(int pnode)
{
__this_cpu_write(x2apic_extra_bits, pnode << uvh_apicid.s.pnode_shift);
}
@@ -735,7 +735,7 @@ static void uv_heartbeat(unsigned long ignored)
mod_timer_pinned(timer, jiffies + SCIR_CPU_HB_INTERVAL);
}
-static void __cpuinit uv_heartbeat_enable(int cpu)
+static void uv_heartbeat_enable(int cpu)
{
while (!uv_cpu_hub_info(cpu)->scir.enabled) {
struct timer_list *timer = &uv_cpu_hub_info(cpu)->scir.timer;
@@ -752,7 +752,7 @@ static void __cpuinit uv_heartbeat_enable(int cpu)
}
#ifdef CONFIG_HOTPLUG_CPU
-static void __cpuinit uv_heartbeat_disable(int cpu)
+static void uv_heartbeat_disable(int cpu)
{
if (uv_cpu_hub_info(cpu)->scir.enabled) {
uv_cpu_hub_info(cpu)->scir.enabled = 0;
@@ -764,8 +764,8 @@ static void __cpuinit uv_heartbeat_disable(int cpu)
/*
* cpu hotplug notifier
*/
-static __cpuinit int uv_scir_cpu_notify(struct notifier_block *self,
- unsigned long action, void *hcpu)
+static int uv_scir_cpu_notify(struct notifier_block *self, unsigned long action,
+ void *hcpu)
{
long cpu = (long)hcpu;
@@ -835,7 +835,7 @@ int uv_set_vga_state(struct pci_dev *pdev, bool decode,
* Called on each cpu to initialize the per_cpu UV data area.
* FIXME: hotplug not supported yet
*/
-void __cpuinit uv_cpu_init(void)
+void uv_cpu_init(void)
{
/* CPU 0 initilization will be done via uv_system_init. */
if (!uv_blade_info)
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index c587a8757227..f654ecefea5b 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -69,7 +69,7 @@ static inline int wrmsrl_amd_safe(unsigned msr, unsigned long long val)
extern void vide(void);
__asm__(".align 4\nvide: ret");
-static void __cpuinit init_amd_k5(struct cpuinfo_x86 *c)
+static void init_amd_k5(struct cpuinfo_x86 *c)
{
/*
* General Systems BIOSen alias the cpu frequency registers
@@ -87,7 +87,7 @@ static void __cpuinit init_amd_k5(struct cpuinfo_x86 *c)
}
-static void __cpuinit init_amd_k6(struct cpuinfo_x86 *c)
+static void init_amd_k6(struct cpuinfo_x86 *c)
{
u32 l, h;
int mbytes = get_num_physpages() >> (20-PAGE_SHIFT);
@@ -179,7 +179,7 @@ static void __cpuinit init_amd_k6(struct cpuinfo_x86 *c)
}
}
-static void __cpuinit amd_k7_smp_check(struct cpuinfo_x86 *c)
+static void amd_k7_smp_check(struct cpuinfo_x86 *c)
{
/* calling is from identify_secondary_cpu() ? */
if (!c->cpu_index)
@@ -222,7 +222,7 @@ static void __cpuinit amd_k7_smp_check(struct cpuinfo_x86 *c)
add_taint(TAINT_UNSAFE_SMP, LOCKDEP_NOW_UNRELIABLE);
}
-static void __cpuinit init_amd_k7(struct cpuinfo_x86 *c)
+static void init_amd_k7(struct cpuinfo_x86 *c)
{
u32 l, h;
@@ -267,7 +267,7 @@ static void __cpuinit init_amd_k7(struct cpuinfo_x86 *c)
* To workaround broken NUMA config. Read the comment in
* srat_detect_node().
*/
-static int __cpuinit nearby_node(int apicid)
+static int nearby_node(int apicid)
{
int i, node;
@@ -292,7 +292,7 @@ static int __cpuinit nearby_node(int apicid)
* (2) AMD processors supporting compute units
*/
#ifdef CONFIG_X86_HT
-static void __cpuinit amd_get_topology(struct cpuinfo_x86 *c)
+static void amd_get_topology(struct cpuinfo_x86 *c)
{
u32 nodes, cores_per_cu = 1;
u8 node_id;
@@ -342,7 +342,7 @@ static void __cpuinit amd_get_topology(struct cpuinfo_x86 *c)
* On a AMD dual core setup the lower bits of the APIC id distingush the cores.
* Assumes number of cores is a power of two.
*/
-static void __cpuinit amd_detect_cmp(struct cpuinfo_x86 *c)
+static void amd_detect_cmp(struct cpuinfo_x86 *c)
{
#ifdef CONFIG_X86_HT
unsigned bits;
@@ -369,7 +369,7 @@ u16 amd_get_nb_id(int cpu)
}
EXPORT_SYMBOL_GPL(amd_get_nb_id);
-static void __cpuinit srat_detect_node(struct cpuinfo_x86 *c)
+static void srat_detect_node(struct cpuinfo_x86 *c)
{
#ifdef CONFIG_NUMA
int cpu = smp_processor_id();
@@ -421,7 +421,7 @@ static void __cpuinit srat_detect_node(struct cpuinfo_x86 *c)
#endif
}
-static void __cpuinit early_init_amd_mc(struct cpuinfo_x86 *c)
+static void early_init_amd_mc(struct cpuinfo_x86 *c)
{
#ifdef CONFIG_X86_HT
unsigned bits, ecx;
@@ -447,7 +447,7 @@ static void __cpuinit early_init_amd_mc(struct cpuinfo_x86 *c)
#endif
}
-static void __cpuinit bsp_init_amd(struct cpuinfo_x86 *c)
+static void bsp_init_amd(struct cpuinfo_x86 *c)
{
if (cpu_has(c, X86_FEATURE_CONSTANT_TSC)) {
@@ -475,7 +475,7 @@ static void __cpuinit bsp_init_amd(struct cpuinfo_x86 *c)
}
}
-static void __cpuinit early_init_amd(struct cpuinfo_x86 *c)
+static void early_init_amd(struct cpuinfo_x86 *c)
{
early_init_amd_mc(c);
@@ -514,7 +514,7 @@ static const int amd_erratum_383[];
static const int amd_erratum_400[];
static bool cpu_has_amd_erratum(const int *erratum);
-static void __cpuinit init_amd(struct cpuinfo_x86 *c)
+static void init_amd(struct cpuinfo_x86 *c)
{
u32 dummy;
unsigned long long value;
@@ -740,8 +740,7 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
}
#ifdef CONFIG_X86_32
-static unsigned int __cpuinit amd_size_cache(struct cpuinfo_x86 *c,
- unsigned int size)
+static unsigned int amd_size_cache(struct cpuinfo_x86 *c, unsigned int size)
{
/* AMD errata T13 (order #21922) */
if ((c->x86 == 6)) {
@@ -757,7 +756,7 @@ static unsigned int __cpuinit amd_size_cache(struct cpuinfo_x86 *c,
}
#endif
-static void __cpuinit cpu_set_tlb_flushall_shift(struct cpuinfo_x86 *c)
+static void cpu_set_tlb_flushall_shift(struct cpuinfo_x86 *c)
{
tlb_flushall_shift = 5;
@@ -765,7 +764,7 @@ static void __cpuinit cpu_set_tlb_flushall_shift(struct cpuinfo_x86 *c)
tlb_flushall_shift = 4;
}
-static void __cpuinit cpu_detect_tlb_amd(struct cpuinfo_x86 *c)
+static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c)
{
u32 ebx, eax, ecx, edx;
u16 mask = 0xfff;
@@ -820,7 +819,7 @@ static void __cpuinit cpu_detect_tlb_amd(struct cpuinfo_x86 *c)
cpu_set_tlb_flushall_shift(c);
}
-static const struct cpu_dev __cpuinitconst amd_cpu_dev = {
+static const struct cpu_dev amd_cpu_dev = {
.c_vendor = "AMD",
.c_ident = { "AuthenticAMD" },
#ifdef CONFIG_X86_32
diff --git a/arch/x86/kernel/cpu/centaur.c b/arch/x86/kernel/cpu/centaur.c
index 159103c0b1f4..fbf6c3bc2400 100644
--- a/arch/x86/kernel/cpu/centaur.c
+++ b/arch/x86/kernel/cpu/centaur.c
@@ -11,7 +11,7 @@
#ifdef CONFIG_X86_OOSTORE
-static u32 __cpuinit power2(u32 x)
+static u32 power2(u32 x)
{
u32 s = 1;
@@ -25,7 +25,7 @@ static u32 __cpuinit power2(u32 x)
/*
* Set up an actual MCR
*/
-static void __cpuinit centaur_mcr_insert(int reg, u32 base, u32 size, int key)
+static void centaur_mcr_insert(int reg, u32 base, u32 size, int key)
{
u32 lo, hi;
@@ -42,7 +42,7 @@ static void __cpuinit centaur_mcr_insert(int reg, u32 base, u32 size, int key)
*
* Shortcut: We know you can't put 4Gig of RAM on a winchip
*/
-static u32 __cpuinit ramtop(void)
+static u32 ramtop(void)
{
u32 clip = 0xFFFFFFFFUL;
u32 top = 0;
@@ -91,7 +91,7 @@ static u32 __cpuinit ramtop(void)
/*
* Compute a set of MCR's to give maximum coverage
*/
-static int __cpuinit centaur_mcr_compute(int nr, int key)
+static int centaur_mcr_compute(int nr, int key)
{
u32 mem = ramtop();
u32 root = power2(mem);
@@ -157,7 +157,7 @@ static int __cpuinit centaur_mcr_compute(int nr, int key)
return ct;
}
-static void __cpuinit centaur_create_optimal_mcr(void)
+static void centaur_create_optimal_mcr(void)
{
int used;
int i;
@@ -181,7 +181,7 @@ static void __cpuinit centaur_create_optimal_mcr(void)
wrmsr(MSR_IDT_MCR0+i, 0, 0);
}
-static void __cpuinit winchip2_create_optimal_mcr(void)
+static void winchip2_create_optimal_mcr(void)
{
u32 lo, hi;
int used;
@@ -217,7 +217,7 @@ static void __cpuinit winchip2_create_optimal_mcr(void)
/*
* Handle the MCR key on the Winchip 2.
*/
-static void __cpuinit winchip2_unprotect_mcr(void)
+static void winchip2_unprotect_mcr(void)
{
u32 lo, hi;
u32 key;
@@ -229,7 +229,7 @@ static void __cpuinit winchip2_unprotect_mcr(void)
wrmsr(MSR_IDT_MCR_CTRL, lo, hi);
}
-static void __cpuinit winchip2_protect_mcr(void)
+static void winchip2_protect_mcr(void)
{
u32 lo, hi;
@@ -247,7 +247,7 @@ static void __cpuinit winchip2_protect_mcr(void)
#define RNG_ENABLED (1 << 3)
#define RNG_ENABLE (1 << 6) /* MSR_VIA_RNG */
-static void __cpuinit init_c3(struct cpuinfo_x86 *c)
+static void init_c3(struct cpuinfo_x86 *c)
{
u32 lo, hi;
@@ -318,7 +318,7 @@ enum {
EAMD3D = 1<<20,
};
-static void __cpuinit early_init_centaur(struct cpuinfo_x86 *c)
+static void early_init_centaur(struct cpuinfo_x86 *c)
{
switch (c->x86) {
#ifdef CONFIG_X86_32
@@ -337,7 +337,7 @@ static void __cpuinit early_init_centaur(struct cpuinfo_x86 *c)
#endif
}
-static void __cpuinit init_centaur(struct cpuinfo_x86 *c)
+static void init_centaur(struct cpuinfo_x86 *c)
{
#ifdef CONFIG_X86_32
char *name;
@@ -468,7 +468,7 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c)
#endif
}
-static unsigned int __cpuinit
+static unsigned int
centaur_size_cache(struct cpuinfo_x86 *c, unsigned int size)
{
#ifdef CONFIG_X86_32
@@ -488,7 +488,7 @@ centaur_size_cache(struct cpuinfo_x86 *c, unsigned int size)
return size;
}
-static const struct cpu_dev __cpuinitconst centaur_cpu_dev = {
+static const struct cpu_dev centaur_cpu_dev = {
.c_vendor = "Centaur",
.c_ident = { "CentaurHauls" },
.c_early_init = early_init_centaur,
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 548bd039784e..25eb2747b063 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -63,7 +63,7 @@ void __init setup_cpu_local_masks(void)
alloc_bootmem_cpumask_var(&cpu_sibling_setup_mask);
}
-static void __cpuinit default_init(struct cpuinfo_x86 *c)
+static void default_init(struct cpuinfo_x86 *c)
{
#ifdef CONFIG_X86_64
cpu_detect_cache_sizes(c);
@@ -80,13 +80,13 @@ static void __cpuinit default_init(struct cpuinfo_x86 *c)
#endif
}
-static const struct cpu_dev __cpuinitconst default_cpu = {
+static const struct cpu_dev default_cpu = {
.c_init = default_init,
.c_vendor = "Unknown",
.c_x86_vendor = X86_VENDOR_UNKNOWN,
};
-static const struct cpu_dev *this_cpu __cpuinitdata = &default_cpu;
+static const struct cpu_dev *this_cpu = &default_cpu;
DEFINE_PER_CPU_PAGE_ALIGNED(struct gdt_page, gdt_page) = { .gdt = {
#ifdef CONFIG_X86_64
@@ -160,8 +160,8 @@ static int __init x86_xsaveopt_setup(char *s)
__setup("noxsaveopt", x86_xsaveopt_setup);
#ifdef CONFIG_X86_32
-static int cachesize_override __cpuinitdata = -1;
-static int disable_x86_serial_nr __cpuinitdata = 1;
+static int cachesize_override = -1;
+static int disable_x86_serial_nr = 1;
static int __init cachesize_setup(char *str)
{
@@ -215,12 +215,12 @@ static inline int flag_is_changeable_p(u32 flag)
}
/* Probe for the CPUID instruction */
-int __cpuinit have_cpuid_p(void)
+int have_cpuid_p(void)
{
return flag_is_changeable_p(X86_EFLAGS_ID);
}
-static void __cpuinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
+static void squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
{
unsigned long lo, hi;
@@ -298,7 +298,7 @@ struct cpuid_dependent_feature {
u32 level;
};
-static const struct cpuid_dependent_feature __cpuinitconst
+static const struct cpuid_dependent_feature
cpuid_dependent_features[] = {
{ X86_FEATURE_MWAIT, 0x00000005 },
{ X86_FEATURE_DCA, 0x00000009 },
@@ -306,7 +306,7 @@ cpuid_dependent_features[] = {
{ 0, 0 }
};
-static void __cpuinit filter_cpuid_features(struct cpuinfo_x86 *c, bool warn)
+static void filter_cpuid_features(struct cpuinfo_x86 *c, bool warn)
{
const struct cpuid_dependent_feature *df;
@@ -344,7 +344,7 @@ static void __cpuinit filter_cpuid_features(struct cpuinfo_x86 *c, bool warn)
*/
/* Look up CPU names by table lookup. */
-static const char *__cpuinit table_lookup_model(struct cpuinfo_x86 *c)
+static const char *table_lookup_model(struct cpuinfo_x86 *c)
{
const struct cpu_model_info *info;
@@ -364,8 +364,8 @@ static const char *__cpuinit table_lookup_model(struct cpuinfo_x86 *c)
return NULL; /* Not found */
}
-__u32 cpu_caps_cleared[NCAPINTS] __cpuinitdata;
-__u32 cpu_caps_set[NCAPINTS] __cpuinitdata;
+__u32 cpu_caps_cleared[NCAPINTS];
+__u32 cpu_caps_set[NCAPINTS];
void load_percpu_segment(int cpu)
{
@@ -394,9 +394,9 @@ void switch_to_new_gdt(int cpu)
load_percpu_segment(cpu);
}
-static const struct cpu_dev *__cpuinitdata cpu_devs[X86_VENDOR_NUM] = {};
+static const struct cpu_dev *cpu_devs[X86_VENDOR_NUM] = {};
-static void __cpuinit get_model_name(struct cpuinfo_x86 *c)
+static void get_model_name(struct cpuinfo_x86 *c)
{
unsigned int *v;
char *p, *q;
@@ -425,7 +425,7 @@ static void __cpuinit get_model_name(struct cpuinfo_x86 *c)
}
}
-void __cpuinit cpu_detect_cache_sizes(struct cpuinfo_x86 *c)
+void cpu_detect_cache_sizes(struct cpuinfo_x86 *c)
{
unsigned int n, dummy, ebx, ecx, edx, l2size;
@@ -479,7 +479,7 @@ u16 __read_mostly tlb_lld_4m[NR_INFO];
*/
s8 __read_mostly tlb_flushall_shift = -1;
-void __cpuinit cpu_detect_tlb(struct cpuinfo_x86 *c)
+void cpu_detect_tlb(struct cpuinfo_x86 *c)
{
if (this_cpu->c_detect_tlb)
this_cpu->c_detect_tlb(c);
@@ -493,7 +493,7 @@ void __cpuinit cpu_detect_tlb(struct cpuinfo_x86 *c)
tlb_flushall_shift);
}
-void __cpuinit detect_ht(struct cpuinfo_x86 *c)
+void detect_ht(struct cpuinfo_x86 *c)
{
#ifdef CONFIG_X86_HT
u32 eax, ebx, ecx, edx;
@@ -544,7 +544,7 @@ out:
#endif
}
-static void __cpuinit get_cpu_vendor(struct cpuinfo_x86 *c)
+static void get_cpu_vendor(struct cpuinfo_x86 *c)
{
char *v = c->x86_vendor_id;
int i;
@@ -571,7 +571,7 @@ static void __cpuinit get_cpu_vendor(struct cpuinfo_x86 *c)
this_cpu = &default_cpu;
}
-void __cpuinit cpu_detect(struct cpuinfo_x86 *c)
+void cpu_detect(struct cpuinfo_x86 *c)
{
/* Get vendor name */
cpuid(0x00000000, (unsigned int *)&c->cpuid_level,
@@ -601,7 +601,7 @@ void __cpuinit cpu_detect(struct cpuinfo_x86 *c)
}
}
-void __cpuinit get_cpu_cap(struct cpuinfo_x86 *c)
+void get_cpu_cap(struct cpuinfo_x86 *c)
{
u32 tfms, xlvl;
u32 ebx;
@@ -652,7 +652,7 @@ void __cpuinit get_cpu_cap(struct cpuinfo_x86 *c)
init_scattered_cpuid_features(c);
}
-static void __cpuinit identify_cpu_without_cpuid(struct cpuinfo_x86 *c)
+static void identify_cpu_without_cpuid(struct cpuinfo_x86 *c)
{
#ifdef CONFIG_X86_32
int i;
@@ -769,7 +769,7 @@ void __init early_cpu_init(void)
* unless we can find a reliable way to detect all the broken cases.
* Enable it explicitly on 64-bit for non-constant inputs of cpu_has().
*/
-static void __cpuinit detect_nopl(struct cpuinfo_x86 *c)
+static void detect_nopl(struct cpuinfo_x86 *c)
{
#ifdef CONFIG_X86_32
clear_cpu_cap(c, X86_FEATURE_NOPL);
@@ -778,7 +778,7 @@ static void __cpuinit detect_nopl(struct cpuinfo_x86 *c)
#endif
}
-static void __cpuinit generic_identify(struct cpuinfo_x86 *c)
+static void generic_identify(struct cpuinfo_x86 *c)
{
c->extended_cpuid_level = 0;
@@ -815,7 +815,7 @@ static void __cpuinit generic_identify(struct cpuinfo_x86 *c)
/*
* This does the hard work of actually picking apart the CPU stuff...
*/
-static void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
+static void identify_cpu(struct cpuinfo_x86 *c)
{
int i;
@@ -960,7 +960,7 @@ void __init identify_boot_cpu(void)
cpu_detect_tlb(&boot_cpu_data);
}
-void __cpuinit identify_secondary_cpu(struct cpuinfo_x86 *c)
+void identify_secondary_cpu(struct cpuinfo_x86 *c)
{
BUG_ON(c == &boot_cpu_data);
identify_cpu(c);
@@ -975,14 +975,14 @@ struct msr_range {
unsigned max;
};
-static const struct msr_range msr_range_array[] __cpuinitconst = {
+static const struct msr_range msr_range_array[] = {
{ 0x00000000, 0x00000418},
{ 0xc0000000, 0xc000040b},
{ 0xc0010000, 0xc0010142},
{ 0xc0011000, 0xc001103b},
};
-static void __cpuinit __print_cpu_msr(void)
+static void __print_cpu_msr(void)
{
unsigned index_min, index_max;
unsigned index;
@@ -1001,7 +1001,7 @@ static void __cpuinit __print_cpu_msr(void)
}
}
-static int show_msr __cpuinitdata;
+static int show_msr;
static __init int setup_show_msr(char *arg)
{
@@ -1022,7 +1022,7 @@ static __init int setup_noclflush(char *arg)
}
__setup("noclflush", setup_noclflush);
-void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
+void print_cpu_info(struct cpuinfo_x86 *c)
{
const char *vendor = NULL;
@@ -1051,7 +1051,7 @@ void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
print_cpu_msr(c);
}
-void __cpuinit print_cpu_msr(struct cpuinfo_x86 *c)
+void print_cpu_msr(struct cpuinfo_x86 *c)
{
if (c->cpu_index < show_msr)
__print_cpu_msr();
@@ -1216,7 +1216,7 @@ static void dbg_restore_debug_regs(void)
*/
#ifdef CONFIG_X86_64
-void __cpuinit cpu_init(void)
+void cpu_init(void)
{
struct orig_ist *oist;
struct task_struct *me;
@@ -1315,7 +1315,7 @@ void __cpuinit cpu_init(void)
#else
-void __cpuinit cpu_init(void)
+void cpu_init(void)
{
int cpu = smp_processor_id();
struct task_struct *curr = current;
diff --git a/arch/x86/kernel/cpu/cyrix.c b/arch/x86/kernel/cpu/cyrix.c
index 7582f475b163..d0969c75ab54 100644
--- a/arch/x86/kernel/cpu/cyrix.c
+++ b/arch/x86/kernel/cpu/cyrix.c
@@ -15,7 +15,7 @@
/*
* Read NSC/Cyrix DEVID registers (DIR) to get more detailed info. about the CPU
*/
-static void __cpuinit __do_cyrix_devid(unsigned char *dir0, unsigned char *dir1)
+static void __do_cyrix_devid(unsigned char *dir0, unsigned char *dir1)
{
unsigned char ccr2, ccr3;
@@ -44,7 +44,7 @@ static void __cpuinit __do_cyrix_devid(unsigned char *dir0, unsigned char *dir1)
}
}
-static void __cpuinit do_cyrix_devid(unsigned char *dir0, unsigned char *dir1)
+static void do_cyrix_devid(unsigned char *dir0, unsigned char *dir1)
{
unsigned long flags;
@@ -59,25 +59,25 @@ static void __cpuinit do_cyrix_devid(unsigned char *dir0, unsigned char *dir1)
* Actually since bugs.h doesn't even reference this perhaps someone should
* fix the documentation ???
*/
-static unsigned char Cx86_dir0_msb __cpuinitdata = 0;
+static unsigned char Cx86_dir0_msb = 0;
-static const char __cpuinitconst Cx86_model[][9] = {
+static const char Cx86_model[][9] = {
"Cx486", "Cx486", "5x86 ", "6x86", "MediaGX ", "6x86MX ",
"M II ", "Unknown"
};
-static const char __cpuinitconst Cx486_name[][5] = {
+static const char Cx486_name[][5] = {
"SLC", "DLC", "SLC2", "DLC2", "SRx", "DRx",
"SRx2", "DRx2"
};
-static const char __cpuinitconst Cx486S_name[][4] = {
+static const char Cx486S_name[][4] = {
"S", "S2", "Se", "S2e"
};
-static const char __cpuinitconst Cx486D_name[][4] = {
+static const char Cx486D_name[][4] = {
"DX", "DX2", "?", "?", "?", "DX4"
};
-static char Cx86_cb[] __cpuinitdata = "?.5x Core/Bus Clock";
-static const char __cpuinitconst cyrix_model_mult1[] = "12??43";
-static const char __cpuinitconst cyrix_model_mult2[] = "12233445";
+static char Cx86_cb[] = "?.5x Core/Bus Clock";
+static const char cyrix_model_mult1[] = "12??43";
+static const char cyrix_model_mult2[] = "12233445";
/*
* Reset the slow-loop (SLOP) bit on the 686(L) which is set by some old
@@ -87,7 +87,7 @@ static const char __cpuinitconst cyrix_model_mult2[] = "12233445";
* FIXME: our newer udelay uses the tsc. We don't need to frob with SLOP
*/
-static void __cpuinit check_cx686_slop(struct cpuinfo_x86 *c)
+static void check_cx686_slop(struct cpuinfo_x86 *c)
{
unsigned long flags;
@@ -112,7 +112,7 @@ static void __cpuinit check_cx686_slop(struct cpuinfo_x86 *c)
}
-static void __cpuinit set_cx86_reorder(void)
+static void set_cx86_reorder(void)
{
u8 ccr3;
@@ -127,7 +127,7 @@ static void __cpuinit set_cx86_reorder(void)
setCx86(CX86_CCR3, ccr3);
}
-static void __cpuinit set_cx86_memwb(void)
+static void set_cx86_memwb(void)
{
printk(KERN_INFO "Enable Memory-Write-back mode on Cyrix/NSC processor.\n");
@@ -143,7 +143,7 @@ static void __cpuinit set_cx86_memwb(void)
* Configure later MediaGX and/or Geode processor.
*/
-static void __cpuinit geode_configure(void)
+static void geode_configure(void)
{
unsigned long flags;
u8 ccr3;
@@ -166,7 +166,7 @@ static void __cpuinit geode_configure(void)
local_irq_restore(flags);
}
-static void __cpuinit early_init_cyrix(struct cpuinfo_x86 *c)
+static void early_init_cyrix(struct cpuinfo_x86 *c)
{
unsigned char dir0, dir0_msn, dir1 = 0;
@@ -185,7 +185,7 @@ static void __cpuinit early_init_cyrix(struct cpuinfo_x86 *c)
}
}
-static void __cpuinit init_cyrix(struct cpuinfo_x86 *c)
+static void init_cyrix(struct cpuinfo_x86 *c)
{
unsigned char dir0, dir0_msn, dir0_lsn, dir1 = 0;
char *buf = c->x86_model_id;
@@ -356,7 +356,7 @@ static void __cpuinit init_cyrix(struct cpuinfo_x86 *c)
/*
* Handle National Semiconductor branded processors
*/
-static void __cpuinit init_nsc(struct cpuinfo_x86 *c)
+static void init_nsc(struct cpuinfo_x86 *c)
{
/*
* There may be GX1 processors in the wild that are branded
@@ -405,7 +405,7 @@ static inline int test_cyrix_52div(void)
return (unsigned char) (test >> 8) == 0x02;
}
-static void __cpuinit cyrix_identify(struct cpuinfo_x86 *c)
+static void cyrix_identify(struct cpuinfo_x86 *c)
{
/* Detect Cyrix with disabled CPUID */
if (c->x86 == 4 && test_cyrix_52div()) {
@@ -441,7 +441,7 @@ static void __cpuinit cyrix_identify(struct cpuinfo_x86 *c)
}
}
-static const struct cpu_dev __cpuinitconst cyrix_cpu_dev = {
+static const struct cpu_dev cyrix_cpu_dev = {
.c_vendor = "Cyrix",
.c_ident = { "CyrixInstead" },
.c_early_init = early_init_cyrix,
@@ -452,7 +452,7 @@ static const struct cpu_dev __cpuinitconst cyrix_cpu_dev = {
cpu_dev_register(cyrix_cpu_dev);
-static const struct cpu_dev __cpuinitconst nsc_cpu_dev = {
+static const struct cpu_dev nsc_cpu_dev = {
.c_vendor = "NSC",
.c_ident = { "Geode by NSC" },
.c_init = init_nsc,
diff --git a/arch/x86/kernel/cpu/hypervisor.c b/arch/x86/kernel/cpu/hypervisor.c
index 1e7e84a02eba..87279212d318 100644
--- a/arch/x86/kernel/cpu/hypervisor.c
+++ b/arch/x86/kernel/cpu/hypervisor.c
@@ -60,7 +60,7 @@ detect_hypervisor_vendor(void)
}
}
-void __cpuinit init_hypervisor(struct cpuinfo_x86 *c)
+void init_hypervisor(struct cpuinfo_x86 *c)
{
if (x86_hyper && x86_hyper->set_cpu_features)
x86_hyper->set_cpu_features(c);
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
index 9b0c441c03f5..ec7299566f79 100644
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@ -26,7 +26,7 @@
#include <asm/apic.h>
#endif
-static void __cpuinit early_init_intel(struct cpuinfo_x86 *c)
+static void early_init_intel(struct cpuinfo_x86 *c)
{
u64 misc_enable;
@@ -163,7 +163,7 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c)
* This is called before we do cpu ident work
*/
-int __cpuinit ppro_with_ram_bug(void)
+int ppro_with_ram_bug(void)
{
/* Uses data from early_cpu_detect now */
if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
@@ -176,7 +176,7 @@ int __cpuinit ppro_with_ram_bug(void)
return 0;
}
-static void __cpuinit intel_smp_check(struct cpuinfo_x86 *c)
+static void intel_smp_check(struct cpuinfo_x86 *c)
{
/* calling is from identify_secondary_cpu() ? */
if (!c->cpu_index)
@@ -196,7 +196,7 @@ static void __cpuinit intel_smp_check(struct cpuinfo_x86 *c)
}
}
-static void __cpuinit intel_workarounds(struct cpuinfo_x86 *c)
+static void intel_workarounds(struct cpuinfo_x86 *c)
{
unsigned long lo, hi;
@@ -275,12 +275,12 @@ static void __cpuinit intel_workarounds(struct cpuinfo_x86 *c)
intel_smp_check(c);
}
#else
-static void __cpuinit intel_workarounds(struct cpuinfo_x86 *c)
+static void intel_workarounds(struct cpuinfo_x86 *c)
{
}
#endif
-static void __cpuinit srat_detect_node(struct cpuinfo_x86 *c)
+static void srat_detect_node(struct cpuinfo_x86 *c)
{
#ifdef CONFIG_NUMA
unsigned node;
@@ -300,7 +300,7 @@ static void __cpuinit srat_detect_node(struct cpuinfo_x86 *c)
/*
* find out the number of processor cores on the die
*/
-static int __cpuinit intel_num_cpu_cores(struct cpuinfo_x86 *c)
+static int intel_num_cpu_cores(struct cpuinfo_x86 *c)
{
unsigned int eax, ebx, ecx, edx;
@@ -315,7 +315,7 @@ static int __cpuinit intel_num_cpu_cores(struct cpuinfo_x86 *c)
return 1;
}
-static void __cpuinit detect_vmx_virtcap(struct cpuinfo_x86 *c)
+static void detect_vmx_virtcap(struct cpuinfo_x86 *c)
{
/* Intel VMX MSR indicated features */
#define X86_VMX_FEATURE_PROC_CTLS_TPR_SHADOW 0x00200000
@@ -353,7 +353,7 @@ static void __cpuinit detect_vmx_virtcap(struct cpuinfo_x86 *c)
}
}
-static void __cpuinit init_intel(struct cpuinfo_x86 *c)
+static void init_intel(struct cpuinfo_x86 *c)
{
unsigned int l2 = 0;
@@ -472,7 +472,7 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
}
#ifdef CONFIG_X86_32
-static unsigned int __cpuinit intel_size_cache(struct cpuinfo_x86 *c, unsigned int size)
+static unsigned int intel_size_cache(struct cpuinfo_x86 *c, unsigned int size)
{
/*
* Intel PIII Tualatin. This comes in two flavours.
@@ -506,7 +506,7 @@ static unsigned int __cpuinit intel_size_cache(struct cpuinfo_x86 *c, unsigned i
#define STLB_4K 0x41
-static const struct _tlb_table intel_tlb_table[] __cpuinitconst = {
+static const struct _tlb_table intel_tlb_table[] = {
{ 0x01, TLB_INST_4K, 32, " TLB_INST 4 KByte pages, 4-way set associative" },
{ 0x02, TLB_INST_4M, 2, " TLB_INST 4 MByte pages, full associative" },
{ 0x03, TLB_DATA_4K, 64, " TLB_DATA 4 KByte pages, 4-way set associative" },
@@ -536,7 +536,7 @@ static const struct _tlb_table intel_tlb_table[] __cpuinitconst = {
{ 0x00, 0, 0 }
};
-static void __cpuinit intel_tlb_lookup(const unsigned char desc)
+static void intel_tlb_lookup(const unsigned char desc)
{
unsigned char k;
if (desc == 0)
@@ -605,7 +605,7 @@ static void __cpuinit intel_tlb_lookup(const unsigned char desc)
}
}
-static void __cpuinit intel_tlb_flushall_shift_set(struct cpuinfo_x86 *c)
+static void intel_tlb_flushall_shift_set(struct cpuinfo_x86 *c)
{
switch ((c->x86 << 8) + c->x86_model) {
case 0x60f: /* original 65 nm celeron/pentium/core2/xeon, "Merom"/"Conroe" */
@@ -634,7 +634,7 @@ static void __cpuinit intel_tlb_flushall_shift_set(struct cpuinfo_x86 *c)
}
}
-static void __cpuinit intel_detect_tlb(struct cpuinfo_x86 *c)
+static void intel_detect_tlb(struct cpuinfo_x86 *c)
{
int i, j, n;
unsigned int regs[4];
@@ -661,7 +661,7 @@ static void __cpuinit intel_detect_tlb(struct cpuinfo_x86 *c)
intel_tlb_flushall_shift_set(c);
}
-static const struct cpu_dev __cpuinitconst intel_cpu_dev = {
+static const struct cpu_dev intel_cpu_dev = {
.c_vendor = "Intel",
.c_ident = { "GenuineIntel" },
#ifdef CONFIG_X86_32
diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c
index 8dc72dda66fe..1414c90feaba 100644
--- a/arch/x86/kernel/cpu/intel_cacheinfo.c
+++ b/arch/x86/kernel/cpu/intel_cacheinfo.c
@@ -37,7 +37,7 @@ struct _cache_table {
/* All the cache descriptor types we care about (no TLB or
trace cache entries) */
-static const struct _cache_table __cpuinitconst cache_table[] =
+static const struct _cache_table cache_table[] =
{
{ 0x06, LVL_1_INST, 8 }, /* 4-way set assoc, 32 byte line size */
{ 0x08, LVL_1_INST, 16 }, /* 4-way set assoc, 32 byte line size */
@@ -203,7 +203,7 @@ union l3_cache {
unsigned val;
};
-static const unsigned short __cpuinitconst assocs[] = {
+static const unsigned short assocs[] = {
[1] = 1,
[2] = 2,
[4] = 4,
@@ -217,10 +217,10 @@ static const unsigned short __cpuinitconst assocs[] = {
[0xf] = 0xffff /* fully associative - no way to show this currently */
};
-static const unsigned char __cpuinitconst levels[] = { 1, 1, 2, 3 };
-static const unsigned char __cpuinitconst types[] = { 1, 2, 3, 3 };
+static const unsigned char levels[] = { 1, 1, 2, 3 };
+static const unsigned char types[] = { 1, 2, 3, 3 };
-static void __cpuinit
+static void
amd_cpuid4(int leaf, union _cpuid4_leaf_eax *eax,
union _cpuid4_leaf_ebx *ebx,
union _cpuid4_leaf_ecx *ecx)
@@ -302,7 +302,7 @@ struct _cache_attr {
/*
* L3 cache descriptors
*/
-static void __cpuinit amd_calc_l3_indices(struct amd_northbridge *nb)
+static void amd_calc_l3_indices(struct amd_northbridge *nb)
{
struct amd_l3_cache *l3 = &nb->l3_cache;
unsigned int sc0, sc1, sc2, sc3;
@@ -325,7 +325,7 @@ static void __cpuinit amd_calc_l3_indices(struct amd_northbridge *nb)
l3->indices = (max(max3(sc0, sc1, sc2), sc3) << 10) - 1;
}
-static void __cpuinit amd_init_l3_cache(struct _cpuid4_info_regs *this_leaf, int index)
+static void amd_init_l3_cache(struct _cpuid4_info_regs *this_leaf, int index)
{
int node;
@@ -528,8 +528,7 @@ static struct _cache_attr subcaches =
#endif /* CONFIG_AMD_NB && CONFIG_SYSFS */
static int
-__cpuinit cpuid4_cache_lookup_regs(int index,
- struct _cpuid4_info_regs *this_leaf)
+cpuid4_cache_lookup_regs(int index, struct _cpuid4_info_regs *this_leaf)
{
union _cpuid4_leaf_eax eax;
union _cpuid4_leaf_ebx ebx;
@@ -560,7 +559,7 @@ __cpuinit cpuid4_cache_lookup_regs(int index,
return 0;
}
-static int __cpuinit find_num_cache_leaves(struct cpuinfo_x86 *c)
+static int find_num_cache_leaves(struct cpuinfo_x86 *c)
{
unsigned int eax, ebx, ecx, edx, op;
union _cpuid4_leaf_eax cache_eax;
@@ -580,7 +579,7 @@ static int __cpuinit find_num_cache_leaves(struct cpuinfo_x86 *c)
return i;
}
-void __cpuinit init_amd_cacheinfo(struct cpuinfo_x86 *c)
+void init_amd_cacheinfo(struct cpuinfo_x86 *c)
{
if (cpu_has_topoext) {
@@ -593,7 +592,7 @@ void __cpuinit init_amd_cacheinfo(struct cpuinfo_x86 *c)
}
}
-unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c)
+unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c)
{
/* Cache sizes */
unsigned int trace = 0, l1i = 0, l1d = 0, l2 = 0, l3 = 0;
@@ -744,7 +743,7 @@ static DEFINE_PER_CPU(struct _cpuid4_info *, ici_cpuid4_info);
#ifdef CONFIG_SMP
-static int __cpuinit cache_shared_amd_cpu_map_setup(unsigned int cpu, int index)
+static int cache_shared_amd_cpu_map_setup(unsigned int cpu, int index)
{
struct _cpuid4_info *this_leaf;
int i, sibling;
@@ -793,7 +792,7 @@ static int __cpuinit cache_shared_amd_cpu_map_setup(unsigned int cpu, int index)
return 1;
}
-static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index)
+static void cache_shared_cpu_map_setup(unsigned int cpu, int index)
{
struct _cpuid4_info *this_leaf, *sibling_leaf;
unsigned long num_threads_sharing;
@@ -828,7 +827,7 @@ static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index)
}
}
}
-static void __cpuinit cache_remove_shared_cpu_map(unsigned int cpu, int index)
+static void cache_remove_shared_cpu_map(unsigned int cpu, int index)
{
struct _cpuid4_info *this_leaf, *sibling_leaf;
int sibling;
@@ -841,16 +840,16 @@ static void __cpuinit cache_remove_shared_cpu_map(unsigned int cpu, int index)
}
}
#else
-static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index)
+static void cache_shared_cpu_map_setup(unsigned int cpu, int index)
{
}
-static void __cpuinit cache_remove_shared_cpu_map(unsigned int cpu, int index)
+static void cache_remove_shared_cpu_map(unsigned int cpu, int index)
{
}
#endif
-static void __cpuinit free_cache_attributes(unsigned int cpu)
+static void free_cache_attributes(unsigned int cpu)
{
int i;
@@ -861,7 +860,7 @@ static void __cpuinit free_cache_attributes(unsigned int cpu)
per_cpu(ici_cpuid4_info, cpu) = NULL;
}
-static void __cpuinit get_cpu_leaves(void *_retval)
+static void get_cpu_leaves(void *_retval)
{
int j, *retval = _retval, cpu = smp_processor_id();
@@ -881,7 +880,7 @@ static void __cpuinit get_cpu_leaves(void *_retval)
}
}
-static int __cpuinit detect_cache_attributes(unsigned int cpu)
+static int detect_cache_attributes(unsigned int cpu)
{
int retval;
@@ -1015,7 +1014,7 @@ static struct attribute *default_attrs[] = {
};
#ifdef CONFIG_AMD_NB
-static struct attribute ** __cpuinit amd_l3_attrs(void)
+static struct attribute **amd_l3_attrs(void)
{
static struct attribute **attrs;
int n;
@@ -1091,7 +1090,7 @@ static struct kobj_type ktype_percpu_entry = {
.sysfs_ops = &sysfs_ops,
};
-static void __cpuinit cpuid4_cache_sysfs_exit(unsigned int cpu)
+static void cpuid4_cache_sysfs_exit(unsigned int cpu)
{
kfree(per_cpu(ici_cache_kobject, cpu));
kfree(per_cpu(ici_index_kobject, cpu));
@@ -1100,7 +1099,7 @@ static void __cpuinit cpuid4_cache_sysfs_exit(unsigned int cpu)
free_cache_attributes(cpu);
}
-static int __cpuinit cpuid4_cache_sysfs_init(unsigned int cpu)
+static int cpuid4_cache_sysfs_init(unsigned int cpu)
{
int err;
@@ -1132,7 +1131,7 @@ err_out:
static DECLARE_BITMAP(cache_dev_map, NR_CPUS);
/* Add/Remove cache interface for CPU device */
-static int __cpuinit cache_add_dev(struct device *dev)
+static int cache_add_dev(struct device *dev)
{
unsigned int cpu = dev->id;
unsigned long i, j;
@@ -1183,7 +1182,7 @@ static int __cpuinit cache_add_dev(struct device *dev)
return 0;
}
-static void __cpuinit cache_remove_dev(struct device *dev)
+static void cache_remove_dev(struct device *dev)
{
unsigned int cpu = dev->id;
unsigned long i;
@@ -1200,8 +1199,8 @@ static void __cpuinit cache_remove_dev(struct device *dev)
cpuid4_cache_sysfs_exit(cpu);
}
-static int __cpuinit cacheinfo_cpu_callback(struct notifier_block *nfb,
- unsigned long action, void *hcpu)
+static int cacheinfo_cpu_callback(struct notifier_block *nfb,
+ unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long)hcpu;
struct device *dev;
@@ -1220,7 +1219,7 @@ static int __cpuinit cacheinfo_cpu_callback(struct notifier_block *nfb,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata cacheinfo_cpu_notifier = {
+static struct notifier_block cacheinfo_cpu_notifier = {
.notifier_call = cacheinfo_cpu_callback,
};
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
index bf49cdbb010f..87a65c939bcd 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -1363,7 +1363,7 @@ int mce_notify_irq(void)
}
EXPORT_SYMBOL_GPL(mce_notify_irq);
-static int __cpuinit __mcheck_cpu_mce_banks_init(void)
+static int __mcheck_cpu_mce_banks_init(void)
{
int i;
u8 num_banks = mca_cfg.banks;
@@ -1384,7 +1384,7 @@ static int __cpuinit __mcheck_cpu_mce_banks_init(void)
/*
* Initialize Machine Checks for a CPU.
*/
-static int __cpuinit __mcheck_cpu_cap_init(void)
+static int __mcheck_cpu_cap_init(void)
{
unsigned b;
u64 cap;
@@ -1483,7 +1483,7 @@ static void quirk_sandybridge_ifu(int bank, struct mce *m, struct pt_regs *regs)
}
/* Add per CPU specific workarounds here */
-static int __cpuinit __mcheck_cpu_apply_quirks(struct cpuinfo_x86 *c)
+static int __mcheck_cpu_apply_quirks(struct cpuinfo_x86 *c)
{
struct mca_config *cfg = &mca_cfg;
@@ -1593,7 +1593,7 @@ static int __cpuinit __mcheck_cpu_apply_quirks(struct cpuinfo_x86 *c)
return 0;
}
-static int __cpuinit __mcheck_cpu_ancient_init(struct cpuinfo_x86 *c)
+static int __mcheck_cpu_ancient_init(struct cpuinfo_x86 *c)
{
if (c->x86 != 5)
return 0;
@@ -1664,7 +1664,7 @@ void (*machine_check_vector)(struct pt_regs *, long error_code) =
* Called for each booted CPU to set up machine checks.
* Must be called with preempt off:
*/
-void __cpuinit mcheck_cpu_init(struct cpuinfo_x86 *c)
+void mcheck_cpu_init(struct cpuinfo_x86 *c)
{
if (mca_cfg.disabled)
return;
@@ -2082,7 +2082,6 @@ static struct bus_type mce_subsys = {
DEFINE_PER_CPU(struct device *, mce_device);
-__cpuinitdata
void (*threshold_cpu_callback)(unsigned long action, unsigned int cpu);
static inline struct mce_bank *attr_to_bank(struct device_attribute *attr)
@@ -2228,7 +2227,7 @@ static void mce_device_release(struct device *dev)
}
/* Per cpu device init. All of the cpus still share the same ctrl bank: */
-static __cpuinit int mce_device_create(unsigned int cpu)
+static int mce_device_create(unsigned int cpu)
{
struct device *dev;
int err;
@@ -2274,7 +2273,7 @@ error:
return err;
}
-static __cpuinit void mce_device_remove(unsigned int cpu)
+static void mce_device_remove(unsigned int cpu)
{
struct device *dev = per_cpu(mce_device, cpu);
int i;
@@ -2294,7 +2293,7 @@ static __cpuinit void mce_device_remove(unsigned int cpu)
}
/* Make sure there are no machine checks on offlined CPUs. */
-static void __cpuinit mce_disable_cpu(void *h)
+static void mce_disable_cpu(void *h)
{
unsigned long action = *(unsigned long *)h;
int i;
@@ -2312,7 +2311,7 @@ static void __cpuinit mce_disable_cpu(void *h)
}
}
-static void __cpuinit mce_reenable_cpu(void *h)
+static void mce_reenable_cpu(void *h)
{
unsigned long action = *(unsigned long *)h;
int i;
@@ -2331,7 +2330,7 @@ static void __cpuinit mce_reenable_cpu(void *h)
}
/* Get notified when a cpu comes on/off. Be hotplug friendly. */
-static int __cpuinit
+static int
mce_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long)hcpu;
@@ -2367,7 +2366,7 @@ mce_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
return NOTIFY_OK;
}
-static struct notifier_block mce_cpu_notifier __cpuinitdata = {
+static struct notifier_block mce_cpu_notifier = {
.notifier_call = mce_cpu_callback,
};
diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c
index 9cb52767999a..603df4f74640 100644
--- a/arch/x86/kernel/cpu/mcheck/mce_amd.c
+++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c
@@ -458,10 +458,8 @@ static struct kobj_type threshold_ktype = {
.default_attrs = default_attrs,
};
-static __cpuinit int allocate_threshold_blocks(unsigned int cpu,
- unsigned int bank,
- unsigned int block,
- u32 address)
+static int allocate_threshold_blocks(unsigned int cpu, unsigned int bank,
+ unsigned int block, u32 address)
{
struct threshold_block *b = NULL;
u32 low, high;
@@ -543,7 +541,7 @@ out_free:
return err;
}
-static __cpuinit int __threshold_add_blocks(struct threshold_bank *b)
+static int __threshold_add_blocks(struct threshold_bank *b)
{
struct list_head *head = &b->blocks->miscj;
struct threshold_block *pos = NULL;
@@ -567,7 +565,7 @@ static __cpuinit int __threshold_add_blocks(struct threshold_bank *b)
return err;
}
-static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank)
+static int threshold_create_bank(unsigned int cpu, unsigned int bank)
{
struct device *dev = per_cpu(mce_device, cpu);
struct amd_northbridge *nb = NULL;
@@ -632,7 +630,7 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank)
}
/* create dir/files for all valid threshold banks */
-static __cpuinit int threshold_create_device(unsigned int cpu)
+static int threshold_create_device(unsigned int cpu)
{
unsigned int bank;
struct threshold_bank **bp;
@@ -736,7 +734,7 @@ static void threshold_remove_device(unsigned int cpu)
}
/* get notified when a cpu comes on/off */
-static void __cpuinit
+static void
amd_64_threshold_cpu_callback(unsigned long action, unsigned int cpu)
{
switch (action) {
diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c
index 41e8e00a6637..3eec7de76efb 100644
--- a/arch/x86/kernel/cpu/mcheck/therm_throt.c
+++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c
@@ -240,8 +240,7 @@ __setup("int_pln_enable", int_pln_enable_setup);
#ifdef CONFIG_SYSFS
/* Add/Remove thermal_throttle interface for CPU device: */
-static __cpuinit int thermal_throttle_add_dev(struct device *dev,
- unsigned int cpu)
+static int thermal_throttle_add_dev(struct device *dev, unsigned int cpu)
{
int err;
struct cpuinfo_x86 *c = &cpu_data(cpu);
@@ -267,7 +266,7 @@ static __cpuinit int thermal_throttle_add_dev(struct device *dev,
return err;
}
-static __cpuinit void thermal_throttle_remove_dev(struct device *dev)
+static void thermal_throttle_remove_dev(struct device *dev)
{
sysfs_remove_group(&dev->kobj, &thermal_attr_group);
}
@@ -276,7 +275,7 @@ static __cpuinit void thermal_throttle_remove_dev(struct device *dev)
static DEFINE_MUTEX(therm_cpu_lock);
/* Get notified when a cpu comes on/off. Be hotplug friendly. */
-static __cpuinit int
+static int
thermal_throttle_cpu_callback(struct notifier_block *nfb,
unsigned long action,
void *hcpu)
@@ -307,7 +306,7 @@ thermal_throttle_cpu_callback(struct notifier_block *nfb,
return notifier_from_errno(err);
}
-static struct notifier_block thermal_throttle_cpu_notifier __cpuinitdata =
+static struct notifier_block thermal_throttle_cpu_notifier =
{
.notifier_call = thermal_throttle_cpu_callback,
};
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
index 9e581c5cf6d0..a7c7305030cc 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -1295,7 +1295,7 @@ perf_event_nmi_handler(unsigned int cmd, struct pt_regs *regs)
struct event_constraint emptyconstraint;
struct event_constraint unconstrained;
-static int __cpuinit
+static int
x86_pmu_notifier(struct notifier_block *self, unsigned long action, void *hcpu)
{
unsigned int cpu = (long)hcpu;
diff --git a/arch/x86/kernel/cpu/perf_event_amd_ibs.c b/arch/x86/kernel/cpu/perf_event_amd_ibs.c
index 5f0581e713c2..e09f0bfb7b8f 100644
--- a/arch/x86/kernel/cpu/perf_event_amd_ibs.c
+++ b/arch/x86/kernel/cpu/perf_event_amd_ibs.c
@@ -851,7 +851,7 @@ static void clear_APIC_ibs(void *dummy)
setup_APIC_eilvt(offset, 0, APIC_EILVT_MSG_FIX, 1);
}
-static int __cpuinit
+static int
perf_ibs_cpu_notifier(struct notifier_block *self, unsigned long action, void *hcpu)
{
switch (action & ~CPU_TASKS_FROZEN) {
diff --git a/arch/x86/kernel/cpu/perf_event_amd_uncore.c b/arch/x86/kernel/cpu/perf_event_amd_uncore.c
index c0c661adf03e..754291adec33 100644
--- a/arch/x86/kernel/cpu/perf_event_amd_uncore.c
+++ b/arch/x86/kernel/cpu/perf_event_amd_uncore.c
@@ -288,13 +288,13 @@ static struct pmu amd_l2_pmu = {
.read = amd_uncore_read,
};
-static struct amd_uncore * __cpuinit amd_uncore_alloc(unsigned int cpu)
+static struct amd_uncore *amd_uncore_alloc(unsigned int cpu)
{
return kzalloc_node(sizeof(struct amd_uncore), GFP_KERNEL,
cpu_to_node(cpu));
}
-static void __cpuinit amd_uncore_cpu_up_prepare(unsigned int cpu)
+static void amd_uncore_cpu_up_prepare(unsigned int cpu)
{
struct amd_uncore *uncore;
@@ -322,8 +322,8 @@ static void __cpuinit amd_uncore_cpu_up_prepare(unsigned int cpu)
}
static struct amd_uncore *
-__cpuinit amd_uncore_find_online_sibling(struct amd_uncore *this,
- struct amd_uncore * __percpu *uncores)
+amd_uncore_find_online_sibling(struct amd_uncore *this,
+ struct amd_uncore * __percpu *uncores)
{
unsigned int cpu;
struct amd_uncore *that;
@@ -348,7 +348,7 @@ __cpuinit amd_uncore_find_online_sibling(struct amd_uncore *this,
return this;
}
-static void __cpuinit amd_uncore_cpu_starting(unsigned int cpu)
+static void amd_uncore_cpu_starting(unsigned int cpu)
{
unsigned int eax, ebx, ecx, edx;
struct amd_uncore *uncore;
@@ -376,8 +376,8 @@ static void __cpuinit amd_uncore_cpu_starting(unsigned int cpu)
}
}
-static void __cpuinit uncore_online(unsigned int cpu,
- struct amd_uncore * __percpu *uncores)
+static void uncore_online(unsigned int cpu,
+ struct amd_uncore * __percpu *uncores)
{
struct amd_uncore *uncore = *per_cpu_ptr(uncores, cpu);
@@ -388,7 +388,7 @@ static void __cpuinit uncore_online(unsigned int cpu,
cpumask_set_cpu(cpu, uncore->active_mask);
}
-static void __cpuinit amd_uncore_cpu_online(unsigned int cpu)
+static void amd_uncore_cpu_online(unsigned int cpu)
{
if (amd_uncore_nb)
uncore_online(cpu, amd_uncore_nb);
@@ -397,8 +397,8 @@ static void __cpuinit amd_uncore_cpu_online(unsigned int cpu)
uncore_online(cpu, amd_uncore_l2);
}
-static void __cpuinit uncore_down_prepare(unsigned int cpu,
- struct amd_uncore * __percpu *uncores)
+static void uncore_down_prepare(unsigned int cpu,
+ struct amd_uncore * __percpu *uncores)
{
unsigned int i;
struct amd_uncore *this = *per_cpu_ptr(uncores, cpu);
@@ -423,7 +423,7 @@ static void __cpuinit uncore_down_prepare(unsigned int cpu,
}
}
-static void __cpuinit amd_uncore_cpu_down_prepare(unsigned int cpu)
+static void amd_uncore_cpu_down_prepare(unsigned int cpu)
{
if (amd_uncore_nb)
uncore_down_prepare(cpu, amd_uncore_nb);
@@ -432,8 +432,7 @@ static void __cpuinit amd_uncore_cpu_down_prepare(unsigned int cpu)
uncore_down_prepare(cpu, amd_uncore_l2);
}
-static void __cpuinit uncore_dead(unsigned int cpu,
- struct amd_uncore * __percpu *uncores)
+static void uncore_dead(unsigned int cpu, struct amd_uncore * __percpu *uncores)
{
struct amd_uncore *uncore = *per_cpu_ptr(uncores, cpu);
@@ -445,7 +444,7 @@ static void __cpuinit uncore_dead(unsigned int cpu,
*per_cpu_ptr(amd_uncore_nb, cpu) = NULL;
}
-static void __cpuinit amd_uncore_cpu_dead(unsigned int cpu)
+static void amd_uncore_cpu_dead(unsigned int cpu)
{
if (amd_uncore_nb)
uncore_dead(cpu, amd_uncore_nb);
@@ -454,7 +453,7 @@ static void __cpuinit amd_uncore_cpu_dead(unsigned int cpu)
uncore_dead(cpu, amd_uncore_l2);
}
-static int __cpuinit
+static int
amd_uncore_cpu_notifier(struct notifier_block *self, unsigned long action,
void *hcpu)
{
@@ -489,7 +488,7 @@ amd_uncore_cpu_notifier(struct notifier_block *self, unsigned long action,
return NOTIFY_OK;
}
-static struct notifier_block amd_uncore_cpu_notifier_block __cpuinitdata = {
+static struct notifier_block amd_uncore_cpu_notifier_block = {
.notifier_call = amd_uncore_cpu_notifier,
.priority = CPU_PRI_PERF + 1,
};
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
index 9dd99751ccf9..cad791dbde95 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
@@ -3297,7 +3297,7 @@ static void __init uncore_pci_exit(void)
/* CPU hot plug/unplug are serialized by cpu_add_remove_lock mutex */
static LIST_HEAD(boxes_to_free);
-static void __cpuinit uncore_kfree_boxes(void)
+static void uncore_kfree_boxes(void)
{
struct intel_uncore_box *box;
@@ -3309,7 +3309,7 @@ static void __cpuinit uncore_kfree_boxes(void)
}
}
-static void __cpuinit uncore_cpu_dying(int cpu)
+static void uncore_cpu_dying(int cpu)
{
struct intel_uncore_type *type;
struct intel_uncore_pmu *pmu;
@@ -3328,7 +3328,7 @@ static void __cpuinit uncore_cpu_dying(int cpu)
}
}
-static int __cpuinit uncore_cpu_starting(int cpu)
+static int uncore_cpu_starting(int cpu)
{
struct intel_uncore_type *type;
struct intel_uncore_pmu *pmu;
@@ -3371,7 +3371,7 @@ static int __cpuinit uncore_cpu_starting(int cpu)
return 0;
}
-static int __cpuinit uncore_cpu_prepare(int cpu, int phys_id)
+static int uncore_cpu_prepare(int cpu, int phys_id)
{
struct intel_uncore_type *type;
struct intel_uncore_pmu *pmu;
@@ -3397,7 +3397,7 @@ static int __cpuinit uncore_cpu_prepare(int cpu, int phys_id)
return 0;
}
-static void __cpuinit
+static void
uncore_change_context(struct intel_uncore_type **uncores, int old_cpu, int new_cpu)
{
struct intel_uncore_type *type;
@@ -3435,7 +3435,7 @@ uncore_change_context(struct intel_uncore_type **uncores, int old_cpu, int new_c
}
}
-static void __cpuinit uncore_event_exit_cpu(int cpu)
+static void uncore_event_exit_cpu(int cpu)
{
int i, phys_id, target;
@@ -3463,7 +3463,7 @@ static void __cpuinit uncore_event_exit_cpu(int cpu)
uncore_change_context(pci_uncores, cpu, target);
}
-static void __cpuinit uncore_event_init_cpu(int cpu)
+static void uncore_event_init_cpu(int cpu)
{
int i, phys_id;
@@ -3479,8 +3479,8 @@ static void __cpuinit uncore_event_init_cpu(int cpu)
uncore_change_context(pci_uncores, -1, cpu);
}
-static int
- __cpuinit uncore_cpu_notifier(struct notifier_block *self, unsigned long action, void *hcpu)
+static int uncore_cpu_notifier(struct notifier_block *self,
+ unsigned long action, void *hcpu)
{
unsigned int cpu = (long)hcpu;
@@ -3520,7 +3520,7 @@ static int
return NOTIFY_OK;
}
-static struct notifier_block uncore_cpu_nb __cpuinitdata = {
+static struct notifier_block uncore_cpu_nb = {
.notifier_call = uncore_cpu_notifier,
/*
* to migrate uncore events, our notifier should be executed
diff --git a/arch/x86/kernel/cpu/rdrand.c b/arch/x86/kernel/cpu/rdrand.c
index feca286c2bb4..88db010845cb 100644
--- a/arch/x86/kernel/cpu/rdrand.c
+++ b/arch/x86/kernel/cpu/rdrand.c
@@ -52,7 +52,7 @@ static inline int rdrand_long(unsigned long *v)
*/
#define RESEED_LOOP ((512*128)/sizeof(unsigned long))
-void __cpuinit x86_init_rdrand(struct cpuinfo_x86 *c)
+void x86_init_rdrand(struct cpuinfo_x86 *c)
{
#ifdef CONFIG_ARCH_RANDOM
unsigned long tmp;
diff --git a/arch/x86/kernel/cpu/scattered.c b/arch/x86/kernel/cpu/scattered.c
index d92b5dad15dd..f2cc63e9cf08 100644
--- a/arch/x86/kernel/cpu/scattered.c
+++ b/arch/x86/kernel/cpu/scattered.c
@@ -24,13 +24,13 @@ enum cpuid_regs {
CR_EBX
};
-void __cpuinit init_scattered_cpuid_features(struct cpuinfo_x86 *c)
+void init_scattered_cpuid_features(struct cpuinfo_x86 *c)
{
u32 max_level;
u32 regs[4];
const struct cpuid_bit *cb;
- static const struct cpuid_bit __cpuinitconst cpuid_bits[] = {
+ static const struct cpuid_bit cpuid_bits[] = {
{ X86_FEATURE_DTHERM, CR_EAX, 0, 0x00000006, 0 },
{ X86_FEATURE_IDA, CR_EAX, 1, 0x00000006, 0 },
{ X86_FEATURE_ARAT, CR_EAX, 2, 0x00000006, 0 },
diff --git a/arch/x86/kernel/cpu/topology.c b/arch/x86/kernel/cpu/topology.c
index 4397e987a1cf..4c60eaf0571c 100644
--- a/arch/x86/kernel/cpu/topology.c
+++ b/arch/x86/kernel/cpu/topology.c
@@ -26,7 +26,7 @@
* exists, use it for populating initial_apicid and cpu topology
* detection.
*/
-void __cpuinit detect_extended_topology(struct cpuinfo_x86 *c)
+void detect_extended_topology(struct cpuinfo_x86 *c)
{
#ifdef CONFIG_SMP
unsigned int eax, ebx, ecx, edx, sub_index;
diff --git a/arch/x86/kernel/cpu/transmeta.c b/arch/x86/kernel/cpu/transmeta.c
index 28000743bbb0..aa0430d69b90 100644
--- a/arch/x86/kernel/cpu/transmeta.c
+++ b/arch/x86/kernel/cpu/transmeta.c
@@ -5,7 +5,7 @@
#include <asm/msr.h>
#include "cpu.h"
-static void __cpuinit early_init_transmeta(struct cpuinfo_x86 *c)
+static void early_init_transmeta(struct cpuinfo_x86 *c)
{
u32 xlvl;
@@ -17,7 +17,7 @@ static void __cpuinit early_init_transmeta(struct cpuinfo_x86 *c)
}
}
-static void __cpuinit init_transmeta(struct cpuinfo_x86 *c)
+static void init_transmeta(struct cpuinfo_x86 *c)
{
unsigned int cap_mask, uk, max, dummy;
unsigned int cms_rev1, cms_rev2;
@@ -98,7 +98,7 @@ static void __cpuinit init_transmeta(struct cpuinfo_x86 *c)
#endif
}
-static const struct cpu_dev __cpuinitconst transmeta_cpu_dev = {
+static const struct cpu_dev transmeta_cpu_dev = {
.c_vendor = "Transmeta",
.c_ident = { "GenuineTMx86", "TransmetaCPU" },
.c_early_init = early_init_transmeta,
diff --git a/arch/x86/kernel/cpu/umc.c b/arch/x86/kernel/cpu/umc.c
index fd2c37bf7acb..202759a14121 100644
--- a/arch/x86/kernel/cpu/umc.c
+++ b/arch/x86/kernel/cpu/umc.c
@@ -8,7 +8,7 @@
* so no special init takes place.
*/
-static const struct cpu_dev __cpuinitconst umc_cpu_dev = {
+static const struct cpu_dev umc_cpu_dev = {
.c_vendor = "UMC",
.c_ident = { "UMC UMC UMC" },
.c_models = {
diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c
index 03a36321ec54..7076878404ec 100644
--- a/arch/x86/kernel/cpu/vmware.c
+++ b/arch/x86/kernel/cpu/vmware.c
@@ -122,7 +122,7 @@ static bool __init vmware_platform(void)
* so that the kernel could just trust the hypervisor with providing a
* reliable virtual TSC that is suitable for timekeeping.
*/
-static void __cpuinit vmware_set_cpu_features(struct cpuinfo_x86 *c)
+static void vmware_set_cpu_features(struct cpuinfo_x86 *c)
{
set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC);
set_cpu_cap(c, X86_FEATURE_TSC_RELIABLE);
diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c
index 1e4dbcfe6d31..7d9481c743f8 100644
--- a/arch/x86/kernel/cpuid.c
+++ b/arch/x86/kernel/cpuid.c
@@ -137,7 +137,7 @@ static const struct file_operations cpuid_fops = {
.open = cpuid_open,
};
-static __cpuinit int cpuid_device_create(int cpu)
+static int cpuid_device_create(int cpu)
{
struct device *dev;
@@ -151,9 +151,8 @@ static void cpuid_device_destroy(int cpu)
device_destroy(cpuid_class, MKDEV(CPUID_MAJOR, cpu));
}
-static int __cpuinit cpuid_class_cpu_callback(struct notifier_block *nfb,
- unsigned long action,
- void *hcpu)
+static int cpuid_class_cpu_callback(struct notifier_block *nfb,
+ unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long)hcpu;
int err = 0;
diff --git a/arch/x86/kernel/devicetree.c b/arch/x86/kernel/devicetree.c
index 4934890e4db2..69eb2fa25494 100644
--- a/arch/x86/kernel/devicetree.c
+++ b/arch/x86/kernel/devicetree.c
@@ -133,7 +133,7 @@ static void x86_of_pci_irq_disable(struct pci_dev *dev)
{
}
-void __cpuinit x86_of_pci_init(void)
+void x86_of_pci_init(void)
{
pcibios_enable_irq = x86_of_pci_irq_enable;
pcibios_disable_irq = x86_of_pci_irq_disable;
diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
index e65ddc62e113..5dd87a89f011 100644
--- a/arch/x86/kernel/head_32.S
+++ b/arch/x86/kernel/head_32.S
@@ -292,7 +292,6 @@ ENDPROC(start_cpu0)
* If cpu hotplug is not supported then this code can go in init section
* which will be freed later
*/
-__CPUINIT
ENTRY(startup_32_smp)
cld
movl $(__BOOT_DS),%eax
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
index 5e4d8a8a5c40..e1aabdb314c8 100644
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -512,21 +512,6 @@ ENTRY(phys_base)
#include "../../x86/xen/xen-head.S"
- .section .bss, "aw", @nobits
- .align L1_CACHE_BYTES
-ENTRY(idt_table)
- .skip IDT_ENTRIES * 16
-
- .align L1_CACHE_BYTES
-ENTRY(debug_idt_table)
- .skip IDT_ENTRIES * 16
-
-#ifdef CONFIG_TRACING
- .align L1_CACHE_BYTES
-ENTRY(trace_idt_table)
- .skip IDT_ENTRIES * 16
-#endif
-
__PAGE_ALIGNED_BSS
NEXT_PAGE(empty_zero_page)
.skip PAGE_SIZE
diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c
index b627746f6b1a..202d24f0f7e7 100644
--- a/arch/x86/kernel/i387.c
+++ b/arch/x86/kernel/i387.c
@@ -108,9 +108,9 @@ EXPORT_SYMBOL(unlazy_fpu);
unsigned int mxcsr_feature_mask __read_mostly = 0xffffffffu;
unsigned int xstate_size;
EXPORT_SYMBOL_GPL(xstate_size);
-static struct i387_fxsave_struct fx_scratch __cpuinitdata;
+static struct i387_fxsave_struct fx_scratch;
-static void __cpuinit mxcsr_feature_mask_init(void)
+static void mxcsr_feature_mask_init(void)
{
unsigned long mask = 0;
@@ -124,7 +124,7 @@ static void __cpuinit mxcsr_feature_mask_init(void)
mxcsr_feature_mask &= mask;
}
-static void __cpuinit init_thread_xstate(void)
+static void init_thread_xstate(void)
{
/*
* Note that xstate_size might be overwriten later during
@@ -153,7 +153,7 @@ static void __cpuinit init_thread_xstate(void)
* into all processes.
*/
-void __cpuinit fpu_init(void)
+void fpu_init(void)
{
unsigned long cr0;
unsigned long cr4_mask = 0;
@@ -608,7 +608,7 @@ static int __init no_387(char *s)
__setup("no387", no_387);
-void __cpuinit fpu_detect(struct cpuinfo_x86 *c)
+void fpu_detect(struct cpuinfo_x86 *c)
{
unsigned long cr0;
u16 fsw, fcw;
diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c
index 344faf8d0d62..4186755f1d7c 100644
--- a/arch/x86/kernel/irq_32.c
+++ b/arch/x86/kernel/irq_32.c
@@ -119,7 +119,7 @@ execute_on_irq_stack(int overflow, struct irq_desc *desc, int irq)
/*
* allocate per-cpu stacks for hardirq and for softirq processing
*/
-void __cpuinit irq_ctx_init(int cpu)
+void irq_ctx_init(int cpu)
{
union irq_ctx *irqctx;
diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index cd6d9a5a42f6..a96d32cc55b8 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -320,7 +320,7 @@ static void kvm_guest_apic_eoi_write(u32 reg, u32 val)
apic_write(APIC_EOI, APIC_EOI_ACK);
}
-void __cpuinit kvm_guest_cpu_init(void)
+void kvm_guest_cpu_init(void)
{
if (!kvm_para_available())
return;
@@ -421,7 +421,7 @@ static void __init kvm_smp_prepare_boot_cpu(void)
native_smp_prepare_boot_cpu();
}
-static void __cpuinit kvm_guest_cpu_online(void *dummy)
+static void kvm_guest_cpu_online(void *dummy)
{
kvm_guest_cpu_init();
}
@@ -435,8 +435,8 @@ static void kvm_guest_cpu_offline(void *dummy)
apf_task_wake_all();
}
-static int __cpuinit kvm_cpu_notify(struct notifier_block *self,
- unsigned long action, void *hcpu)
+static int kvm_cpu_notify(struct notifier_block *self, unsigned long action,
+ void *hcpu)
{
int cpu = (unsigned long)hcpu;
switch (action) {
@@ -455,7 +455,7 @@ static int __cpuinit kvm_cpu_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata kvm_cpu_notifier = {
+static struct notifier_block kvm_cpu_notifier = {
.notifier_call = kvm_cpu_notify,
};
#endif
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index 1f354f4b602b..1570e0741344 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -182,7 +182,7 @@ static void kvm_restore_sched_clock_state(void)
}
#ifdef CONFIG_X86_LOCAL_APIC
-static void __cpuinit kvm_setup_secondary_clock(void)
+static void kvm_setup_secondary_clock(void)
{
/*
* Now that the first cpu already had this clocksource initialized,
diff --git a/arch/x86/kernel/microcode_amd_early.c b/arch/x86/kernel/microcode_amd_early.c
index 1ac6e9aee766..1d14ffee5749 100644
--- a/arch/x86/kernel/microcode_amd_early.c
+++ b/arch/x86/kernel/microcode_amd_early.c
@@ -82,7 +82,7 @@ static struct cpio_data __init find_ucode_in_initrd(void)
* load_microcode_amd() to save equivalent cpu table and microcode patches in
* kernel heap memory.
*/
-static void __cpuinit apply_ucode_in_initrd(void *ucode, size_t size)
+static void apply_ucode_in_initrd(void *ucode, size_t size)
{
struct equiv_cpu_entry *eq;
u32 *header;
@@ -206,7 +206,7 @@ u8 amd_bsp_mpb[MPB_MAX_SIZE];
* save_microcode_in_initrd_amd() BSP's patch is copied to amd_bsp_mpb, which
* is used upon resume from suspend.
*/
-void __cpuinit load_ucode_amd_ap(void)
+void load_ucode_amd_ap(void)
{
struct microcode_amd *mc;
unsigned long *initrd;
@@ -238,7 +238,7 @@ static void __init collect_cpu_sig_on_bsp(void *arg)
uci->cpu_sig.sig = cpuid_eax(0x00000001);
}
#else
-static void __cpuinit collect_cpu_info_amd_early(struct cpuinfo_x86 *c,
+static void collect_cpu_info_amd_early(struct cpuinfo_x86 *c,
struct ucode_cpu_info *uci)
{
u32 rev, eax;
@@ -252,7 +252,7 @@ static void __cpuinit collect_cpu_info_amd_early(struct cpuinfo_x86 *c,
c->x86 = ((eax >> 8) & 0xf) + ((eax >> 20) & 0xff);
}
-void __cpuinit load_ucode_amd_ap(void)
+void load_ucode_amd_ap(void)
{
unsigned int cpu = smp_processor_id();
diff --git a/arch/x86/kernel/microcode_core.c b/arch/x86/kernel/microcode_core.c
index 22db92bbdf1a..15c987698b0f 100644
--- a/arch/x86/kernel/microcode_core.c
+++ b/arch/x86/kernel/microcode_core.c
@@ -468,7 +468,7 @@ static struct syscore_ops mc_syscore_ops = {
.resume = mc_bp_resume,
};
-static __cpuinit int
+static int
mc_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long)hcpu;
diff --git a/arch/x86/kernel/microcode_core_early.c b/arch/x86/kernel/microcode_core_early.c
index 86119f63db0c..be7f8514f577 100644
--- a/arch/x86/kernel/microcode_core_early.c
+++ b/arch/x86/kernel/microcode_core_early.c
@@ -41,7 +41,7 @@
*
* x86_vendor() gets vendor information directly through cpuid.
*/
-static int __cpuinit x86_vendor(void)
+static int x86_vendor(void)
{
u32 eax = 0x00000000;
u32 ebx, ecx = 0, edx;
@@ -57,7 +57,7 @@ static int __cpuinit x86_vendor(void)
return X86_VENDOR_UNKNOWN;
}
-static int __cpuinit x86_family(void)
+static int x86_family(void)
{
u32 eax = 0x00000001;
u32 ebx, ecx = 0, edx;
@@ -96,7 +96,7 @@ void __init load_ucode_bsp(void)
}
}
-void __cpuinit load_ucode_ap(void)
+void load_ucode_ap(void)
{
int vendor, x86;
diff --git a/arch/x86/kernel/microcode_intel_early.c b/arch/x86/kernel/microcode_intel_early.c
index dabef95506f3..1575deb2e636 100644
--- a/arch/x86/kernel/microcode_intel_early.c
+++ b/arch/x86/kernel/microcode_intel_early.c
@@ -34,7 +34,7 @@ struct mc_saved_data {
struct microcode_intel **mc_saved;
} mc_saved_data;
-static enum ucode_state __cpuinit
+static enum ucode_state
generic_load_microcode_early(struct microcode_intel **mc_saved_p,
unsigned int mc_saved_count,
struct ucode_cpu_info *uci)
@@ -69,7 +69,7 @@ out:
return state;
}
-static void __cpuinit
+static void
microcode_pointer(struct microcode_intel **mc_saved,
unsigned long *mc_saved_in_initrd,
unsigned long initrd_start, int mc_saved_count)
@@ -82,7 +82,7 @@ microcode_pointer(struct microcode_intel **mc_saved,
}
#ifdef CONFIG_X86_32
-static void __cpuinit
+static void
microcode_phys(struct microcode_intel **mc_saved_tmp,
struct mc_saved_data *mc_saved_data)
{
@@ -101,7 +101,7 @@ microcode_phys(struct microcode_intel **mc_saved_tmp,
}
#endif
-static enum ucode_state __cpuinit
+static enum ucode_state
load_microcode(struct mc_saved_data *mc_saved_data,
unsigned long *mc_saved_in_initrd,
unsigned long initrd_start,
@@ -375,7 +375,7 @@ do { \
#define native_wrmsr(msr, low, high) \
native_write_msr(msr, low, high);
-static int __cpuinit collect_cpu_info_early(struct ucode_cpu_info *uci)
+static int collect_cpu_info_early(struct ucode_cpu_info *uci)
{
unsigned int val[2];
u8 x86, x86_model;
@@ -584,7 +584,7 @@ scan_microcode(unsigned long start, unsigned long end,
/*
* Print ucode update info.
*/
-static void __cpuinit
+static void
print_ucode_info(struct ucode_cpu_info *uci, unsigned int date)
{
int cpu = smp_processor_id();
@@ -605,7 +605,7 @@ static int current_mc_date;
/*
* Print early updated ucode info after printk works. This is delayed info dump.
*/
-void __cpuinit show_ucode_info_early(void)
+void show_ucode_info_early(void)
{
struct ucode_cpu_info uci;
@@ -621,7 +621,7 @@ void __cpuinit show_ucode_info_early(void)
* mc_saved_data.mc_saved and delay printing microcode info in
* show_ucode_info_early() until printk() works.
*/
-static void __cpuinit print_ucode(struct ucode_cpu_info *uci)
+static void print_ucode(struct ucode_cpu_info *uci)
{
struct microcode_intel *mc_intel;
int *delay_ucode_info_p;
@@ -643,12 +643,12 @@ static void __cpuinit print_ucode(struct ucode_cpu_info *uci)
* Flush global tlb. We only do this in x86_64 where paging has been enabled
* already and PGE should be enabled as well.
*/
-static inline void __cpuinit flush_tlb_early(void)
+static inline void flush_tlb_early(void)
{
__native_flush_tlb_global_irq_disabled();
}
-static inline void __cpuinit print_ucode(struct ucode_cpu_info *uci)
+static inline void print_ucode(struct ucode_cpu_info *uci)
{
struct microcode_intel *mc_intel;
@@ -660,8 +660,8 @@ static inline void __cpuinit print_ucode(struct ucode_cpu_info *uci)
}
#endif
-static int __cpuinit apply_microcode_early(struct mc_saved_data *mc_saved_data,
- struct ucode_cpu_info *uci)
+static int apply_microcode_early(struct mc_saved_data *mc_saved_data,
+ struct ucode_cpu_info *uci)
{
struct microcode_intel *mc_intel;
unsigned int val[2];
@@ -763,7 +763,7 @@ load_ucode_intel_bsp(void)
#endif
}
-void __cpuinit load_ucode_intel_ap(void)
+void load_ucode_intel_ap(void)
{
struct mc_saved_data *mc_saved_data_p;
struct ucode_cpu_info uci;
diff --git a/arch/x86/kernel/mmconf-fam10h_64.c b/arch/x86/kernel/mmconf-fam10h_64.c
index ac861b8348e2..f4c886d9165c 100644
--- a/arch/x86/kernel/mmconf-fam10h_64.c
+++ b/arch/x86/kernel/mmconf-fam10h_64.c
@@ -24,14 +24,14 @@ struct pci_hostbridge_probe {
u32 device;
};
-static u64 __cpuinitdata fam10h_pci_mmconf_base;
+static u64 fam10h_pci_mmconf_base;
-static struct pci_hostbridge_probe pci_probes[] __cpuinitdata = {
+static struct pci_hostbridge_probe pci_probes[] = {
{ 0, 0x18, PCI_VENDOR_ID_AMD, 0x1200 },
{ 0xff, 0, PCI_VENDOR_ID_AMD, 0x1200 },
};
-static int __cpuinit cmp_range(const void *x1, const void *x2)
+static int cmp_range(const void *x1, const void *x2)
{
const struct range *r1 = x1;
const struct range *r2 = x2;
@@ -49,7 +49,7 @@ static int __cpuinit cmp_range(const void *x1, const void *x2)
/* need to avoid (0xfd<<32), (0xfe<<32), and (0xff<<32), ht used space */
#define FAM10H_PCI_MMCONF_BASE (0xfcULL<<32)
#define BASE_VALID(b) ((b) + MMCONF_SIZE <= (0xfdULL<<32) || (b) >= (1ULL<<40))
-static void __cpuinit get_fam10h_pci_mmconf_base(void)
+static void get_fam10h_pci_mmconf_base(void)
{
int i;
unsigned bus;
@@ -166,7 +166,7 @@ out:
fam10h_pci_mmconf_base = base;
}
-void __cpuinit fam10h_check_enable_mmcfg(void)
+void fam10h_check_enable_mmcfg(void)
{
u64 val;
u32 address;
@@ -230,7 +230,7 @@ static const struct dmi_system_id __initconst mmconf_dmi_table[] = {
{}
};
-/* Called from a __cpuinit function, but only on the BSP. */
+/* Called from a non __init function, but only on the BSP. */
void __ref check_enable_amd_mmconf_dmi(void)
{
dmi_check_system(mmconf_dmi_table);
diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c
index ce130493b802..88458faea2f8 100644
--- a/arch/x86/kernel/msr.c
+++ b/arch/x86/kernel/msr.c
@@ -200,7 +200,7 @@ static const struct file_operations msr_fops = {
.compat_ioctl = msr_ioctl,
};
-static int __cpuinit msr_device_create(int cpu)
+static int msr_device_create(int cpu)
{
struct device *dev;
@@ -214,8 +214,8 @@ static void msr_device_destroy(int cpu)
device_destroy(msr_class, MKDEV(MSR_MAJOR, cpu));
}
-static int __cpuinit msr_class_cpu_callback(struct notifier_block *nfb,
- unsigned long action, void *hcpu)
+static int msr_class_cpu_callback(struct notifier_block *nfb,
+ unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long)hcpu;
int err = 0;
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
index 81a5f5e8f142..83369e5a1d27 100644
--- a/arch/x86/kernel/process.c
+++ b/arch/x86/kernel/process.c
@@ -398,7 +398,7 @@ static void amd_e400_idle(void)
default_idle();
}
-void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c)
+void select_idle_routine(const struct cpuinfo_x86 *c)
{
#ifdef CONFIG_SMP
if (boot_option_idle_override == IDLE_POLL && smp_num_siblings > 1)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index e68709da8251..f8ec57815c05 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -170,7 +170,7 @@ static struct resource bss_resource = {
#ifdef CONFIG_X86_32
/* cpu data as detected by the assembly code in head.S */
-struct cpuinfo_x86 new_cpu_data __cpuinitdata = {
+struct cpuinfo_x86 new_cpu_data = {
.wp_works_ok = -1,
};
/* common cpu data for all cpus */
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index bfd348e99369..aecc98a93d1b 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -130,7 +130,7 @@ atomic_t init_deasserted;
* Report back to the Boot Processor during boot time or to the caller processor
* during CPU online.
*/
-static void __cpuinit smp_callin(void)
+static void smp_callin(void)
{
int cpuid, phys_id;
unsigned long timeout;
@@ -237,7 +237,7 @@ static int enable_start_cpu0;
/*
* Activate a secondary processor.
*/
-notrace static void __cpuinit start_secondary(void *unused)
+static void notrace start_secondary(void *unused)
{
/*
* Don't put *anything* before cpu_init(), SMP booting is too
@@ -300,7 +300,7 @@ void __init smp_store_boot_cpu_info(void)
* The bootstrap kernel entry code has set these up. Save them for
* a given CPU
*/
-void __cpuinit smp_store_cpu_info(int id)
+void smp_store_cpu_info(int id)
{
struct cpuinfo_x86 *c = &cpu_data(id);
@@ -313,7 +313,7 @@ void __cpuinit smp_store_cpu_info(int id)
identify_secondary_cpu(c);
}
-static bool __cpuinit
+static bool
topology_sane(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o, const char *name)
{
int cpu1 = c->cpu_index, cpu2 = o->cpu_index;
@@ -330,7 +330,7 @@ do { \
cpumask_set_cpu((c2), cpu_##_m##_mask(c1)); \
} while (0)
-static bool __cpuinit match_smt(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o)
+static bool match_smt(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o)
{
if (cpu_has_topoext) {
int cpu1 = c->cpu_index, cpu2 = o->cpu_index;
@@ -348,7 +348,7 @@ static bool __cpuinit match_smt(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o)
return false;
}
-static bool __cpuinit match_llc(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o)
+static bool match_llc(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o)
{
int cpu1 = c->cpu_index, cpu2 = o->cpu_index;
@@ -359,7 +359,7 @@ static bool __cpuinit match_llc(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o)
return false;
}
-static bool __cpuinit match_mc(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o)
+static bool match_mc(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o)
{
if (c->phys_proc_id == o->phys_proc_id) {
if (cpu_has(c, X86_FEATURE_AMD_DCM))
@@ -370,7 +370,7 @@ static bool __cpuinit match_mc(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o)
return false;
}
-void __cpuinit set_cpu_sibling_map(int cpu)
+void set_cpu_sibling_map(int cpu)
{
bool has_smt = smp_num_siblings > 1;
bool has_mp = has_smt || boot_cpu_data.x86_max_cores > 1;
@@ -499,7 +499,7 @@ void __inquire_remote_apic(int apicid)
* INIT, INIT, STARTUP sequence will reset the chip hard for us, and this
* won't ... remember to clear down the APIC, etc later.
*/
-int __cpuinit
+int
wakeup_secondary_cpu_via_nmi(int apicid, unsigned long start_eip)
{
unsigned long send_status, accept_status = 0;
@@ -533,7 +533,7 @@ wakeup_secondary_cpu_via_nmi(int apicid, unsigned long start_eip)
return (send_status | accept_status);
}
-static int __cpuinit
+static int
wakeup_secondary_cpu_via_init(int phys_apicid, unsigned long start_eip)
{
unsigned long send_status, accept_status = 0;
@@ -649,7 +649,7 @@ wakeup_secondary_cpu_via_init(int phys_apicid, unsigned long start_eip)
}
/* reduce the number of lines printed when booting a large cpu count system */
-static void __cpuinit announce_cpu(int cpu, int apicid)
+static void announce_cpu(int cpu, int apicid)
{
static int current_node = -1;
int node = early_cpu_to_node(cpu);
@@ -691,7 +691,7 @@ static int wakeup_cpu0_nmi(unsigned int cmd, struct pt_regs *regs)
* We'll change this code in the future to wake up hard offlined CPU0 if
* real platform and request are available.
*/
-static int __cpuinit
+static int
wakeup_cpu_via_init_nmi(int cpu, unsigned long start_ip, int apicid,
int *cpu0_nmi_registered)
{
@@ -731,7 +731,7 @@ wakeup_cpu_via_init_nmi(int cpu, unsigned long start_ip, int apicid,
* Returns zero if CPU booted OK, else error code from
* ->wakeup_secondary_cpu.
*/
-static int __cpuinit do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
+static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
{
volatile u32 *trampoline_status =
(volatile u32 *) __va(real_mode_header->trampoline_status);
@@ -872,7 +872,7 @@ static int __cpuinit do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
return boot_error;
}
-int __cpuinit native_cpu_up(unsigned int cpu, struct task_struct *tidle)
+int native_cpu_up(unsigned int cpu, struct task_struct *tidle)
{
int apicid = apic->cpu_present_to_apicid(cpu);
unsigned long flags;
diff --git a/arch/x86/kernel/tboot.c b/arch/x86/kernel/tboot.c
index 3ff42d2f046d..addf7b58f4e8 100644
--- a/arch/x86/kernel/tboot.c
+++ b/arch/x86/kernel/tboot.c
@@ -320,8 +320,8 @@ static int tboot_wait_for_aps(int num_aps)
return !(atomic_read((atomic_t *)&tboot->num_in_wfs) == num_aps);
}
-static int __cpuinit tboot_cpu_callback(struct notifier_block *nfb,
- unsigned long action, void *hcpu)
+static int tboot_cpu_callback(struct notifier_block *nfb, unsigned long action,
+ void *hcpu)
{
switch (action) {
case CPU_DYING:
@@ -334,7 +334,7 @@ static int __cpuinit tboot_cpu_callback(struct notifier_block *nfb,
return NOTIFY_OK;
}
-static struct notifier_block tboot_cpu_notifier __cpuinitdata =
+static struct notifier_block tboot_cpu_notifier =
{
.notifier_call = tboot_cpu_callback,
};
diff --git a/arch/x86/kernel/tracepoint.c b/arch/x86/kernel/tracepoint.c
index 4e584a8d6edd..1c113db9ed57 100644
--- a/arch/x86/kernel/tracepoint.c
+++ b/arch/x86/kernel/tracepoint.c
@@ -12,10 +12,8 @@ atomic_t trace_idt_ctr = ATOMIC_INIT(0);
struct desc_ptr trace_idt_descr = { NR_VECTORS * 16 - 1,
(unsigned long) trace_idt_table };
-#ifndef CONFIG_X86_64
-gate_desc trace_idt_table[NR_VECTORS] __page_aligned_data
- = { { { { 0, 0 } } }, };
-#endif
+/* No need to be aligned, but done to keep all IDTs defined the same way. */
+gate_desc trace_idt_table[NR_VECTORS] __page_aligned_bss;
static int trace_irq_vector_refcount;
static DEFINE_MUTEX(irq_vector_mutex);
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index b0865e88d3cc..1b23a1c92746 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -63,19 +63,19 @@
#include <asm/x86_init.h>
#include <asm/pgalloc.h>
#include <asm/proto.h>
+
+/* No need to be aligned, but done to keep all IDTs defined the same way. */
+gate_desc debug_idt_table[NR_VECTORS] __page_aligned_bss;
#else
#include <asm/processor-flags.h>
#include <asm/setup.h>
asmlinkage int system_call(void);
-
-/*
- * The IDT has to be page-aligned to simplify the Pentium
- * F0 0F bug workaround.
- */
-gate_desc idt_table[NR_VECTORS] __page_aligned_data = { { { { 0, 0 } } }, };
#endif
+/* Must be page-aligned because the real IDT is used in a fixmap. */
+gate_desc idt_table[NR_VECTORS] __page_aligned_bss;
+
DECLARE_BITMAP(used_vectors, NR_VECTORS);
EXPORT_SYMBOL_GPL(used_vectors);
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
index 098b3cfda72e..6ff49247edf8 100644
--- a/arch/x86/kernel/tsc.c
+++ b/arch/x86/kernel/tsc.c
@@ -824,7 +824,7 @@ static void __init check_system_tsc_reliable(void)
* Make an educated guess if the TSC is trustworthy and synchronized
* over all CPUs.
*/
-__cpuinit int unsynchronized_tsc(void)
+int unsynchronized_tsc(void)
{
if (!cpu_has_tsc || tsc_unstable)
return 1;
@@ -1020,7 +1020,7 @@ void __init tsc_init(void)
* been calibrated. This assumes that CONSTANT_TSC applies to all
* cpus in the socket - this should be a safe assumption.
*/
-unsigned long __cpuinit calibrate_delay_is_known(void)
+unsigned long calibrate_delay_is_known(void)
{
int i, cpu = smp_processor_id();
diff --git a/arch/x86/kernel/tsc_sync.c b/arch/x86/kernel/tsc_sync.c
index fc25e60a5884..adfdf56a3714 100644
--- a/arch/x86/kernel/tsc_sync.c
+++ b/arch/x86/kernel/tsc_sync.c
@@ -25,24 +25,24 @@
* Entry/exit counters that make sure that both CPUs
* run the measurement code at once:
*/
-static __cpuinitdata atomic_t start_count;
-static __cpuinitdata atomic_t stop_count;
+static atomic_t start_count;
+static atomic_t stop_count;
/*
* We use a raw spinlock in this exceptional case, because
* we want to have the fastest, inlined, non-debug version
* of a critical section, to be able to prove TSC time-warps:
*/
-static __cpuinitdata arch_spinlock_t sync_lock = __ARCH_SPIN_LOCK_UNLOCKED;
+static arch_spinlock_t sync_lock = __ARCH_SPIN_LOCK_UNLOCKED;
-static __cpuinitdata cycles_t last_tsc;
-static __cpuinitdata cycles_t max_warp;
-static __cpuinitdata int nr_warps;
+static cycles_t last_tsc;
+static cycles_t max_warp;
+static int nr_warps;
/*
* TSC-warp measurement loop running on both CPUs:
*/
-static __cpuinit void check_tsc_warp(unsigned int timeout)
+static void check_tsc_warp(unsigned int timeout)
{
cycles_t start, now, prev, end;
int i;
@@ -121,7 +121,7 @@ static inline unsigned int loop_timeout(int cpu)
* Source CPU calls into this - it waits for the freshly booted
* target CPU to arrive and then starts the measurement:
*/
-void __cpuinit check_tsc_sync_source(int cpu)
+void check_tsc_sync_source(int cpu)
{
int cpus = 2;
@@ -187,7 +187,7 @@ void __cpuinit check_tsc_sync_source(int cpu)
/*
* Freshly booted CPUs call into this:
*/
-void __cpuinit check_tsc_sync_target(void)
+void check_tsc_sync_target(void)
{
int cpus = 2;
diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c
index 9a907a67be8f..1f96f9347ed9 100644
--- a/arch/x86/kernel/vsyscall_64.c
+++ b/arch/x86/kernel/vsyscall_64.c
@@ -331,7 +331,7 @@ sigsegv:
* Assume __initcall executes before all user space. Hopefully kmod
* doesn't violate that. We'll find out if it does.
*/
-static void __cpuinit vsyscall_set_cpu(int cpu)
+static void vsyscall_set_cpu(int cpu)
{
unsigned long d;
unsigned long node = 0;
@@ -353,13 +353,13 @@ static void __cpuinit vsyscall_set_cpu(int cpu)
write_gdt_entry(get_cpu_gdt_table(cpu), GDT_ENTRY_PER_CPU, &d, DESCTYPE_S);
}
-static void __cpuinit cpu_vsyscall_init(void *arg)
+static void cpu_vsyscall_init(void *arg)
{
/* preemption should be already off */
vsyscall_set_cpu(raw_smp_processor_id());
}
-static int __cpuinit
+static int
cpu_vsyscall_notifier(struct notifier_block *n, unsigned long action, void *arg)
{
long cpu = (long)arg;
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c
index 45a14dbbddaf..5f24c71accaa 100644
--- a/arch/x86/kernel/x86_init.c
+++ b/arch/x86/kernel/x86_init.c
@@ -25,7 +25,7 @@
#include <asm/iommu.h>
#include <asm/mach_traps.h>
-void __cpuinit x86_init_noop(void) { }
+void x86_init_noop(void) { }
void __init x86_init_uint_noop(unsigned int unused) { }
int __init iommu_init_noop(void) { return 0; }
void iommu_shutdown_noop(void) { }
@@ -85,7 +85,7 @@ struct x86_init_ops x86_init __initdata = {
},
};
-struct x86_cpuinit_ops x86_cpuinit __cpuinitdata = {
+struct x86_cpuinit_ops x86_cpuinit = {
.early_percpu_clock_init = x86_init_noop,
.setup_percpu_clockev = setup_secondary_APIC_clock,
};
diff --git a/arch/x86/kernel/xsave.c b/arch/x86/kernel/xsave.c
index d6c28acdf99c..422fd8223470 100644
--- a/arch/x86/kernel/xsave.c
+++ b/arch/x86/kernel/xsave.c
@@ -573,7 +573,7 @@ static void __init xstate_enable_boot_cpu(void)
* This is somewhat obfuscated due to the lack of powerful enough
* overrides for the section checks.
*/
-void __cpuinit xsave_init(void)
+void xsave_init(void)
{
static __refdata void (*next_func)(void) = xstate_enable_boot_cpu;
void (*this_func)(void);
@@ -594,7 +594,7 @@ static inline void __init eager_fpu_init_bp(void)
setup_init_fpu_buf();
}
-void __cpuinit eager_fpu_init(void)
+void eager_fpu_init(void)
{
static __refdata void (*boot_func)(void) = eager_fpu_init_bp;
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index 0d094da49541..9e9285ae9b94 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -2811,6 +2811,13 @@ exit:
static bool page_fault_can_be_fast(struct kvm_vcpu *vcpu, u32 error_code)
{
/*
+ * Do not fix the mmio spte with invalid generation number which
+ * need to be updated by slow page fault path.
+ */
+ if (unlikely(error_code & PFERR_RSVD_MASK))
+ return false;
+
+ /*
* #PF can be fast only if the shadow page table is present and it
* is caused by write-protect, that means we just need change the
* W bit of the spte which can be done out of mmu-lock.
diff --git a/arch/x86/mm/mmio-mod.c b/arch/x86/mm/mmio-mod.c
index dc0b727742f4..0057a7accfb1 100644
--- a/arch/x86/mm/mmio-mod.c
+++ b/arch/x86/mm/mmio-mod.c
@@ -410,9 +410,7 @@ out:
pr_warning("multiple CPUs still online, may miss events.\n");
}
-/* __ref because leave_uniprocessor calls cpu_up which is __cpuinit,
- but this whole function is ifdefed CONFIG_HOTPLUG_CPU */
-static void __ref leave_uniprocessor(void)
+static void leave_uniprocessor(void)
{
int cpu;
int err;
diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c
index a71c4e207679..8bf93bae1f13 100644
--- a/arch/x86/mm/numa.c
+++ b/arch/x86/mm/numa.c
@@ -60,7 +60,7 @@ s16 __apicid_to_node[MAX_LOCAL_APIC] = {
[0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE
};
-int __cpuinit numa_cpu_node(int cpu)
+int numa_cpu_node(int cpu)
{
int apicid = early_per_cpu(x86_cpu_to_apicid, cpu);
@@ -691,12 +691,12 @@ void __init init_cpu_to_node(void)
#ifndef CONFIG_DEBUG_PER_CPU_MAPS
# ifndef CONFIG_NUMA_EMU
-void __cpuinit numa_add_cpu(int cpu)
+void numa_add_cpu(int cpu)
{
cpumask_set_cpu(cpu, node_to_cpumask_map[early_cpu_to_node(cpu)]);
}
-void __cpuinit numa_remove_cpu(int cpu)
+void numa_remove_cpu(int cpu)
{
cpumask_clear_cpu(cpu, node_to_cpumask_map[early_cpu_to_node(cpu)]);
}
@@ -763,17 +763,17 @@ void debug_cpumask_set_cpu(int cpu, int node, bool enable)
}
# ifndef CONFIG_NUMA_EMU
-static void __cpuinit numa_set_cpumask(int cpu, bool enable)
+static void numa_set_cpumask(int cpu, bool enable)
{
debug_cpumask_set_cpu(cpu, early_cpu_to_node(cpu), enable);
}
-void __cpuinit numa_add_cpu(int cpu)
+void numa_add_cpu(int cpu)
{
numa_set_cpumask(cpu, true);
}
-void __cpuinit numa_remove_cpu(int cpu)
+void numa_remove_cpu(int cpu)
{
numa_set_cpumask(cpu, false);
}
diff --git a/arch/x86/mm/numa_emulation.c b/arch/x86/mm/numa_emulation.c
index dbbbb47260cc..a8f90ce3dedf 100644
--- a/arch/x86/mm/numa_emulation.c
+++ b/arch/x86/mm/numa_emulation.c
@@ -10,7 +10,7 @@
#include "numa_internal.h"
-static int emu_nid_to_phys[MAX_NUMNODES] __cpuinitdata;
+static int emu_nid_to_phys[MAX_NUMNODES];
static char *emu_cmdline __initdata;
void __init numa_emu_cmdline(char *str)
@@ -444,7 +444,7 @@ no_emu:
}
#ifndef CONFIG_DEBUG_PER_CPU_MAPS
-void __cpuinit numa_add_cpu(int cpu)
+void numa_add_cpu(int cpu)
{
int physnid, nid;
@@ -462,7 +462,7 @@ void __cpuinit numa_add_cpu(int cpu)
cpumask_set_cpu(cpu, node_to_cpumask_map[nid]);
}
-void __cpuinit numa_remove_cpu(int cpu)
+void numa_remove_cpu(int cpu)
{
int i;
@@ -470,7 +470,7 @@ void __cpuinit numa_remove_cpu(int cpu)
cpumask_clear_cpu(cpu, node_to_cpumask_map[i]);
}
#else /* !CONFIG_DEBUG_PER_CPU_MAPS */
-static void __cpuinit numa_set_cpumask(int cpu, bool enable)
+static void numa_set_cpumask(int cpu, bool enable)
{
int nid, physnid;
@@ -490,12 +490,12 @@ static void __cpuinit numa_set_cpumask(int cpu, bool enable)
}
}
-void __cpuinit numa_add_cpu(int cpu)
+void numa_add_cpu(int cpu)
{
numa_set_cpumask(cpu, true);
}
-void __cpuinit numa_remove_cpu(int cpu)
+void numa_remove_cpu(int cpu)
{
numa_set_cpumask(cpu, false);
}
diff --git a/arch/x86/mm/setup_nx.c b/arch/x86/mm/setup_nx.c
index 410531d3c292..90555bf60aa4 100644
--- a/arch/x86/mm/setup_nx.c
+++ b/arch/x86/mm/setup_nx.c
@@ -5,7 +5,7 @@
#include <asm/pgtable.h>
#include <asm/proto.h>
-static int disable_nx __cpuinitdata;
+static int disable_nx;
/*
* noexec = on|off
@@ -29,7 +29,7 @@ static int __init noexec_setup(char *str)
}
early_param("noexec", noexec_setup);
-void __cpuinit x86_configure_nx(void)
+void x86_configure_nx(void)
{
if (cpu_has_nx && !disable_nx)
__supported_pte_mask |= _PAGE_NX;
diff --git a/arch/x86/pci/amd_bus.c b/arch/x86/pci/amd_bus.c
index e9e6ed5cdf94..a48be98e9ded 100644
--- a/arch/x86/pci/amd_bus.c
+++ b/arch/x86/pci/amd_bus.c
@@ -312,7 +312,7 @@ static int __init early_fill_mp_bus_info(void)
#define ENABLE_CF8_EXT_CFG (1ULL << 46)
-static void __cpuinit enable_pci_io_ecs(void *unused)
+static void enable_pci_io_ecs(void *unused)
{
u64 reg;
rdmsrl(MSR_AMD64_NB_CFG, reg);
@@ -322,8 +322,8 @@ static void __cpuinit enable_pci_io_ecs(void *unused)
}
}
-static int __cpuinit amd_cpu_notify(struct notifier_block *self,
- unsigned long action, void *hcpu)
+static int amd_cpu_notify(struct notifier_block *self, unsigned long action,
+ void *hcpu)
{
int cpu = (long)hcpu;
switch (action) {
@@ -337,7 +337,7 @@ static int __cpuinit amd_cpu_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata amd_cpu_notifier = {
+static struct notifier_block amd_cpu_notifier = {
.notifier_call = amd_cpu_notify,
};
diff --git a/arch/x86/platform/ce4100/ce4100.c b/arch/x86/platform/ce4100/ce4100.c
index f8ab4945892e..643b8b5eee86 100644
--- a/arch/x86/platform/ce4100/ce4100.c
+++ b/arch/x86/platform/ce4100/ce4100.c
@@ -14,6 +14,7 @@
#include <linux/module.h>
#include <linux/serial_reg.h>
#include <linux/serial_8250.h>
+#include <linux/reboot.h>
#include <asm/ce4100.h>
#include <asm/prom.h>
@@ -134,7 +135,7 @@ static void __init sdv_arch_setup(void)
}
#ifdef CONFIG_X86_IO_APIC
-static void __cpuinit sdv_pci_init(void)
+static void sdv_pci_init(void)
{
x86_of_pci_init();
/* We can't set this earlier, because we need to calibrate the timer */
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
index c8d5577044bb..90f6ed127096 100644
--- a/arch/x86/platform/efi/efi.c
+++ b/arch/x86/platform/efi/efi.c
@@ -931,13 +931,6 @@ void __init efi_enter_virtual_mode(void)
va = efi_ioremap(md->phys_addr, size,
md->type, md->attribute);
- if (!(md->attribute & EFI_MEMORY_RUNTIME)) {
- if (!va)
- pr_err("ioremap of 0x%llX failed!\n",
- (unsigned long long)md->phys_addr);
- continue;
- }
-
md->virt_addr = (u64) (unsigned long) va;
if (!va) {
diff --git a/arch/x86/platform/mrst/mrst.c b/arch/x86/platform/mrst/mrst.c
index a0a0a4389bbd..47fe66fe61f1 100644
--- a/arch/x86/platform/mrst/mrst.c
+++ b/arch/x86/platform/mrst/mrst.c
@@ -65,7 +65,7 @@
* lapic (always-on,ARAT) ------ 150
*/
-__cpuinitdata enum mrst_timer_options mrst_timer_options;
+enum mrst_timer_options mrst_timer_options;
static u32 sfi_mtimer_usage[SFI_MTMR_MAX_NUM];
static struct sfi_timer_table_entry sfi_mtimer_array[SFI_MTMR_MAX_NUM];
@@ -248,7 +248,7 @@ static void __init mrst_time_init(void)
apbt_time_init();
}
-static void __cpuinit mrst_arch_setup(void)
+static void mrst_arch_setup(void)
{
if (boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model == 0x27)
__mrst_cpu_chip = MRST_CPU_CHIP_PENWELL;
diff --git a/arch/x86/um/signal.c b/arch/x86/um/signal.c
index ae7319db18ee..5e04a1c899fa 100644
--- a/arch/x86/um/signal.c
+++ b/arch/x86/um/signal.c
@@ -508,7 +508,6 @@ int setup_signal_stack_si(unsigned long stack_top, int sig,
{
struct rt_sigframe __user *frame;
int err = 0;
- struct task_struct *me = current;
frame = (struct rt_sigframe __user *)
round_down(stack_top - sizeof(struct rt_sigframe), 16);
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 2fa02bc50034..193097ef3d7d 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -1681,8 +1681,8 @@ static void __init init_hvm_pv_info(void)
xen_domain_type = XEN_HVM_DOMAIN;
}
-static int __cpuinit xen_hvm_cpu_notify(struct notifier_block *self,
- unsigned long action, void *hcpu)
+static int xen_hvm_cpu_notify(struct notifier_block *self, unsigned long action,
+ void *hcpu)
{
int cpu = (long)hcpu;
switch (action) {
@@ -1700,7 +1700,7 @@ static int __cpuinit xen_hvm_cpu_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block xen_hvm_cpu_notifier __cpuinitdata = {
+static struct notifier_block xen_hvm_cpu_notifier = {
.notifier_call = xen_hvm_cpu_notify,
};
diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
index 94eac5c85cdc..056d11faef21 100644
--- a/arch/x86/xen/setup.c
+++ b/arch/x86/xen/setup.c
@@ -475,7 +475,7 @@ static void __init fiddle_vdso(void)
#endif
}
-static int __cpuinit register_callback(unsigned type, const void *func)
+static int register_callback(unsigned type, const void *func)
{
struct callback_register callback = {
.type = type,
@@ -486,7 +486,7 @@ static int __cpuinit register_callback(unsigned type, const void *func)
return HYPERVISOR_callback_op(CALLBACKOP_register, &callback);
}
-void __cpuinit xen_enable_sysenter(void)
+void xen_enable_sysenter(void)
{
int ret;
unsigned sysenter_feature;
@@ -505,7 +505,7 @@ void __cpuinit xen_enable_sysenter(void)
setup_clear_cpu_cap(sysenter_feature);
}
-void __cpuinit xen_enable_syscall(void)
+void xen_enable_syscall(void)
{
#ifdef CONFIG_X86_64
int ret;
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
index c1367b29c3b1..ca92754eb846 100644
--- a/arch/x86/xen/smp.c
+++ b/arch/x86/xen/smp.c
@@ -65,7 +65,7 @@ static irqreturn_t xen_reschedule_interrupt(int irq, void *dev_id)
return IRQ_HANDLED;
}
-static void __cpuinit cpu_bringup(void)
+static void cpu_bringup(void)
{
int cpu;
@@ -97,7 +97,7 @@ static void __cpuinit cpu_bringup(void)
wmb(); /* make sure everything is out */
}
-static void __cpuinit cpu_bringup_and_idle(void)
+static void cpu_bringup_and_idle(void)
{
cpu_bringup();
cpu_startup_entry(CPUHP_ONLINE);
@@ -326,7 +326,7 @@ static void __init xen_smp_prepare_cpus(unsigned int max_cpus)
set_cpu_present(cpu, true);
}
-static int __cpuinit
+static int
cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
{
struct vcpu_guest_context *ctxt;
@@ -397,7 +397,7 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
return 0;
}
-static int __cpuinit xen_cpu_up(unsigned int cpu, struct task_struct *idle)
+static int xen_cpu_up(unsigned int cpu, struct task_struct *idle)
{
int rc;
@@ -470,7 +470,7 @@ static void xen_cpu_die(unsigned int cpu)
xen_teardown_timer(cpu);
}
-static void __cpuinit xen_play_dead(void) /* used only with HOTPLUG_CPU */
+static void xen_play_dead(void) /* used only with HOTPLUG_CPU */
{
play_dead_common();
HYPERVISOR_vcpu_op(VCPUOP_down, smp_processor_id(), NULL);
@@ -691,7 +691,7 @@ static void __init xen_hvm_smp_prepare_cpus(unsigned int max_cpus)
xen_init_lock_cpu(0);
}
-static int __cpuinit xen_hvm_cpu_up(unsigned int cpu, struct task_struct *tidle)
+static int xen_hvm_cpu_up(unsigned int cpu, struct task_struct *tidle)
{
int rc;
rc = native_cpu_up(cpu, tidle);
diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
index a40f8508e760..cf3caee356b3 100644
--- a/arch/x86/xen/spinlock.c
+++ b/arch/x86/xen/spinlock.c
@@ -361,7 +361,7 @@ static irqreturn_t dummy_handler(int irq, void *dev_id)
return IRQ_HANDLED;
}
-void __cpuinit xen_init_lock_cpu(int cpu)
+void xen_init_lock_cpu(int cpu)
{
int irq;
char *name;
diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h
index a95b41744ad0..86782c5d7e2a 100644
--- a/arch/x86/xen/xen-ops.h
+++ b/arch/x86/xen/xen-ops.h
@@ -73,7 +73,7 @@ static inline void xen_hvm_smp_init(void) {}
#ifdef CONFIG_PARAVIRT_SPINLOCKS
void __init xen_init_spinlocks(void);
-void __cpuinit xen_init_lock_cpu(int cpu);
+void xen_init_lock_cpu(int cpu);
void xen_uninit_lock_cpu(int cpu);
#else
static inline void xen_init_spinlocks(void)
diff --git a/arch/xtensa/kernel/time.c b/arch/xtensa/kernel/time.c
index bdbb17312526..24bb0c1776ba 100644
--- a/arch/xtensa/kernel/time.c
+++ b/arch/xtensa/kernel/time.c
@@ -162,7 +162,7 @@ irqreturn_t timer_interrupt (int irq, void *dev_id)
}
#ifndef CONFIG_GENERIC_CALIBRATE_DELAY
-void __cpuinit calibrate_delay(void)
+void calibrate_delay(void)
{
loops_per_jiffy = CCOUNT_PER_JIFFY;
printk("Calibrating delay loop (skipped)... "
diff --git a/block/blk-iopoll.c b/block/blk-iopoll.c
index 58916afbbda5..4b8d9b541112 100644
--- a/block/blk-iopoll.c
+++ b/block/blk-iopoll.c
@@ -189,8 +189,8 @@ void blk_iopoll_init(struct blk_iopoll *iop, int weight, blk_iopoll_fn *poll_fn)
}
EXPORT_SYMBOL(blk_iopoll_init);
-static int __cpuinit blk_iopoll_cpu_notify(struct notifier_block *self,
- unsigned long action, void *hcpu)
+static int blk_iopoll_cpu_notify(struct notifier_block *self,
+ unsigned long action, void *hcpu)
{
/*
* If a CPU goes away, splice its entries to the current CPU
@@ -209,7 +209,7 @@ static int __cpuinit blk_iopoll_cpu_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata blk_iopoll_cpu_notifier = {
+static struct notifier_block blk_iopoll_cpu_notifier = {
.notifier_call = blk_iopoll_cpu_notify,
};
diff --git a/block/blk-softirq.c b/block/blk-softirq.c
index 467c8de88642..ec9e60636f43 100644
--- a/block/blk-softirq.c
+++ b/block/blk-softirq.c
@@ -78,8 +78,8 @@ static int raise_blk_irq(int cpu, struct request *rq)
}
#endif
-static int __cpuinit blk_cpu_notify(struct notifier_block *self,
- unsigned long action, void *hcpu)
+static int blk_cpu_notify(struct notifier_block *self, unsigned long action,
+ void *hcpu)
{
/*
* If a CPU goes away, splice its entries to the current CPU
@@ -98,7 +98,7 @@ static int __cpuinit blk_cpu_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata blk_cpu_notifier = {
+static struct notifier_block blk_cpu_notifier = {
.notifier_call = blk_cpu_notify,
};
diff --git a/crypto/Kconfig b/crypto/Kconfig
index 69ce573f1224..aca01164f002 100644
--- a/crypto/Kconfig
+++ b/crypto/Kconfig
@@ -376,25 +376,6 @@ config CRYPTO_CRC32_PCLMUL
which will enable any routine to use the CRC-32-IEEE 802.3 checksum
and gain better performance as compared with the table implementation.
-config CRYPTO_CRCT10DIF
- tristate "CRCT10DIF algorithm"
- select CRYPTO_HASH
- help
- CRC T10 Data Integrity Field computation is being cast as
- a crypto transform. This allows for faster crc t10 diff
- transforms to be used if they are available.
-
-config CRYPTO_CRCT10DIF_PCLMUL
- tristate "CRCT10DIF PCLMULQDQ hardware acceleration"
- depends on X86 && 64BIT && CRC_T10DIF
- select CRYPTO_HASH
- help
- For x86_64 processors with SSE4.2 and PCLMULQDQ supported,
- CRC T10 DIF PCLMULQDQ computation can be hardware
- accelerated PCLMULQDQ instruction. This option will create
- 'crct10dif-plcmul' module, which is faster when computing the
- crct10dif checksum as compared with the generic table implementation.
-
config CRYPTO_GHASH
tristate "GHASH digest algorithm"
select CRYPTO_GF128MUL
diff --git a/crypto/Makefile b/crypto/Makefile
index 2d5ed08a239f..2ba0df2f908f 100644
--- a/crypto/Makefile
+++ b/crypto/Makefile
@@ -83,7 +83,6 @@ obj-$(CONFIG_CRYPTO_ZLIB) += zlib.o
obj-$(CONFIG_CRYPTO_MICHAEL_MIC) += michael_mic.o
obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o
obj-$(CONFIG_CRYPTO_CRC32) += crc32.o
-obj-$(CONFIG_CRYPTO_CRCT10DIF) += crct10dif.o
obj-$(CONFIG_CRYPTO_AUTHENC) += authenc.o authencesn.o
obj-$(CONFIG_CRYPTO_LZO) += lzo.o
obj-$(CONFIG_CRYPTO_LZ4) += lz4.o
diff --git a/crypto/crct10dif.c b/crypto/crct10dif.c
deleted file mode 100644
index 92aca96d6b98..000000000000
--- a/crypto/crct10dif.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Cryptographic API.
- *
- * T10 Data Integrity Field CRC16 Crypto Transform
- *
- * Copyright (c) 2007 Oracle Corporation. All rights reserved.
- * Written by Martin K. Petersen <martin.petersen@oracle.com>
- * Copyright (C) 2013 Intel Corporation
- * Author: Tim Chen <tim.c.chen@linux.intel.com>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-
-#include <linux/types.h>
-#include <linux/module.h>
-#include <linux/crc-t10dif.h>
-#include <crypto/internal/hash.h>
-#include <linux/init.h>
-#include <linux/string.h>
-#include <linux/kernel.h>
-
-struct chksum_desc_ctx {
- __u16 crc;
-};
-
-/* Table generated using the following polynomium:
- * x^16 + x^15 + x^11 + x^9 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1
- * gt: 0x8bb7
- */
-static const __u16 t10_dif_crc_table[256] = {
- 0x0000, 0x8BB7, 0x9CD9, 0x176E, 0xB205, 0x39B2, 0x2EDC, 0xA56B,
- 0xEFBD, 0x640A, 0x7364, 0xF8D3, 0x5DB8, 0xD60F, 0xC161, 0x4AD6,
- 0x54CD, 0xDF7A, 0xC814, 0x43A3, 0xE6C8, 0x6D7F, 0x7A11, 0xF1A6,
- 0xBB70, 0x30C7, 0x27A9, 0xAC1E, 0x0975, 0x82C2, 0x95AC, 0x1E1B,
- 0xA99A, 0x222D, 0x3543, 0xBEF4, 0x1B9F, 0x9028, 0x8746, 0x0CF1,
- 0x4627, 0xCD90, 0xDAFE, 0x5149, 0xF422, 0x7F95, 0x68FB, 0xE34C,
- 0xFD57, 0x76E0, 0x618E, 0xEA39, 0x4F52, 0xC4E5, 0xD38B, 0x583C,
- 0x12EA, 0x995D, 0x8E33, 0x0584, 0xA0EF, 0x2B58, 0x3C36, 0xB781,
- 0xD883, 0x5334, 0x445A, 0xCFED, 0x6A86, 0xE131, 0xF65F, 0x7DE8,
- 0x373E, 0xBC89, 0xABE7, 0x2050, 0x853B, 0x0E8C, 0x19E2, 0x9255,
- 0x8C4E, 0x07F9, 0x1097, 0x9B20, 0x3E4B, 0xB5FC, 0xA292, 0x2925,
- 0x63F3, 0xE844, 0xFF2A, 0x749D, 0xD1F6, 0x5A41, 0x4D2F, 0xC698,
- 0x7119, 0xFAAE, 0xEDC0, 0x6677, 0xC31C, 0x48AB, 0x5FC5, 0xD472,
- 0x9EA4, 0x1513, 0x027D, 0x89CA, 0x2CA1, 0xA716, 0xB078, 0x3BCF,
- 0x25D4, 0xAE63, 0xB90D, 0x32BA, 0x97D1, 0x1C66, 0x0B08, 0x80BF,
- 0xCA69, 0x41DE, 0x56B0, 0xDD07, 0x786C, 0xF3DB, 0xE4B5, 0x6F02,
- 0x3AB1, 0xB106, 0xA668, 0x2DDF, 0x88B4, 0x0303, 0x146D, 0x9FDA,
- 0xD50C, 0x5EBB, 0x49D5, 0xC262, 0x6709, 0xECBE, 0xFBD0, 0x7067,
- 0x6E7C, 0xE5CB, 0xF2A5, 0x7912, 0xDC79, 0x57CE, 0x40A0, 0xCB17,
- 0x81C1, 0x0A76, 0x1D18, 0x96AF, 0x33C4, 0xB873, 0xAF1D, 0x24AA,
- 0x932B, 0x189C, 0x0FF2, 0x8445, 0x212E, 0xAA99, 0xBDF7, 0x3640,
- 0x7C96, 0xF721, 0xE04F, 0x6BF8, 0xCE93, 0x4524, 0x524A, 0xD9FD,
- 0xC7E6, 0x4C51, 0x5B3F, 0xD088, 0x75E3, 0xFE54, 0xE93A, 0x628D,
- 0x285B, 0xA3EC, 0xB482, 0x3F35, 0x9A5E, 0x11E9, 0x0687, 0x8D30,
- 0xE232, 0x6985, 0x7EEB, 0xF55C, 0x5037, 0xDB80, 0xCCEE, 0x4759,
- 0x0D8F, 0x8638, 0x9156, 0x1AE1, 0xBF8A, 0x343D, 0x2353, 0xA8E4,
- 0xB6FF, 0x3D48, 0x2A26, 0xA191, 0x04FA, 0x8F4D, 0x9823, 0x1394,
- 0x5942, 0xD2F5, 0xC59B, 0x4E2C, 0xEB47, 0x60F0, 0x779E, 0xFC29,
- 0x4BA8, 0xC01F, 0xD771, 0x5CC6, 0xF9AD, 0x721A, 0x6574, 0xEEC3,
- 0xA415, 0x2FA2, 0x38CC, 0xB37B, 0x1610, 0x9DA7, 0x8AC9, 0x017E,
- 0x1F65, 0x94D2, 0x83BC, 0x080B, 0xAD60, 0x26D7, 0x31B9, 0xBA0E,
- 0xF0D8, 0x7B6F, 0x6C01, 0xE7B6, 0x42DD, 0xC96A, 0xDE04, 0x55B3
-};
-
-__u16 crc_t10dif_generic(__u16 crc, const unsigned char *buffer, size_t len)
-{
- unsigned int i;
-
- for (i = 0 ; i < len ; i++)
- crc = (crc << 8) ^ t10_dif_crc_table[((crc >> 8) ^ buffer[i]) & 0xff];
-
- return crc;
-}
-EXPORT_SYMBOL(crc_t10dif_generic);
-
-/*
- * Steps through buffer one byte at at time, calculates reflected
- * crc using table.
- */
-
-static int chksum_init(struct shash_desc *desc)
-{
- struct chksum_desc_ctx *ctx = shash_desc_ctx(desc);
-
- ctx->crc = 0;
-
- return 0;
-}
-
-static int chksum_update(struct shash_desc *desc, const u8 *data,
- unsigned int length)
-{
- struct chksum_desc_ctx *ctx = shash_desc_ctx(desc);
-
- ctx->crc = crc_t10dif_generic(ctx->crc, data, length);
- return 0;
-}
-
-static int chksum_final(struct shash_desc *desc, u8 *out)
-{
- struct chksum_desc_ctx *ctx = shash_desc_ctx(desc);
-
- *(__u16 *)out = ctx->crc;
- return 0;
-}
-
-static int __chksum_finup(__u16 *crcp, const u8 *data, unsigned int len,
- u8 *out)
-{
- *(__u16 *)out = crc_t10dif_generic(*crcp, data, len);
- return 0;
-}
-
-static int chksum_finup(struct shash_desc *desc, const u8 *data,
- unsigned int len, u8 *out)
-{
- struct chksum_desc_ctx *ctx = shash_desc_ctx(desc);
-
- return __chksum_finup(&ctx->crc, data, len, out);
-}
-
-static int chksum_digest(struct shash_desc *desc, const u8 *data,
- unsigned int length, u8 *out)
-{
- struct chksum_desc_ctx *ctx = shash_desc_ctx(desc);
-
- return __chksum_finup(&ctx->crc, data, length, out);
-}
-
-static struct shash_alg alg = {
- .digestsize = CRC_T10DIF_DIGEST_SIZE,
- .init = chksum_init,
- .update = chksum_update,
- .final = chksum_final,
- .finup = chksum_finup,
- .digest = chksum_digest,
- .descsize = sizeof(struct chksum_desc_ctx),
- .base = {
- .cra_name = "crct10dif",
- .cra_driver_name = "crct10dif-generic",
- .cra_priority = 100,
- .cra_blocksize = CRC_T10DIF_BLOCK_SIZE,
- .cra_module = THIS_MODULE,
- }
-};
-
-static int __init crct10dif_mod_init(void)
-{
- int ret;
-
- ret = crypto_register_shash(&alg);
- return ret;
-}
-
-static void __exit crct10dif_mod_fini(void)
-{
- crypto_unregister_shash(&alg);
-}
-
-module_init(crct10dif_mod_init);
-module_exit(crct10dif_mod_fini);
-
-MODULE_AUTHOR("Tim Chen <tim.c.chen@linux.intel.com>");
-MODULE_DESCRIPTION("T10 DIF CRC calculation.");
-MODULE_LICENSE("GPL");
diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c
index 25a5934f0e50..66d254ce0d11 100644
--- a/crypto/tcrypt.c
+++ b/crypto/tcrypt.c
@@ -1174,10 +1174,6 @@ static int do_test(int m)
ret += tcrypt_test("ghash");
break;
- case 47:
- ret += tcrypt_test("crct10dif");
- break;
-
case 100:
ret += tcrypt_test("hmac(md5)");
break;
@@ -1502,10 +1498,6 @@ static int do_test(int m)
test_hash_speed("crc32c", sec, generic_hash_speed_template);
if (mode > 300 && mode < 400) break;
- case 320:
- test_hash_speed("crct10dif", sec, generic_hash_speed_template);
- if (mode > 300 && mode < 400) break;
-
case 399:
break;
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index 2f00607039e2..ecddf921a9db 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -2046,16 +2046,6 @@ static const struct alg_test_desc alg_test_descs[] = {
}
}
}, {
- .alg = "crct10dif",
- .test = alg_test_hash,
- .fips_allowed = 1,
- .suite = {
- .hash = {
- .vecs = crct10dif_tv_template,
- .count = CRCT10DIF_TEST_VECTORS
- }
- }
- }, {
.alg = "cryptd(__driver-cbc-aes-aesni)",
.test = alg_test_null,
.fips_allowed = 1,
diff --git a/crypto/testmgr.h b/crypto/testmgr.h
index 7d44aa3d6b44..1e701bc075b9 100644
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
@@ -450,39 +450,6 @@ static struct hash_testvec rmd320_tv_template[] = {
}
};
-#define CRCT10DIF_TEST_VECTORS 3
-static struct hash_testvec crct10dif_tv_template[] = {
- {
- .plaintext = "abc",
- .psize = 3,
-#ifdef __LITTLE_ENDIAN
- .digest = "\x3b\x44",
-#else
- .digest = "\x44\x3b",
-#endif
- }, {
- .plaintext = "1234567890123456789012345678901234567890"
- "123456789012345678901234567890123456789",
- .psize = 79,
-#ifdef __LITTLE_ENDIAN
- .digest = "\x70\x4b",
-#else
- .digest = "\x4b\x70",
-#endif
- }, {
- .plaintext =
- "abcddddddddddddddddddddddddddddddddddddddddddddddddddddd",
- .psize = 56,
-#ifdef __LITTLE_ENDIAN
- .digest = "\xe3\x9c",
-#else
- .digest = "\x9c\xe3",
-#endif
- .np = 2,
- .tap = { 28, 28 }
- }
-};
-
/*
* SHA1 test vectors from from FIPS PUB 180-1
* Long vector from CAVS 5.0
diff --git a/drivers/acpi/acpi_memhotplug.c b/drivers/acpi/acpi_memhotplug.c
index c711d1144044..999adb5499c7 100644
--- a/drivers/acpi/acpi_memhotplug.c
+++ b/drivers/acpi/acpi_memhotplug.c
@@ -323,6 +323,7 @@ static int acpi_memory_device_add(struct acpi_device *device,
/* Get the range from the _CRS */
result = acpi_memory_get_device_resources(mem_device);
if (result) {
+ device->driver_data = NULL;
kfree(mem_device);
return result;
}
diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
index e9b01e35ac37..fd6c51cc3acb 100644
--- a/drivers/acpi/acpi_processor.c
+++ b/drivers/acpi/acpi_processor.c
@@ -340,7 +340,7 @@ static int acpi_processor_get_info(struct acpi_device *device)
*/
static DEFINE_PER_CPU(void *, processor_device_array);
-static int __cpuinit acpi_processor_add(struct acpi_device *device,
+static int acpi_processor_add(struct acpi_device *device,
const struct acpi_device_id *id)
{
struct acpi_processor *pr;
diff --git a/drivers/acpi/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h
index dfed26545ba2..d4a4901637cd 100644
--- a/drivers/acpi/acpica/aclocal.h
+++ b/drivers/acpi/acpica/aclocal.h
@@ -931,19 +931,6 @@ struct acpi_bit_register_info {
/* Structs and definitions for _OSI support and I/O port validation */
-#define ACPI_OSI_WIN_2000 0x01
-#define ACPI_OSI_WIN_XP 0x02
-#define ACPI_OSI_WIN_XP_SP1 0x03
-#define ACPI_OSI_WINSRV_2003 0x04
-#define ACPI_OSI_WIN_XP_SP2 0x05
-#define ACPI_OSI_WINSRV_2003_SP1 0x06
-#define ACPI_OSI_WIN_VISTA 0x07
-#define ACPI_OSI_WINSRV_2008 0x08
-#define ACPI_OSI_WIN_VISTA_SP1 0x09
-#define ACPI_OSI_WIN_VISTA_SP2 0x0A
-#define ACPI_OSI_WIN_7 0x0B
-#define ACPI_OSI_WIN_8 0x0C
-
#define ACPI_ALWAYS_ILLEGAL 0x00
struct acpi_interface_info {
diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h
index 3a50a34fe176..5da44e81dd4d 100644
--- a/drivers/acpi/internal.h
+++ b/drivers/acpi/internal.h
@@ -164,4 +164,13 @@ struct platform_device;
int acpi_create_platform_device(struct acpi_device *adev,
const struct acpi_device_id *id);
+/*--------------------------------------------------------------------------
+ Video
+ -------------------------------------------------------------------------- */
+#if defined(CONFIG_ACPI_VIDEO) || defined(CONFIG_ACPI_VIDEO_MODULE)
+bool acpi_video_backlight_quirks(void);
+#else
+static inline bool acpi_video_backlight_quirks(void) { return false; }
+#endif
+
#endif /* _ACPI_INTERNAL_H_ */
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
index 164d49569aeb..a5e9f4a5b281 100644
--- a/drivers/acpi/processor_core.c
+++ b/drivers/acpi/processor_core.c
@@ -253,7 +253,7 @@ static bool __init processor_physically_present(acpi_handle handle)
return true;
}
-static void __cpuinit acpi_set_pdc_bits(u32 *buf)
+static void acpi_set_pdc_bits(u32 *buf)
{
buf[0] = ACPI_PDC_REVISION_ID;
buf[1] = 1;
@@ -265,7 +265,7 @@ static void __cpuinit acpi_set_pdc_bits(u32 *buf)
arch_acpi_set_pdc_bits(buf);
}
-static struct acpi_object_list *__cpuinit acpi_processor_alloc_pdc(void)
+static struct acpi_object_list *acpi_processor_alloc_pdc(void)
{
struct acpi_object_list *obj_list;
union acpi_object *obj;
@@ -308,7 +308,7 @@ static struct acpi_object_list *__cpuinit acpi_processor_alloc_pdc(void)
* _PDC is required for a BIOS-OS handshake for most of the newer
* ACPI processor features.
*/
-static int __cpuinit
+static int
acpi_processor_eval_pdc(acpi_handle handle, struct acpi_object_list *pdc_in)
{
acpi_status status = AE_OK;
@@ -336,7 +336,7 @@ acpi_processor_eval_pdc(acpi_handle handle, struct acpi_object_list *pdc_in)
return status;
}
-void __cpuinit acpi_processor_set_pdc(acpi_handle handle)
+void acpi_processor_set_pdc(acpi_handle handle)
{
struct acpi_object_list *obj_list;
diff --git a/drivers/acpi/processor_driver.c b/drivers/acpi/processor_driver.c
index 823be116619e..870eaf5fa547 100644
--- a/drivers/acpi/processor_driver.c
+++ b/drivers/acpi/processor_driver.c
@@ -118,9 +118,9 @@ static void acpi_processor_notify(acpi_handle handle, u32 event, void *data)
return;
}
-static __cpuinit int __acpi_processor_start(struct acpi_device *device);
+static int __acpi_processor_start(struct acpi_device *device);
-static int __cpuinit acpi_cpu_soft_notify(struct notifier_block *nfb,
+static int acpi_cpu_soft_notify(struct notifier_block *nfb,
unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long)hcpu;
@@ -162,7 +162,7 @@ static struct notifier_block __refdata acpi_cpu_notifier =
.notifier_call = acpi_cpu_soft_notify,
};
-static __cpuinit int __acpi_processor_start(struct acpi_device *device)
+static int __acpi_processor_start(struct acpi_device *device)
{
struct acpi_processor *pr = acpi_driver_data(device);
acpi_status status;
@@ -226,7 +226,7 @@ static __cpuinit int __acpi_processor_start(struct acpi_device *device)
return result;
}
-static int __cpuinit acpi_processor_start(struct device *dev)
+static int acpi_processor_start(struct device *dev)
{
struct acpi_device *device;
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 0461ccc92c54..f98dd00b51a9 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -96,9 +96,7 @@ static int set_max_cstate(const struct dmi_system_id *id)
return 0;
}
-/* Actually this shouldn't be __cpuinitdata, would be better to fix the
- callers to only run once -AK */
-static struct dmi_system_id __cpuinitdata processor_power_dmi_table[] = {
+static struct dmi_system_id processor_power_dmi_table[] = {
{ set_max_cstate, "Clevo 5600D", {
DMI_MATCH(DMI_BIOS_VENDOR,"Phoenix Technologies LTD"),
DMI_MATCH(DMI_BIOS_VERSION,"SHE845M0.86C.0013.D.0302131307")},
@@ -1165,7 +1163,7 @@ int acpi_processor_cst_has_changed(struct acpi_processor *pr)
static int acpi_processor_registered;
-int __cpuinit acpi_processor_power_init(struct acpi_processor *pr)
+int acpi_processor_power_init(struct acpi_processor *pr)
{
acpi_status status = 0;
int retval;
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 10985573aaa7..8a46c924effd 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -352,10 +352,12 @@ static void acpi_scan_bus_device_check(acpi_handle handle, u32 ost_source)
mutex_lock(&acpi_scan_lock);
lock_device_hotplug();
- acpi_bus_get_device(handle, &device);
- if (device) {
- dev_warn(&device->dev, "Attempt to re-insert\n");
- goto out;
+ if (ost_source != ACPI_NOTIFY_BUS_CHECK) {
+ acpi_bus_get_device(handle, &device);
+ if (device) {
+ dev_warn(&device->dev, "Attempt to re-insert\n");
+ goto out;
+ }
}
acpi_evaluate_hotplug_ost(handle, ost_source,
ACPI_OST_SC_INSERT_IN_PROGRESS, NULL);
@@ -1981,6 +1983,9 @@ static acpi_status acpi_bus_device_attach(acpi_handle handle, u32 lvl_not_used,
if (acpi_bus_get_device(handle, &device))
return AE_CTRL_DEPTH;
+ if (device->handler)
+ return AE_OK;
+
ret = acpi_scan_attach_handler(device);
if (ret)
return ret > 0 ? AE_OK : AE_CTRL_DEPTH;
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
index 5d7075d25700..0ec434d2586d 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -44,6 +44,8 @@
#include <linux/suspend.h>
#include <acpi/video.h>
+#include "internal.h"
+
#define PREFIX "ACPI: "
#define ACPI_VIDEO_BUS_NAME "Video Bus"
@@ -450,6 +452,14 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
},
{
.callback = video_ignore_initial_backlight,
+ .ident = "Fujitsu E753",
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "FUJITSU"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E753"),
+ },
+ },
+ {
+ .callback = video_ignore_initial_backlight,
.ident = "HP Pavilion dm4",
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
@@ -898,6 +908,9 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
device->cap._DDC = 1;
}
+ if (acpi_video_init_brightness(device))
+ return;
+
if (acpi_video_backlight_support()) {
struct backlight_properties props;
struct pci_dev *pdev;
@@ -907,9 +920,6 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
static int count = 0;
char *name;
- result = acpi_video_init_brightness(device);
- if (result)
- return;
name = kasprintf(GFP_KERNEL, "acpi_video%d", count);
if (!name)
return;
@@ -969,6 +979,11 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
if (result)
printk(KERN_ERR PREFIX "Create sysfs link\n");
+ } else {
+ /* Remove the brightness object. */
+ kfree(device->brightness->levels);
+ kfree(device->brightness);
+ device->brightness = NULL;
}
}
@@ -1532,14 +1547,20 @@ static int acpi_video_bus_put_devices(struct acpi_video_bus *video)
/* acpi_video interface */
+/*
+ * Win8 requires setting bit2 of _DOS to let firmware know it shouldn't
+ * preform any automatic brightness change on receiving a notification.
+ */
static int acpi_video_bus_start_devices(struct acpi_video_bus *video)
{
- return acpi_video_bus_DOS(video, 0, 0);
+ return acpi_video_bus_DOS(video, 0,
+ acpi_video_backlight_quirks() ? 1 : 0);
}
static int acpi_video_bus_stop_devices(struct acpi_video_bus *video)
{
- return acpi_video_bus_DOS(video, 0, 1);
+ return acpi_video_bus_DOS(video, 0,
+ acpi_video_backlight_quirks() ? 0 : 1);
}
static void acpi_video_bus_notify(struct acpi_device *device, u32 event)
diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
index e6bd910bc6ed..c3397748ba46 100644
--- a/drivers/acpi/video_detect.c
+++ b/drivers/acpi/video_detect.c
@@ -38,6 +38,8 @@
#include <linux/dmi.h>
#include <linux/pci.h>
+#include "internal.h"
+
#define PREFIX "ACPI: "
ACPI_MODULE_NAME("video");
@@ -234,6 +236,12 @@ static void acpi_video_caps_check(void)
acpi_video_get_capabilities(NULL);
}
+bool acpi_video_backlight_quirks(void)
+{
+ return acpi_gbl_osi_data >= ACPI_OSI_WIN_8;
+}
+EXPORT_SYMBOL(acpi_video_backlight_quirks);
+
/* Promote the vendor interface instead of the generic video module.
* This function allow DMI blacklists to be implemented by externals
* platform drivers instead of putting a big blacklist in video_detect.c
diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 80dc988f01e4..4e737728aee2 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -97,6 +97,15 @@ config SATA_AHCI_PLATFORM
If unsure, say N.
+config AHCI_IMX
+ tristate "Freescale i.MX AHCI SATA support"
+ depends on SATA_AHCI_PLATFORM && MFD_SYSCON
+ help
+ This option enables support for the Freescale i.MX SoC's
+ onboard AHCI SATA.
+
+ If unsure, say N.
+
config SATA_FSL
tristate "Freescale 3.0Gbps SATA support"
depends on FSL_SOC
@@ -107,7 +116,7 @@ config SATA_FSL
If unsure, say N.
config SATA_INIC162X
- tristate "Initio 162x SATA support"
+ tristate "Initio 162x SATA support (Very Experimental)"
depends on PCI
help
This option enables support for Initio 162x Serial ATA.
diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile
index c04d0fd038a3..46518c622460 100644
--- a/drivers/ata/Makefile
+++ b/drivers/ata/Makefile
@@ -10,6 +10,7 @@ obj-$(CONFIG_SATA_INIC162X) += sata_inic162x.o
obj-$(CONFIG_SATA_SIL24) += sata_sil24.o
obj-$(CONFIG_SATA_DWC) += sata_dwc_460ex.o
obj-$(CONFIG_SATA_HIGHBANK) += sata_highbank.o libahci.o
+obj-$(CONFIG_AHCI_IMX) += ahci_imx.o
# SFF w/ custom DMA
obj-$(CONFIG_PDC_ADMA) += pdc_adma.o
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 5064f3ea20f1..db4380d70031 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -1146,11 +1146,18 @@ int ahci_host_activate(struct ata_host *host, int irq, unsigned int n_msis)
return rc;
for (i = 0; i < host->n_ports; i++) {
+ const char* desc;
struct ahci_port_priv *pp = host->ports[i]->private_data;
+ /* pp is NULL for dummy ports */
+ if (pp)
+ desc = pp->irq_desc;
+ else
+ desc = dev_driver_string(host->dev);
+
rc = devm_request_threaded_irq(host->dev,
irq + i, ahci_hw_interrupt, ahci_thread_fn, IRQF_SHARED,
- pp->irq_desc, host->ports[i]);
+ desc, host->ports[i]);
if (rc)
goto out_free_irqs;
}
diff --git a/drivers/ata/ahci_imx.c b/drivers/ata/ahci_imx.c
new file mode 100644
index 000000000000..58debb0acc3a
--- /dev/null
+++ b/drivers/ata/ahci_imx.c
@@ -0,0 +1,236 @@
+/*
+ * Freescale IMX AHCI SATA platform driver
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * based on the AHCI SATA platform driver by Jeff Garzik and Anton Vorontsov
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+#include <linux/ahci_platform.h>
+#include <linux/of_device.h>
+#include <linux/mfd/syscon.h>
+#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
+#include "ahci.h"
+
+enum {
+ HOST_TIMER1MS = 0xe0, /* Timer 1-ms */
+};
+
+struct imx_ahci_priv {
+ struct platform_device *ahci_pdev;
+ struct clk *sata_ref_clk;
+ struct clk *ahb_clk;
+ struct regmap *gpr;
+};
+
+static int imx6q_sata_init(struct device *dev, void __iomem *mmio)
+{
+ int ret = 0;
+ unsigned int reg_val;
+ struct imx_ahci_priv *imxpriv = dev_get_drvdata(dev->parent);
+
+ imxpriv->gpr =
+ syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr");
+ if (IS_ERR(imxpriv->gpr)) {
+ dev_err(dev, "failed to find fsl,imx6q-iomux-gpr regmap\n");
+ return PTR_ERR(imxpriv->gpr);
+ }
+
+ ret = clk_prepare_enable(imxpriv->sata_ref_clk);
+ if (ret < 0) {
+ dev_err(dev, "prepare-enable sata_ref clock err:%d\n", ret);
+ return ret;
+ }
+
+ /*
+ * set PHY Paremeters, two steps to configure the GPR13,
+ * one write for rest of parameters, mask of first write
+ * is 0x07fffffd, and the other one write for setting
+ * the mpll_clk_en.
+ */
+ regmap_update_bits(imxpriv->gpr, 0x34, IMX6Q_GPR13_SATA_RX_EQ_VAL_MASK
+ | IMX6Q_GPR13_SATA_RX_LOS_LVL_MASK
+ | IMX6Q_GPR13_SATA_RX_DPLL_MODE_MASK
+ | IMX6Q_GPR13_SATA_SPD_MODE_MASK
+ | IMX6Q_GPR13_SATA_MPLL_SS_EN
+ | IMX6Q_GPR13_SATA_TX_ATTEN_MASK
+ | IMX6Q_GPR13_SATA_TX_BOOST_MASK
+ | IMX6Q_GPR13_SATA_TX_LVL_MASK
+ | IMX6Q_GPR13_SATA_TX_EDGE_RATE
+ , IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB
+ | IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M
+ | IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F
+ | IMX6Q_GPR13_SATA_SPD_MODE_3P0G
+ | IMX6Q_GPR13_SATA_MPLL_SS_EN
+ | IMX6Q_GPR13_SATA_TX_ATTEN_9_16
+ | IMX6Q_GPR13_SATA_TX_BOOST_3_33_DB
+ | IMX6Q_GPR13_SATA_TX_LVL_1_025_V);
+ regmap_update_bits(imxpriv->gpr, 0x34, IMX6Q_GPR13_SATA_MPLL_CLK_EN,
+ IMX6Q_GPR13_SATA_MPLL_CLK_EN);
+ usleep_range(100, 200);
+
+ /*
+ * Configure the HWINIT bits of the HOST_CAP and HOST_PORTS_IMPL,
+ * and IP vendor specific register HOST_TIMER1MS.
+ * Configure CAP_SSS (support stagered spin up).
+ * Implement the port0.
+ * Get the ahb clock rate, and configure the TIMER1MS register.
+ */
+ reg_val = readl(mmio + HOST_CAP);
+ if (!(reg_val & HOST_CAP_SSS)) {
+ reg_val |= HOST_CAP_SSS;
+ writel(reg_val, mmio + HOST_CAP);
+ }
+ reg_val = readl(mmio + HOST_PORTS_IMPL);
+ if (!(reg_val & 0x1)) {
+ reg_val |= 0x1;
+ writel(reg_val, mmio + HOST_PORTS_IMPL);
+ }
+
+ reg_val = clk_get_rate(imxpriv->ahb_clk) / 1000;
+ writel(reg_val, mmio + HOST_TIMER1MS);
+
+ return 0;
+}
+
+static void imx6q_sata_exit(struct device *dev)
+{
+ struct imx_ahci_priv *imxpriv = dev_get_drvdata(dev->parent);
+
+ regmap_update_bits(imxpriv->gpr, 0x34, IMX6Q_GPR13_SATA_MPLL_CLK_EN,
+ !IMX6Q_GPR13_SATA_MPLL_CLK_EN);
+ clk_disable_unprepare(imxpriv->sata_ref_clk);
+}
+
+static struct ahci_platform_data imx6q_sata_pdata = {
+ .init = imx6q_sata_init,
+ .exit = imx6q_sata_exit,
+};
+
+static const struct of_device_id imx_ahci_of_match[] = {
+ { .compatible = "fsl,imx6q-ahci", .data = &imx6q_sata_pdata},
+ {},
+};
+MODULE_DEVICE_TABLE(of, imx_ahci_of_match);
+
+static int imx_ahci_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct resource *mem, *irq, res[2];
+ const struct of_device_id *of_id;
+ const struct ahci_platform_data *pdata = NULL;
+ struct imx_ahci_priv *imxpriv;
+ struct device *ahci_dev;
+ struct platform_device *ahci_pdev;
+ int ret;
+
+ imxpriv = devm_kzalloc(dev, sizeof(*imxpriv), GFP_KERNEL);
+ if (!imxpriv) {
+ dev_err(dev, "can't alloc ahci_host_priv\n");
+ return -ENOMEM;
+ }
+
+ ahci_pdev = platform_device_alloc("ahci", -1);
+ if (!ahci_pdev)
+ return -ENODEV;
+
+ ahci_dev = &ahci_pdev->dev;
+ ahci_dev->parent = dev;
+
+ imxpriv->ahb_clk = devm_clk_get(dev, "ahb");
+ if (IS_ERR(imxpriv->ahb_clk)) {
+ dev_err(dev, "can't get ahb clock.\n");
+ ret = PTR_ERR(imxpriv->ahb_clk);
+ goto err_out;
+ }
+
+ imxpriv->sata_ref_clk = devm_clk_get(dev, "sata_ref");
+ if (IS_ERR(imxpriv->sata_ref_clk)) {
+ dev_err(dev, "can't get sata_ref clock.\n");
+ ret = PTR_ERR(imxpriv->sata_ref_clk);
+ goto err_out;
+ }
+
+ imxpriv->ahci_pdev = ahci_pdev;
+ platform_set_drvdata(pdev, imxpriv);
+
+ of_id = of_match_device(imx_ahci_of_match, dev);
+ if (of_id) {
+ pdata = of_id->data;
+ } else {
+ ret = -EINVAL;
+ goto err_out;
+ }
+
+ mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
+ if (!mem || !irq) {
+ dev_err(dev, "no mmio/irq resource\n");
+ ret = -ENOMEM;
+ goto err_out;
+ }
+
+ res[0] = *mem;
+ res[1] = *irq;
+
+ ahci_dev->coherent_dma_mask = DMA_BIT_MASK(32);
+ ahci_dev->dma_mask = &ahci_dev->coherent_dma_mask;
+ ahci_dev->of_node = dev->of_node;
+
+ ret = platform_device_add_resources(ahci_pdev, res, 2);
+ if (ret)
+ goto err_out;
+
+ ret = platform_device_add_data(ahci_pdev, pdata, sizeof(*pdata));
+ if (ret)
+ goto err_out;
+
+ ret = platform_device_add(ahci_pdev);
+ if (ret) {
+err_out:
+ platform_device_put(ahci_pdev);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int imx_ahci_remove(struct platform_device *pdev)
+{
+ struct imx_ahci_priv *imxpriv = platform_get_drvdata(pdev);
+ struct platform_device *ahci_pdev = imxpriv->ahci_pdev;
+
+ platform_device_unregister(ahci_pdev);
+ return 0;
+}
+
+static struct platform_driver imx_ahci_driver = {
+ .probe = imx_ahci_probe,
+ .remove = imx_ahci_remove,
+ .driver = {
+ .name = "ahci-imx",
+ .owner = THIS_MODULE,
+ .of_match_table = imx_ahci_of_match,
+ },
+};
+module_platform_driver(imx_ahci_driver);
+
+MODULE_DESCRIPTION("Freescale i.MX AHCI SATA platform driver");
+MODULE_AUTHOR("Richard Zhu <Hong-Xing.Zhu@freescale.com>");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("ahci:imx");
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
index b52a10c8eeb9..513ad7ed0c99 100644
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
@@ -330,7 +330,7 @@ static const struct pci_device_id piix_pci_tbl[] = {
/* SATA Controller IDE (Wellsburg) */
{ 0x8086, 0x8d00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
/* SATA Controller IDE (Wellsburg) */
- { 0x8086, 0x8d08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
+ { 0x8086, 0x8d08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_snb },
/* SATA Controller IDE (Wellsburg) */
{ 0x8086, 0x8d60, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
/* SATA Controller IDE (Wellsburg) */
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 83c08907e042..b1e880a3c3da 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -206,8 +206,10 @@ static ssize_t ata_scsi_park_store(struct device *device,
unsigned long flags;
int rc;
- rc = strict_strtol(buf, 10, &input);
- if (rc || input < -2)
+ rc = kstrtol(buf, 10, &input);
+ if (rc)
+ return rc;
+ if (input < -2)
return -EINVAL;
if (input > ATA_TMOUT_MAX_PARK) {
rc = -EOVERFLOW;
diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c
index e45131748248..5c54d957370a 100644
--- a/drivers/ata/sata_inic162x.c
+++ b/drivers/ata/sata_inic162x.c
@@ -6,6 +6,18 @@
*
* This file is released under GPL v2.
*
+ * **** WARNING ****
+ *
+ * This driver never worked properly and unfortunately data corruption is
+ * relatively common. There isn't anyone working on the driver and there's
+ * no support from the vendor. Do not use this driver in any production
+ * environment.
+ *
+ * http://thread.gmane.org/gmane.linux.debian.devel.bugs.rc/378525/focus=54491
+ * https://bugzilla.kernel.org/show_bug.cgi?id=60565
+ *
+ * *****************
+ *
* This controller is eccentric and easily locks up if something isn't
* right. Documentation is available at initio's website but it only
* documents registers (not programming model).
@@ -807,6 +819,8 @@ static int inic_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
ata_print_version_once(&pdev->dev, DRV_VERSION);
+ dev_alert(&pdev->dev, "inic162x support is broken with common data corruption issues and will be disabled by default, contact linux-ide@vger.kernel.org if in production use\n");
+
/* alloc host */
host = ata_host_alloc_pinfo(&pdev->dev, ppi, NR_PORTS);
hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
diff --git a/drivers/base/core.c b/drivers/base/core.c
index dc3ea237f086..8856d74545d9 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -528,9 +528,12 @@ static int device_add_attrs(struct device *dev)
int error;
if (class) {
- error = device_add_attributes(dev, class->dev_attrs);
+ error = device_add_groups(dev, class->dev_groups);
if (error)
return error;
+ error = device_add_attributes(dev, class->dev_attrs);
+ if (error)
+ goto err_remove_class_groups;
error = device_add_bin_attributes(dev, class->dev_bin_attrs);
if (error)
goto err_remove_class_attrs;
@@ -563,6 +566,9 @@ static int device_add_attrs(struct device *dev)
err_remove_class_attrs:
if (class)
device_remove_attributes(dev, class->dev_attrs);
+ err_remove_class_groups:
+ if (class)
+ device_remove_groups(dev, class->dev_groups);
return error;
}
@@ -581,6 +587,7 @@ static void device_remove_attrs(struct device *dev)
if (class) {
device_remove_attributes(dev, class->dev_attrs);
device_remove_bin_attributes(dev, class->dev_bin_attrs);
+ device_remove_groups(dev, class->dev_groups);
}
}
@@ -1667,34 +1674,11 @@ static void device_create_release(struct device *dev)
kfree(dev);
}
-/**
- * device_create_vargs - creates a device and registers it with sysfs
- * @class: pointer to the struct class that this device should be registered to
- * @parent: pointer to the parent struct device of this new device, if any
- * @devt: the dev_t for the char device to be added
- * @drvdata: the data to be added to the device for callbacks
- * @fmt: string for the device's name
- * @args: va_list for the device's name
- *
- * This function can be used by char device classes. A struct device
- * will be created in sysfs, registered to the specified class.
- *
- * A "dev" file will be created, showing the dev_t for the device, if
- * the dev_t is not 0,0.
- * If a pointer to a parent struct device is passed in, the newly created
- * struct device will be a child of that device in sysfs.
- * The pointer to the struct device will be returned from the call.
- * Any further sysfs files that might be required can be created using this
- * pointer.
- *
- * Returns &struct device pointer on success, or ERR_PTR() on error.
- *
- * Note: the struct class passed to this function must have previously
- * been created with a call to class_create().
- */
-struct device *device_create_vargs(struct class *class, struct device *parent,
- dev_t devt, void *drvdata, const char *fmt,
- va_list args)
+static struct device *
+device_create_groups_vargs(struct class *class, struct device *parent,
+ dev_t devt, void *drvdata,
+ const struct attribute_group **groups,
+ const char *fmt, va_list args)
{
struct device *dev = NULL;
int retval = -ENODEV;
@@ -1711,6 +1695,7 @@ struct device *device_create_vargs(struct class *class, struct device *parent,
dev->devt = devt;
dev->class = class;
dev->parent = parent;
+ dev->groups = groups;
dev->release = device_create_release;
dev_set_drvdata(dev, drvdata);
@@ -1728,6 +1713,39 @@ error:
put_device(dev);
return ERR_PTR(retval);
}
+
+/**
+ * device_create_vargs - creates a device and registers it with sysfs
+ * @class: pointer to the struct class that this device should be registered to
+ * @parent: pointer to the parent struct device of this new device, if any
+ * @devt: the dev_t for the char device to be added
+ * @drvdata: the data to be added to the device for callbacks
+ * @fmt: string for the device's name
+ * @args: va_list for the device's name
+ *
+ * This function can be used by char device classes. A struct device
+ * will be created in sysfs, registered to the specified class.
+ *
+ * A "dev" file will be created, showing the dev_t for the device, if
+ * the dev_t is not 0,0.
+ * If a pointer to a parent struct device is passed in, the newly created
+ * struct device will be a child of that device in sysfs.
+ * The pointer to the struct device will be returned from the call.
+ * Any further sysfs files that might be required can be created using this
+ * pointer.
+ *
+ * Returns &struct device pointer on success, or ERR_PTR() on error.
+ *
+ * Note: the struct class passed to this function must have previously
+ * been created with a call to class_create().
+ */
+struct device *device_create_vargs(struct class *class, struct device *parent,
+ dev_t devt, void *drvdata, const char *fmt,
+ va_list args)
+{
+ return device_create_groups_vargs(class, parent, devt, drvdata, NULL,
+ fmt, args);
+}
EXPORT_SYMBOL_GPL(device_create_vargs);
/**
@@ -1767,6 +1785,50 @@ struct device *device_create(struct class *class, struct device *parent,
}
EXPORT_SYMBOL_GPL(device_create);
+/**
+ * device_create_with_groups - creates a device and registers it with sysfs
+ * @class: pointer to the struct class that this device should be registered to
+ * @parent: pointer to the parent struct device of this new device, if any
+ * @devt: the dev_t for the char device to be added
+ * @drvdata: the data to be added to the device for callbacks
+ * @groups: NULL-terminated list of attribute groups to be created
+ * @fmt: string for the device's name
+ *
+ * This function can be used by char device classes. A struct device
+ * will be created in sysfs, registered to the specified class.
+ * Additional attributes specified in the groups parameter will also
+ * be created automatically.
+ *
+ * A "dev" file will be created, showing the dev_t for the device, if
+ * the dev_t is not 0,0.
+ * If a pointer to a parent struct device is passed in, the newly created
+ * struct device will be a child of that device in sysfs.
+ * The pointer to the struct device will be returned from the call.
+ * Any further sysfs files that might be required can be created using this
+ * pointer.
+ *
+ * Returns &struct device pointer on success, or ERR_PTR() on error.
+ *
+ * Note: the struct class passed to this function must have previously
+ * been created with a call to class_create().
+ */
+struct device *device_create_with_groups(struct class *class,
+ struct device *parent, dev_t devt,
+ void *drvdata,
+ const struct attribute_group **groups,
+ const char *fmt, ...)
+{
+ va_list vargs;
+ struct device *dev;
+
+ va_start(vargs, fmt);
+ dev = device_create_groups_vargs(class, parent, devt, drvdata, groups,
+ fmt, vargs);
+ va_end(vargs);
+ return dev;
+}
+EXPORT_SYMBOL_GPL(device_create_with_groups);
+
static int __match_devt(struct device *dev, const void *data)
{
const dev_t *devt = data;
diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c
index a16d20e389f0..4c358bc44c72 100644
--- a/drivers/base/cpu.c
+++ b/drivers/base/cpu.c
@@ -278,7 +278,7 @@ static void cpu_device_release(struct device *dev)
*
* Initialize and register the CPU device.
*/
-int __cpuinit register_cpu(struct cpu *cpu, int num)
+int register_cpu(struct cpu *cpu, int num)
{
int error;
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 15789875128e..3c3197a8de41 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -522,6 +522,7 @@ static void platform_drv_shutdown(struct device *_dev)
/**
* __platform_driver_register - register a driver for platform-level devices
* @drv: platform driver structure
+ * @owner: owning module/driver
*/
int __platform_driver_register(struct platform_driver *drv,
struct module *owner)
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index 95920583e31e..e0d0c7d8a5c5 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -1853,7 +1853,7 @@ int regmap_async_complete(struct regmap *map)
int ret;
/* Nothing to do with no async support */
- if (!map->bus->async_write)
+ if (!map->bus || !map->bus->async_write)
return 0;
trace_regmap_async_complete_start(map->dev);
diff --git a/drivers/base/topology.c b/drivers/base/topology.c
index ae989c57cd5e..2f5919ed91ab 100644
--- a/drivers/base/topology.c
+++ b/drivers/base/topology.c
@@ -143,22 +143,22 @@ static struct attribute_group topology_attr_group = {
};
/* Add/Remove cpu_topology interface for CPU device */
-static int __cpuinit topology_add_dev(unsigned int cpu)
+static int topology_add_dev(unsigned int cpu)
{
struct device *dev = get_cpu_device(cpu);
return sysfs_create_group(&dev->kobj, &topology_attr_group);
}
-static void __cpuinit topology_remove_dev(unsigned int cpu)
+static void topology_remove_dev(unsigned int cpu)
{
struct device *dev = get_cpu_device(cpu);
sysfs_remove_group(&dev->kobj, &topology_attr_group);
}
-static int __cpuinit topology_cpu_callback(struct notifier_block *nfb,
- unsigned long action, void *hcpu)
+static int topology_cpu_callback(struct notifier_block *nfb,
+ unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long)hcpu;
int rc = 0;
@@ -178,7 +178,7 @@ static int __cpuinit topology_cpu_callback(struct notifier_block *nfb,
return notifier_from_errno(rc);
}
-static int __cpuinit topology_sysfs_init(void)
+static int topology_sysfs_init(void)
{
int cpu;
int rc;
diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
index b81ddfea1da0..e07a5fd58ad7 100644
--- a/drivers/block/Kconfig
+++ b/drivers/block/Kconfig
@@ -532,11 +532,11 @@ config BLK_DEV_RBD
If unsure, say N.
config BLK_DEV_RSXX
- tristate "IBM FlashSystem 70/80 PCIe SSD Device Driver"
+ tristate "IBM Flash Adapter 900GB Full Height PCIe Device Driver"
depends on PCI
help
Device driver for IBM's high speed PCIe SSD
- storage devices: FlashSystem-70 and FlashSystem-80.
+ storage device: Flash Adapter 900GB Full Height.
To compile this driver as a module, choose M here: the
module will be called rsxx.
diff --git a/drivers/block/drbd/drbd_actlog.c b/drivers/block/drbd/drbd_actlog.c
index 6608076dc39e..28c73ca320a8 100644
--- a/drivers/block/drbd/drbd_actlog.c
+++ b/drivers/block/drbd/drbd_actlog.c
@@ -659,6 +659,27 @@ void drbd_al_shrink(struct drbd_conf *mdev)
wake_up(&mdev->al_wait);
}
+int drbd_initialize_al(struct drbd_conf *mdev, void *buffer)
+{
+ struct al_transaction_on_disk *al = buffer;
+ struct drbd_md *md = &mdev->ldev->md;
+ sector_t al_base = md->md_offset + md->al_offset;
+ int al_size_4k = md->al_stripes * md->al_stripe_size_4k;
+ int i;
+
+ memset(al, 0, 4096);
+ al->magic = cpu_to_be32(DRBD_AL_MAGIC);
+ al->transaction_type = cpu_to_be16(AL_TR_INITIALIZED);
+ al->crc32c = cpu_to_be32(crc32c(0, al, 4096));
+
+ for (i = 0; i < al_size_4k; i++) {
+ int err = drbd_md_sync_page_io(mdev, mdev->ldev, al_base + i * 8, WRITE);
+ if (err)
+ return err;
+ }
+ return 0;
+}
+
static int w_update_odbm(struct drbd_work *w, int unused)
{
struct update_odbm_work *udw = container_of(w, struct update_odbm_work, w);
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h
index f943aacfdad8..2d7f608d181c 100644
--- a/drivers/block/drbd/drbd_int.h
+++ b/drivers/block/drbd/drbd_int.h
@@ -832,6 +832,7 @@ struct drbd_tconn { /* is a resource from the config file */
unsigned susp_nod:1; /* IO suspended because no data */
unsigned susp_fen:1; /* IO suspended because fence peer handler runs */
struct mutex cstate_mutex; /* Protects graceful disconnects */
+ unsigned int connect_cnt; /* Inc each time a connection is established */
unsigned long flags;
struct net_conf *net_conf; /* content protected by rcu */
@@ -1132,6 +1133,7 @@ extern void drbd_mdev_cleanup(struct drbd_conf *mdev);
void drbd_print_uuids(struct drbd_conf *mdev, const char *text);
extern void conn_md_sync(struct drbd_tconn *tconn);
+extern void drbd_md_write(struct drbd_conf *mdev, void *buffer);
extern void drbd_md_sync(struct drbd_conf *mdev);
extern int drbd_md_read(struct drbd_conf *mdev, struct drbd_backing_dev *bdev);
extern void drbd_uuid_set(struct drbd_conf *mdev, int idx, u64 val) __must_hold(local);
@@ -1466,8 +1468,16 @@ extern void drbd_suspend_io(struct drbd_conf *mdev);
extern void drbd_resume_io(struct drbd_conf *mdev);
extern char *ppsize(char *buf, unsigned long long size);
extern sector_t drbd_new_dev_size(struct drbd_conf *, struct drbd_backing_dev *, sector_t, int);
-enum determine_dev_size { dev_size_error = -1, unchanged = 0, shrunk = 1, grew = 2 };
-extern enum determine_dev_size drbd_determine_dev_size(struct drbd_conf *, enum dds_flags) __must_hold(local);
+enum determine_dev_size {
+ DS_ERROR_SHRINK = -3,
+ DS_ERROR_SPACE_MD = -2,
+ DS_ERROR = -1,
+ DS_UNCHANGED = 0,
+ DS_SHRUNK = 1,
+ DS_GREW = 2
+};
+extern enum determine_dev_size
+drbd_determine_dev_size(struct drbd_conf *, enum dds_flags, struct resize_parms *) __must_hold(local);
extern void resync_after_online_grow(struct drbd_conf *);
extern void drbd_reconsider_max_bio_size(struct drbd_conf *mdev);
extern enum drbd_state_rv drbd_set_role(struct drbd_conf *mdev,
@@ -1633,6 +1643,7 @@ extern int __drbd_set_out_of_sync(struct drbd_conf *mdev, sector_t sector,
#define drbd_set_out_of_sync(mdev, sector, size) \
__drbd_set_out_of_sync(mdev, sector, size, __FILE__, __LINE__)
extern void drbd_al_shrink(struct drbd_conf *mdev);
+extern int drbd_initialize_al(struct drbd_conf *, void *);
/* drbd_nl.c */
/* state info broadcast */
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index a5dca6affcbb..55635edf563b 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -2762,8 +2762,6 @@ int __init drbd_init(void)
/*
* allocate all necessary structs
*/
- err = -ENOMEM;
-
init_waitqueue_head(&drbd_pp_wait);
drbd_proc = NULL; /* play safe for drbd_cleanup */
@@ -2773,6 +2771,7 @@ int __init drbd_init(void)
if (err)
goto fail;
+ err = -ENOMEM;
drbd_proc = proc_create_data("drbd", S_IFREG | S_IRUGO , NULL, &drbd_proc_fops, NULL);
if (!drbd_proc) {
printk(KERN_ERR "drbd: unable to register proc file\n");
@@ -2803,7 +2802,6 @@ int __init drbd_init(void)
fail:
drbd_cleanup();
if (err == -ENOMEM)
- /* currently always the case */
printk(KERN_ERR "drbd: ran out of memory\n");
else
printk(KERN_ERR "drbd: initialization failure\n");
@@ -2881,34 +2879,14 @@ struct meta_data_on_disk {
u8 reserved_u8[4096 - (7*8 + 10*4)];
} __packed;
-/**
- * drbd_md_sync() - Writes the meta data super block if the MD_DIRTY flag bit is set
- * @mdev: DRBD device.
- */
-void drbd_md_sync(struct drbd_conf *mdev)
+
+
+void drbd_md_write(struct drbd_conf *mdev, void *b)
{
- struct meta_data_on_disk *buffer;
+ struct meta_data_on_disk *buffer = b;
sector_t sector;
int i;
- /* Don't accidentally change the DRBD meta data layout. */
- BUILD_BUG_ON(UI_SIZE != 4);
- BUILD_BUG_ON(sizeof(struct meta_data_on_disk) != 4096);
-
- del_timer(&mdev->md_sync_timer);
- /* timer may be rearmed by drbd_md_mark_dirty() now. */
- if (!test_and_clear_bit(MD_DIRTY, &mdev->flags))
- return;
-
- /* We use here D_FAILED and not D_ATTACHING because we try to write
- * metadata even if we detach due to a disk failure! */
- if (!get_ldev_if_state(mdev, D_FAILED))
- return;
-
- buffer = drbd_md_get_buffer(mdev);
- if (!buffer)
- goto out;
-
memset(buffer, 0, sizeof(*buffer));
buffer->la_size_sect = cpu_to_be64(drbd_get_capacity(mdev->this_bdev));
@@ -2937,6 +2915,35 @@ void drbd_md_sync(struct drbd_conf *mdev)
dev_err(DEV, "meta data update failed!\n");
drbd_chk_io_error(mdev, 1, DRBD_META_IO_ERROR);
}
+}
+
+/**
+ * drbd_md_sync() - Writes the meta data super block if the MD_DIRTY flag bit is set
+ * @mdev: DRBD device.
+ */
+void drbd_md_sync(struct drbd_conf *mdev)
+{
+ struct meta_data_on_disk *buffer;
+
+ /* Don't accidentally change the DRBD meta data layout. */
+ BUILD_BUG_ON(UI_SIZE != 4);
+ BUILD_BUG_ON(sizeof(struct meta_data_on_disk) != 4096);
+
+ del_timer(&mdev->md_sync_timer);
+ /* timer may be rearmed by drbd_md_mark_dirty() now. */
+ if (!test_and_clear_bit(MD_DIRTY, &mdev->flags))
+ return;
+
+ /* We use here D_FAILED and not D_ATTACHING because we try to write
+ * metadata even if we detach due to a disk failure! */
+ if (!get_ldev_if_state(mdev, D_FAILED))
+ return;
+
+ buffer = drbd_md_get_buffer(mdev);
+ if (!buffer)
+ goto out;
+
+ drbd_md_write(mdev, buffer);
/* Update mdev->ldev->md.la_size_sect,
* since we updated it on metadata. */
diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
index 9e3f441e7e84..8cc1e640f485 100644
--- a/drivers/block/drbd/drbd_nl.c
+++ b/drivers/block/drbd/drbd_nl.c
@@ -417,6 +417,7 @@ static enum drbd_fencing_p highest_fencing_policy(struct drbd_tconn *tconn)
bool conn_try_outdate_peer(struct drbd_tconn *tconn)
{
+ unsigned int connect_cnt;
union drbd_state mask = { };
union drbd_state val = { };
enum drbd_fencing_p fp;
@@ -428,6 +429,10 @@ bool conn_try_outdate_peer(struct drbd_tconn *tconn)
return false;
}
+ spin_lock_irq(&tconn->req_lock);
+ connect_cnt = tconn->connect_cnt;
+ spin_unlock_irq(&tconn->req_lock);
+
fp = highest_fencing_policy(tconn);
switch (fp) {
case FP_NOT_AVAIL:
@@ -492,8 +497,14 @@ bool conn_try_outdate_peer(struct drbd_tconn *tconn)
here, because we might were able to re-establish the connection in the
meantime. */
spin_lock_irq(&tconn->req_lock);
- if (tconn->cstate < C_WF_REPORT_PARAMS && !test_bit(STATE_SENT, &tconn->flags))
- _conn_request_state(tconn, mask, val, CS_VERBOSE);
+ if (tconn->cstate < C_WF_REPORT_PARAMS && !test_bit(STATE_SENT, &tconn->flags)) {
+ if (tconn->connect_cnt != connect_cnt)
+ /* In case the connection was established and droped
+ while the fence-peer handler was running, ignore it */
+ conn_info(tconn, "Ignoring fence-peer exit code\n");
+ else
+ _conn_request_state(tconn, mask, val, CS_VERBOSE);
+ }
spin_unlock_irq(&tconn->req_lock);
return conn_highest_pdsk(tconn) <= D_OUTDATED;
@@ -816,15 +827,20 @@ void drbd_resume_io(struct drbd_conf *mdev)
* Returns 0 on success, negative return values indicate errors.
* You should call drbd_md_sync() after calling this function.
*/
-enum determine_dev_size drbd_determine_dev_size(struct drbd_conf *mdev, enum dds_flags flags) __must_hold(local)
+enum determine_dev_size
+drbd_determine_dev_size(struct drbd_conf *mdev, enum dds_flags flags, struct resize_parms *rs) __must_hold(local)
{
sector_t prev_first_sect, prev_size; /* previous meta location */
sector_t la_size_sect, u_size;
+ struct drbd_md *md = &mdev->ldev->md;
+ u32 prev_al_stripe_size_4k;
+ u32 prev_al_stripes;
sector_t size;
char ppb[10];
+ void *buffer;
int md_moved, la_size_changed;
- enum determine_dev_size rv = unchanged;
+ enum determine_dev_size rv = DS_UNCHANGED;
/* race:
* application request passes inc_ap_bio,
@@ -836,6 +852,11 @@ enum determine_dev_size drbd_determine_dev_size(struct drbd_conf *mdev, enum dds
* still lock the act_log to not trigger ASSERTs there.
*/
drbd_suspend_io(mdev);
+ buffer = drbd_md_get_buffer(mdev); /* Lock meta-data IO */
+ if (!buffer) {
+ drbd_resume_io(mdev);
+ return DS_ERROR;
+ }
/* no wait necessary anymore, actually we could assert that */
wait_event(mdev->al_wait, lc_try_lock(mdev->act_log));
@@ -844,7 +865,17 @@ enum determine_dev_size drbd_determine_dev_size(struct drbd_conf *mdev, enum dds
prev_size = mdev->ldev->md.md_size_sect;
la_size_sect = mdev->ldev->md.la_size_sect;
- /* TODO: should only be some assert here, not (re)init... */
+ if (rs) {
+ /* rs is non NULL if we should change the AL layout only */
+
+ prev_al_stripes = md->al_stripes;
+ prev_al_stripe_size_4k = md->al_stripe_size_4k;
+
+ md->al_stripes = rs->al_stripes;
+ md->al_stripe_size_4k = rs->al_stripe_size / 4;
+ md->al_size_4k = (u64)rs->al_stripes * rs->al_stripe_size / 4;
+ }
+
drbd_md_set_sector_offsets(mdev, mdev->ldev);
rcu_read_lock();
@@ -852,6 +883,21 @@ enum determine_dev_size drbd_determine_dev_size(struct drbd_conf *mdev, enum dds
rcu_read_unlock();
size = drbd_new_dev_size(mdev, mdev->ldev, u_size, flags & DDSF_FORCED);
+ if (size < la_size_sect) {
+ if (rs && u_size == 0) {
+ /* Remove "rs &&" later. This check should always be active, but
+ right now the receiver expects the permissive behavior */
+ dev_warn(DEV, "Implicit shrink not allowed. "
+ "Use --size=%llus for explicit shrink.\n",
+ (unsigned long long)size);
+ rv = DS_ERROR_SHRINK;
+ }
+ if (u_size > size)
+ rv = DS_ERROR_SPACE_MD;
+ if (rv != DS_UNCHANGED)
+ goto err_out;
+ }
+
if (drbd_get_capacity(mdev->this_bdev) != size ||
drbd_bm_capacity(mdev) != size) {
int err;
@@ -867,7 +913,7 @@ enum determine_dev_size drbd_determine_dev_size(struct drbd_conf *mdev, enum dds
"Leaving size unchanged at size = %lu KB\n",
(unsigned long)size);
}
- rv = dev_size_error;
+ rv = DS_ERROR;
}
/* racy, see comments above. */
drbd_set_my_capacity(mdev, size);
@@ -875,38 +921,57 @@ enum determine_dev_size drbd_determine_dev_size(struct drbd_conf *mdev, enum dds
dev_info(DEV, "size = %s (%llu KB)\n", ppsize(ppb, size>>1),
(unsigned long long)size>>1);
}
- if (rv == dev_size_error)
- goto out;
+ if (rv <= DS_ERROR)
+ goto err_out;
la_size_changed = (la_size_sect != mdev->ldev->md.la_size_sect);
md_moved = prev_first_sect != drbd_md_first_sector(mdev->ldev)
|| prev_size != mdev->ldev->md.md_size_sect;
- if (la_size_changed || md_moved) {
- int err;
+ if (la_size_changed || md_moved || rs) {
+ u32 prev_flags;
drbd_al_shrink(mdev); /* All extents inactive. */
+
+ prev_flags = md->flags;
+ md->flags &= ~MDF_PRIMARY_IND;
+ drbd_md_write(mdev, buffer);
+
dev_info(DEV, "Writing the whole bitmap, %s\n",
la_size_changed && md_moved ? "size changed and md moved" :
la_size_changed ? "size changed" : "md moved");
/* next line implicitly does drbd_suspend_io()+drbd_resume_io() */
- err = drbd_bitmap_io(mdev, md_moved ? &drbd_bm_write_all : &drbd_bm_write,
- "size changed", BM_LOCKED_MASK);
- if (err) {
- rv = dev_size_error;
- goto out;
- }
- drbd_md_mark_dirty(mdev);
+ drbd_bitmap_io(mdev, md_moved ? &drbd_bm_write_all : &drbd_bm_write,
+ "size changed", BM_LOCKED_MASK);
+ drbd_initialize_al(mdev, buffer);
+
+ md->flags = prev_flags;
+ drbd_md_write(mdev, buffer);
+
+ if (rs)
+ dev_info(DEV, "Changed AL layout to al-stripes = %d, al-stripe-size-kB = %d\n",
+ md->al_stripes, md->al_stripe_size_4k * 4);
}
if (size > la_size_sect)
- rv = grew;
+ rv = DS_GREW;
if (size < la_size_sect)
- rv = shrunk;
-out:
+ rv = DS_SHRUNK;
+
+ if (0) {
+ err_out:
+ if (rs) {
+ md->al_stripes = prev_al_stripes;
+ md->al_stripe_size_4k = prev_al_stripe_size_4k;
+ md->al_size_4k = (u64)prev_al_stripes * prev_al_stripe_size_4k;
+
+ drbd_md_set_sector_offsets(mdev, mdev->ldev);
+ }
+ }
lc_unlock(mdev->act_log);
wake_up(&mdev->al_wait);
+ drbd_md_put_buffer(mdev);
drbd_resume_io(mdev);
return rv;
@@ -1607,11 +1672,11 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info)
!drbd_md_test_flag(mdev->ldev, MDF_CONNECTED_IND))
set_bit(USE_DEGR_WFC_T, &mdev->flags);
- dd = drbd_determine_dev_size(mdev, 0);
- if (dd == dev_size_error) {
+ dd = drbd_determine_dev_size(mdev, 0, NULL);
+ if (dd <= DS_ERROR) {
retcode = ERR_NOMEM_BITMAP;
goto force_diskless_dec;
- } else if (dd == grew)
+ } else if (dd == DS_GREW)
set_bit(RESYNC_AFTER_NEG, &mdev->flags);
if (drbd_md_test_flag(mdev->ldev, MDF_FULL_SYNC) ||
@@ -2305,6 +2370,7 @@ int drbd_adm_resize(struct sk_buff *skb, struct genl_info *info)
struct drbd_conf *mdev;
enum drbd_ret_code retcode;
enum determine_dev_size dd;
+ bool change_al_layout = false;
enum dds_flags ddsf;
sector_t u_size;
int err;
@@ -2315,31 +2381,33 @@ int drbd_adm_resize(struct sk_buff *skb, struct genl_info *info)
if (retcode != NO_ERROR)
goto fail;
+ mdev = adm_ctx.mdev;
+ if (!get_ldev(mdev)) {
+ retcode = ERR_NO_DISK;
+ goto fail;
+ }
+
memset(&rs, 0, sizeof(struct resize_parms));
+ rs.al_stripes = mdev->ldev->md.al_stripes;
+ rs.al_stripe_size = mdev->ldev->md.al_stripe_size_4k * 4;
if (info->attrs[DRBD_NLA_RESIZE_PARMS]) {
err = resize_parms_from_attrs(&rs, info);
if (err) {
retcode = ERR_MANDATORY_TAG;
drbd_msg_put_info(from_attrs_err_to_txt(err));
- goto fail;
+ goto fail_ldev;
}
}
- mdev = adm_ctx.mdev;
if (mdev->state.conn > C_CONNECTED) {
retcode = ERR_RESIZE_RESYNC;
- goto fail;
+ goto fail_ldev;
}
if (mdev->state.role == R_SECONDARY &&
mdev->state.peer == R_SECONDARY) {
retcode = ERR_NO_PRIMARY;
- goto fail;
- }
-
- if (!get_ldev(mdev)) {
- retcode = ERR_NO_DISK;
- goto fail;
+ goto fail_ldev;
}
if (rs.no_resync && mdev->tconn->agreed_pro_version < 93) {
@@ -2358,6 +2426,28 @@ int drbd_adm_resize(struct sk_buff *skb, struct genl_info *info)
}
}
+ if (mdev->ldev->md.al_stripes != rs.al_stripes ||
+ mdev->ldev->md.al_stripe_size_4k != rs.al_stripe_size / 4) {
+ u32 al_size_k = rs.al_stripes * rs.al_stripe_size;
+
+ if (al_size_k > (16 * 1024 * 1024)) {
+ retcode = ERR_MD_LAYOUT_TOO_BIG;
+ goto fail_ldev;
+ }
+
+ if (al_size_k < MD_32kB_SECT/2) {
+ retcode = ERR_MD_LAYOUT_TOO_SMALL;
+ goto fail_ldev;
+ }
+
+ if (mdev->state.conn != C_CONNECTED) {
+ retcode = ERR_MD_LAYOUT_CONNECTED;
+ goto fail_ldev;
+ }
+
+ change_al_layout = true;
+ }
+
if (mdev->ldev->known_size != drbd_get_capacity(mdev->ldev->backing_bdev))
mdev->ldev->known_size = drbd_get_capacity(mdev->ldev->backing_bdev);
@@ -2373,16 +2463,22 @@ int drbd_adm_resize(struct sk_buff *skb, struct genl_info *info)
}
ddsf = (rs.resize_force ? DDSF_FORCED : 0) | (rs.no_resync ? DDSF_NO_RESYNC : 0);
- dd = drbd_determine_dev_size(mdev, ddsf);
+ dd = drbd_determine_dev_size(mdev, ddsf, change_al_layout ? &rs : NULL);
drbd_md_sync(mdev);
put_ldev(mdev);
- if (dd == dev_size_error) {
+ if (dd == DS_ERROR) {
retcode = ERR_NOMEM_BITMAP;
goto fail;
+ } else if (dd == DS_ERROR_SPACE_MD) {
+ retcode = ERR_MD_LAYOUT_NO_FIT;
+ goto fail;
+ } else if (dd == DS_ERROR_SHRINK) {
+ retcode = ERR_IMPLICIT_SHRINK;
+ goto fail;
}
if (mdev->state.conn == C_CONNECTED) {
- if (dd == grew)
+ if (dd == DS_GREW)
set_bit(RESIZE_PENDING, &mdev->flags);
drbd_send_uuids(mdev);
@@ -2658,7 +2754,6 @@ int nla_put_status_info(struct sk_buff *skb, struct drbd_conf *mdev,
const struct sib_info *sib)
{
struct state_info *si = NULL; /* for sizeof(si->member); */
- struct net_conf *nc;
struct nlattr *nla;
int got_ldev;
int err = 0;
@@ -2688,13 +2783,19 @@ int nla_put_status_info(struct sk_buff *skb, struct drbd_conf *mdev,
goto nla_put_failure;
rcu_read_lock();
- if (got_ldev)
- if (disk_conf_to_skb(skb, rcu_dereference(mdev->ldev->disk_conf), exclude_sensitive))
- goto nla_put_failure;
+ if (got_ldev) {
+ struct disk_conf *disk_conf;
- nc = rcu_dereference(mdev->tconn->net_conf);
- if (nc)
- err = net_conf_to_skb(skb, nc, exclude_sensitive);
+ disk_conf = rcu_dereference(mdev->ldev->disk_conf);
+ err = disk_conf_to_skb(skb, disk_conf, exclude_sensitive);
+ }
+ if (!err) {
+ struct net_conf *nc;
+
+ nc = rcu_dereference(mdev->tconn->net_conf);
+ if (nc)
+ err = net_conf_to_skb(skb, nc, exclude_sensitive);
+ }
rcu_read_unlock();
if (err)
goto nla_put_failure;
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 4222affff488..cc29cd3bf78b 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -1039,6 +1039,8 @@ randomize:
rcu_read_lock();
idr_for_each_entry(&tconn->volumes, mdev, vnr) {
kref_get(&mdev->kref);
+ rcu_read_unlock();
+
/* Prevent a race between resync-handshake and
* being promoted to Primary.
*
@@ -1049,8 +1051,6 @@ randomize:
mutex_lock(mdev->state_mutex);
mutex_unlock(mdev->state_mutex);
- rcu_read_unlock();
-
if (discard_my_data)
set_bit(DISCARD_MY_DATA, &mdev->flags);
else
@@ -3545,7 +3545,7 @@ static int receive_sizes(struct drbd_tconn *tconn, struct packet_info *pi)
{
struct drbd_conf *mdev;
struct p_sizes *p = pi->data;
- enum determine_dev_size dd = unchanged;
+ enum determine_dev_size dd = DS_UNCHANGED;
sector_t p_size, p_usize, my_usize;
int ldsc = 0; /* local disk size changed */
enum dds_flags ddsf;
@@ -3617,9 +3617,9 @@ static int receive_sizes(struct drbd_tconn *tconn, struct packet_info *pi)
ddsf = be16_to_cpu(p->dds_flags);
if (get_ldev(mdev)) {
- dd = drbd_determine_dev_size(mdev, ddsf);
+ dd = drbd_determine_dev_size(mdev, ddsf, NULL);
put_ldev(mdev);
- if (dd == dev_size_error)
+ if (dd == DS_ERROR)
return -EIO;
drbd_md_sync(mdev);
} else {
@@ -3647,7 +3647,7 @@ static int receive_sizes(struct drbd_tconn *tconn, struct packet_info *pi)
drbd_send_sizes(mdev, 0, ddsf);
}
if (test_and_clear_bit(RESIZE_PENDING, &mdev->flags) ||
- (dd == grew && mdev->state.conn == C_CONNECTED)) {
+ (dd == DS_GREW && mdev->state.conn == C_CONNECTED)) {
if (mdev->state.pdsk >= D_INCONSISTENT &&
mdev->state.disk >= D_INCONSISTENT) {
if (ddsf & DDSF_NO_RESYNC)
diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_state.c
index 90c5be2b1d30..216d47b7e88b 100644
--- a/drivers/block/drbd/drbd_state.c
+++ b/drivers/block/drbd/drbd_state.c
@@ -1115,8 +1115,10 @@ __drbd_set_state(struct drbd_conf *mdev, union drbd_state ns,
drbd_thread_restart_nowait(&mdev->tconn->receiver);
/* Resume AL writing if we get a connection */
- if (os.conn < C_CONNECTED && ns.conn >= C_CONNECTED)
+ if (os.conn < C_CONNECTED && ns.conn >= C_CONNECTED) {
drbd_resume_al(mdev);
+ mdev->tconn->connect_cnt++;
+ }
/* remember last attach time so request_timer_fn() won't
* kill newly established sessions while we are still trying to thaw
diff --git a/drivers/block/rsxx/core.c b/drivers/block/rsxx/core.c
index 5af21f2db29c..6e85e21445eb 100644
--- a/drivers/block/rsxx/core.c
+++ b/drivers/block/rsxx/core.c
@@ -31,6 +31,8 @@
#include <linux/slab.h>
#include <linux/bitops.h>
#include <linux/delay.h>
+#include <linux/debugfs.h>
+#include <linux/seq_file.h>
#include <linux/genhd.h>
#include <linux/idr.h>
@@ -39,8 +41,9 @@
#include "rsxx_cfg.h"
#define NO_LEGACY 0
+#define SYNC_START_TIMEOUT (10 * 60) /* 10 minutes */
-MODULE_DESCRIPTION("IBM FlashSystem 70/80 PCIe SSD Device Driver");
+MODULE_DESCRIPTION("IBM Flash Adapter 900GB Full Height Device Driver");
MODULE_AUTHOR("Joshua Morris/Philip Kelleher, IBM");
MODULE_LICENSE("GPL");
MODULE_VERSION(DRIVER_VERSION);
@@ -49,9 +52,282 @@ static unsigned int force_legacy = NO_LEGACY;
module_param(force_legacy, uint, 0444);
MODULE_PARM_DESC(force_legacy, "Force the use of legacy type PCI interrupts");
+static unsigned int sync_start = 1;
+module_param(sync_start, uint, 0444);
+MODULE_PARM_DESC(sync_start, "On by Default: Driver load will not complete "
+ "until the card startup has completed.");
+
static DEFINE_IDA(rsxx_disk_ida);
static DEFINE_SPINLOCK(rsxx_ida_lock);
+/* --------------------Debugfs Setup ------------------- */
+
+struct rsxx_cram {
+ u32 f_pos;
+ u32 offset;
+ void *i_private;
+};
+
+static int rsxx_attr_pci_regs_show(struct seq_file *m, void *p)
+{
+ struct rsxx_cardinfo *card = m->private;
+
+ seq_printf(m, "HWID 0x%08x\n",
+ ioread32(card->regmap + HWID));
+ seq_printf(m, "SCRATCH 0x%08x\n",
+ ioread32(card->regmap + SCRATCH));
+ seq_printf(m, "IER 0x%08x\n",
+ ioread32(card->regmap + IER));
+ seq_printf(m, "IPR 0x%08x\n",
+ ioread32(card->regmap + IPR));
+ seq_printf(m, "CREG_CMD 0x%08x\n",
+ ioread32(card->regmap + CREG_CMD));
+ seq_printf(m, "CREG_ADD 0x%08x\n",
+ ioread32(card->regmap + CREG_ADD));
+ seq_printf(m, "CREG_CNT 0x%08x\n",
+ ioread32(card->regmap + CREG_CNT));
+ seq_printf(m, "CREG_STAT 0x%08x\n",
+ ioread32(card->regmap + CREG_STAT));
+ seq_printf(m, "CREG_DATA0 0x%08x\n",
+ ioread32(card->regmap + CREG_DATA0));
+ seq_printf(m, "CREG_DATA1 0x%08x\n",
+ ioread32(card->regmap + CREG_DATA1));
+ seq_printf(m, "CREG_DATA2 0x%08x\n",
+ ioread32(card->regmap + CREG_DATA2));
+ seq_printf(m, "CREG_DATA3 0x%08x\n",
+ ioread32(card->regmap + CREG_DATA3));
+ seq_printf(m, "CREG_DATA4 0x%08x\n",
+ ioread32(card->regmap + CREG_DATA4));
+ seq_printf(m, "CREG_DATA5 0x%08x\n",
+ ioread32(card->regmap + CREG_DATA5));
+ seq_printf(m, "CREG_DATA6 0x%08x\n",
+ ioread32(card->regmap + CREG_DATA6));
+ seq_printf(m, "CREG_DATA7 0x%08x\n",
+ ioread32(card->regmap + CREG_DATA7));
+ seq_printf(m, "INTR_COAL 0x%08x\n",
+ ioread32(card->regmap + INTR_COAL));
+ seq_printf(m, "HW_ERROR 0x%08x\n",
+ ioread32(card->regmap + HW_ERROR));
+ seq_printf(m, "DEBUG0 0x%08x\n",
+ ioread32(card->regmap + PCI_DEBUG0));
+ seq_printf(m, "DEBUG1 0x%08x\n",
+ ioread32(card->regmap + PCI_DEBUG1));
+ seq_printf(m, "DEBUG2 0x%08x\n",
+ ioread32(card->regmap + PCI_DEBUG2));
+ seq_printf(m, "DEBUG3 0x%08x\n",
+ ioread32(card->regmap + PCI_DEBUG3));
+ seq_printf(m, "DEBUG4 0x%08x\n",
+ ioread32(card->regmap + PCI_DEBUG4));
+ seq_printf(m, "DEBUG5 0x%08x\n",
+ ioread32(card->regmap + PCI_DEBUG5));
+ seq_printf(m, "DEBUG6 0x%08x\n",
+ ioread32(card->regmap + PCI_DEBUG6));
+ seq_printf(m, "DEBUG7 0x%08x\n",
+ ioread32(card->regmap + PCI_DEBUG7));
+ seq_printf(m, "RECONFIG 0x%08x\n",
+ ioread32(card->regmap + PCI_RECONFIG));
+
+ return 0;
+}
+
+static int rsxx_attr_stats_show(struct seq_file *m, void *p)
+{
+ struct rsxx_cardinfo *card = m->private;
+ int i;
+
+ for (i = 0; i < card->n_targets; i++) {
+ seq_printf(m, "Ctrl %d CRC Errors = %d\n",
+ i, card->ctrl[i].stats.crc_errors);
+ seq_printf(m, "Ctrl %d Hard Errors = %d\n",
+ i, card->ctrl[i].stats.hard_errors);
+ seq_printf(m, "Ctrl %d Soft Errors = %d\n",
+ i, card->ctrl[i].stats.soft_errors);
+ seq_printf(m, "Ctrl %d Writes Issued = %d\n",
+ i, card->ctrl[i].stats.writes_issued);
+ seq_printf(m, "Ctrl %d Writes Failed = %d\n",
+ i, card->ctrl[i].stats.writes_failed);
+ seq_printf(m, "Ctrl %d Reads Issued = %d\n",
+ i, card->ctrl[i].stats.reads_issued);
+ seq_printf(m, "Ctrl %d Reads Failed = %d\n",
+ i, card->ctrl[i].stats.reads_failed);
+ seq_printf(m, "Ctrl %d Reads Retried = %d\n",
+ i, card->ctrl[i].stats.reads_retried);
+ seq_printf(m, "Ctrl %d Discards Issued = %d\n",
+ i, card->ctrl[i].stats.discards_issued);
+ seq_printf(m, "Ctrl %d Discards Failed = %d\n",
+ i, card->ctrl[i].stats.discards_failed);
+ seq_printf(m, "Ctrl %d DMA SW Errors = %d\n",
+ i, card->ctrl[i].stats.dma_sw_err);
+ seq_printf(m, "Ctrl %d DMA HW Faults = %d\n",
+ i, card->ctrl[i].stats.dma_hw_fault);
+ seq_printf(m, "Ctrl %d DMAs Cancelled = %d\n",
+ i, card->ctrl[i].stats.dma_cancelled);
+ seq_printf(m, "Ctrl %d SW Queue Depth = %d\n",
+ i, card->ctrl[i].stats.sw_q_depth);
+ seq_printf(m, "Ctrl %d HW Queue Depth = %d\n",
+ i, atomic_read(&card->ctrl[i].stats.hw_q_depth));
+ }
+
+ return 0;
+}
+
+static int rsxx_attr_stats_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, rsxx_attr_stats_show, inode->i_private);
+}
+
+static int rsxx_attr_pci_regs_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, rsxx_attr_pci_regs_show, inode->i_private);
+}
+
+static ssize_t rsxx_cram_read(struct file *fp, char __user *ubuf,
+ size_t cnt, loff_t *ppos)
+{
+ struct rsxx_cram *info = fp->private_data;
+ struct rsxx_cardinfo *card = info->i_private;
+ char *buf;
+ int st;
+
+ buf = kzalloc(sizeof(*buf) * cnt, GFP_KERNEL);
+ if (!buf)
+ return -ENOMEM;
+
+ info->f_pos = (u32)*ppos + info->offset;
+
+ st = rsxx_creg_read(card, CREG_ADD_CRAM + info->f_pos, cnt, buf, 1);
+ if (st)
+ return st;
+
+ st = copy_to_user(ubuf, buf, cnt);
+ if (st)
+ return st;
+
+ info->offset += cnt;
+
+ kfree(buf);
+
+ return cnt;
+}
+
+static ssize_t rsxx_cram_write(struct file *fp, const char __user *ubuf,
+ size_t cnt, loff_t *ppos)
+{
+ struct rsxx_cram *info = fp->private_data;
+ struct rsxx_cardinfo *card = info->i_private;
+ char *buf;
+ int st;
+
+ buf = kzalloc(sizeof(*buf) * cnt, GFP_KERNEL);
+ if (!buf)
+ return -ENOMEM;
+
+ st = copy_from_user(buf, ubuf, cnt);
+ if (st)
+ return st;
+
+ info->f_pos = (u32)*ppos + info->offset;
+
+ st = rsxx_creg_write(card, CREG_ADD_CRAM + info->f_pos, cnt, buf, 1);
+ if (st)
+ return st;
+
+ info->offset += cnt;
+
+ kfree(buf);
+
+ return cnt;
+}
+
+static int rsxx_cram_open(struct inode *inode, struct file *file)
+{
+ struct rsxx_cram *info = kzalloc(sizeof(*info), GFP_KERNEL);
+ if (!info)
+ return -ENOMEM;
+
+ info->i_private = inode->i_private;
+ info->f_pos = file->f_pos;
+ file->private_data = info;
+
+ return 0;
+}
+
+static int rsxx_cram_release(struct inode *inode, struct file *file)
+{
+ struct rsxx_cram *info = file->private_data;
+
+ if (!info)
+ return 0;
+
+ kfree(info);
+ file->private_data = NULL;
+
+ return 0;
+}
+
+static const struct file_operations debugfs_cram_fops = {
+ .owner = THIS_MODULE,
+ .open = rsxx_cram_open,
+ .read = rsxx_cram_read,
+ .write = rsxx_cram_write,
+ .release = rsxx_cram_release,
+};
+
+static const struct file_operations debugfs_stats_fops = {
+ .owner = THIS_MODULE,
+ .open = rsxx_attr_stats_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
+static const struct file_operations debugfs_pci_regs_fops = {
+ .owner = THIS_MODULE,
+ .open = rsxx_attr_pci_regs_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
+static void rsxx_debugfs_dev_new(struct rsxx_cardinfo *card)
+{
+ struct dentry *debugfs_stats;
+ struct dentry *debugfs_pci_regs;
+ struct dentry *debugfs_cram;
+
+ card->debugfs_dir = debugfs_create_dir(card->gendisk->disk_name, NULL);
+ if (IS_ERR_OR_NULL(card->debugfs_dir))
+ goto failed_debugfs_dir;
+
+ debugfs_stats = debugfs_create_file("stats", S_IRUGO,
+ card->debugfs_dir, card,
+ &debugfs_stats_fops);
+ if (IS_ERR_OR_NULL(debugfs_stats))
+ goto failed_debugfs_stats;
+
+ debugfs_pci_regs = debugfs_create_file("pci_regs", S_IRUGO,
+ card->debugfs_dir, card,
+ &debugfs_pci_regs_fops);
+ if (IS_ERR_OR_NULL(debugfs_pci_regs))
+ goto failed_debugfs_pci_regs;
+
+ debugfs_cram = debugfs_create_file("cram", S_IRUGO | S_IWUSR,
+ card->debugfs_dir, card,
+ &debugfs_cram_fops);
+ if (IS_ERR_OR_NULL(debugfs_cram))
+ goto failed_debugfs_cram;
+
+ return;
+failed_debugfs_cram:
+ debugfs_remove(debugfs_pci_regs);
+failed_debugfs_pci_regs:
+ debugfs_remove(debugfs_stats);
+failed_debugfs_stats:
+ debugfs_remove(card->debugfs_dir);
+failed_debugfs_dir:
+ card->debugfs_dir = NULL;
+}
+
/*----------------- Interrupt Control & Handling -------------------*/
static void rsxx_mask_interrupts(struct rsxx_cardinfo *card)
@@ -163,12 +439,13 @@ static irqreturn_t rsxx_isr(int irq, void *pdata)
}
if (isr & CR_INTR_CREG) {
- schedule_work(&card->creg_ctrl.done_work);
+ queue_work(card->creg_ctrl.creg_wq,
+ &card->creg_ctrl.done_work);
handled++;
}
if (isr & CR_INTR_EVENT) {
- schedule_work(&card->event_work);
+ queue_work(card->event_wq, &card->event_work);
rsxx_disable_ier_and_isr(card, CR_INTR_EVENT);
handled++;
}
@@ -329,7 +606,7 @@ static int rsxx_eeh_frozen(struct pci_dev *dev)
int i;
int st;
- dev_warn(&dev->dev, "IBM FlashSystem PCI: preparing for slot reset.\n");
+ dev_warn(&dev->dev, "IBM Flash Adapter PCI: preparing for slot reset.\n");
card->eeh_state = 1;
rsxx_mask_interrupts(card);
@@ -367,15 +644,26 @@ static void rsxx_eeh_failure(struct pci_dev *dev)
{
struct rsxx_cardinfo *card = pci_get_drvdata(dev);
int i;
+ int cnt = 0;
- dev_err(&dev->dev, "IBM FlashSystem PCI: disabling failed card.\n");
+ dev_err(&dev->dev, "IBM Flash Adapter PCI: disabling failed card.\n");
card->eeh_state = 1;
+ card->halt = 1;
- for (i = 0; i < card->n_targets; i++)
- del_timer_sync(&card->ctrl[i].activity_timer);
+ for (i = 0; i < card->n_targets; i++) {
+ spin_lock_bh(&card->ctrl[i].queue_lock);
+ cnt = rsxx_cleanup_dma_queue(&card->ctrl[i],
+ &card->ctrl[i].queue);
+ spin_unlock_bh(&card->ctrl[i].queue_lock);
+
+ cnt += rsxx_dma_cancel(&card->ctrl[i]);
- rsxx_eeh_cancel_dmas(card);
+ if (cnt)
+ dev_info(CARD_TO_DEV(card),
+ "Freed %d queued DMAs on channel %d\n",
+ cnt, card->ctrl[i].id);
+ }
}
static int rsxx_eeh_fifo_flush_poll(struct rsxx_cardinfo *card)
@@ -432,7 +720,7 @@ static pci_ers_result_t rsxx_slot_reset(struct pci_dev *dev)
int st;
dev_warn(&dev->dev,
- "IBM FlashSystem PCI: recovering from slot reset.\n");
+ "IBM Flash Adapter PCI: recovering from slot reset.\n");
st = pci_enable_device(dev);
if (st)
@@ -485,7 +773,7 @@ static pci_ers_result_t rsxx_slot_reset(struct pci_dev *dev)
&card->ctrl[i].issue_dma_work);
}
- dev_info(&dev->dev, "IBM FlashSystem PCI: recovery complete.\n");
+ dev_info(&dev->dev, "IBM Flash Adapter PCI: recovery complete.\n");
return PCI_ERS_RESULT_RECOVERED;
@@ -528,6 +816,7 @@ static int rsxx_pci_probe(struct pci_dev *dev,
{
struct rsxx_cardinfo *card;
int st;
+ unsigned int sync_timeout;
dev_info(&dev->dev, "PCI-Flash SSD discovered\n");
@@ -610,7 +899,11 @@ static int rsxx_pci_probe(struct pci_dev *dev,
}
/************* Setup Processor Command Interface *************/
- rsxx_creg_setup(card);
+ st = rsxx_creg_setup(card);
+ if (st) {
+ dev_err(CARD_TO_DEV(card), "Failed to setup creg interface.\n");
+ goto failed_creg_setup;
+ }
spin_lock_irq(&card->irq_lock);
rsxx_enable_ier_and_isr(card, CR_INTR_CREG);
@@ -650,6 +943,12 @@ static int rsxx_pci_probe(struct pci_dev *dev,
}
/************* Setup Card Event Handler *************/
+ card->event_wq = create_singlethread_workqueue(DRIVER_NAME"_event");
+ if (!card->event_wq) {
+ dev_err(CARD_TO_DEV(card), "Failed card event setup.\n");
+ goto failed_event_handler;
+ }
+
INIT_WORK(&card->event_work, card_event_handler);
st = rsxx_setup_dev(card);
@@ -676,6 +975,33 @@ static int rsxx_pci_probe(struct pci_dev *dev,
if (st)
dev_crit(CARD_TO_DEV(card),
"Failed issuing card startup\n");
+ if (sync_start) {
+ sync_timeout = SYNC_START_TIMEOUT;
+
+ dev_info(CARD_TO_DEV(card),
+ "Waiting for card to startup\n");
+
+ do {
+ ssleep(1);
+ sync_timeout--;
+
+ rsxx_get_card_state(card, &card->state);
+ } while (sync_timeout &&
+ (card->state == CARD_STATE_STARTING));
+
+ if (card->state == CARD_STATE_STARTING) {
+ dev_warn(CARD_TO_DEV(card),
+ "Card startup timed out\n");
+ card->size8 = 0;
+ } else {
+ dev_info(CARD_TO_DEV(card),
+ "card state: %s\n",
+ rsxx_card_state_to_str(card->state));
+ st = rsxx_get_card_size8(card, &card->size8);
+ if (st)
+ card->size8 = 0;
+ }
+ }
} else if (card->state == CARD_STATE_GOOD ||
card->state == CARD_STATE_RD_ONLY_FAULT) {
st = rsxx_get_card_size8(card, &card->size8);
@@ -685,12 +1011,21 @@ static int rsxx_pci_probe(struct pci_dev *dev,
rsxx_attach_dev(card);
+ /************* Setup Debugfs *************/
+ rsxx_debugfs_dev_new(card);
+
return 0;
failed_create_dev:
+ destroy_workqueue(card->event_wq);
+ card->event_wq = NULL;
+failed_event_handler:
rsxx_dma_destroy(card);
failed_dma_setup:
failed_compatiblity_check:
+ destroy_workqueue(card->creg_ctrl.creg_wq);
+ card->creg_ctrl.creg_wq = NULL;
+failed_creg_setup:
spin_lock_irq(&card->irq_lock);
rsxx_disable_ier_and_isr(card, CR_INTR_ALL);
spin_unlock_irq(&card->irq_lock);
@@ -756,6 +1091,8 @@ static void rsxx_pci_remove(struct pci_dev *dev)
/* Prevent work_structs from re-queuing themselves. */
card->halt = 1;
+ debugfs_remove_recursive(card->debugfs_dir);
+
free_irq(dev->irq, card);
if (!force_legacy)
diff --git a/drivers/block/rsxx/cregs.c b/drivers/block/rsxx/cregs.c
index 4b5c020a0a65..926dce9c452f 100644
--- a/drivers/block/rsxx/cregs.c
+++ b/drivers/block/rsxx/cregs.c
@@ -431,6 +431,15 @@ static int __issue_creg_rw(struct rsxx_cardinfo *card,
*hw_stat = completion.creg_status;
if (completion.st) {
+ /*
+ * This read is needed to verify that there has not been any
+ * extreme errors that might have occurred, i.e. EEH. The
+ * function iowrite32 will not detect EEH errors, so it is
+ * necessary that we recover if such an error is the reason
+ * for the timeout. This is a dummy read.
+ */
+ ioread32(card->regmap + SCRATCH);
+
dev_warn(CARD_TO_DEV(card),
"creg command failed(%d x%08x)\n",
completion.st, addr);
@@ -727,6 +736,11 @@ int rsxx_creg_setup(struct rsxx_cardinfo *card)
{
card->creg_ctrl.active_cmd = NULL;
+ card->creg_ctrl.creg_wq =
+ create_singlethread_workqueue(DRIVER_NAME"_creg");
+ if (!card->creg_ctrl.creg_wq)
+ return -ENOMEM;
+
INIT_WORK(&card->creg_ctrl.done_work, creg_cmd_done);
mutex_init(&card->creg_ctrl.reset_lock);
INIT_LIST_HEAD(&card->creg_ctrl.queue);
diff --git a/drivers/block/rsxx/dev.c b/drivers/block/rsxx/dev.c
index 4346d17d2949..d7af441880be 100644
--- a/drivers/block/rsxx/dev.c
+++ b/drivers/block/rsxx/dev.c
@@ -155,7 +155,8 @@ static void bio_dma_done_cb(struct rsxx_cardinfo *card,
atomic_set(&meta->error, 1);
if (atomic_dec_and_test(&meta->pending_dmas)) {
- disk_stats_complete(card, meta->bio, meta->start_time);
+ if (!card->eeh_state && card->gendisk)
+ disk_stats_complete(card, meta->bio, meta->start_time);
bio_endio(meta->bio, atomic_read(&meta->error) ? -EIO : 0);
kmem_cache_free(bio_meta_pool, meta);
@@ -170,6 +171,12 @@ static void rsxx_make_request(struct request_queue *q, struct bio *bio)
might_sleep();
+ if (!card)
+ goto req_err;
+
+ if (bio->bi_sector + (bio->bi_size >> 9) > get_capacity(card->gendisk))
+ goto req_err;
+
if (unlikely(card->halt)) {
st = -EFAULT;
goto req_err;
@@ -196,7 +203,8 @@ static void rsxx_make_request(struct request_queue *q, struct bio *bio)
atomic_set(&bio_meta->pending_dmas, 0);
bio_meta->start_time = jiffies;
- disk_stats_start(card, bio);
+ if (!unlikely(card->halt))
+ disk_stats_start(card, bio);
dev_dbg(CARD_TO_DEV(card), "BIO[%c]: meta: %p addr8: x%llx size: %d\n",
bio_data_dir(bio) ? 'W' : 'R', bio_meta,
@@ -225,24 +233,6 @@ static bool rsxx_discard_supported(struct rsxx_cardinfo *card)
return (pci_rev >= RSXX_DISCARD_SUPPORT);
}
-static unsigned short rsxx_get_logical_block_size(
- struct rsxx_cardinfo *card)
-{
- u32 capabilities = 0;
- int st;
-
- st = rsxx_get_card_capabilities(card, &capabilities);
- if (st)
- dev_warn(CARD_TO_DEV(card),
- "Failed reading card capabilities register\n");
-
- /* Earlier firmware did not have support for 512 byte accesses */
- if (capabilities & CARD_CAP_SUBPAGE_WRITES)
- return 512;
- else
- return RSXX_HW_BLK_SIZE;
-}
-
int rsxx_attach_dev(struct rsxx_cardinfo *card)
{
mutex_lock(&card->dev_lock);
@@ -305,7 +295,7 @@ int rsxx_setup_dev(struct rsxx_cardinfo *card)
return -ENOMEM;
}
- blk_size = rsxx_get_logical_block_size(card);
+ blk_size = card->config.data.block_size;
blk_queue_make_request(card->queue, rsxx_make_request);
blk_queue_bounce_limit(card->queue, BLK_BOUNCE_ANY);
@@ -347,6 +337,7 @@ void rsxx_destroy_dev(struct rsxx_cardinfo *card)
card->gendisk = NULL;
blk_cleanup_queue(card->queue);
+ card->queue->queuedata = NULL;
unregister_blkdev(card->major, DRIVER_NAME);
}
diff --git a/drivers/block/rsxx/dma.c b/drivers/block/rsxx/dma.c
index 0607513cfb41..bed32f16b084 100644
--- a/drivers/block/rsxx/dma.c
+++ b/drivers/block/rsxx/dma.c
@@ -245,6 +245,22 @@ static void rsxx_complete_dma(struct rsxx_dma_ctrl *ctrl,
kmem_cache_free(rsxx_dma_pool, dma);
}
+int rsxx_cleanup_dma_queue(struct rsxx_dma_ctrl *ctrl,
+ struct list_head *q)
+{
+ struct rsxx_dma *dma;
+ struct rsxx_dma *tmp;
+ int cnt = 0;
+
+ list_for_each_entry_safe(dma, tmp, q, list) {
+ list_del(&dma->list);
+ rsxx_complete_dma(ctrl, dma, DMA_CANCELLED);
+ cnt++;
+ }
+
+ return cnt;
+}
+
static void rsxx_requeue_dma(struct rsxx_dma_ctrl *ctrl,
struct rsxx_dma *dma)
{
@@ -252,9 +268,10 @@ static void rsxx_requeue_dma(struct rsxx_dma_ctrl *ctrl,
* Requeued DMAs go to the front of the queue so they are issued
* first.
*/
- spin_lock(&ctrl->queue_lock);
+ spin_lock_bh(&ctrl->queue_lock);
+ ctrl->stats.sw_q_depth++;
list_add(&dma->list, &ctrl->queue);
- spin_unlock(&ctrl->queue_lock);
+ spin_unlock_bh(&ctrl->queue_lock);
}
static void rsxx_handle_dma_error(struct rsxx_dma_ctrl *ctrl,
@@ -329,6 +346,7 @@ static void rsxx_handle_dma_error(struct rsxx_dma_ctrl *ctrl,
static void dma_engine_stalled(unsigned long data)
{
struct rsxx_dma_ctrl *ctrl = (struct rsxx_dma_ctrl *)data;
+ int cnt;
if (atomic_read(&ctrl->stats.hw_q_depth) == 0 ||
unlikely(ctrl->card->eeh_state))
@@ -349,18 +367,28 @@ static void dma_engine_stalled(unsigned long data)
"DMA channel %d has stalled, faulting interface.\n",
ctrl->id);
ctrl->card->dma_fault = 1;
+
+ /* Clean up the DMA queue */
+ spin_lock(&ctrl->queue_lock);
+ cnt = rsxx_cleanup_dma_queue(ctrl, &ctrl->queue);
+ spin_unlock(&ctrl->queue_lock);
+
+ cnt += rsxx_dma_cancel(ctrl);
+
+ if (cnt)
+ dev_info(CARD_TO_DEV(ctrl->card),
+ "Freed %d queued DMAs on channel %d\n",
+ cnt, ctrl->id);
}
}
-static void rsxx_issue_dmas(struct work_struct *work)
+static void rsxx_issue_dmas(struct rsxx_dma_ctrl *ctrl)
{
- struct rsxx_dma_ctrl *ctrl;
struct rsxx_dma *dma;
int tag;
int cmds_pending = 0;
struct hw_cmd *hw_cmd_buf;
- ctrl = container_of(work, struct rsxx_dma_ctrl, issue_dma_work);
hw_cmd_buf = ctrl->cmd.buf;
if (unlikely(ctrl->card->halt) ||
@@ -368,22 +396,22 @@ static void rsxx_issue_dmas(struct work_struct *work)
return;
while (1) {
- spin_lock(&ctrl->queue_lock);
+ spin_lock_bh(&ctrl->queue_lock);
if (list_empty(&ctrl->queue)) {
- spin_unlock(&ctrl->queue_lock);
+ spin_unlock_bh(&ctrl->queue_lock);
break;
}
- spin_unlock(&ctrl->queue_lock);
+ spin_unlock_bh(&ctrl->queue_lock);
tag = pop_tracker(ctrl->trackers);
if (tag == -1)
break;
- spin_lock(&ctrl->queue_lock);
+ spin_lock_bh(&ctrl->queue_lock);
dma = list_entry(ctrl->queue.next, struct rsxx_dma, list);
list_del(&dma->list);
ctrl->stats.sw_q_depth--;
- spin_unlock(&ctrl->queue_lock);
+ spin_unlock_bh(&ctrl->queue_lock);
/*
* This will catch any DMAs that slipped in right before the
@@ -440,9 +468,8 @@ static void rsxx_issue_dmas(struct work_struct *work)
}
}
-static void rsxx_dma_done(struct work_struct *work)
+static void rsxx_dma_done(struct rsxx_dma_ctrl *ctrl)
{
- struct rsxx_dma_ctrl *ctrl;
struct rsxx_dma *dma;
unsigned long flags;
u16 count;
@@ -450,7 +477,6 @@ static void rsxx_dma_done(struct work_struct *work)
u8 tag;
struct hw_status *hw_st_buf;
- ctrl = container_of(work, struct rsxx_dma_ctrl, dma_done_work);
hw_st_buf = ctrl->status.buf;
if (unlikely(ctrl->card->halt) ||
@@ -520,33 +546,32 @@ static void rsxx_dma_done(struct work_struct *work)
rsxx_enable_ier(ctrl->card, CR_INTR_DMA(ctrl->id));
spin_unlock_irqrestore(&ctrl->card->irq_lock, flags);
- spin_lock(&ctrl->queue_lock);
+ spin_lock_bh(&ctrl->queue_lock);
if (ctrl->stats.sw_q_depth)
queue_work(ctrl->issue_wq, &ctrl->issue_dma_work);
- spin_unlock(&ctrl->queue_lock);
+ spin_unlock_bh(&ctrl->queue_lock);
}
-static int rsxx_cleanup_dma_queue(struct rsxx_cardinfo *card,
- struct list_head *q)
+static void rsxx_schedule_issue(struct work_struct *work)
{
- struct rsxx_dma *dma;
- struct rsxx_dma *tmp;
- int cnt = 0;
+ struct rsxx_dma_ctrl *ctrl;
- list_for_each_entry_safe(dma, tmp, q, list) {
- list_del(&dma->list);
+ ctrl = container_of(work, struct rsxx_dma_ctrl, issue_dma_work);
- if (dma->dma_addr)
- pci_unmap_page(card->dev, dma->dma_addr,
- get_dma_size(dma),
- (dma->cmd == HW_CMD_BLK_WRITE) ?
- PCI_DMA_TODEVICE :
- PCI_DMA_FROMDEVICE);
- kmem_cache_free(rsxx_dma_pool, dma);
- cnt++;
- }
+ mutex_lock(&ctrl->work_lock);
+ rsxx_issue_dmas(ctrl);
+ mutex_unlock(&ctrl->work_lock);
+}
- return cnt;
+static void rsxx_schedule_done(struct work_struct *work)
+{
+ struct rsxx_dma_ctrl *ctrl;
+
+ ctrl = container_of(work, struct rsxx_dma_ctrl, dma_done_work);
+
+ mutex_lock(&ctrl->work_lock);
+ rsxx_dma_done(ctrl);
+ mutex_unlock(&ctrl->work_lock);
}
static int rsxx_queue_discard(struct rsxx_cardinfo *card,
@@ -698,10 +723,10 @@ int rsxx_dma_queue_bio(struct rsxx_cardinfo *card,
for (i = 0; i < card->n_targets; i++) {
if (!list_empty(&dma_list[i])) {
- spin_lock(&card->ctrl[i].queue_lock);
+ spin_lock_bh(&card->ctrl[i].queue_lock);
card->ctrl[i].stats.sw_q_depth += dma_cnt[i];
list_splice_tail(&dma_list[i], &card->ctrl[i].queue);
- spin_unlock(&card->ctrl[i].queue_lock);
+ spin_unlock_bh(&card->ctrl[i].queue_lock);
queue_work(card->ctrl[i].issue_wq,
&card->ctrl[i].issue_dma_work);
@@ -711,8 +736,11 @@ int rsxx_dma_queue_bio(struct rsxx_cardinfo *card,
return 0;
bvec_err:
- for (i = 0; i < card->n_targets; i++)
- rsxx_cleanup_dma_queue(card, &dma_list[i]);
+ for (i = 0; i < card->n_targets; i++) {
+ spin_lock_bh(&card->ctrl[i].queue_lock);
+ rsxx_cleanup_dma_queue(&card->ctrl[i], &dma_list[i]);
+ spin_unlock_bh(&card->ctrl[i].queue_lock);
+ }
return st;
}
@@ -780,6 +808,7 @@ static int rsxx_dma_ctrl_init(struct pci_dev *dev,
spin_lock_init(&ctrl->trackers->lock);
spin_lock_init(&ctrl->queue_lock);
+ mutex_init(&ctrl->work_lock);
INIT_LIST_HEAD(&ctrl->queue);
setup_timer(&ctrl->activity_timer, dma_engine_stalled,
@@ -793,8 +822,8 @@ static int rsxx_dma_ctrl_init(struct pci_dev *dev,
if (!ctrl->done_wq)
return -ENOMEM;
- INIT_WORK(&ctrl->issue_dma_work, rsxx_issue_dmas);
- INIT_WORK(&ctrl->dma_done_work, rsxx_dma_done);
+ INIT_WORK(&ctrl->issue_dma_work, rsxx_schedule_issue);
+ INIT_WORK(&ctrl->dma_done_work, rsxx_schedule_done);
st = rsxx_hw_buffers_init(dev, ctrl);
if (st)
@@ -918,13 +947,30 @@ failed_dma_setup:
return st;
}
+int rsxx_dma_cancel(struct rsxx_dma_ctrl *ctrl)
+{
+ struct rsxx_dma *dma;
+ int i;
+ int cnt = 0;
+
+ /* Clean up issued DMAs */
+ for (i = 0; i < RSXX_MAX_OUTSTANDING_CMDS; i++) {
+ dma = get_tracker_dma(ctrl->trackers, i);
+ if (dma) {
+ atomic_dec(&ctrl->stats.hw_q_depth);
+ rsxx_complete_dma(ctrl, dma, DMA_CANCELLED);
+ push_tracker(ctrl->trackers, i);
+ cnt++;
+ }
+ }
+
+ return cnt;
+}
void rsxx_dma_destroy(struct rsxx_cardinfo *card)
{
struct rsxx_dma_ctrl *ctrl;
- struct rsxx_dma *dma;
- int i, j;
- int cnt = 0;
+ int i;
for (i = 0; i < card->n_targets; i++) {
ctrl = &card->ctrl[i];
@@ -943,33 +989,11 @@ void rsxx_dma_destroy(struct rsxx_cardinfo *card)
del_timer_sync(&ctrl->activity_timer);
/* Clean up the DMA queue */
- spin_lock(&ctrl->queue_lock);
- cnt = rsxx_cleanup_dma_queue(card, &ctrl->queue);
- spin_unlock(&ctrl->queue_lock);
-
- if (cnt)
- dev_info(CARD_TO_DEV(card),
- "Freed %d queued DMAs on channel %d\n",
- cnt, i);
-
- /* Clean up issued DMAs */
- for (j = 0; j < RSXX_MAX_OUTSTANDING_CMDS; j++) {
- dma = get_tracker_dma(ctrl->trackers, j);
- if (dma) {
- pci_unmap_page(card->dev, dma->dma_addr,
- get_dma_size(dma),
- (dma->cmd == HW_CMD_BLK_WRITE) ?
- PCI_DMA_TODEVICE :
- PCI_DMA_FROMDEVICE);
- kmem_cache_free(rsxx_dma_pool, dma);
- cnt++;
- }
- }
+ spin_lock_bh(&ctrl->queue_lock);
+ rsxx_cleanup_dma_queue(ctrl, &ctrl->queue);
+ spin_unlock_bh(&ctrl->queue_lock);
- if (cnt)
- dev_info(CARD_TO_DEV(card),
- "Freed %d pending DMAs on channel %d\n",
- cnt, i);
+ rsxx_dma_cancel(ctrl);
vfree(ctrl->trackers);
@@ -1013,7 +1037,7 @@ int rsxx_eeh_save_issued_dmas(struct rsxx_cardinfo *card)
cnt++;
}
- spin_lock(&card->ctrl[i].queue_lock);
+ spin_lock_bh(&card->ctrl[i].queue_lock);
list_splice(&issued_dmas[i], &card->ctrl[i].queue);
atomic_sub(cnt, &card->ctrl[i].stats.hw_q_depth);
@@ -1028,7 +1052,7 @@ int rsxx_eeh_save_issued_dmas(struct rsxx_cardinfo *card)
PCI_DMA_TODEVICE :
PCI_DMA_FROMDEVICE);
}
- spin_unlock(&card->ctrl[i].queue_lock);
+ spin_unlock_bh(&card->ctrl[i].queue_lock);
}
kfree(issued_dmas);
@@ -1036,30 +1060,13 @@ int rsxx_eeh_save_issued_dmas(struct rsxx_cardinfo *card)
return 0;
}
-void rsxx_eeh_cancel_dmas(struct rsxx_cardinfo *card)
-{
- struct rsxx_dma *dma;
- struct rsxx_dma *tmp;
- int i;
-
- for (i = 0; i < card->n_targets; i++) {
- spin_lock(&card->ctrl[i].queue_lock);
- list_for_each_entry_safe(dma, tmp, &card->ctrl[i].queue, list) {
- list_del(&dma->list);
-
- rsxx_complete_dma(&card->ctrl[i], dma, DMA_CANCELLED);
- }
- spin_unlock(&card->ctrl[i].queue_lock);
- }
-}
-
int rsxx_eeh_remap_dmas(struct rsxx_cardinfo *card)
{
struct rsxx_dma *dma;
int i;
for (i = 0; i < card->n_targets; i++) {
- spin_lock(&card->ctrl[i].queue_lock);
+ spin_lock_bh(&card->ctrl[i].queue_lock);
list_for_each_entry(dma, &card->ctrl[i].queue, list) {
dma->dma_addr = pci_map_page(card->dev, dma->page,
dma->pg_off, get_dma_size(dma),
@@ -1067,12 +1074,12 @@ int rsxx_eeh_remap_dmas(struct rsxx_cardinfo *card)
PCI_DMA_TODEVICE :
PCI_DMA_FROMDEVICE);
if (!dma->dma_addr) {
- spin_unlock(&card->ctrl[i].queue_lock);
+ spin_unlock_bh(&card->ctrl[i].queue_lock);
kmem_cache_free(rsxx_dma_pool, dma);
return -ENOMEM;
}
}
- spin_unlock(&card->ctrl[i].queue_lock);
+ spin_unlock_bh(&card->ctrl[i].queue_lock);
}
return 0;
diff --git a/drivers/block/rsxx/rsxx_priv.h b/drivers/block/rsxx/rsxx_priv.h
index 382e8bf5c03b..5ad5055a4104 100644
--- a/drivers/block/rsxx/rsxx_priv.h
+++ b/drivers/block/rsxx/rsxx_priv.h
@@ -39,6 +39,7 @@
#include <linux/vmalloc.h>
#include <linux/timer.h>
#include <linux/ioctl.h>
+#include <linux/delay.h>
#include "rsxx.h"
#include "rsxx_cfg.h"
@@ -114,6 +115,7 @@ struct rsxx_dma_ctrl {
struct timer_list activity_timer;
struct dma_tracker_list *trackers;
struct rsxx_dma_stats stats;
+ struct mutex work_lock;
};
struct rsxx_cardinfo {
@@ -134,6 +136,7 @@ struct rsxx_cardinfo {
spinlock_t lock;
bool active;
struct creg_cmd *active_cmd;
+ struct workqueue_struct *creg_wq;
struct work_struct done_work;
struct list_head queue;
unsigned int q_depth;
@@ -154,6 +157,7 @@ struct rsxx_cardinfo {
int buf_len;
} log;
+ struct workqueue_struct *event_wq;
struct work_struct event_work;
unsigned int state;
u64 size8;
@@ -181,6 +185,8 @@ struct rsxx_cardinfo {
int n_targets;
struct rsxx_dma_ctrl *ctrl;
+
+ struct dentry *debugfs_dir;
};
enum rsxx_pci_regmap {
@@ -283,6 +289,7 @@ enum rsxx_creg_addr {
CREG_ADD_CAPABILITIES = 0x80001050,
CREG_ADD_LOG = 0x80002000,
CREG_ADD_NUM_TARGETS = 0x80003000,
+ CREG_ADD_CRAM = 0xA0000000,
CREG_ADD_CONFIG = 0xB0000000,
};
@@ -372,6 +379,8 @@ typedef void (*rsxx_dma_cb)(struct rsxx_cardinfo *card,
int rsxx_dma_setup(struct rsxx_cardinfo *card);
void rsxx_dma_destroy(struct rsxx_cardinfo *card);
int rsxx_dma_init(void);
+int rsxx_cleanup_dma_queue(struct rsxx_dma_ctrl *ctrl, struct list_head *q);
+int rsxx_dma_cancel(struct rsxx_dma_ctrl *ctrl);
void rsxx_dma_cleanup(void);
void rsxx_dma_queue_reset(struct rsxx_cardinfo *card);
int rsxx_dma_configure(struct rsxx_cardinfo *card);
@@ -382,7 +391,6 @@ int rsxx_dma_queue_bio(struct rsxx_cardinfo *card,
void *cb_data);
int rsxx_hw_buffers_init(struct pci_dev *dev, struct rsxx_dma_ctrl *ctrl);
int rsxx_eeh_save_issued_dmas(struct rsxx_cardinfo *card);
-void rsxx_eeh_cancel_dmas(struct rsxx_cardinfo *card);
int rsxx_eeh_remap_dmas(struct rsxx_cardinfo *card);
/***** cregs.c *****/
diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
index dd5b2fed97e9..bf4b9d282c04 100644
--- a/drivers/block/xen-blkback/blkback.c
+++ b/drivers/block/xen-blkback/blkback.c
@@ -50,110 +50,118 @@
#include "common.h"
/*
- * These are rather arbitrary. They are fairly large because adjacent requests
- * pulled from a communication ring are quite likely to end up being part of
- * the same scatter/gather request at the disc.
+ * Maximum number of unused free pages to keep in the internal buffer.
+ * Setting this to a value too low will reduce memory used in each backend,
+ * but can have a performance penalty.
*
- * ** TRY INCREASING 'xen_blkif_reqs' IF WRITE SPEEDS SEEM TOO LOW **
- *
- * This will increase the chances of being able to write whole tracks.
- * 64 should be enough to keep us competitive with Linux.
+ * A sane value is xen_blkif_reqs * BLKIF_MAX_SEGMENTS_PER_REQUEST, but can
+ * be set to a lower value that might degrade performance on some intensive
+ * IO workloads.
*/
-static int xen_blkif_reqs = 64;
-module_param_named(reqs, xen_blkif_reqs, int, 0);
-MODULE_PARM_DESC(reqs, "Number of blkback requests to allocate");
-/* Run-time switchable: /sys/module/blkback/parameters/ */
-static unsigned int log_stats;
-module_param(log_stats, int, 0644);
+static int xen_blkif_max_buffer_pages = 1024;
+module_param_named(max_buffer_pages, xen_blkif_max_buffer_pages, int, 0644);
+MODULE_PARM_DESC(max_buffer_pages,
+"Maximum number of free pages to keep in each block backend buffer");
/*
- * Each outstanding request that we've passed to the lower device layers has a
- * 'pending_req' allocated to it. Each buffer_head that completes decrements
- * the pendcnt towards zero. When it hits zero, the specified domain has a
- * response queued for it, with the saved 'id' passed back.
+ * Maximum number of grants to map persistently in blkback. For maximum
+ * performance this should be the total numbers of grants that can be used
+ * to fill the ring, but since this might become too high, specially with
+ * the use of indirect descriptors, we set it to a value that provides good
+ * performance without using too much memory.
+ *
+ * When the list of persistent grants is full we clean it up using a LRU
+ * algorithm.
*/
-struct pending_req {
- struct xen_blkif *blkif;
- u64 id;
- int nr_pages;
- atomic_t pendcnt;
- unsigned short operation;
- int status;
- struct list_head free_list;
- DECLARE_BITMAP(unmap_seg, BLKIF_MAX_SEGMENTS_PER_REQUEST);
-};
-#define BLKBACK_INVALID_HANDLE (~0)
+static int xen_blkif_max_pgrants = 1056;
+module_param_named(max_persistent_grants, xen_blkif_max_pgrants, int, 0644);
+MODULE_PARM_DESC(max_persistent_grants,
+ "Maximum number of grants to map persistently");
-struct xen_blkbk {
- struct pending_req *pending_reqs;
- /* List of all 'pending_req' available */
- struct list_head pending_free;
- /* And its spinlock. */
- spinlock_t pending_free_lock;
- wait_queue_head_t pending_free_wq;
- /* The list of all pages that are available. */
- struct page **pending_pages;
- /* And the grant handles that are available. */
- grant_handle_t *pending_grant_handles;
-};
-
-static struct xen_blkbk *blkbk;
+/*
+ * The LRU mechanism to clean the lists of persistent grants needs to
+ * be executed periodically. The time interval between consecutive executions
+ * of the purge mechanism is set in ms.
+ */
+#define LRU_INTERVAL 100
/*
- * Maximum number of grant pages that can be mapped in blkback.
- * BLKIF_MAX_SEGMENTS_PER_REQUEST * RING_SIZE is the maximum number of
- * pages that blkback will persistently map.
- * Currently, this is:
- * RING_SIZE = 32 (for all known ring types)
- * BLKIF_MAX_SEGMENTS_PER_REQUEST = 11
- * sizeof(struct persistent_gnt) = 48
- * So the maximum memory used to store the grants is:
- * 32 * 11 * 48 = 16896 bytes
+ * When the persistent grants list is full we will remove unused grants
+ * from the list. The percent number of grants to be removed at each LRU
+ * execution.
*/
-static inline unsigned int max_mapped_grant_pages(enum blkif_protocol protocol)
+#define LRU_PERCENT_CLEAN 5
+
+/* Run-time switchable: /sys/module/blkback/parameters/ */
+static unsigned int log_stats;
+module_param(log_stats, int, 0644);
+
+#define BLKBACK_INVALID_HANDLE (~0)
+
+/* Number of free pages to remove on each call to free_xenballooned_pages */
+#define NUM_BATCH_FREE_PAGES 10
+
+static inline int get_free_page(struct xen_blkif *blkif, struct page **page)
{
- switch (protocol) {
- case BLKIF_PROTOCOL_NATIVE:
- return __CONST_RING_SIZE(blkif, PAGE_SIZE) *
- BLKIF_MAX_SEGMENTS_PER_REQUEST;
- case BLKIF_PROTOCOL_X86_32:
- return __CONST_RING_SIZE(blkif_x86_32, PAGE_SIZE) *
- BLKIF_MAX_SEGMENTS_PER_REQUEST;
- case BLKIF_PROTOCOL_X86_64:
- return __CONST_RING_SIZE(blkif_x86_64, PAGE_SIZE) *
- BLKIF_MAX_SEGMENTS_PER_REQUEST;
- default:
- BUG();
+ unsigned long flags;
+
+ spin_lock_irqsave(&blkif->free_pages_lock, flags);
+ if (list_empty(&blkif->free_pages)) {
+ BUG_ON(blkif->free_pages_num != 0);
+ spin_unlock_irqrestore(&blkif->free_pages_lock, flags);
+ return alloc_xenballooned_pages(1, page, false);
}
+ BUG_ON(blkif->free_pages_num == 0);
+ page[0] = list_first_entry(&blkif->free_pages, struct page, lru);
+ list_del(&page[0]->lru);
+ blkif->free_pages_num--;
+ spin_unlock_irqrestore(&blkif->free_pages_lock, flags);
+
return 0;
}
-
-/*
- * Little helpful macro to figure out the index and virtual address of the
- * pending_pages[..]. For each 'pending_req' we have have up to
- * BLKIF_MAX_SEGMENTS_PER_REQUEST (11) pages. The seg would be from 0 through
- * 10 and would index in the pending_pages[..].
- */
-static inline int vaddr_pagenr(struct pending_req *req, int seg)
+static inline void put_free_pages(struct xen_blkif *blkif, struct page **page,
+ int num)
{
- return (req - blkbk->pending_reqs) *
- BLKIF_MAX_SEGMENTS_PER_REQUEST + seg;
-}
+ unsigned long flags;
+ int i;
-#define pending_page(req, seg) pending_pages[vaddr_pagenr(req, seg)]
+ spin_lock_irqsave(&blkif->free_pages_lock, flags);
+ for (i = 0; i < num; i++)
+ list_add(&page[i]->lru, &blkif->free_pages);
+ blkif->free_pages_num += num;
+ spin_unlock_irqrestore(&blkif->free_pages_lock, flags);
+}
-static inline unsigned long vaddr(struct pending_req *req, int seg)
+static inline void shrink_free_pagepool(struct xen_blkif *blkif, int num)
{
- unsigned long pfn = page_to_pfn(blkbk->pending_page(req, seg));
- return (unsigned long)pfn_to_kaddr(pfn);
-}
+ /* Remove requested pages in batches of NUM_BATCH_FREE_PAGES */
+ struct page *page[NUM_BATCH_FREE_PAGES];
+ unsigned int num_pages = 0;
+ unsigned long flags;
-#define pending_handle(_req, _seg) \
- (blkbk->pending_grant_handles[vaddr_pagenr(_req, _seg)])
+ spin_lock_irqsave(&blkif->free_pages_lock, flags);
+ while (blkif->free_pages_num > num) {
+ BUG_ON(list_empty(&blkif->free_pages));
+ page[num_pages] = list_first_entry(&blkif->free_pages,
+ struct page, lru);
+ list_del(&page[num_pages]->lru);
+ blkif->free_pages_num--;
+ if (++num_pages == NUM_BATCH_FREE_PAGES) {
+ spin_unlock_irqrestore(&blkif->free_pages_lock, flags);
+ free_xenballooned_pages(num_pages, page);
+ spin_lock_irqsave(&blkif->free_pages_lock, flags);
+ num_pages = 0;
+ }
+ }
+ spin_unlock_irqrestore(&blkif->free_pages_lock, flags);
+ if (num_pages != 0)
+ free_xenballooned_pages(num_pages, page);
+}
+#define vaddr(page) ((unsigned long)pfn_to_kaddr(page_to_pfn(page)))
static int do_block_io_op(struct xen_blkif *blkif);
static int dispatch_rw_block_io(struct xen_blkif *blkif,
@@ -170,13 +178,29 @@ static void make_response(struct xen_blkif *blkif, u64 id,
(n) = (&(pos)->node != NULL) ? rb_next(&(pos)->node) : NULL)
-static void add_persistent_gnt(struct rb_root *root,
+/*
+ * We don't need locking around the persistent grant helpers
+ * because blkback uses a single-thread for each backed, so we
+ * can be sure that this functions will never be called recursively.
+ *
+ * The only exception to that is put_persistent_grant, that can be called
+ * from interrupt context (by xen_blkbk_unmap), so we have to use atomic
+ * bit operations to modify the flags of a persistent grant and to count
+ * the number of used grants.
+ */
+static int add_persistent_gnt(struct xen_blkif *blkif,
struct persistent_gnt *persistent_gnt)
{
- struct rb_node **new = &(root->rb_node), *parent = NULL;
+ struct rb_node **new = NULL, *parent = NULL;
struct persistent_gnt *this;
+ if (blkif->persistent_gnt_c >= xen_blkif_max_pgrants) {
+ if (!blkif->vbd.overflow_max_grants)
+ blkif->vbd.overflow_max_grants = 1;
+ return -EBUSY;
+ }
/* Figure out where to put new node */
+ new = &blkif->persistent_gnts.rb_node;
while (*new) {
this = container_of(*new, struct persistent_gnt, node);
@@ -186,22 +210,28 @@ static void add_persistent_gnt(struct rb_root *root,
else if (persistent_gnt->gnt > this->gnt)
new = &((*new)->rb_right);
else {
- pr_alert(DRV_PFX " trying to add a gref that's already in the tree\n");
- BUG();
+ pr_alert_ratelimited(DRV_PFX " trying to add a gref that's already in the tree\n");
+ return -EINVAL;
}
}
+ bitmap_zero(persistent_gnt->flags, PERSISTENT_GNT_FLAGS_SIZE);
+ set_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags);
/* Add new node and rebalance tree. */
rb_link_node(&(persistent_gnt->node), parent, new);
- rb_insert_color(&(persistent_gnt->node), root);
+ rb_insert_color(&(persistent_gnt->node), &blkif->persistent_gnts);
+ blkif->persistent_gnt_c++;
+ atomic_inc(&blkif->persistent_gnt_in_use);
+ return 0;
}
-static struct persistent_gnt *get_persistent_gnt(struct rb_root *root,
+static struct persistent_gnt *get_persistent_gnt(struct xen_blkif *blkif,
grant_ref_t gref)
{
struct persistent_gnt *data;
- struct rb_node *node = root->rb_node;
+ struct rb_node *node = NULL;
+ node = blkif->persistent_gnts.rb_node;
while (node) {
data = container_of(node, struct persistent_gnt, node);
@@ -209,13 +239,31 @@ static struct persistent_gnt *get_persistent_gnt(struct rb_root *root,
node = node->rb_left;
else if (gref > data->gnt)
node = node->rb_right;
- else
+ else {
+ if(test_bit(PERSISTENT_GNT_ACTIVE, data->flags)) {
+ pr_alert_ratelimited(DRV_PFX " requesting a grant already in use\n");
+ return NULL;
+ }
+ set_bit(PERSISTENT_GNT_ACTIVE, data->flags);
+ atomic_inc(&blkif->persistent_gnt_in_use);
return data;
+ }
}
return NULL;
}
-static void free_persistent_gnts(struct rb_root *root, unsigned int num)
+static void put_persistent_gnt(struct xen_blkif *blkif,
+ struct persistent_gnt *persistent_gnt)
+{
+ if(!test_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags))
+ pr_alert_ratelimited(DRV_PFX " freeing a grant already unused");
+ set_bit(PERSISTENT_GNT_WAS_ACTIVE, persistent_gnt->flags);
+ clear_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags);
+ atomic_dec(&blkif->persistent_gnt_in_use);
+}
+
+static void free_persistent_gnts(struct xen_blkif *blkif, struct rb_root *root,
+ unsigned int num)
{
struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST];
struct page *pages[BLKIF_MAX_SEGMENTS_PER_REQUEST];
@@ -240,7 +288,7 @@ static void free_persistent_gnts(struct rb_root *root, unsigned int num)
ret = gnttab_unmap_refs(unmap, NULL, pages,
segs_to_unmap);
BUG_ON(ret);
- free_xenballooned_pages(segs_to_unmap, pages);
+ put_free_pages(blkif, pages, segs_to_unmap);
segs_to_unmap = 0;
}
@@ -251,21 +299,148 @@ static void free_persistent_gnts(struct rb_root *root, unsigned int num)
BUG_ON(num != 0);
}
+static void unmap_purged_grants(struct work_struct *work)
+{
+ struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST];
+ struct page *pages[BLKIF_MAX_SEGMENTS_PER_REQUEST];
+ struct persistent_gnt *persistent_gnt;
+ int ret, segs_to_unmap = 0;
+ struct xen_blkif *blkif = container_of(work, typeof(*blkif), persistent_purge_work);
+
+ while(!list_empty(&blkif->persistent_purge_list)) {
+ persistent_gnt = list_first_entry(&blkif->persistent_purge_list,
+ struct persistent_gnt,
+ remove_node);
+ list_del(&persistent_gnt->remove_node);
+
+ gnttab_set_unmap_op(&unmap[segs_to_unmap],
+ vaddr(persistent_gnt->page),
+ GNTMAP_host_map,
+ persistent_gnt->handle);
+
+ pages[segs_to_unmap] = persistent_gnt->page;
+
+ if (++segs_to_unmap == BLKIF_MAX_SEGMENTS_PER_REQUEST) {
+ ret = gnttab_unmap_refs(unmap, NULL, pages,
+ segs_to_unmap);
+ BUG_ON(ret);
+ put_free_pages(blkif, pages, segs_to_unmap);
+ segs_to_unmap = 0;
+ }
+ kfree(persistent_gnt);
+ }
+ if (segs_to_unmap > 0) {
+ ret = gnttab_unmap_refs(unmap, NULL, pages, segs_to_unmap);
+ BUG_ON(ret);
+ put_free_pages(blkif, pages, segs_to_unmap);
+ }
+}
+
+static void purge_persistent_gnt(struct xen_blkif *blkif)
+{
+ struct persistent_gnt *persistent_gnt;
+ struct rb_node *n;
+ unsigned int num_clean, total;
+ bool scan_used = false, clean_used = false;
+ struct rb_root *root;
+
+ if (blkif->persistent_gnt_c < xen_blkif_max_pgrants ||
+ (blkif->persistent_gnt_c == xen_blkif_max_pgrants &&
+ !blkif->vbd.overflow_max_grants)) {
+ return;
+ }
+
+ if (work_pending(&blkif->persistent_purge_work)) {
+ pr_alert_ratelimited(DRV_PFX "Scheduled work from previous purge is still pending, cannot purge list\n");
+ return;
+ }
+
+ num_clean = (xen_blkif_max_pgrants / 100) * LRU_PERCENT_CLEAN;
+ num_clean = blkif->persistent_gnt_c - xen_blkif_max_pgrants + num_clean;
+ num_clean = min(blkif->persistent_gnt_c, num_clean);
+ if ((num_clean == 0) ||
+ (num_clean > (blkif->persistent_gnt_c - atomic_read(&blkif->persistent_gnt_in_use))))
+ return;
+
+ /*
+ * At this point, we can assure that there will be no calls
+ * to get_persistent_grant (because we are executing this code from
+ * xen_blkif_schedule), there can only be calls to put_persistent_gnt,
+ * which means that the number of currently used grants will go down,
+ * but never up, so we will always be able to remove the requested
+ * number of grants.
+ */
+
+ total = num_clean;
+
+ pr_debug(DRV_PFX "Going to purge %u persistent grants\n", num_clean);
+
+ INIT_LIST_HEAD(&blkif->persistent_purge_list);
+ root = &blkif->persistent_gnts;
+purge_list:
+ foreach_grant_safe(persistent_gnt, n, root, node) {
+ BUG_ON(persistent_gnt->handle ==
+ BLKBACK_INVALID_HANDLE);
+
+ if (clean_used) {
+ clear_bit(PERSISTENT_GNT_WAS_ACTIVE, persistent_gnt->flags);
+ continue;
+ }
+
+ if (test_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags))
+ continue;
+ if (!scan_used &&
+ (test_bit(PERSISTENT_GNT_WAS_ACTIVE, persistent_gnt->flags)))
+ continue;
+
+ rb_erase(&persistent_gnt->node, root);
+ list_add(&persistent_gnt->remove_node,
+ &blkif->persistent_purge_list);
+ if (--num_clean == 0)
+ goto finished;
+ }
+ /*
+ * If we get here it means we also need to start cleaning
+ * grants that were used since last purge in order to cope
+ * with the requested num
+ */
+ if (!scan_used && !clean_used) {
+ pr_debug(DRV_PFX "Still missing %u purged frames\n", num_clean);
+ scan_used = true;
+ goto purge_list;
+ }
+finished:
+ if (!clean_used) {
+ pr_debug(DRV_PFX "Finished scanning for grants to clean, removing used flag\n");
+ clean_used = true;
+ goto purge_list;
+ }
+
+ blkif->persistent_gnt_c -= (total - num_clean);
+ blkif->vbd.overflow_max_grants = 0;
+
+ /* We can defer this work */
+ INIT_WORK(&blkif->persistent_purge_work, unmap_purged_grants);
+ schedule_work(&blkif->persistent_purge_work);
+ pr_debug(DRV_PFX "Purged %u/%u\n", (total - num_clean), total);
+ return;
+}
+
/*
* Retrieve from the 'pending_reqs' a free pending_req structure to be used.
*/
-static struct pending_req *alloc_req(void)
+static struct pending_req *alloc_req(struct xen_blkif *blkif)
{
struct pending_req *req = NULL;
unsigned long flags;
- spin_lock_irqsave(&blkbk->pending_free_lock, flags);
- if (!list_empty(&blkbk->pending_free)) {
- req = list_entry(blkbk->pending_free.next, struct pending_req,
+ spin_lock_irqsave(&blkif->pending_free_lock, flags);
+ if (!list_empty(&blkif->pending_free)) {
+ req = list_entry(blkif->pending_free.next, struct pending_req,
free_list);
list_del(&req->free_list);
}
- spin_unlock_irqrestore(&blkbk->pending_free_lock, flags);
+ spin_unlock_irqrestore(&blkif->pending_free_lock, flags);
return req;
}
@@ -273,17 +448,17 @@ static struct pending_req *alloc_req(void)
* Return the 'pending_req' structure back to the freepool. We also
* wake up the thread if it was waiting for a free page.
*/
-static void free_req(struct pending_req *req)
+static void free_req(struct xen_blkif *blkif, struct pending_req *req)
{
unsigned long flags;
int was_empty;
- spin_lock_irqsave(&blkbk->pending_free_lock, flags);
- was_empty = list_empty(&blkbk->pending_free);
- list_add(&req->free_list, &blkbk->pending_free);
- spin_unlock_irqrestore(&blkbk->pending_free_lock, flags);
+ spin_lock_irqsave(&blkif->pending_free_lock, flags);
+ was_empty = list_empty(&blkif->pending_free);
+ list_add(&req->free_list, &blkif->pending_free);
+ spin_unlock_irqrestore(&blkif->pending_free_lock, flags);
if (was_empty)
- wake_up(&blkbk->pending_free_wq);
+ wake_up(&blkif->pending_free_wq);
}
/*
@@ -382,10 +557,12 @@ irqreturn_t xen_blkif_be_int(int irq, void *dev_id)
static void print_stats(struct xen_blkif *blkif)
{
pr_info("xen-blkback (%s): oo %3llu | rd %4llu | wr %4llu | f %4llu"
- " | ds %4llu\n",
+ " | ds %4llu | pg: %4u/%4d\n",
current->comm, blkif->st_oo_req,
blkif->st_rd_req, blkif->st_wr_req,
- blkif->st_f_req, blkif->st_ds_req);
+ blkif->st_f_req, blkif->st_ds_req,
+ blkif->persistent_gnt_c,
+ xen_blkif_max_pgrants);
blkif->st_print = jiffies + msecs_to_jiffies(10 * 1000);
blkif->st_rd_req = 0;
blkif->st_wr_req = 0;
@@ -397,6 +574,8 @@ int xen_blkif_schedule(void *arg)
{
struct xen_blkif *blkif = arg;
struct xen_vbd *vbd = &blkif->vbd;
+ unsigned long timeout;
+ int ret;
xen_blkif_get(blkif);
@@ -406,27 +585,52 @@ int xen_blkif_schedule(void *arg)
if (unlikely(vbd->size != vbd_sz(vbd)))
xen_vbd_resize(blkif);
- wait_event_interruptible(
+ timeout = msecs_to_jiffies(LRU_INTERVAL);
+
+ timeout = wait_event_interruptible_timeout(
blkif->wq,
- blkif->waiting_reqs || kthread_should_stop());
- wait_event_interruptible(
- blkbk->pending_free_wq,
- !list_empty(&blkbk->pending_free) ||
- kthread_should_stop());
+ blkif->waiting_reqs || kthread_should_stop(),
+ timeout);
+ if (timeout == 0)
+ goto purge_gnt_list;
+ timeout = wait_event_interruptible_timeout(
+ blkif->pending_free_wq,
+ !list_empty(&blkif->pending_free) ||
+ kthread_should_stop(),
+ timeout);
+ if (timeout == 0)
+ goto purge_gnt_list;
blkif->waiting_reqs = 0;
smp_mb(); /* clear flag *before* checking for work */
- if (do_block_io_op(blkif))
+ ret = do_block_io_op(blkif);
+ if (ret > 0)
blkif->waiting_reqs = 1;
+ if (ret == -EACCES)
+ wait_event_interruptible(blkif->shutdown_wq,
+ kthread_should_stop());
+
+purge_gnt_list:
+ if (blkif->vbd.feature_gnt_persistent &&
+ time_after(jiffies, blkif->next_lru)) {
+ purge_persistent_gnt(blkif);
+ blkif->next_lru = jiffies + msecs_to_jiffies(LRU_INTERVAL);
+ }
+
+ /* Shrink if we have more than xen_blkif_max_buffer_pages */
+ shrink_free_pagepool(blkif, xen_blkif_max_buffer_pages);
if (log_stats && time_after(jiffies, blkif->st_print))
print_stats(blkif);
}
+ /* Since we are shutting down remove all pages from the buffer */
+ shrink_free_pagepool(blkif, 0 /* All */);
+
/* Free all persistent grant pages */
if (!RB_EMPTY_ROOT(&blkif->persistent_gnts))
- free_persistent_gnts(&blkif->persistent_gnts,
+ free_persistent_gnts(blkif, &blkif->persistent_gnts,
blkif->persistent_gnt_c);
BUG_ON(!RB_EMPTY_ROOT(&blkif->persistent_gnts));
@@ -441,148 +645,98 @@ int xen_blkif_schedule(void *arg)
return 0;
}
-struct seg_buf {
- unsigned int offset;
- unsigned int nsec;
-};
/*
* Unmap the grant references, and also remove the M2P over-rides
* used in the 'pending_req'.
*/
-static void xen_blkbk_unmap(struct pending_req *req)
+static void xen_blkbk_unmap(struct xen_blkif *blkif,
+ struct grant_page *pages[],
+ int num)
{
struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST];
- struct page *pages[BLKIF_MAX_SEGMENTS_PER_REQUEST];
+ struct page *unmap_pages[BLKIF_MAX_SEGMENTS_PER_REQUEST];
unsigned int i, invcount = 0;
- grant_handle_t handle;
int ret;
- for (i = 0; i < req->nr_pages; i++) {
- if (!test_bit(i, req->unmap_seg))
+ for (i = 0; i < num; i++) {
+ if (pages[i]->persistent_gnt != NULL) {
+ put_persistent_gnt(blkif, pages[i]->persistent_gnt);
continue;
- handle = pending_handle(req, i);
- if (handle == BLKBACK_INVALID_HANDLE)
+ }
+ if (pages[i]->handle == BLKBACK_INVALID_HANDLE)
continue;
- gnttab_set_unmap_op(&unmap[invcount], vaddr(req, i),
- GNTMAP_host_map, handle);
- pending_handle(req, i) = BLKBACK_INVALID_HANDLE;
- pages[invcount] = virt_to_page(vaddr(req, i));
- invcount++;
+ unmap_pages[invcount] = pages[i]->page;
+ gnttab_set_unmap_op(&unmap[invcount], vaddr(pages[i]->page),
+ GNTMAP_host_map, pages[i]->handle);
+ pages[i]->handle = BLKBACK_INVALID_HANDLE;
+ if (++invcount == BLKIF_MAX_SEGMENTS_PER_REQUEST) {
+ ret = gnttab_unmap_refs(unmap, NULL, unmap_pages,
+ invcount);
+ BUG_ON(ret);
+ put_free_pages(blkif, unmap_pages, invcount);
+ invcount = 0;
+ }
+ }
+ if (invcount) {
+ ret = gnttab_unmap_refs(unmap, NULL, unmap_pages, invcount);
+ BUG_ON(ret);
+ put_free_pages(blkif, unmap_pages, invcount);
}
-
- ret = gnttab_unmap_refs(unmap, NULL, pages, invcount);
- BUG_ON(ret);
}
-static int xen_blkbk_map(struct blkif_request *req,
- struct pending_req *pending_req,
- struct seg_buf seg[],
- struct page *pages[])
+static int xen_blkbk_map(struct xen_blkif *blkif,
+ struct grant_page *pages[],
+ int num, bool ro)
{
struct gnttab_map_grant_ref map[BLKIF_MAX_SEGMENTS_PER_REQUEST];
- struct persistent_gnt *persistent_gnts[BLKIF_MAX_SEGMENTS_PER_REQUEST];
struct page *pages_to_gnt[BLKIF_MAX_SEGMENTS_PER_REQUEST];
struct persistent_gnt *persistent_gnt = NULL;
- struct xen_blkif *blkif = pending_req->blkif;
phys_addr_t addr = 0;
- int i, j;
- bool new_map;
- int nseg = req->u.rw.nr_segments;
+ int i, seg_idx, new_map_idx;
int segs_to_map = 0;
int ret = 0;
+ int last_map = 0, map_until = 0;
int use_persistent_gnts;
use_persistent_gnts = (blkif->vbd.feature_gnt_persistent);
- BUG_ON(blkif->persistent_gnt_c >
- max_mapped_grant_pages(pending_req->blkif->blk_protocol));
-
/*
* Fill out preq.nr_sects with proper amount of sectors, and setup
* assign map[..] with the PFN of the page in our domain with the
* corresponding grant reference for each page.
*/
- for (i = 0; i < nseg; i++) {
+again:
+ for (i = map_until; i < num; i++) {
uint32_t flags;
if (use_persistent_gnts)
persistent_gnt = get_persistent_gnt(
- &blkif->persistent_gnts,
- req->u.rw.seg[i].gref);
+ blkif,
+ pages[i]->gref);
if (persistent_gnt) {
/*
* We are using persistent grants and
* the grant is already mapped
*/
- new_map = false;
- } else if (use_persistent_gnts &&
- blkif->persistent_gnt_c <
- max_mapped_grant_pages(blkif->blk_protocol)) {
- /*
- * We are using persistent grants, the grant is
- * not mapped but we have room for it
- */
- new_map = true;
- persistent_gnt = kmalloc(
- sizeof(struct persistent_gnt),
- GFP_KERNEL);
- if (!persistent_gnt)
- return -ENOMEM;
- if (alloc_xenballooned_pages(1, &persistent_gnt->page,
- false)) {
- kfree(persistent_gnt);
- return -ENOMEM;
- }
- persistent_gnt->gnt = req->u.rw.seg[i].gref;
- persistent_gnt->handle = BLKBACK_INVALID_HANDLE;
-
- pages_to_gnt[segs_to_map] =
- persistent_gnt->page;
- addr = (unsigned long) pfn_to_kaddr(
- page_to_pfn(persistent_gnt->page));
-
- add_persistent_gnt(&blkif->persistent_gnts,
- persistent_gnt);
- blkif->persistent_gnt_c++;
- pr_debug(DRV_PFX " grant %u added to the tree of persistent grants, using %u/%u\n",
- persistent_gnt->gnt, blkif->persistent_gnt_c,
- max_mapped_grant_pages(blkif->blk_protocol));
+ pages[i]->page = persistent_gnt->page;
+ pages[i]->persistent_gnt = persistent_gnt;
} else {
- /*
- * We are either using persistent grants and
- * hit the maximum limit of grants mapped,
- * or we are not using persistent grants.
- */
- if (use_persistent_gnts &&
- !blkif->vbd.overflow_max_grants) {
- blkif->vbd.overflow_max_grants = 1;
- pr_alert(DRV_PFX " domain %u, device %#x is using maximum number of persistent grants\n",
- blkif->domid, blkif->vbd.handle);
- }
- new_map = true;
- pages[i] = blkbk->pending_page(pending_req, i);
- addr = vaddr(pending_req, i);
- pages_to_gnt[segs_to_map] =
- blkbk->pending_page(pending_req, i);
- }
-
- if (persistent_gnt) {
- pages[i] = persistent_gnt->page;
- persistent_gnts[i] = persistent_gnt;
- } else {
- persistent_gnts[i] = NULL;
- }
-
- if (new_map) {
+ if (get_free_page(blkif, &pages[i]->page))
+ goto out_of_memory;
+ addr = vaddr(pages[i]->page);
+ pages_to_gnt[segs_to_map] = pages[i]->page;
+ pages[i]->persistent_gnt = NULL;
flags = GNTMAP_host_map;
- if (!persistent_gnt &&
- (pending_req->operation != BLKIF_OP_READ))
+ if (!use_persistent_gnts && ro)
flags |= GNTMAP_readonly;
gnttab_set_map_op(&map[segs_to_map++], addr,
- flags, req->u.rw.seg[i].gref,
+ flags, pages[i]->gref,
blkif->domid);
}
+ map_until = i + 1;
+ if (segs_to_map == BLKIF_MAX_SEGMENTS_PER_REQUEST)
+ break;
}
if (segs_to_map) {
@@ -595,49 +749,133 @@ static int xen_blkbk_map(struct blkif_request *req,
* so that when we access vaddr(pending_req,i) it has the contents of
* the page from the other domain.
*/
- bitmap_zero(pending_req->unmap_seg, BLKIF_MAX_SEGMENTS_PER_REQUEST);
- for (i = 0, j = 0; i < nseg; i++) {
- if (!persistent_gnts[i] ||
- persistent_gnts[i]->handle == BLKBACK_INVALID_HANDLE) {
+ for (seg_idx = last_map, new_map_idx = 0; seg_idx < map_until; seg_idx++) {
+ if (!pages[seg_idx]->persistent_gnt) {
/* This is a newly mapped grant */
- BUG_ON(j >= segs_to_map);
- if (unlikely(map[j].status != 0)) {
+ BUG_ON(new_map_idx >= segs_to_map);
+ if (unlikely(map[new_map_idx].status != 0)) {
pr_debug(DRV_PFX "invalid buffer -- could not remap it\n");
- map[j].handle = BLKBACK_INVALID_HANDLE;
+ pages[seg_idx]->handle = BLKBACK_INVALID_HANDLE;
ret |= 1;
- if (persistent_gnts[i]) {
- rb_erase(&persistent_gnts[i]->node,
- &blkif->persistent_gnts);
- blkif->persistent_gnt_c--;
- kfree(persistent_gnts[i]);
- persistent_gnts[i] = NULL;
- }
+ goto next;
}
+ pages[seg_idx]->handle = map[new_map_idx].handle;
+ } else {
+ continue;
}
- if (persistent_gnts[i]) {
- if (persistent_gnts[i]->handle ==
- BLKBACK_INVALID_HANDLE) {
+ if (use_persistent_gnts &&
+ blkif->persistent_gnt_c < xen_blkif_max_pgrants) {
+ /*
+ * We are using persistent grants, the grant is
+ * not mapped but we might have room for it.
+ */
+ persistent_gnt = kmalloc(sizeof(struct persistent_gnt),
+ GFP_KERNEL);
+ if (!persistent_gnt) {
/*
- * If this is a new persistent grant
- * save the handler
+ * If we don't have enough memory to
+ * allocate the persistent_gnt struct
+ * map this grant non-persistenly
*/
- persistent_gnts[i]->handle = map[j++].handle;
+ goto next;
}
- pending_handle(pending_req, i) =
- persistent_gnts[i]->handle;
+ persistent_gnt->gnt = map[new_map_idx].ref;
+ persistent_gnt->handle = map[new_map_idx].handle;
+ persistent_gnt->page = pages[seg_idx]->page;
+ if (add_persistent_gnt(blkif,
+ persistent_gnt)) {
+ kfree(persistent_gnt);
+ persistent_gnt = NULL;
+ goto next;
+ }
+ pages[seg_idx]->persistent_gnt = persistent_gnt;
+ pr_debug(DRV_PFX " grant %u added to the tree of persistent grants, using %u/%u\n",
+ persistent_gnt->gnt, blkif->persistent_gnt_c,
+ xen_blkif_max_pgrants);
+ goto next;
+ }
+ if (use_persistent_gnts && !blkif->vbd.overflow_max_grants) {
+ blkif->vbd.overflow_max_grants = 1;
+ pr_debug(DRV_PFX " domain %u, device %#x is using maximum number of persistent grants\n",
+ blkif->domid, blkif->vbd.handle);
+ }
+ /*
+ * We could not map this grant persistently, so use it as
+ * a non-persistent grant.
+ */
+next:
+ new_map_idx++;
+ }
+ segs_to_map = 0;
+ last_map = map_until;
+ if (map_until != num)
+ goto again;
- if (ret)
- continue;
- } else {
- pending_handle(pending_req, i) = map[j++].handle;
- bitmap_set(pending_req->unmap_seg, i, 1);
+ return ret;
+
+out_of_memory:
+ pr_alert(DRV_PFX "%s: out of memory\n", __func__);
+ put_free_pages(blkif, pages_to_gnt, segs_to_map);
+ return -ENOMEM;
+}
+
+static int xen_blkbk_map_seg(struct pending_req *pending_req)
+{
+ int rc;
+
+ rc = xen_blkbk_map(pending_req->blkif, pending_req->segments,
+ pending_req->nr_pages,
+ (pending_req->operation != BLKIF_OP_READ));
+
+ return rc;
+}
- if (ret)
- continue;
+static int xen_blkbk_parse_indirect(struct blkif_request *req,
+ struct pending_req *pending_req,
+ struct seg_buf seg[],
+ struct phys_req *preq)
+{
+ struct grant_page **pages = pending_req->indirect_pages;
+ struct xen_blkif *blkif = pending_req->blkif;
+ int indirect_grefs, rc, n, nseg, i;
+ struct blkif_request_segment_aligned *segments = NULL;
+
+ nseg = pending_req->nr_pages;
+ indirect_grefs = INDIRECT_PAGES(nseg);
+ BUG_ON(indirect_grefs > BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST);
+
+ for (i = 0; i < indirect_grefs; i++)
+ pages[i]->gref = req->u.indirect.indirect_grefs[i];
+
+ rc = xen_blkbk_map(blkif, pages, indirect_grefs, true);
+ if (rc)
+ goto unmap;
+
+ for (n = 0, i = 0; n < nseg; n++) {
+ if ((n % SEGS_PER_INDIRECT_FRAME) == 0) {
+ /* Map indirect segments */
+ if (segments)
+ kunmap_atomic(segments);
+ segments = kmap_atomic(pages[n/SEGS_PER_INDIRECT_FRAME]->page);
+ }
+ i = n % SEGS_PER_INDIRECT_FRAME;
+ pending_req->segments[n]->gref = segments[i].gref;
+ seg[n].nsec = segments[i].last_sect -
+ segments[i].first_sect + 1;
+ seg[n].offset = (segments[i].first_sect << 9);
+ if ((segments[i].last_sect >= (PAGE_SIZE >> 9)) ||
+ (segments[i].last_sect < segments[i].first_sect)) {
+ rc = -EINVAL;
+ goto unmap;
}
- seg[i].offset = (req->u.rw.seg[i].first_sect << 9);
+ preq->nr_sects += seg[n].nsec;
}
- return ret;
+
+unmap:
+ if (segments)
+ kunmap_atomic(segments);
+ xen_blkbk_unmap(blkif, pages, indirect_grefs);
+ return rc;
}
static int dispatch_discard_io(struct xen_blkif *blkif,
@@ -647,7 +885,18 @@ static int dispatch_discard_io(struct xen_blkif *blkif,
int status = BLKIF_RSP_OKAY;
struct block_device *bdev = blkif->vbd.bdev;
unsigned long secure;
+ struct phys_req preq;
+
+ preq.sector_number = req->u.discard.sector_number;
+ preq.nr_sects = req->u.discard.nr_sectors;
+ err = xen_vbd_translate(&preq, blkif, WRITE);
+ if (err) {
+ pr_warn(DRV_PFX "access denied: DISCARD [%llu->%llu] on dev=%04x\n",
+ preq.sector_number,
+ preq.sector_number + preq.nr_sects, blkif->vbd.pdevice);
+ goto fail_response;
+ }
blkif->st_ds_req++;
xen_blkif_get(blkif);
@@ -658,7 +907,7 @@ static int dispatch_discard_io(struct xen_blkif *blkif,
err = blkdev_issue_discard(bdev, req->u.discard.sector_number,
req->u.discard.nr_sectors,
GFP_KERNEL, secure);
-
+fail_response:
if (err == -EOPNOTSUPP) {
pr_debug(DRV_PFX "discard op failed, not supported\n");
status = BLKIF_RSP_EOPNOTSUPP;
@@ -674,7 +923,7 @@ static int dispatch_other_io(struct xen_blkif *blkif,
struct blkif_request *req,
struct pending_req *pending_req)
{
- free_req(pending_req);
+ free_req(blkif, pending_req);
make_response(blkif, req->u.other.id, req->operation,
BLKIF_RSP_EOPNOTSUPP);
return -EIO;
@@ -726,7 +975,9 @@ static void __end_block_io_op(struct pending_req *pending_req, int error)
* the proper response on the ring.
*/
if (atomic_dec_and_test(&pending_req->pendcnt)) {
- xen_blkbk_unmap(pending_req);
+ xen_blkbk_unmap(pending_req->blkif,
+ pending_req->segments,
+ pending_req->nr_pages);
make_response(pending_req->blkif, pending_req->id,
pending_req->operation, pending_req->status);
xen_blkif_put(pending_req->blkif);
@@ -734,7 +985,7 @@ static void __end_block_io_op(struct pending_req *pending_req, int error)
if (atomic_read(&pending_req->blkif->drain))
complete(&pending_req->blkif->drain_complete);
}
- free_req(pending_req);
+ free_req(pending_req->blkif, pending_req);
}
}
@@ -767,6 +1018,12 @@ __do_block_io_op(struct xen_blkif *blkif)
rp = blk_rings->common.sring->req_prod;
rmb(); /* Ensure we see queued requests up to 'rp'. */
+ if (RING_REQUEST_PROD_OVERFLOW(&blk_rings->common, rp)) {
+ rc = blk_rings->common.rsp_prod_pvt;
+ pr_warn(DRV_PFX "Frontend provided bogus ring requests (%d - %d = %d). Halting ring processing on dev=%04x\n",
+ rp, rc, rp - rc, blkif->vbd.pdevice);
+ return -EACCES;
+ }
while (rc != rp) {
if (RING_REQUEST_CONS_OVERFLOW(&blk_rings->common, rc))
@@ -777,7 +1034,7 @@ __do_block_io_op(struct xen_blkif *blkif)
break;
}
- pending_req = alloc_req();
+ pending_req = alloc_req(blkif);
if (NULL == pending_req) {
blkif->st_oo_req++;
more_to_do = 1;
@@ -807,11 +1064,12 @@ __do_block_io_op(struct xen_blkif *blkif)
case BLKIF_OP_WRITE:
case BLKIF_OP_WRITE_BARRIER:
case BLKIF_OP_FLUSH_DISKCACHE:
+ case BLKIF_OP_INDIRECT:
if (dispatch_rw_block_io(blkif, &req, pending_req))
goto done;
break;
case BLKIF_OP_DISCARD:
- free_req(pending_req);
+ free_req(blkif, pending_req);
if (dispatch_discard_io(blkif, &req))
goto done;
break;
@@ -853,17 +1111,28 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif,
struct pending_req *pending_req)
{
struct phys_req preq;
- struct seg_buf seg[BLKIF_MAX_SEGMENTS_PER_REQUEST];
+ struct seg_buf *seg = pending_req->seg;
unsigned int nseg;
struct bio *bio = NULL;
- struct bio *biolist[BLKIF_MAX_SEGMENTS_PER_REQUEST];
+ struct bio **biolist = pending_req->biolist;
int i, nbio = 0;
int operation;
struct blk_plug plug;
bool drain = false;
- struct page *pages[BLKIF_MAX_SEGMENTS_PER_REQUEST];
+ struct grant_page **pages = pending_req->segments;
+ unsigned short req_operation;
+
+ req_operation = req->operation == BLKIF_OP_INDIRECT ?
+ req->u.indirect.indirect_op : req->operation;
+ if ((req->operation == BLKIF_OP_INDIRECT) &&
+ (req_operation != BLKIF_OP_READ) &&
+ (req_operation != BLKIF_OP_WRITE)) {
+ pr_debug(DRV_PFX "Invalid indirect operation (%u)\n",
+ req_operation);
+ goto fail_response;
+ }
- switch (req->operation) {
+ switch (req_operation) {
case BLKIF_OP_READ:
blkif->st_rd_req++;
operation = READ;
@@ -885,33 +1154,47 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif,
}
/* Check that the number of segments is sane. */
- nseg = req->u.rw.nr_segments;
+ nseg = req->operation == BLKIF_OP_INDIRECT ?
+ req->u.indirect.nr_segments : req->u.rw.nr_segments;
if (unlikely(nseg == 0 && operation != WRITE_FLUSH) ||
- unlikely(nseg > BLKIF_MAX_SEGMENTS_PER_REQUEST)) {
+ unlikely((req->operation != BLKIF_OP_INDIRECT) &&
+ (nseg > BLKIF_MAX_SEGMENTS_PER_REQUEST)) ||
+ unlikely((req->operation == BLKIF_OP_INDIRECT) &&
+ (nseg > MAX_INDIRECT_SEGMENTS))) {
pr_debug(DRV_PFX "Bad number of segments in request (%d)\n",
nseg);
/* Haven't submitted any bio's yet. */
goto fail_response;
}
- preq.sector_number = req->u.rw.sector_number;
preq.nr_sects = 0;
pending_req->blkif = blkif;
pending_req->id = req->u.rw.id;
- pending_req->operation = req->operation;
+ pending_req->operation = req_operation;
pending_req->status = BLKIF_RSP_OKAY;
pending_req->nr_pages = nseg;
- for (i = 0; i < nseg; i++) {
- seg[i].nsec = req->u.rw.seg[i].last_sect -
- req->u.rw.seg[i].first_sect + 1;
- if ((req->u.rw.seg[i].last_sect >= (PAGE_SIZE >> 9)) ||
- (req->u.rw.seg[i].last_sect < req->u.rw.seg[i].first_sect))
+ if (req->operation != BLKIF_OP_INDIRECT) {
+ preq.dev = req->u.rw.handle;
+ preq.sector_number = req->u.rw.sector_number;
+ for (i = 0; i < nseg; i++) {
+ pages[i]->gref = req->u.rw.seg[i].gref;
+ seg[i].nsec = req->u.rw.seg[i].last_sect -
+ req->u.rw.seg[i].first_sect + 1;
+ seg[i].offset = (req->u.rw.seg[i].first_sect << 9);
+ if ((req->u.rw.seg[i].last_sect >= (PAGE_SIZE >> 9)) ||
+ (req->u.rw.seg[i].last_sect <
+ req->u.rw.seg[i].first_sect))
+ goto fail_response;
+ preq.nr_sects += seg[i].nsec;
+ }
+ } else {
+ preq.dev = req->u.indirect.handle;
+ preq.sector_number = req->u.indirect.sector_number;
+ if (xen_blkbk_parse_indirect(req, pending_req, seg, &preq))
goto fail_response;
- preq.nr_sects += seg[i].nsec;
-
}
if (xen_vbd_translate(&preq, blkif, operation) != 0) {
@@ -948,7 +1231,7 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif,
* the hypercall to unmap the grants - that is all done in
* xen_blkbk_unmap.
*/
- if (xen_blkbk_map(req, pending_req, seg, pages))
+ if (xen_blkbk_map_seg(pending_req))
goto fail_flush;
/*
@@ -960,11 +1243,12 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif,
for (i = 0; i < nseg; i++) {
while ((bio == NULL) ||
(bio_add_page(bio,
- pages[i],
+ pages[i]->page,
seg[i].nsec << 9,
seg[i].offset) == 0)) {
- bio = bio_alloc(GFP_KERNEL, nseg-i);
+ int nr_iovecs = min_t(int, (nseg-i), BIO_MAX_PAGES);
+ bio = bio_alloc(GFP_KERNEL, nr_iovecs);
if (unlikely(bio == NULL))
goto fail_put_bio;
@@ -1009,11 +1293,12 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif,
return 0;
fail_flush:
- xen_blkbk_unmap(pending_req);
+ xen_blkbk_unmap(blkif, pending_req->segments,
+ pending_req->nr_pages);
fail_response:
/* Haven't submitted any bio's yet. */
- make_response(blkif, req->u.rw.id, req->operation, BLKIF_RSP_ERROR);
- free_req(pending_req);
+ make_response(blkif, req->u.rw.id, req_operation, BLKIF_RSP_ERROR);
+ free_req(blkif, pending_req);
msleep(1); /* back off a bit */
return -EIO;
@@ -1070,73 +1355,20 @@ static void make_response(struct xen_blkif *blkif, u64 id,
static int __init xen_blkif_init(void)
{
- int i, mmap_pages;
int rc = 0;
if (!xen_domain())
return -ENODEV;
- blkbk = kzalloc(sizeof(struct xen_blkbk), GFP_KERNEL);
- if (!blkbk) {
- pr_alert(DRV_PFX "%s: out of memory!\n", __func__);
- return -ENOMEM;
- }
-
- mmap_pages = xen_blkif_reqs * BLKIF_MAX_SEGMENTS_PER_REQUEST;
-
- blkbk->pending_reqs = kzalloc(sizeof(blkbk->pending_reqs[0]) *
- xen_blkif_reqs, GFP_KERNEL);
- blkbk->pending_grant_handles = kmalloc(sizeof(blkbk->pending_grant_handles[0]) *
- mmap_pages, GFP_KERNEL);
- blkbk->pending_pages = kzalloc(sizeof(blkbk->pending_pages[0]) *
- mmap_pages, GFP_KERNEL);
-
- if (!blkbk->pending_reqs || !blkbk->pending_grant_handles ||
- !blkbk->pending_pages) {
- rc = -ENOMEM;
- goto out_of_memory;
- }
-
- for (i = 0; i < mmap_pages; i++) {
- blkbk->pending_grant_handles[i] = BLKBACK_INVALID_HANDLE;
- blkbk->pending_pages[i] = alloc_page(GFP_KERNEL);
- if (blkbk->pending_pages[i] == NULL) {
- rc = -ENOMEM;
- goto out_of_memory;
- }
- }
rc = xen_blkif_interface_init();
if (rc)
goto failed_init;
- INIT_LIST_HEAD(&blkbk->pending_free);
- spin_lock_init(&blkbk->pending_free_lock);
- init_waitqueue_head(&blkbk->pending_free_wq);
-
- for (i = 0; i < xen_blkif_reqs; i++)
- list_add_tail(&blkbk->pending_reqs[i].free_list,
- &blkbk->pending_free);
-
rc = xen_blkif_xenbus_init();
if (rc)
goto failed_init;
- return 0;
-
- out_of_memory:
- pr_alert(DRV_PFX "%s: out of memory\n", __func__);
failed_init:
- kfree(blkbk->pending_reqs);
- kfree(blkbk->pending_grant_handles);
- if (blkbk->pending_pages) {
- for (i = 0; i < mmap_pages; i++) {
- if (blkbk->pending_pages[i])
- __free_page(blkbk->pending_pages[i]);
- }
- kfree(blkbk->pending_pages);
- }
- kfree(blkbk);
- blkbk = NULL;
return rc;
}
diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h
index 60103e2517ba..8d8807563d99 100644
--- a/drivers/block/xen-blkback/common.h
+++ b/drivers/block/xen-blkback/common.h
@@ -50,6 +50,19 @@
__func__, __LINE__, ##args)
+/*
+ * This is the maximum number of segments that would be allowed in indirect
+ * requests. This value will also be passed to the frontend.
+ */
+#define MAX_INDIRECT_SEGMENTS 256
+
+#define SEGS_PER_INDIRECT_FRAME \
+ (PAGE_SIZE/sizeof(struct blkif_request_segment_aligned))
+#define MAX_INDIRECT_PAGES \
+ ((MAX_INDIRECT_SEGMENTS + SEGS_PER_INDIRECT_FRAME - 1)/SEGS_PER_INDIRECT_FRAME)
+#define INDIRECT_PAGES(_segs) \
+ ((_segs + SEGS_PER_INDIRECT_FRAME - 1)/SEGS_PER_INDIRECT_FRAME)
+
/* Not a real protocol. Used to generate ring structs which contain
* the elements common to all protocols only. This way we get a
* compiler-checkable way to use common struct elements, so we can
@@ -83,12 +96,31 @@ struct blkif_x86_32_request_other {
uint64_t id; /* private guest value, echoed in resp */
} __attribute__((__packed__));
+struct blkif_x86_32_request_indirect {
+ uint8_t indirect_op;
+ uint16_t nr_segments;
+ uint64_t id;
+ blkif_sector_t sector_number;
+ blkif_vdev_t handle;
+ uint16_t _pad1;
+ grant_ref_t indirect_grefs[BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST];
+ /*
+ * The maximum number of indirect segments (and pages) that will
+ * be used is determined by MAX_INDIRECT_SEGMENTS, this value
+ * is also exported to the guest (via xenstore
+ * feature-max-indirect-segments entry), so the frontend knows how
+ * many indirect segments the backend supports.
+ */
+ uint64_t _pad2; /* make it 64 byte aligned */
+} __attribute__((__packed__));
+
struct blkif_x86_32_request {
uint8_t operation; /* BLKIF_OP_??? */
union {
struct blkif_x86_32_request_rw rw;
struct blkif_x86_32_request_discard discard;
struct blkif_x86_32_request_other other;
+ struct blkif_x86_32_request_indirect indirect;
} u;
} __attribute__((__packed__));
@@ -127,12 +159,32 @@ struct blkif_x86_64_request_other {
uint64_t id; /* private guest value, echoed in resp */
} __attribute__((__packed__));
+struct blkif_x86_64_request_indirect {
+ uint8_t indirect_op;
+ uint16_t nr_segments;
+ uint32_t _pad1; /* offsetof(blkif_..,u.indirect.id)==8 */
+ uint64_t id;
+ blkif_sector_t sector_number;
+ blkif_vdev_t handle;
+ uint16_t _pad2;
+ grant_ref_t indirect_grefs[BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST];
+ /*
+ * The maximum number of indirect segments (and pages) that will
+ * be used is determined by MAX_INDIRECT_SEGMENTS, this value
+ * is also exported to the guest (via xenstore
+ * feature-max-indirect-segments entry), so the frontend knows how
+ * many indirect segments the backend supports.
+ */
+ uint32_t _pad3; /* make it 64 byte aligned */
+} __attribute__((__packed__));
+
struct blkif_x86_64_request {
uint8_t operation; /* BLKIF_OP_??? */
union {
struct blkif_x86_64_request_rw rw;
struct blkif_x86_64_request_discard discard;
struct blkif_x86_64_request_other other;
+ struct blkif_x86_64_request_indirect indirect;
} u;
} __attribute__((__packed__));
@@ -182,12 +234,26 @@ struct xen_vbd {
struct backend_info;
+/* Number of available flags */
+#define PERSISTENT_GNT_FLAGS_SIZE 2
+/* This persistent grant is currently in use */
+#define PERSISTENT_GNT_ACTIVE 0
+/*
+ * This persistent grant has been used, this flag is set when we remove the
+ * PERSISTENT_GNT_ACTIVE, to know that this grant has been used recently.
+ */
+#define PERSISTENT_GNT_WAS_ACTIVE 1
+
+/* Number of requests that we can fit in a ring */
+#define XEN_BLKIF_REQS 32
struct persistent_gnt {
struct page *page;
grant_ref_t gnt;
grant_handle_t handle;
+ DECLARE_BITMAP(flags, PERSISTENT_GNT_FLAGS_SIZE);
struct rb_node node;
+ struct list_head remove_node;
};
struct xen_blkif {
@@ -219,6 +285,23 @@ struct xen_blkif {
/* tree to store persistent grants */
struct rb_root persistent_gnts;
unsigned int persistent_gnt_c;
+ atomic_t persistent_gnt_in_use;
+ unsigned long next_lru;
+
+ /* used by the kworker that offload work from the persistent purge */
+ struct list_head persistent_purge_list;
+ struct work_struct persistent_purge_work;
+
+ /* buffer of free pages to map grant refs */
+ spinlock_t free_pages_lock;
+ int free_pages_num;
+ struct list_head free_pages;
+
+ /* List of all 'pending_req' available */
+ struct list_head pending_free;
+ /* And its spinlock. */
+ spinlock_t pending_free_lock;
+ wait_queue_head_t pending_free_wq;
/* statistics */
unsigned long st_print;
@@ -231,6 +314,41 @@ struct xen_blkif {
unsigned long long st_wr_sect;
wait_queue_head_t waiting_to_free;
+ /* Thread shutdown wait queue. */
+ wait_queue_head_t shutdown_wq;
+};
+
+struct seg_buf {
+ unsigned long offset;
+ unsigned int nsec;
+};
+
+struct grant_page {
+ struct page *page;
+ struct persistent_gnt *persistent_gnt;
+ grant_handle_t handle;
+ grant_ref_t gref;
+};
+
+/*
+ * Each outstanding request that we've passed to the lower device layers has a
+ * 'pending_req' allocated to it. Each buffer_head that completes decrements
+ * the pendcnt towards zero. When it hits zero, the specified domain has a
+ * response queued for it, with the saved 'id' passed back.
+ */
+struct pending_req {
+ struct xen_blkif *blkif;
+ u64 id;
+ int nr_pages;
+ atomic_t pendcnt;
+ unsigned short operation;
+ int status;
+ struct list_head free_list;
+ struct grant_page *segments[MAX_INDIRECT_SEGMENTS];
+ /* Indirect descriptors */
+ struct grant_page *indirect_pages[MAX_INDIRECT_PAGES];
+ struct seg_buf seg[MAX_INDIRECT_SEGMENTS];
+ struct bio *biolist[MAX_INDIRECT_SEGMENTS];
};
@@ -257,6 +375,7 @@ int xen_blkif_xenbus_init(void);
irqreturn_t xen_blkif_be_int(int irq, void *dev_id);
int xen_blkif_schedule(void *arg);
+int xen_blkif_purge_persistent(void *arg);
int xen_blkbk_flush_diskcache(struct xenbus_transaction xbt,
struct backend_info *be, int state);
@@ -268,7 +387,7 @@ struct xenbus_device *xen_blkbk_xenbus(struct backend_info *be);
static inline void blkif_get_x86_32_req(struct blkif_request *dst,
struct blkif_x86_32_request *src)
{
- int i, n = BLKIF_MAX_SEGMENTS_PER_REQUEST;
+ int i, n = BLKIF_MAX_SEGMENTS_PER_REQUEST, j;
dst->operation = src->operation;
switch (src->operation) {
case BLKIF_OP_READ:
@@ -291,6 +410,18 @@ static inline void blkif_get_x86_32_req(struct blkif_request *dst,
dst->u.discard.sector_number = src->u.discard.sector_number;
dst->u.discard.nr_sectors = src->u.discard.nr_sectors;
break;
+ case BLKIF_OP_INDIRECT:
+ dst->u.indirect.indirect_op = src->u.indirect.indirect_op;
+ dst->u.indirect.nr_segments = src->u.indirect.nr_segments;
+ dst->u.indirect.handle = src->u.indirect.handle;
+ dst->u.indirect.id = src->u.indirect.id;
+ dst->u.indirect.sector_number = src->u.indirect.sector_number;
+ barrier();
+ j = min(MAX_INDIRECT_PAGES, INDIRECT_PAGES(dst->u.indirect.nr_segments));
+ for (i = 0; i < j; i++)
+ dst->u.indirect.indirect_grefs[i] =
+ src->u.indirect.indirect_grefs[i];
+ break;
default:
/*
* Don't know how to translate this op. Only get the
@@ -304,7 +435,7 @@ static inline void blkif_get_x86_32_req(struct blkif_request *dst,
static inline void blkif_get_x86_64_req(struct blkif_request *dst,
struct blkif_x86_64_request *src)
{
- int i, n = BLKIF_MAX_SEGMENTS_PER_REQUEST;
+ int i, n = BLKIF_MAX_SEGMENTS_PER_REQUEST, j;
dst->operation = src->operation;
switch (src->operation) {
case BLKIF_OP_READ:
@@ -327,6 +458,18 @@ static inline void blkif_get_x86_64_req(struct blkif_request *dst,
dst->u.discard.sector_number = src->u.discard.sector_number;
dst->u.discard.nr_sectors = src->u.discard.nr_sectors;
break;
+ case BLKIF_OP_INDIRECT:
+ dst->u.indirect.indirect_op = src->u.indirect.indirect_op;
+ dst->u.indirect.nr_segments = src->u.indirect.nr_segments;
+ dst->u.indirect.handle = src->u.indirect.handle;
+ dst->u.indirect.id = src->u.indirect.id;
+ dst->u.indirect.sector_number = src->u.indirect.sector_number;
+ barrier();
+ j = min(MAX_INDIRECT_PAGES, INDIRECT_PAGES(dst->u.indirect.nr_segments));
+ for (i = 0; i < j; i++)
+ dst->u.indirect.indirect_grefs[i] =
+ src->u.indirect.indirect_grefs[i];
+ break;
default:
/*
* Don't know how to translate this op. Only get the
diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
index 04608a6502d7..fe5c3cd10c34 100644
--- a/drivers/block/xen-blkback/xenbus.c
+++ b/drivers/block/xen-blkback/xenbus.c
@@ -98,12 +98,17 @@ static void xen_update_blkif_status(struct xen_blkif *blkif)
err = PTR_ERR(blkif->xenblkd);
blkif->xenblkd = NULL;
xenbus_dev_error(blkif->be->dev, err, "start xenblkd");
+ return;
}
}
static struct xen_blkif *xen_blkif_alloc(domid_t domid)
{
struct xen_blkif *blkif;
+ struct pending_req *req, *n;
+ int i, j;
+
+ BUILD_BUG_ON(MAX_INDIRECT_PAGES > BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST);
blkif = kmem_cache_zalloc(xen_blkif_cachep, GFP_KERNEL);
if (!blkif)
@@ -118,8 +123,57 @@ static struct xen_blkif *xen_blkif_alloc(domid_t domid)
blkif->st_print = jiffies;
init_waitqueue_head(&blkif->waiting_to_free);
blkif->persistent_gnts.rb_node = NULL;
+ spin_lock_init(&blkif->free_pages_lock);
+ INIT_LIST_HEAD(&blkif->free_pages);
+ blkif->free_pages_num = 0;
+ atomic_set(&blkif->persistent_gnt_in_use, 0);
+
+ INIT_LIST_HEAD(&blkif->pending_free);
+
+ for (i = 0; i < XEN_BLKIF_REQS; i++) {
+ req = kzalloc(sizeof(*req), GFP_KERNEL);
+ if (!req)
+ goto fail;
+ list_add_tail(&req->free_list,
+ &blkif->pending_free);
+ for (j = 0; j < MAX_INDIRECT_SEGMENTS; j++) {
+ req->segments[j] = kzalloc(sizeof(*req->segments[0]),
+ GFP_KERNEL);
+ if (!req->segments[j])
+ goto fail;
+ }
+ for (j = 0; j < MAX_INDIRECT_PAGES; j++) {
+ req->indirect_pages[j] = kzalloc(sizeof(*req->indirect_pages[0]),
+ GFP_KERNEL);
+ if (!req->indirect_pages[j])
+ goto fail;
+ }
+ }
+ spin_lock_init(&blkif->pending_free_lock);
+ init_waitqueue_head(&blkif->pending_free_wq);
+ init_waitqueue_head(&blkif->shutdown_wq);
return blkif;
+
+fail:
+ list_for_each_entry_safe(req, n, &blkif->pending_free, free_list) {
+ list_del(&req->free_list);
+ for (j = 0; j < MAX_INDIRECT_SEGMENTS; j++) {
+ if (!req->segments[j])
+ break;
+ kfree(req->segments[j]);
+ }
+ for (j = 0; j < MAX_INDIRECT_PAGES; j++) {
+ if (!req->indirect_pages[j])
+ break;
+ kfree(req->indirect_pages[j]);
+ }
+ kfree(req);
+ }
+
+ kmem_cache_free(xen_blkif_cachep, blkif);
+
+ return ERR_PTR(-ENOMEM);
}
static int xen_blkif_map(struct xen_blkif *blkif, unsigned long shared_page,
@@ -178,6 +232,7 @@ static void xen_blkif_disconnect(struct xen_blkif *blkif)
{
if (blkif->xenblkd) {
kthread_stop(blkif->xenblkd);
+ wake_up(&blkif->shutdown_wq);
blkif->xenblkd = NULL;
}
@@ -198,8 +253,28 @@ static void xen_blkif_disconnect(struct xen_blkif *blkif)
static void xen_blkif_free(struct xen_blkif *blkif)
{
+ struct pending_req *req, *n;
+ int i = 0, j;
+
if (!atomic_dec_and_test(&blkif->refcnt))
BUG();
+
+ /* Check that there is no request in use */
+ list_for_each_entry_safe(req, n, &blkif->pending_free, free_list) {
+ list_del(&req->free_list);
+
+ for (j = 0; j < MAX_INDIRECT_SEGMENTS; j++)
+ kfree(req->segments[j]);
+
+ for (j = 0; j < MAX_INDIRECT_PAGES; j++)
+ kfree(req->indirect_pages[j]);
+
+ kfree(req);
+ i++;
+ }
+
+ WARN_ON(i != XEN_BLKIF_REQS);
+
kmem_cache_free(xen_blkif_cachep, blkif);
}
@@ -678,6 +753,11 @@ again:
dev->nodename);
goto abort;
}
+ err = xenbus_printf(xbt, dev->nodename, "feature-max-indirect-segments", "%u",
+ MAX_INDIRECT_SEGMENTS);
+ if (err)
+ dev_warn(&dev->dev, "writing %s/feature-max-indirect-segments (%d)",
+ dev->nodename, err);
err = xenbus_printf(xbt, dev->nodename, "sectors", "%llu",
(unsigned long long)vbd_sz(&be->blkif->vbd));
@@ -704,6 +784,11 @@ again:
dev->nodename);
goto abort;
}
+ err = xenbus_printf(xbt, dev->nodename, "physical-sector-size", "%u",
+ bdev_physical_block_size(be->blkif->vbd.bdev));
+ if (err)
+ xenbus_dev_error(dev, err, "writing %s/physical-sector-size",
+ dev->nodename);
err = xenbus_transaction_end(xbt, 0);
if (err == -EAGAIN)
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index d89ef86220f4..a4660bbee8a6 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -74,12 +74,30 @@ struct grant {
struct blk_shadow {
struct blkif_request req;
struct request *request;
- struct grant *grants_used[BLKIF_MAX_SEGMENTS_PER_REQUEST];
+ struct grant **grants_used;
+ struct grant **indirect_grants;
+ struct scatterlist *sg;
+};
+
+struct split_bio {
+ struct bio *bio;
+ atomic_t pending;
+ int err;
};
static DEFINE_MUTEX(blkfront_mutex);
static const struct block_device_operations xlvbd_block_fops;
+/*
+ * Maximum number of segments in indirect requests, the actual value used by
+ * the frontend driver is the minimum of this value and the value provided
+ * by the backend driver.
+ */
+
+static unsigned int xen_blkif_max_segments = 32;
+module_param_named(max, xen_blkif_max_segments, int, S_IRUGO);
+MODULE_PARM_DESC(max, "Maximum amount of segments in indirect requests (default is 32)");
+
#define BLK_RING_SIZE __CONST_RING_SIZE(blkif, PAGE_SIZE)
/*
@@ -98,7 +116,6 @@ struct blkfront_info
enum blkif_state connected;
int ring_ref;
struct blkif_front_ring ring;
- struct scatterlist sg[BLKIF_MAX_SEGMENTS_PER_REQUEST];
unsigned int evtchn, irq;
struct request_queue *rq;
struct work_struct work;
@@ -114,6 +131,7 @@ struct blkfront_info
unsigned int discard_granularity;
unsigned int discard_alignment;
unsigned int feature_persistent:1;
+ unsigned int max_indirect_segments;
int is_ready;
};
@@ -142,6 +160,13 @@ static DEFINE_SPINLOCK(minor_lock);
#define DEV_NAME "xvd" /* name in /dev */
+#define SEGS_PER_INDIRECT_FRAME \
+ (PAGE_SIZE/sizeof(struct blkif_request_segment_aligned))
+#define INDIRECT_GREFS(_segs) \
+ ((_segs + SEGS_PER_INDIRECT_FRAME - 1)/SEGS_PER_INDIRECT_FRAME)
+
+static int blkfront_setup_indirect(struct blkfront_info *info);
+
static int get_id_from_freelist(struct blkfront_info *info)
{
unsigned long free = info->shadow_free;
@@ -358,7 +383,8 @@ static int blkif_queue_request(struct request *req)
struct blkif_request *ring_req;
unsigned long id;
unsigned int fsect, lsect;
- int i, ref;
+ int i, ref, n;
+ struct blkif_request_segment_aligned *segments = NULL;
/*
* Used to store if we are able to queue the request by just using
@@ -369,21 +395,27 @@ static int blkif_queue_request(struct request *req)
grant_ref_t gref_head;
struct grant *gnt_list_entry = NULL;
struct scatterlist *sg;
+ int nseg, max_grefs;
if (unlikely(info->connected != BLKIF_STATE_CONNECTED))
return 1;
- /* Check if we have enought grants to allocate a requests */
- if (info->persistent_gnts_c < BLKIF_MAX_SEGMENTS_PER_REQUEST) {
+ max_grefs = info->max_indirect_segments ?
+ info->max_indirect_segments +
+ INDIRECT_GREFS(info->max_indirect_segments) :
+ BLKIF_MAX_SEGMENTS_PER_REQUEST;
+
+ /* Check if we have enough grants to allocate a requests */
+ if (info->persistent_gnts_c < max_grefs) {
new_persistent_gnts = 1;
if (gnttab_alloc_grant_references(
- BLKIF_MAX_SEGMENTS_PER_REQUEST - info->persistent_gnts_c,
+ max_grefs - info->persistent_gnts_c,
&gref_head) < 0) {
gnttab_request_free_callback(
&info->callback,
blkif_restart_queue_callback,
info,
- BLKIF_MAX_SEGMENTS_PER_REQUEST);
+ max_grefs);
return 1;
}
} else
@@ -394,42 +426,67 @@ static int blkif_queue_request(struct request *req)
id = get_id_from_freelist(info);
info->shadow[id].request = req;
- ring_req->u.rw.id = id;
- ring_req->u.rw.sector_number = (blkif_sector_t)blk_rq_pos(req);
- ring_req->u.rw.handle = info->handle;
-
- ring_req->operation = rq_data_dir(req) ?
- BLKIF_OP_WRITE : BLKIF_OP_READ;
-
- if (req->cmd_flags & (REQ_FLUSH | REQ_FUA)) {
- /*
- * Ideally we can do an unordered flush-to-disk. In case the
- * backend onlysupports barriers, use that. A barrier request
- * a superset of FUA, so we can implement it the same
- * way. (It's also a FLUSH+FUA, since it is
- * guaranteed ordered WRT previous writes.)
- */
- ring_req->operation = info->flush_op;
- }
-
if (unlikely(req->cmd_flags & (REQ_DISCARD | REQ_SECURE))) {
- /* id, sector_number and handle are set above. */
ring_req->operation = BLKIF_OP_DISCARD;
ring_req->u.discard.nr_sectors = blk_rq_sectors(req);
+ ring_req->u.discard.id = id;
+ ring_req->u.discard.sector_number = (blkif_sector_t)blk_rq_pos(req);
if ((req->cmd_flags & REQ_SECURE) && info->feature_secdiscard)
ring_req->u.discard.flag = BLKIF_DISCARD_SECURE;
else
ring_req->u.discard.flag = 0;
} else {
- ring_req->u.rw.nr_segments = blk_rq_map_sg(req->q, req,
- info->sg);
- BUG_ON(ring_req->u.rw.nr_segments >
- BLKIF_MAX_SEGMENTS_PER_REQUEST);
-
- for_each_sg(info->sg, sg, ring_req->u.rw.nr_segments, i) {
+ BUG_ON(info->max_indirect_segments == 0 &&
+ req->nr_phys_segments > BLKIF_MAX_SEGMENTS_PER_REQUEST);
+ BUG_ON(info->max_indirect_segments &&
+ req->nr_phys_segments > info->max_indirect_segments);
+ nseg = blk_rq_map_sg(req->q, req, info->shadow[id].sg);
+ ring_req->u.rw.id = id;
+ if (nseg > BLKIF_MAX_SEGMENTS_PER_REQUEST) {
+ /*
+ * The indirect operation can only be a BLKIF_OP_READ or
+ * BLKIF_OP_WRITE
+ */
+ BUG_ON(req->cmd_flags & (REQ_FLUSH | REQ_FUA));
+ ring_req->operation = BLKIF_OP_INDIRECT;
+ ring_req->u.indirect.indirect_op = rq_data_dir(req) ?
+ BLKIF_OP_WRITE : BLKIF_OP_READ;
+ ring_req->u.indirect.sector_number = (blkif_sector_t)blk_rq_pos(req);
+ ring_req->u.indirect.handle = info->handle;
+ ring_req->u.indirect.nr_segments = nseg;
+ } else {
+ ring_req->u.rw.sector_number = (blkif_sector_t)blk_rq_pos(req);
+ ring_req->u.rw.handle = info->handle;
+ ring_req->operation = rq_data_dir(req) ?
+ BLKIF_OP_WRITE : BLKIF_OP_READ;
+ if (req->cmd_flags & (REQ_FLUSH | REQ_FUA)) {
+ /*
+ * Ideally we can do an unordered flush-to-disk. In case the
+ * backend onlysupports barriers, use that. A barrier request
+ * a superset of FUA, so we can implement it the same
+ * way. (It's also a FLUSH+FUA, since it is
+ * guaranteed ordered WRT previous writes.)
+ */
+ ring_req->operation = info->flush_op;
+ }
+ ring_req->u.rw.nr_segments = nseg;
+ }
+ for_each_sg(info->shadow[id].sg, sg, nseg, i) {
fsect = sg->offset >> 9;
lsect = fsect + (sg->length >> 9) - 1;
+ if ((ring_req->operation == BLKIF_OP_INDIRECT) &&
+ (i % SEGS_PER_INDIRECT_FRAME == 0)) {
+ if (segments)
+ kunmap_atomic(segments);
+
+ n = i / SEGS_PER_INDIRECT_FRAME;
+ gnt_list_entry = get_grant(&gref_head, info);
+ info->shadow[id].indirect_grants[n] = gnt_list_entry;
+ segments = kmap_atomic(pfn_to_page(gnt_list_entry->pfn));
+ ring_req->u.indirect.indirect_grefs[n] = gnt_list_entry->gref;
+ }
+
gnt_list_entry = get_grant(&gref_head, info);
ref = gnt_list_entry->gref;
@@ -441,8 +498,7 @@ static int blkif_queue_request(struct request *req)
BUG_ON(sg->offset + sg->length > PAGE_SIZE);
- shared_data = kmap_atomic(
- pfn_to_page(gnt_list_entry->pfn));
+ shared_data = kmap_atomic(pfn_to_page(gnt_list_entry->pfn));
bvec_data = kmap_atomic(sg_page(sg));
/*
@@ -461,13 +517,23 @@ static int blkif_queue_request(struct request *req)
kunmap_atomic(bvec_data);
kunmap_atomic(shared_data);
}
-
- ring_req->u.rw.seg[i] =
- (struct blkif_request_segment) {
- .gref = ref,
- .first_sect = fsect,
- .last_sect = lsect };
+ if (ring_req->operation != BLKIF_OP_INDIRECT) {
+ ring_req->u.rw.seg[i] =
+ (struct blkif_request_segment) {
+ .gref = ref,
+ .first_sect = fsect,
+ .last_sect = lsect };
+ } else {
+ n = i % SEGS_PER_INDIRECT_FRAME;
+ segments[n] =
+ (struct blkif_request_segment_aligned) {
+ .gref = ref,
+ .first_sect = fsect,
+ .last_sect = lsect };
+ }
}
+ if (segments)
+ kunmap_atomic(segments);
}
info->ring.req_prod_pvt++;
@@ -542,7 +608,9 @@ wait:
flush_requests(info);
}
-static int xlvbd_init_blk_queue(struct gendisk *gd, u16 sector_size)
+static int xlvbd_init_blk_queue(struct gendisk *gd, u16 sector_size,
+ unsigned int physical_sector_size,
+ unsigned int segments)
{
struct request_queue *rq;
struct blkfront_info *info = gd->private_data;
@@ -564,14 +632,15 @@ static int xlvbd_init_blk_queue(struct gendisk *gd, u16 sector_size)
/* Hard sector size and max sectors impersonate the equiv. hardware. */
blk_queue_logical_block_size(rq, sector_size);
- blk_queue_max_hw_sectors(rq, 512);
+ blk_queue_physical_block_size(rq, physical_sector_size);
+ blk_queue_max_hw_sectors(rq, (segments * PAGE_SIZE) / 512);
/* Each segment in a request is up to an aligned page in size. */
blk_queue_segment_boundary(rq, PAGE_SIZE - 1);
blk_queue_max_segment_size(rq, PAGE_SIZE);
/* Ensure a merged request will fit in a single I/O ring slot. */
- blk_queue_max_segments(rq, BLKIF_MAX_SEGMENTS_PER_REQUEST);
+ blk_queue_max_segments(rq, segments);
/* Make sure buffer addresses are sector-aligned. */
blk_queue_dma_alignment(rq, 511);
@@ -588,13 +657,16 @@ static int xlvbd_init_blk_queue(struct gendisk *gd, u16 sector_size)
static void xlvbd_flush(struct blkfront_info *info)
{
blk_queue_flush(info->rq, info->feature_flush);
- printk(KERN_INFO "blkfront: %s: %s: %s %s\n",
+ printk(KERN_INFO "blkfront: %s: %s: %s %s %s %s %s\n",
info->gd->disk_name,
info->flush_op == BLKIF_OP_WRITE_BARRIER ?
"barrier" : (info->flush_op == BLKIF_OP_FLUSH_DISKCACHE ?
"flush diskcache" : "barrier or flush"),
- info->feature_flush ? "enabled" : "disabled",
- info->feature_persistent ? "using persistent grants" : "");
+ info->feature_flush ? "enabled;" : "disabled;",
+ "persistent grants:",
+ info->feature_persistent ? "enabled;" : "disabled;",
+ "indirect descriptors:",
+ info->max_indirect_segments ? "enabled;" : "disabled;");
}
static int xen_translate_vdev(int vdevice, int *minor, unsigned int *offset)
@@ -667,7 +739,8 @@ static char *encode_disk_name(char *ptr, unsigned int n)
static int xlvbd_alloc_gendisk(blkif_sector_t capacity,
struct blkfront_info *info,
- u16 vdisk_info, u16 sector_size)
+ u16 vdisk_info, u16 sector_size,
+ unsigned int physical_sector_size)
{
struct gendisk *gd;
int nr_minors = 1;
@@ -734,7 +807,9 @@ static int xlvbd_alloc_gendisk(blkif_sector_t capacity,
gd->driverfs_dev = &(info->xbdev->dev);
set_capacity(gd, capacity);
- if (xlvbd_init_blk_queue(gd, sector_size)) {
+ if (xlvbd_init_blk_queue(gd, sector_size, physical_sector_size,
+ info->max_indirect_segments ? :
+ BLKIF_MAX_SEGMENTS_PER_REQUEST)) {
del_gendisk(gd);
goto release;
}
@@ -818,6 +893,7 @@ static void blkif_free(struct blkfront_info *info, int suspend)
{
struct grant *persistent_gnt;
struct grant *n;
+ int i, j, segs;
/* Prevent new requests being issued until we fix things up. */
spin_lock_irq(&info->io_lock);
@@ -843,6 +919,47 @@ static void blkif_free(struct blkfront_info *info, int suspend)
}
BUG_ON(info->persistent_gnts_c != 0);
+ for (i = 0; i < BLK_RING_SIZE; i++) {
+ /*
+ * Clear persistent grants present in requests already
+ * on the shared ring
+ */
+ if (!info->shadow[i].request)
+ goto free_shadow;
+
+ segs = info->shadow[i].req.operation == BLKIF_OP_INDIRECT ?
+ info->shadow[i].req.u.indirect.nr_segments :
+ info->shadow[i].req.u.rw.nr_segments;
+ for (j = 0; j < segs; j++) {
+ persistent_gnt = info->shadow[i].grants_used[j];
+ gnttab_end_foreign_access(persistent_gnt->gref, 0, 0UL);
+ __free_page(pfn_to_page(persistent_gnt->pfn));
+ kfree(persistent_gnt);
+ }
+
+ if (info->shadow[i].req.operation != BLKIF_OP_INDIRECT)
+ /*
+ * If this is not an indirect operation don't try to
+ * free indirect segments
+ */
+ goto free_shadow;
+
+ for (j = 0; j < INDIRECT_GREFS(segs); j++) {
+ persistent_gnt = info->shadow[i].indirect_grants[j];
+ gnttab_end_foreign_access(persistent_gnt->gref, 0, 0UL);
+ __free_page(pfn_to_page(persistent_gnt->pfn));
+ kfree(persistent_gnt);
+ }
+
+free_shadow:
+ kfree(info->shadow[i].grants_used);
+ info->shadow[i].grants_used = NULL;
+ kfree(info->shadow[i].indirect_grants);
+ info->shadow[i].indirect_grants = NULL;
+ kfree(info->shadow[i].sg);
+ info->shadow[i].sg = NULL;
+ }
+
/* No more gnttab callback work. */
gnttab_cancel_free_callback(&info->callback);
spin_unlock_irq(&info->io_lock);
@@ -867,12 +984,13 @@ static void blkif_completion(struct blk_shadow *s, struct blkfront_info *info,
struct blkif_response *bret)
{
int i = 0;
- struct bio_vec *bvec;
- struct req_iterator iter;
- unsigned long flags;
+ struct scatterlist *sg;
char *bvec_data;
void *shared_data;
- unsigned int offset = 0;
+ int nseg;
+
+ nseg = s->req.operation == BLKIF_OP_INDIRECT ?
+ s->req.u.indirect.nr_segments : s->req.u.rw.nr_segments;
if (bret->operation == BLKIF_OP_READ) {
/*
@@ -881,26 +999,29 @@ static void blkif_completion(struct blk_shadow *s, struct blkfront_info *info,
* than PAGE_SIZE, we have to keep track of the current offset,
* to be sure we are copying the data from the right shared page.
*/
- rq_for_each_segment(bvec, s->request, iter) {
- BUG_ON((bvec->bv_offset + bvec->bv_len) > PAGE_SIZE);
- if (bvec->bv_offset < offset)
- i++;
- BUG_ON(i >= s->req.u.rw.nr_segments);
+ for_each_sg(s->sg, sg, nseg, i) {
+ BUG_ON(sg->offset + sg->length > PAGE_SIZE);
shared_data = kmap_atomic(
pfn_to_page(s->grants_used[i]->pfn));
- bvec_data = bvec_kmap_irq(bvec, &flags);
- memcpy(bvec_data, shared_data + bvec->bv_offset,
- bvec->bv_len);
- bvec_kunmap_irq(bvec_data, &flags);
+ bvec_data = kmap_atomic(sg_page(sg));
+ memcpy(bvec_data + sg->offset,
+ shared_data + sg->offset,
+ sg->length);
+ kunmap_atomic(bvec_data);
kunmap_atomic(shared_data);
- offset = bvec->bv_offset + bvec->bv_len;
}
}
/* Add the persistent grant into the list of free grants */
- for (i = 0; i < s->req.u.rw.nr_segments; i++) {
+ for (i = 0; i < nseg; i++) {
list_add(&s->grants_used[i]->node, &info->persistent_gnts);
info->persistent_gnts_c++;
}
+ if (s->req.operation == BLKIF_OP_INDIRECT) {
+ for (i = 0; i < INDIRECT_GREFS(nseg); i++) {
+ list_add(&s->indirect_grants[i]->node, &info->persistent_gnts);
+ info->persistent_gnts_c++;
+ }
+ }
}
static irqreturn_t blkif_interrupt(int irq, void *dev_id)
@@ -1034,14 +1155,6 @@ static int setup_blkring(struct xenbus_device *dev,
SHARED_RING_INIT(sring);
FRONT_RING_INIT(&info->ring, sring, PAGE_SIZE);
- sg_init_table(info->sg, BLKIF_MAX_SEGMENTS_PER_REQUEST);
-
- /* Allocate memory for grants */
- err = fill_grant_buffer(info, BLK_RING_SIZE *
- BLKIF_MAX_SEGMENTS_PER_REQUEST);
- if (err)
- goto fail;
-
err = xenbus_grant_ring(dev, virt_to_mfn(info->ring.sring));
if (err < 0) {
free_page((unsigned long)sring);
@@ -1223,13 +1336,84 @@ static int blkfront_probe(struct xenbus_device *dev,
return 0;
}
+/*
+ * This is a clone of md_trim_bio, used to split a bio into smaller ones
+ */
+static void trim_bio(struct bio *bio, int offset, int size)
+{
+ /* 'bio' is a cloned bio which we need to trim to match
+ * the given offset and size.
+ * This requires adjusting bi_sector, bi_size, and bi_io_vec
+ */
+ int i;
+ struct bio_vec *bvec;
+ int sofar = 0;
+
+ size <<= 9;
+ if (offset == 0 && size == bio->bi_size)
+ return;
+
+ bio->bi_sector += offset;
+ bio->bi_size = size;
+ offset <<= 9;
+ clear_bit(BIO_SEG_VALID, &bio->bi_flags);
+
+ while (bio->bi_idx < bio->bi_vcnt &&
+ bio->bi_io_vec[bio->bi_idx].bv_len <= offset) {
+ /* remove this whole bio_vec */
+ offset -= bio->bi_io_vec[bio->bi_idx].bv_len;
+ bio->bi_idx++;
+ }
+ if (bio->bi_idx < bio->bi_vcnt) {
+ bio->bi_io_vec[bio->bi_idx].bv_offset += offset;
+ bio->bi_io_vec[bio->bi_idx].bv_len -= offset;
+ }
+ /* avoid any complications with bi_idx being non-zero*/
+ if (bio->bi_idx) {
+ memmove(bio->bi_io_vec, bio->bi_io_vec+bio->bi_idx,
+ (bio->bi_vcnt - bio->bi_idx) * sizeof(struct bio_vec));
+ bio->bi_vcnt -= bio->bi_idx;
+ bio->bi_idx = 0;
+ }
+ /* Make sure vcnt and last bv are not too big */
+ bio_for_each_segment(bvec, bio, i) {
+ if (sofar + bvec->bv_len > size)
+ bvec->bv_len = size - sofar;
+ if (bvec->bv_len == 0) {
+ bio->bi_vcnt = i;
+ break;
+ }
+ sofar += bvec->bv_len;
+ }
+}
+
+static void split_bio_end(struct bio *bio, int error)
+{
+ struct split_bio *split_bio = bio->bi_private;
+
+ if (error)
+ split_bio->err = error;
+
+ if (atomic_dec_and_test(&split_bio->pending)) {
+ split_bio->bio->bi_phys_segments = 0;
+ bio_endio(split_bio->bio, split_bio->err);
+ kfree(split_bio);
+ }
+ bio_put(bio);
+}
static int blkif_recover(struct blkfront_info *info)
{
int i;
- struct blkif_request *req;
+ struct request *req, *n;
struct blk_shadow *copy;
- int j;
+ int rc;
+ struct bio *bio, *cloned_bio;
+ struct bio_list bio_list, merge_bio;
+ unsigned int segs, offset;
+ int pending, size;
+ struct split_bio *split_bio;
+ struct list_head requests;
/* Stage 1: Make a safe copy of the shadow state. */
copy = kmemdup(info->shadow, sizeof(info->shadow),
@@ -1244,36 +1428,64 @@ static int blkif_recover(struct blkfront_info *info)
info->shadow_free = info->ring.req_prod_pvt;
info->shadow[BLK_RING_SIZE-1].req.u.rw.id = 0x0fffffff;
- /* Stage 3: Find pending requests and requeue them. */
+ rc = blkfront_setup_indirect(info);
+ if (rc) {
+ kfree(copy);
+ return rc;
+ }
+
+ segs = info->max_indirect_segments ? : BLKIF_MAX_SEGMENTS_PER_REQUEST;
+ blk_queue_max_segments(info->rq, segs);
+ bio_list_init(&bio_list);
+ INIT_LIST_HEAD(&requests);
for (i = 0; i < BLK_RING_SIZE; i++) {
/* Not in use? */
if (!copy[i].request)
continue;
- /* Grab a request slot and copy shadow state into it. */
- req = RING_GET_REQUEST(&info->ring, info->ring.req_prod_pvt);
- *req = copy[i].req;
-
- /* We get a new request id, and must reset the shadow state. */
- req->u.rw.id = get_id_from_freelist(info);
- memcpy(&info->shadow[req->u.rw.id], &copy[i], sizeof(copy[i]));
-
- if (req->operation != BLKIF_OP_DISCARD) {
- /* Rewrite any grant references invalidated by susp/resume. */
- for (j = 0; j < req->u.rw.nr_segments; j++)
- gnttab_grant_foreign_access_ref(
- req->u.rw.seg[j].gref,
- info->xbdev->otherend_id,
- pfn_to_mfn(copy[i].grants_used[j]->pfn),
- 0);
+ /*
+ * Get the bios in the request so we can re-queue them.
+ */
+ if (copy[i].request->cmd_flags &
+ (REQ_FLUSH | REQ_FUA | REQ_DISCARD | REQ_SECURE)) {
+ /*
+ * Flush operations don't contain bios, so
+ * we need to requeue the whole request
+ */
+ list_add(&copy[i].request->queuelist, &requests);
+ continue;
}
- info->shadow[req->u.rw.id].req = *req;
-
- info->ring.req_prod_pvt++;
+ merge_bio.head = copy[i].request->bio;
+ merge_bio.tail = copy[i].request->biotail;
+ bio_list_merge(&bio_list, &merge_bio);
+ copy[i].request->bio = NULL;
+ blk_put_request(copy[i].request);
}
kfree(copy);
+ /*
+ * Empty the queue, this is important because we might have
+ * requests in the queue with more segments than what we
+ * can handle now.
+ */
+ spin_lock_irq(&info->io_lock);
+ while ((req = blk_fetch_request(info->rq)) != NULL) {
+ if (req->cmd_flags &
+ (REQ_FLUSH | REQ_FUA | REQ_DISCARD | REQ_SECURE)) {
+ list_add(&req->queuelist, &requests);
+ continue;
+ }
+ merge_bio.head = req->bio;
+ merge_bio.tail = req->biotail;
+ bio_list_merge(&bio_list, &merge_bio);
+ req->bio = NULL;
+ if (req->cmd_flags & (REQ_FLUSH | REQ_FUA))
+ pr_alert("diskcache flush request found!\n");
+ __blk_put_request(info->rq, req);
+ }
+ spin_unlock_irq(&info->io_lock);
+
xenbus_switch_state(info->xbdev, XenbusStateConnected);
spin_lock_irq(&info->io_lock);
@@ -1281,14 +1493,50 @@ static int blkif_recover(struct blkfront_info *info)
/* Now safe for us to use the shared ring */
info->connected = BLKIF_STATE_CONNECTED;
- /* Send off requeued requests */
- flush_requests(info);
-
/* Kick any other new requests queued since we resumed */
kick_pending_request_queues(info);
+ list_for_each_entry_safe(req, n, &requests, queuelist) {
+ /* Requeue pending requests (flush or discard) */
+ list_del_init(&req->queuelist);
+ BUG_ON(req->nr_phys_segments > segs);
+ blk_requeue_request(info->rq, req);
+ }
spin_unlock_irq(&info->io_lock);
+ while ((bio = bio_list_pop(&bio_list)) != NULL) {
+ /* Traverse the list of pending bios and re-queue them */
+ if (bio_segments(bio) > segs) {
+ /*
+ * This bio has more segments than what we can
+ * handle, we have to split it.
+ */
+ pending = (bio_segments(bio) + segs - 1) / segs;
+ split_bio = kzalloc(sizeof(*split_bio), GFP_NOIO);
+ BUG_ON(split_bio == NULL);
+ atomic_set(&split_bio->pending, pending);
+ split_bio->bio = bio;
+ for (i = 0; i < pending; i++) {
+ offset = (i * segs * PAGE_SIZE) >> 9;
+ size = min((unsigned int)(segs * PAGE_SIZE) >> 9,
+ (unsigned int)(bio->bi_size >> 9) - offset);
+ cloned_bio = bio_clone(bio, GFP_NOIO);
+ BUG_ON(cloned_bio == NULL);
+ trim_bio(cloned_bio, offset, size);
+ cloned_bio->bi_private = split_bio;
+ cloned_bio->bi_end_io = split_bio_end;
+ submit_bio(cloned_bio->bi_rw, cloned_bio);
+ }
+ /*
+ * Now we have to wait for all those smaller bios to
+ * end, so we can also end the "parent" bio.
+ */
+ continue;
+ }
+ /* We don't need to split this bio */
+ submit_bio(bio->bi_rw, bio);
+ }
+
return 0;
}
@@ -1308,8 +1556,12 @@ static int blkfront_resume(struct xenbus_device *dev)
blkif_free(info, info->connected == BLKIF_STATE_CONNECTED);
err = talk_to_blkback(dev, info);
- if (info->connected == BLKIF_STATE_SUSPENDED && !err)
- err = blkif_recover(info);
+
+ /*
+ * We have to wait for the backend to switch to
+ * connected state, since we want to read which
+ * features it supports.
+ */
return err;
}
@@ -1387,6 +1639,60 @@ static void blkfront_setup_discard(struct blkfront_info *info)
kfree(type);
}
+static int blkfront_setup_indirect(struct blkfront_info *info)
+{
+ unsigned int indirect_segments, segs;
+ int err, i;
+
+ err = xenbus_gather(XBT_NIL, info->xbdev->otherend,
+ "feature-max-indirect-segments", "%u", &indirect_segments,
+ NULL);
+ if (err) {
+ info->max_indirect_segments = 0;
+ segs = BLKIF_MAX_SEGMENTS_PER_REQUEST;
+ } else {
+ info->max_indirect_segments = min(indirect_segments,
+ xen_blkif_max_segments);
+ segs = info->max_indirect_segments;
+ }
+
+ err = fill_grant_buffer(info, (segs + INDIRECT_GREFS(segs)) * BLK_RING_SIZE);
+ if (err)
+ goto out_of_memory;
+
+ for (i = 0; i < BLK_RING_SIZE; i++) {
+ info->shadow[i].grants_used = kzalloc(
+ sizeof(info->shadow[i].grants_used[0]) * segs,
+ GFP_NOIO);
+ info->shadow[i].sg = kzalloc(sizeof(info->shadow[i].sg[0]) * segs, GFP_NOIO);
+ if (info->max_indirect_segments)
+ info->shadow[i].indirect_grants = kzalloc(
+ sizeof(info->shadow[i].indirect_grants[0]) *
+ INDIRECT_GREFS(segs),
+ GFP_NOIO);
+ if ((info->shadow[i].grants_used == NULL) ||
+ (info->shadow[i].sg == NULL) ||
+ (info->max_indirect_segments &&
+ (info->shadow[i].indirect_grants == NULL)))
+ goto out_of_memory;
+ sg_init_table(info->shadow[i].sg, segs);
+ }
+
+
+ return 0;
+
+out_of_memory:
+ for (i = 0; i < BLK_RING_SIZE; i++) {
+ kfree(info->shadow[i].grants_used);
+ info->shadow[i].grants_used = NULL;
+ kfree(info->shadow[i].sg);
+ info->shadow[i].sg = NULL;
+ kfree(info->shadow[i].indirect_grants);
+ info->shadow[i].indirect_grants = NULL;
+ }
+ return -ENOMEM;
+}
+
/*
* Invoked when the backend is finally 'ready' (and has told produced
* the details about the physical device - #sectors, size, etc).
@@ -1395,6 +1701,7 @@ static void blkfront_connect(struct blkfront_info *info)
{
unsigned long long sectors;
unsigned long sector_size;
+ unsigned int physical_sector_size;
unsigned int binfo;
int err;
int barrier, flush, discard, persistent;
@@ -1414,8 +1721,15 @@ static void blkfront_connect(struct blkfront_info *info)
set_capacity(info->gd, sectors);
revalidate_disk(info->gd);
- /* fall through */
+ return;
case BLKIF_STATE_SUSPENDED:
+ /*
+ * If we are recovering from suspension, we need to wait
+ * for the backend to announce it's features before
+ * reconnecting, at least we need to know if the backend
+ * supports indirect descriptors, and how many.
+ */
+ blkif_recover(info);
return;
default:
@@ -1437,6 +1751,16 @@ static void blkfront_connect(struct blkfront_info *info)
return;
}
+ /*
+ * physcial-sector-size is a newer field, so old backends may not
+ * provide this. Assume physical sector size to be the same as
+ * sector_size in that case.
+ */
+ err = xenbus_scanf(XBT_NIL, info->xbdev->otherend,
+ "physical-sector-size", "%u", &physical_sector_size);
+ if (err != 1)
+ physical_sector_size = sector_size;
+
info->feature_flush = 0;
info->flush_op = 0;
@@ -1483,7 +1807,15 @@ static void blkfront_connect(struct blkfront_info *info)
else
info->feature_persistent = persistent;
- err = xlvbd_alloc_gendisk(sectors, info, binfo, sector_size);
+ err = blkfront_setup_indirect(info);
+ if (err) {
+ xenbus_dev_fatal(info->xbdev, err, "setup_indirect at %s",
+ info->xbdev->otherend);
+ return;
+ }
+
+ err = xlvbd_alloc_gendisk(sectors, info, binfo, sector_size,
+ physical_sector_size);
if (err) {
xenbus_dev_fatal(info->xbdev, err, "xlvbd_add at %s",
info->xbdev->otherend);
diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
index 053d846ab5b1..ffadd836e0b5 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -123,7 +123,7 @@ static int arch_timer_set_next_event_phys(unsigned long evt,
return 0;
}
-static int __cpuinit arch_timer_setup(struct clock_event_device *clk)
+static int arch_timer_setup(struct clock_event_device *clk)
{
clk->features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_C3STOP;
clk->name = "arch_sys_timer";
@@ -221,7 +221,7 @@ struct timecounter *arch_timer_get_timecounter(void)
return &timecounter;
}
-static void __cpuinit arch_timer_stop(struct clock_event_device *clk)
+static void arch_timer_stop(struct clock_event_device *clk)
{
pr_debug("arch_timer_teardown disable IRQ%d cpu #%d\n",
clk->irq, smp_processor_id());
@@ -237,7 +237,7 @@ static void __cpuinit arch_timer_stop(struct clock_event_device *clk)
clk->set_mode(CLOCK_EVT_MODE_UNUSED, clk);
}
-static int __cpuinit arch_timer_cpu_notify(struct notifier_block *self,
+static int arch_timer_cpu_notify(struct notifier_block *self,
unsigned long action, void *hcpu)
{
/*
@@ -256,7 +256,7 @@ static int __cpuinit arch_timer_cpu_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block arch_timer_cpu_nb __cpuinitdata = {
+static struct notifier_block arch_timer_cpu_nb = {
.notifier_call = arch_timer_cpu_notify,
};
diff --git a/drivers/clocksource/arm_global_timer.c b/drivers/clocksource/arm_global_timer.c
index db8afc7427a6..b66c1f36066c 100644
--- a/drivers/clocksource/arm_global_timer.c
+++ b/drivers/clocksource/arm_global_timer.c
@@ -164,7 +164,7 @@ static irqreturn_t gt_clockevent_interrupt(int irq, void *dev_id)
return IRQ_HANDLED;
}
-static int __cpuinit gt_clockevents_init(struct clock_event_device *clk)
+static int gt_clockevents_init(struct clock_event_device *clk)
{
int cpu = smp_processor_id();
@@ -221,8 +221,8 @@ static void __init gt_clocksource_init(void)
clocksource_register_hz(&gt_clocksource, gt_clk_rate);
}
-static int __cpuinit gt_cpu_notify(struct notifier_block *self,
- unsigned long action, void *hcpu)
+static int gt_cpu_notify(struct notifier_block *self, unsigned long action,
+ void *hcpu)
{
switch (action & ~CPU_TASKS_FROZEN) {
case CPU_STARTING:
@@ -235,7 +235,7 @@ static int __cpuinit gt_cpu_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block gt_cpu_nb __cpuinitdata = {
+static struct notifier_block gt_cpu_nb = {
.notifier_call = gt_cpu_notify,
};
diff --git a/drivers/clocksource/dummy_timer.c b/drivers/clocksource/dummy_timer.c
index 1f55f9620338..b3eb582d6a6f 100644
--- a/drivers/clocksource/dummy_timer.c
+++ b/drivers/clocksource/dummy_timer.c
@@ -25,7 +25,7 @@ static void dummy_timer_set_mode(enum clock_event_mode mode,
*/
}
-static void __cpuinit dummy_timer_setup(void)
+static void dummy_timer_setup(void)
{
int cpu = smp_processor_id();
struct clock_event_device *evt = __this_cpu_ptr(&dummy_timer_evt);
@@ -41,7 +41,7 @@ static void __cpuinit dummy_timer_setup(void)
clockevents_register_device(evt);
}
-static int __cpuinit dummy_timer_cpu_notify(struct notifier_block *self,
+static int dummy_timer_cpu_notify(struct notifier_block *self,
unsigned long action, void *hcpu)
{
if ((action & ~CPU_TASKS_FROZEN) == CPU_STARTING)
@@ -50,7 +50,7 @@ static int __cpuinit dummy_timer_cpu_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block dummy_timer_cpu_nb __cpuinitdata = {
+static struct notifier_block dummy_timer_cpu_nb = {
.notifier_call = dummy_timer_cpu_notify,
};
diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index a70480409ea5..b2bbc415f120 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -400,7 +400,7 @@ static irqreturn_t exynos4_mct_tick_isr(int irq, void *dev_id)
return IRQ_HANDLED;
}
-static int __cpuinit exynos4_local_timer_setup(struct clock_event_device *evt)
+static int exynos4_local_timer_setup(struct clock_event_device *evt)
{
struct mct_clock_event_device *mevt;
unsigned int cpu = smp_processor_id();
@@ -448,7 +448,7 @@ static void exynos4_local_timer_stop(struct clock_event_device *evt)
disable_percpu_irq(mct_irqs[MCT_L0_IRQ]);
}
-static struct local_timer_ops exynos4_mct_tick_ops __cpuinitdata = {
+static struct local_timer_ops exynos4_mct_tick_ops = {
.setup = exynos4_local_timer_setup,
.stop = exynos4_local_timer_stop,
};
diff --git a/drivers/clocksource/metag_generic.c b/drivers/clocksource/metag_generic.c
index 6722f0e2fe40..9e4db41abe3c 100644
--- a/drivers/clocksource/metag_generic.c
+++ b/drivers/clocksource/metag_generic.c
@@ -109,7 +109,7 @@ unsigned long long sched_clock(void)
return ticks << HARDWARE_TO_NS_SHIFT;
}
-static void __cpuinit arch_timer_setup(unsigned int cpu)
+static void arch_timer_setup(unsigned int cpu)
{
unsigned int txdivtime;
struct clock_event_device *clk = &per_cpu(local_clockevent, cpu);
@@ -154,7 +154,7 @@ static void __cpuinit arch_timer_setup(unsigned int cpu)
}
}
-static int __cpuinit arch_timer_cpu_notify(struct notifier_block *self,
+static int arch_timer_cpu_notify(struct notifier_block *self,
unsigned long action, void *hcpu)
{
int cpu = (long)hcpu;
@@ -169,7 +169,7 @@ static int __cpuinit arch_timer_cpu_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata arch_timer_cpu_nb = {
+static struct notifier_block arch_timer_cpu_nb = {
.notifier_call = arch_timer_cpu_notify,
};
diff --git a/drivers/clocksource/time-armada-370-xp.c b/drivers/clocksource/time-armada-370-xp.c
index efdca3263afe..1b04b7e1d39b 100644
--- a/drivers/clocksource/time-armada-370-xp.c
+++ b/drivers/clocksource/time-armada-370-xp.c
@@ -167,7 +167,7 @@ static irqreturn_t armada_370_xp_timer_interrupt(int irq, void *dev_id)
/*
* Setup the local clock events for a CPU.
*/
-static int __cpuinit armada_370_xp_timer_setup(struct clock_event_device *evt)
+static int armada_370_xp_timer_setup(struct clock_event_device *evt)
{
u32 u;
int cpu = smp_processor_id();
@@ -205,7 +205,7 @@ static void armada_370_xp_timer_stop(struct clock_event_device *evt)
disable_percpu_irq(evt->irq);
}
-static struct local_timer_ops armada_370_xp_local_timer_ops __cpuinitdata = {
+static struct local_timer_ops armada_370_xp_local_timer_ops = {
.setup = armada_370_xp_timer_setup,
.stop = armada_370_xp_timer_stop,
};
diff --git a/drivers/clocksource/timer-marco.c b/drivers/clocksource/timer-marco.c
index e5dc9129ca26..62876baa3ab9 100644
--- a/drivers/clocksource/timer-marco.c
+++ b/drivers/clocksource/timer-marco.c
@@ -184,7 +184,7 @@ static struct irqaction sirfsoc_timer1_irq = {
.handler = sirfsoc_timer_interrupt,
};
-static int __cpuinit sirfsoc_local_timer_setup(struct clock_event_device *ce)
+static int sirfsoc_local_timer_setup(struct clock_event_device *ce)
{
/* Use existing clock_event for cpu 0 */
if (!smp_processor_id())
@@ -216,7 +216,7 @@ static void sirfsoc_local_timer_stop(struct clock_event_device *ce)
remove_irq(sirfsoc_timer1_irq.irq, &sirfsoc_timer1_irq);
}
-static struct local_timer_ops sirfsoc_local_timer_ops __cpuinitdata = {
+static struct local_timer_ops sirfsoc_local_timer_ops = {
.setup = sirfsoc_local_timer_setup,
.stop = sirfsoc_local_timer_stop,
};
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 0937b8d6c2a4..a4ad7339588d 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1932,7 +1932,7 @@ no_policy:
}
EXPORT_SYMBOL(cpufreq_update_policy);
-static int __cpuinit cpufreq_cpu_callback(struct notifier_block *nfb,
+static int cpufreq_cpu_callback(struct notifier_block *nfb,
unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long)hcpu;
@@ -1942,13 +1942,15 @@ static int __cpuinit cpufreq_cpu_callback(struct notifier_block *nfb,
if (dev) {
switch (action) {
case CPU_ONLINE:
+ case CPU_ONLINE_FROZEN:
cpufreq_add_dev(dev, NULL);
break;
case CPU_DOWN_PREPARE:
- case CPU_UP_CANCELED_FROZEN:
+ case CPU_DOWN_PREPARE_FROZEN:
__cpufreq_remove_dev(dev, NULL);
break;
case CPU_DOWN_FAILED:
+ case CPU_DOWN_FAILED_FROZEN:
cpufreq_add_dev(dev, NULL);
break;
}
diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c
index 464587697561..7b839a8db2a7 100644
--- a/drivers/cpufreq/cpufreq_governor.c
+++ b/drivers/cpufreq/cpufreq_governor.c
@@ -25,7 +25,6 @@
#include <linux/slab.h>
#include <linux/types.h>
#include <linux/workqueue.h>
-#include <linux/cpu.h>
#include "cpufreq_governor.h"
@@ -137,10 +136,8 @@ void gov_queue_work(struct dbs_data *dbs_data, struct cpufreq_policy *policy,
if (!all_cpus) {
__gov_queue_work(smp_processor_id(), dbs_data, delay);
} else {
- get_online_cpus();
for_each_cpu(i, policy->cpus)
__gov_queue_work(i, dbs_data, delay);
- put_online_cpus();
}
}
EXPORT_SYMBOL_GPL(gov_queue_work);
diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c
index cd9e81713a71..d37568c5ca9c 100644
--- a/drivers/cpufreq/cpufreq_stats.c
+++ b/drivers/cpufreq/cpufreq_stats.c
@@ -341,7 +341,7 @@ static int cpufreq_stat_notifier_trans(struct notifier_block *nb,
return 0;
}
-static int __cpuinit cpufreq_stat_cpu_callback(struct notifier_block *nfb,
+static int cpufreq_stat_cpu_callback(struct notifier_block *nfb,
unsigned long action,
void *hcpu)
{
@@ -353,13 +353,11 @@ static int __cpuinit cpufreq_stat_cpu_callback(struct notifier_block *nfb,
cpufreq_update_policy(cpu);
break;
case CPU_DOWN_PREPARE:
+ case CPU_DOWN_PREPARE_FROZEN:
cpufreq_stats_free_sysfs(cpu);
break;
case CPU_DEAD:
- cpufreq_stats_free_table(cpu);
- break;
- case CPU_UP_CANCELED_FROZEN:
- cpufreq_stats_free_sysfs(cpu);
+ case CPU_DEAD_FROZEN:
cpufreq_stats_free_table(cpu);
break;
}
diff --git a/drivers/cpufreq/dbx500-cpufreq.c b/drivers/cpufreq/dbx500-cpufreq.c
index 1fdb02b9f1ec..26321cdc1946 100644
--- a/drivers/cpufreq/dbx500-cpufreq.c
+++ b/drivers/cpufreq/dbx500-cpufreq.c
@@ -82,7 +82,7 @@ static unsigned int dbx500_cpufreq_getspeed(unsigned int cpu)
return freq_table[i].frequency;
}
-static int __cpuinit dbx500_cpufreq_init(struct cpufreq_policy *policy)
+static int dbx500_cpufreq_init(struct cpufreq_policy *policy)
{
int res;
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
index 07f2840ad805..7cde885011ed 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -103,10 +103,10 @@ struct pstate_adjust_policy {
static struct pstate_adjust_policy default_policy = {
.sample_rate_ms = 10,
.deadband = 0,
- .setpoint = 109,
- .p_gain_pct = 17,
+ .setpoint = 97,
+ .p_gain_pct = 20,
.d_gain_pct = 0,
- .i_gain_pct = 4,
+ .i_gain_pct = 0,
};
struct perf_limits {
@@ -468,12 +468,12 @@ static inline void intel_pstate_set_sample_time(struct cpudata *cpu)
static inline int intel_pstate_get_scaled_busy(struct cpudata *cpu)
{
int32_t busy_scaled;
- int32_t core_busy, turbo_pstate, current_pstate;
+ int32_t core_busy, max_pstate, current_pstate;
core_busy = int_tofp(cpu->samples[cpu->sample_ptr].core_pct_busy);
- turbo_pstate = int_tofp(cpu->pstate.turbo_pstate);
+ max_pstate = int_tofp(cpu->pstate.max_pstate);
current_pstate = int_tofp(cpu->pstate.current_pstate);
- busy_scaled = mul_fp(core_busy, div_fp(turbo_pstate, current_pstate));
+ busy_scaled = mul_fp(core_busy, div_fp(max_pstate, current_pstate));
return fp_toint(busy_scaled);
}
@@ -617,7 +617,7 @@ static int intel_pstate_verify_policy(struct cpufreq_policy *policy)
return 0;
}
-static int __cpuinit intel_pstate_cpu_exit(struct cpufreq_policy *policy)
+static int intel_pstate_cpu_exit(struct cpufreq_policy *policy)
{
int cpu = policy->cpu;
@@ -627,7 +627,7 @@ static int __cpuinit intel_pstate_cpu_exit(struct cpufreq_policy *policy)
return 0;
}
-static int __cpuinit intel_pstate_cpu_init(struct cpufreq_policy *policy)
+static int intel_pstate_cpu_init(struct cpufreq_policy *policy)
{
int rc, min_pstate, max_pstate;
struct cpudata *cpu;
diff --git a/drivers/cpufreq/longhaul.c b/drivers/cpufreq/longhaul.c
index b6a0a7a406b0..8c49261df57d 100644
--- a/drivers/cpufreq/longhaul.c
+++ b/drivers/cpufreq/longhaul.c
@@ -422,7 +422,7 @@ static int guess_fsb(int mult)
}
-static int __cpuinit longhaul_get_ranges(void)
+static int longhaul_get_ranges(void)
{
unsigned int i, j, k = 0;
unsigned int ratio;
@@ -526,7 +526,7 @@ static int __cpuinit longhaul_get_ranges(void)
}
-static void __cpuinit longhaul_setup_voltagescaling(void)
+static void longhaul_setup_voltagescaling(void)
{
union msr_longhaul longhaul;
struct mV_pos minvid, maxvid, vid;
@@ -780,7 +780,7 @@ static int longhaul_setup_southbridge(void)
return 0;
}
-static int __cpuinit longhaul_cpu_init(struct cpufreq_policy *policy)
+static int longhaul_cpu_init(struct cpufreq_policy *policy)
{
struct cpuinfo_x86 *c = &cpu_data(0);
char *cpuname = NULL;
diff --git a/drivers/cpufreq/longhaul.h b/drivers/cpufreq/longhaul.h
index e2dc436099d1..1928b923a57b 100644
--- a/drivers/cpufreq/longhaul.h
+++ b/drivers/cpufreq/longhaul.h
@@ -56,7 +56,7 @@ union msr_longhaul {
/*
* VIA C3 Samuel 1 & Samuel 2 (stepping 0)
*/
-static const int __cpuinitconst samuel1_mults[16] = {
+static const int samuel1_mults[16] = {
-1, /* 0000 -> RESERVED */
30, /* 0001 -> 3.0x */
40, /* 0010 -> 4.0x */
@@ -75,7 +75,7 @@ static const int __cpuinitconst samuel1_mults[16] = {
-1, /* 1111 -> RESERVED */
};
-static const int __cpuinitconst samuel1_eblcr[16] = {
+static const int samuel1_eblcr[16] = {
50, /* 0000 -> RESERVED */
30, /* 0001 -> 3.0x */
40, /* 0010 -> 4.0x */
@@ -97,7 +97,7 @@ static const int __cpuinitconst samuel1_eblcr[16] = {
/*
* VIA C3 Samuel2 Stepping 1->15
*/
-static const int __cpuinitconst samuel2_eblcr[16] = {
+static const int samuel2_eblcr[16] = {
50, /* 0000 -> 5.0x */
30, /* 0001 -> 3.0x */
40, /* 0010 -> 4.0x */
@@ -119,7 +119,7 @@ static const int __cpuinitconst samuel2_eblcr[16] = {
/*
* VIA C3 Ezra
*/
-static const int __cpuinitconst ezra_mults[16] = {
+static const int ezra_mults[16] = {
100, /* 0000 -> 10.0x */
30, /* 0001 -> 3.0x */
40, /* 0010 -> 4.0x */
@@ -138,7 +138,7 @@ static const int __cpuinitconst ezra_mults[16] = {
120, /* 1111 -> 12.0x */
};
-static const int __cpuinitconst ezra_eblcr[16] = {
+static const int ezra_eblcr[16] = {
50, /* 0000 -> 5.0x */
30, /* 0001 -> 3.0x */
40, /* 0010 -> 4.0x */
@@ -160,7 +160,7 @@ static const int __cpuinitconst ezra_eblcr[16] = {
/*
* VIA C3 (Ezra-T) [C5M].
*/
-static const int __cpuinitconst ezrat_mults[32] = {
+static const int ezrat_mults[32] = {
100, /* 0000 -> 10.0x */
30, /* 0001 -> 3.0x */
40, /* 0010 -> 4.0x */
@@ -196,7 +196,7 @@ static const int __cpuinitconst ezrat_mults[32] = {
-1, /* 1111 -> RESERVED (12.0x) */
};
-static const int __cpuinitconst ezrat_eblcr[32] = {
+static const int ezrat_eblcr[32] = {
50, /* 0000 -> 5.0x */
30, /* 0001 -> 3.0x */
40, /* 0010 -> 4.0x */
@@ -235,7 +235,7 @@ static const int __cpuinitconst ezrat_eblcr[32] = {
/*
* VIA C3 Nehemiah */
-static const int __cpuinitconst nehemiah_mults[32] = {
+static const int nehemiah_mults[32] = {
100, /* 0000 -> 10.0x */
-1, /* 0001 -> 16.0x */
40, /* 0010 -> 4.0x */
@@ -270,7 +270,7 @@ static const int __cpuinitconst nehemiah_mults[32] = {
-1, /* 1111 -> 12.0x */
};
-static const int __cpuinitconst nehemiah_eblcr[32] = {
+static const int nehemiah_eblcr[32] = {
50, /* 0000 -> 5.0x */
160, /* 0001 -> 16.0x */
40, /* 0010 -> 4.0x */
@@ -315,7 +315,7 @@ struct mV_pos {
unsigned short pos;
};
-static const struct mV_pos __cpuinitconst vrm85_mV[32] = {
+static const struct mV_pos vrm85_mV[32] = {
{1250, 8}, {1200, 6}, {1150, 4}, {1100, 2},
{1050, 0}, {1800, 30}, {1750, 28}, {1700, 26},
{1650, 24}, {1600, 22}, {1550, 20}, {1500, 18},
@@ -326,14 +326,14 @@ static const struct mV_pos __cpuinitconst vrm85_mV[32] = {
{1475, 17}, {1425, 15}, {1375, 13}, {1325, 11}
};
-static const unsigned char __cpuinitconst mV_vrm85[32] = {
+static const unsigned char mV_vrm85[32] = {
0x04, 0x14, 0x03, 0x13, 0x02, 0x12, 0x01, 0x11,
0x00, 0x10, 0x0f, 0x1f, 0x0e, 0x1e, 0x0d, 0x1d,
0x0c, 0x1c, 0x0b, 0x1b, 0x0a, 0x1a, 0x09, 0x19,
0x08, 0x18, 0x07, 0x17, 0x06, 0x16, 0x05, 0x15
};
-static const struct mV_pos __cpuinitconst mobilevrm_mV[32] = {
+static const struct mV_pos mobilevrm_mV[32] = {
{1750, 31}, {1700, 30}, {1650, 29}, {1600, 28},
{1550, 27}, {1500, 26}, {1450, 25}, {1400, 24},
{1350, 23}, {1300, 22}, {1250, 21}, {1200, 20},
@@ -344,7 +344,7 @@ static const struct mV_pos __cpuinitconst mobilevrm_mV[32] = {
{675, 3}, {650, 2}, {625, 1}, {600, 0}
};
-static const unsigned char __cpuinitconst mV_mobilevrm[32] = {
+static const unsigned char mV_mobilevrm[32] = {
0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18,
0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10,
0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
diff --git a/drivers/cpufreq/longrun.c b/drivers/cpufreq/longrun.c
index 8bc9f5fbbaeb..0fe041d1f77f 100644
--- a/drivers/cpufreq/longrun.c
+++ b/drivers/cpufreq/longrun.c
@@ -33,7 +33,7 @@ static unsigned int longrun_low_freq, longrun_high_freq;
* Reads the current LongRun policy by access to MSR_TMTA_LONGRUN_FLAGS
* and MSR_TMTA_LONGRUN_CTRL
*/
-static void __cpuinit longrun_get_policy(struct cpufreq_policy *policy)
+static void longrun_get_policy(struct cpufreq_policy *policy)
{
u32 msr_lo, msr_hi;
@@ -163,7 +163,7 @@ static unsigned int longrun_get(unsigned int cpu)
* TMTA rules:
* performance_pctg = (target_freq - low_freq)/(high_freq - low_freq)
*/
-static int __cpuinit longrun_determine_freqs(unsigned int *low_freq,
+static int longrun_determine_freqs(unsigned int *low_freq,
unsigned int *high_freq)
{
u32 msr_lo, msr_hi;
@@ -256,7 +256,7 @@ static int __cpuinit longrun_determine_freqs(unsigned int *low_freq,
}
-static int __cpuinit longrun_cpu_init(struct cpufreq_policy *policy)
+static int longrun_cpu_init(struct cpufreq_policy *policy)
{
int result = 0;
diff --git a/drivers/cpufreq/omap-cpufreq.c b/drivers/cpufreq/omap-cpufreq.c
index 29468a522ee9..f31fcfcad514 100644
--- a/drivers/cpufreq/omap-cpufreq.c
+++ b/drivers/cpufreq/omap-cpufreq.c
@@ -165,7 +165,7 @@ static inline void freq_table_free(void)
opp_free_cpufreq_table(mpu_dev, &freq_table);
}
-static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy)
+static int omap_cpu_init(struct cpufreq_policy *policy)
{
int result = 0;
diff --git a/drivers/cpufreq/powernow-k7.c b/drivers/cpufreq/powernow-k7.c
index b9f80b713fda..955870877935 100644
--- a/drivers/cpufreq/powernow-k7.c
+++ b/drivers/cpufreq/powernow-k7.c
@@ -563,7 +563,7 @@ static int powernow_verify(struct cpufreq_policy *policy)
* We will then get the same kind of behaviour already tested under
* the "well-known" other OS.
*/
-static int __cpuinit fixup_sgtc(void)
+static int fixup_sgtc(void)
{
unsigned int sgtc;
unsigned int m;
@@ -597,7 +597,7 @@ static unsigned int powernow_get(unsigned int cpu)
}
-static int __cpuinit acer_cpufreq_pst(const struct dmi_system_id *d)
+static int acer_cpufreq_pst(const struct dmi_system_id *d)
{
printk(KERN_WARNING PFX
"%s laptop with broken PST tables in BIOS detected.\n",
@@ -615,7 +615,7 @@ static int __cpuinit acer_cpufreq_pst(const struct dmi_system_id *d)
* A BIOS update is all that can save them.
* Mention this, and disable cpufreq.
*/
-static struct dmi_system_id __cpuinitdata powernow_dmi_table[] = {
+static struct dmi_system_id powernow_dmi_table[] = {
{
.callback = acer_cpufreq_pst,
.ident = "Acer Aspire",
@@ -627,7 +627,7 @@ static struct dmi_system_id __cpuinitdata powernow_dmi_table[] = {
{ }
};
-static int __cpuinit powernow_cpu_init(struct cpufreq_policy *policy)
+static int powernow_cpu_init(struct cpufreq_policy *policy)
{
union msr_fidvidstatus fidvidstatus;
int result;
diff --git a/drivers/cpufreq/powernow-k8.c b/drivers/cpufreq/powernow-k8.c
index 78f018f2a5de..c39d189217cb 100644
--- a/drivers/cpufreq/powernow-k8.c
+++ b/drivers/cpufreq/powernow-k8.c
@@ -1069,7 +1069,7 @@ struct init_on_cpu {
int rc;
};
-static void __cpuinit powernowk8_cpu_init_on_cpu(void *_init_on_cpu)
+static void powernowk8_cpu_init_on_cpu(void *_init_on_cpu)
{
struct init_on_cpu *init_on_cpu = _init_on_cpu;
@@ -1096,7 +1096,7 @@ static const char missing_pss_msg[] =
FW_BUG PFX "If that doesn't help, try upgrading your BIOS.\n";
/* per CPU init entry point to the driver */
-static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol)
+static int powernowk8_cpu_init(struct cpufreq_policy *pol)
{
struct powernow_k8_data *data;
struct init_on_cpu init_on_cpu;
@@ -1263,7 +1263,7 @@ static void __request_acpi_cpufreq(void)
}
/* driver entry point for init */
-static int __cpuinit powernowk8_init(void)
+static int powernowk8_init(void)
{
unsigned int i, supported_cpus = 0;
int ret;
diff --git a/drivers/cpufreq/s3c24xx-cpufreq.c b/drivers/cpufreq/s3c24xx-cpufreq.c
index 3513e7477160..87781eb20d6d 100644
--- a/drivers/cpufreq/s3c24xx-cpufreq.c
+++ b/drivers/cpufreq/s3c24xx-cpufreq.c
@@ -49,7 +49,7 @@ static struct clk *clk_hclk;
static struct clk *clk_pclk;
static struct clk *clk_arm;
-#ifdef CONFIG_CPU_FREQ_S3C24XX_DEBUGFS
+#ifdef CONFIG_ARM_S3C24XX_CPUFREQ_DEBUGFS
struct s3c_cpufreq_config *s3c_cpufreq_getconfig(void)
{
return &cpu_cur;
@@ -59,7 +59,7 @@ struct s3c_iotimings *s3c_cpufreq_getiotimings(void)
{
return &s3c24xx_iotiming;
}
-#endif /* CONFIG_CPU_FREQ_S3C24XX_DEBUGFS */
+#endif /* CONFIG_ARM_S3C24XX_CPUFREQ_DEBUGFS */
static void s3c_cpufreq_getcur(struct s3c_cpufreq_config *cfg)
{
diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c
index 5996521a1caf..84573b4d6f92 100644
--- a/drivers/crypto/caam/caamhash.c
+++ b/drivers/crypto/caam/caamhash.c
@@ -429,7 +429,7 @@ static int hash_digest_key(struct caam_hash_ctx *ctx, const u8 *key_in,
dma_addr_t src_dma, dst_dma;
int ret = 0;
- desc = kmalloc(CAAM_CMD_SZ * 6 + CAAM_PTR_SZ * 2, GFP_KERNEL | GFP_DMA);
+ desc = kmalloc(CAAM_CMD_SZ * 8 + CAAM_PTR_SZ * 2, GFP_KERNEL | GFP_DMA);
if (!desc) {
dev_err(jrdev, "unable to allocate key input memory\n");
return -ENOMEM;
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c
index 27e86d938262..89e109022d78 100644
--- a/drivers/edac/edac_mc.c
+++ b/drivers/edac/edac_mc.c
@@ -48,6 +48,8 @@ static LIST_HEAD(mc_devices);
*/
static void const *edac_mc_owner;
+static struct bus_type mc_bus[EDAC_MAX_MCS];
+
unsigned edac_dimm_info_location(struct dimm_info *dimm, char *buf,
unsigned len)
{
@@ -723,6 +725,11 @@ int edac_mc_add_mc(struct mem_ctl_info *mci)
int ret = -EINVAL;
edac_dbg(0, "\n");
+ if (mci->mc_idx >= EDAC_MAX_MCS) {
+ pr_warn_once("Too many memory controllers: %d\n", mci->mc_idx);
+ return -ENODEV;
+ }
+
#ifdef CONFIG_EDAC_DEBUG
if (edac_debug_level >= 3)
edac_mc_dump_mci(mci);
@@ -762,6 +769,8 @@ int edac_mc_add_mc(struct mem_ctl_info *mci)
/* set load time so that error rate can be tracked */
mci->start_time = jiffies;
+ mci->bus = &mc_bus[mci->mc_idx];
+
if (edac_create_sysfs_mci_device(mci)) {
edac_mc_printk(mci, KERN_WARNING,
"failed to create sysfs device\n");
diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
index ef15a7e613bc..e7c32c4f7837 100644
--- a/drivers/edac/edac_mc_sysfs.c
+++ b/drivers/edac/edac_mc_sysfs.c
@@ -370,7 +370,7 @@ static int edac_create_csrow_object(struct mem_ctl_info *mci,
return -ENODEV;
csrow->dev.type = &csrow_attr_type;
- csrow->dev.bus = &mci->bus;
+ csrow->dev.bus = mci->bus;
device_initialize(&csrow->dev);
csrow->dev.parent = &mci->dev;
csrow->mci = mci;
@@ -605,7 +605,7 @@ static int edac_create_dimm_object(struct mem_ctl_info *mci,
dimm->mci = mci;
dimm->dev.type = &dimm_attr_type;
- dimm->dev.bus = &mci->bus;
+ dimm->dev.bus = mci->bus;
device_initialize(&dimm->dev);
dimm->dev.parent = &mci->dev;
@@ -975,11 +975,13 @@ int edac_create_sysfs_mci_device(struct mem_ctl_info *mci)
* The memory controller needs its own bus, in order to avoid
* namespace conflicts at /sys/bus/edac.
*/
- mci->bus.name = kasprintf(GFP_KERNEL, "mc%d", mci->mc_idx);
- if (!mci->bus.name)
+ mci->bus->name = kasprintf(GFP_KERNEL, "mc%d", mci->mc_idx);
+ if (!mci->bus->name)
return -ENOMEM;
- edac_dbg(0, "creating bus %s\n", mci->bus.name);
- err = bus_register(&mci->bus);
+
+ edac_dbg(0, "creating bus %s\n", mci->bus->name);
+
+ err = bus_register(mci->bus);
if (err < 0)
return err;
@@ -988,7 +990,7 @@ int edac_create_sysfs_mci_device(struct mem_ctl_info *mci)
device_initialize(&mci->dev);
mci->dev.parent = mci_pdev;
- mci->dev.bus = &mci->bus;
+ mci->dev.bus = mci->bus;
dev_set_name(&mci->dev, "mc%d", mci->mc_idx);
dev_set_drvdata(&mci->dev, mci);
pm_runtime_forbid(&mci->dev);
@@ -997,8 +999,8 @@ int edac_create_sysfs_mci_device(struct mem_ctl_info *mci)
err = device_add(&mci->dev);
if (err < 0) {
edac_dbg(1, "failure: create device %s\n", dev_name(&mci->dev));
- bus_unregister(&mci->bus);
- kfree(mci->bus.name);
+ bus_unregister(mci->bus);
+ kfree(mci->bus->name);
return err;
}
@@ -1064,8 +1066,8 @@ fail:
}
fail2:
device_unregister(&mci->dev);
- bus_unregister(&mci->bus);
- kfree(mci->bus.name);
+ bus_unregister(mci->bus);
+ kfree(mci->bus->name);
return err;
}
@@ -1098,8 +1100,8 @@ void edac_unregister_sysfs(struct mem_ctl_info *mci)
{
edac_dbg(1, "Unregistering device %s\n", dev_name(&mci->dev));
device_unregister(&mci->dev);
- bus_unregister(&mci->bus);
- kfree(mci->bus.name);
+ bus_unregister(mci->bus);
+ kfree(mci->bus->name);
}
static void mc_attr_release(struct device *dev)
diff --git a/drivers/edac/i5100_edac.c b/drivers/edac/i5100_edac.c
index 1b635178cc44..157b934e8ce3 100644
--- a/drivers/edac/i5100_edac.c
+++ b/drivers/edac/i5100_edac.c
@@ -974,7 +974,7 @@ static int i5100_setup_debugfs(struct mem_ctl_info *mci)
if (!i5100_debugfs)
return -ENODEV;
- priv->debugfs = debugfs_create_dir(mci->bus.name, i5100_debugfs);
+ priv->debugfs = debugfs_create_dir(mci->bus->name, i5100_debugfs);
if (!priv->debugfs)
return -ENOMEM;
diff --git a/drivers/firmware/efi/efivars.c b/drivers/firmware/efi/efivars.c
index 8bd1bb6dbe47..8a7432a4b413 100644
--- a/drivers/firmware/efi/efivars.c
+++ b/drivers/firmware/efi/efivars.c
@@ -583,6 +583,9 @@ int efivars_sysfs_init(void)
struct kobject *parent_kobj = efivars_kobject();
int error = 0;
+ if (!efi_enabled(EFI_RUNTIME_SERVICES))
+ return -ENODEV;
+
/* No efivars has been registered yet */
if (!parent_kobj)
return 0;
diff --git a/drivers/gpio/gpio-msm-v2.c b/drivers/gpio/gpio-msm-v2.c
index f4491a497cc8..c2fa77086eb5 100644
--- a/drivers/gpio/gpio-msm-v2.c
+++ b/drivers/gpio/gpio-msm-v2.c
@@ -378,7 +378,7 @@ static int msm_gpio_probe(struct platform_device *pdev)
int ret, ngpio;
struct resource *res;
- if (!of_property_read_u32(pdev->dev.of_node, "ngpio", &ngpio)) {
+ if (of_property_read_u32(pdev->dev.of_node, "ngpio", &ngpio)) {
dev_err(&pdev->dev, "%s: ngpio property missing\n", __func__);
return -EINVAL;
}
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
index dfeb3a3a8f20..c57244ef428b 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
@@ -1037,6 +1037,18 @@ omap_mpuio_alloc_gc(struct gpio_bank *bank, unsigned int irq_start,
IRQ_NOREQUEST | IRQ_NOPROBE, 0);
}
+#if defined(CONFIG_OF_GPIO)
+static inline bool omap_gpio_chip_boot_dt(struct gpio_chip *chip)
+{
+ return chip->of_node != NULL;
+}
+#else
+static inline bool omap_gpio_chip_boot_dt(struct gpio_chip *chip)
+{
+ return false;
+}
+#endif
+
static void omap_gpio_chip_init(struct gpio_bank *bank)
{
int j;
@@ -1068,24 +1080,68 @@ static void omap_gpio_chip_init(struct gpio_bank *bank)
gpiochip_add(&bank->chip);
- for (j = 0; j < bank->width; j++) {
- int irq = irq_create_mapping(bank->domain, j);
- irq_set_lockdep_class(irq, &gpio_lock_class);
- irq_set_chip_data(irq, bank);
- if (bank->is_mpuio) {
- omap_mpuio_alloc_gc(bank, irq, bank->width);
- } else {
- irq_set_chip_and_handler(irq, &gpio_irq_chip,
- handle_simple_irq);
- set_irq_flags(irq, IRQF_VALID);
- }
- }
+ /*
+ * REVISIT these explicit calls to irq_create_mapping()
+ * to do the GPIO to IRQ domain mapping for each GPIO in
+ * the bank can be removed once all OMAP platforms have
+ * been migrated to Device Tree boot only.
+ * Since in DT boot irq_create_mapping() is called from
+ * irq_create_of_mapping() only for the GPIO lines that
+ * are used as interrupts.
+ */
+ if (!omap_gpio_chip_boot_dt(&bank->chip))
+ for (j = 0; j < bank->width; j++)
+ irq_create_mapping(bank->domain, j);
irq_set_chained_handler(bank->irq, gpio_irq_handler);
irq_set_handler_data(bank->irq, bank);
}
static const struct of_device_id omap_gpio_match[];
+static int omap_gpio_irq_map(struct irq_domain *d, unsigned int virq,
+ irq_hw_number_t hwirq)
+{
+ struct gpio_bank *bank = d->host_data;
+ int gpio;
+ int ret;
+
+ if (!bank)
+ return -EINVAL;
+
+ irq_set_lockdep_class(virq, &gpio_lock_class);
+ irq_set_chip_data(virq, bank);
+ if (bank->is_mpuio) {
+ omap_mpuio_alloc_gc(bank, virq, bank->width);
+ } else {
+ irq_set_chip_and_handler(virq, &gpio_irq_chip,
+ handle_simple_irq);
+ set_irq_flags(virq, IRQF_VALID);
+ }
+
+ /*
+ * REVISIT most GPIO IRQ chip drivers need to call
+ * gpio_request() before a GPIO line can be used as an
+ * IRQ. Ideally this should be handled by the IRQ core
+ * but until then this has to be done on a per driver
+ * basis. Remove this once this is managed by the core.
+ */
+ if (omap_gpio_chip_boot_dt(&bank->chip)) {
+ gpio = irq_to_gpio(bank, hwirq);
+ ret = gpio_request_one(gpio, GPIOF_IN, NULL);
+ if (ret) {
+ dev_err(bank->dev, "Could not request GPIO%d\n", gpio);
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
+static struct irq_domain_ops omap_gpio_irq_ops = {
+ .xlate = irq_domain_xlate_onetwocell,
+ .map = omap_gpio_irq_map,
+};
+
static int omap_gpio_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
@@ -1151,10 +1207,10 @@ static int omap_gpio_probe(struct platform_device *pdev)
}
bank->domain = irq_domain_add_legacy(node, bank->width, irq_base,
- 0, &irq_domain_simple_ops, NULL);
+ 0, &omap_gpio_irq_ops, bank);
#else
bank->domain = irq_domain_add_linear(node, bank->width,
- &irq_domain_simple_ops, NULL);
+ &omap_gpio_irq_ops, bank);
#endif
if (!bank->domain) {
dev_err(dev, "Couldn't register an IRQ domain\n");
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
index 738a4294d820..6a647493ca7f 100644
--- a/drivers/gpu/drm/drm_crtc_helper.c
+++ b/drivers/gpu/drm/drm_crtc_helper.c
@@ -677,6 +677,11 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
/* don't break so fail path works correct */
fail = 1;
break;
+
+ if (connector->dpms != DRM_MODE_DPMS_ON) {
+ DRM_DEBUG_KMS("connector dpms not on, full mode switch\n");
+ mode_changed = true;
+ }
}
}
@@ -754,6 +759,12 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
ret = -EINVAL;
goto fail;
}
+ DRM_DEBUG_KMS("Setting connector DPMS state to on\n");
+ for (i = 0; i < set->num_connectors; i++) {
+ DRM_DEBUG_KMS("\t[CONNECTOR:%d:%s] set DPMS on\n", set->connectors[i]->base.id,
+ drm_get_connector_name(set->connectors[i]));
+ set->connectors[i]->funcs->dpms(set->connectors[i], DRM_MODE_DPMS_ON);
+ }
}
drm_helper_disable_unused_functions(dev);
} else if (fb_changed) {
@@ -771,22 +782,6 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
}
}
- /*
- * crtc set_config helpers implicit set the crtc and all connected
- * encoders to DPMS on for a full mode set. But for just an fb update it
- * doesn't do that. To not confuse userspace, do an explicit DPMS_ON
- * unconditionally. This will also ensure driver internal dpms state is
- * consistent again.
- */
- if (set->crtc->enabled) {
- DRM_DEBUG_KMS("Setting connector DPMS state to on\n");
- for (i = 0; i < set->num_connectors; i++) {
- DRM_DEBUG_KMS("\t[CONNECTOR:%d:%s] set DPMS on\n", set->connectors[i]->base.id,
- drm_get_connector_name(set->connectors[i]));
- set->connectors[i]->funcs->dpms(set->connectors[i], DRM_MODE_DPMS_ON);
- }
- }
-
kfree(save_connectors);
kfree(save_encoders);
kfree(save_crtcs);
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index adb319b53ecd..66c63808fa35 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1495,6 +1495,15 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
dev_priv->dev = dev;
dev_priv->info = info;
+ spin_lock_init(&dev_priv->irq_lock);
+ spin_lock_init(&dev_priv->gpu_error.lock);
+ spin_lock_init(&dev_priv->rps.lock);
+ spin_lock_init(&dev_priv->gt_lock);
+ spin_lock_init(&dev_priv->backlight.lock);
+ mutex_init(&dev_priv->dpio_lock);
+ mutex_init(&dev_priv->rps.hw_lock);
+ mutex_init(&dev_priv->modeset_restore_lock);
+
i915_dump_device_info(dev_priv);
if (i915_get_bridge_dev(dev)) {
@@ -1585,6 +1594,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
intel_detect_pch(dev);
intel_irq_init(dev);
+ intel_gt_sanitize(dev);
intel_gt_init(dev);
/* Try to make sure MCHBAR is enabled before poking at it */
@@ -1610,15 +1620,6 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
if (!IS_I945G(dev) && !IS_I945GM(dev))
pci_enable_msi(dev->pdev);
- spin_lock_init(&dev_priv->irq_lock);
- spin_lock_init(&dev_priv->gpu_error.lock);
- spin_lock_init(&dev_priv->rps.lock);
- spin_lock_init(&dev_priv->backlight.lock);
- mutex_init(&dev_priv->dpio_lock);
-
- mutex_init(&dev_priv->rps.hw_lock);
- mutex_init(&dev_priv->modeset_restore_lock);
-
dev_priv->num_plane = 1;
if (IS_VALLEYVIEW(dev))
dev_priv->num_plane = 2;
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 062cbda1bf4a..45b3c030f483 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -123,10 +123,10 @@ module_param_named(preliminary_hw_support, i915_preliminary_hw_support, int, 060
MODULE_PARM_DESC(preliminary_hw_support,
"Enable preliminary hardware support. (default: false)");
-int i915_disable_power_well __read_mostly = 0;
+int i915_disable_power_well __read_mostly = 1;
module_param_named(disable_power_well, i915_disable_power_well, int, 0600);
MODULE_PARM_DESC(disable_power_well,
- "Disable the power well when possible (default: false)");
+ "Disable the power well when possible (default: true)");
int i915_enable_ips __read_mostly = 1;
module_param_named(enable_ips, i915_enable_ips, int, 0600);
@@ -706,7 +706,7 @@ static int i915_drm_thaw(struct drm_device *dev)
{
int error = 0;
- intel_gt_reset(dev);
+ intel_gt_sanitize(dev);
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
mutex_lock(&dev->struct_mutex);
@@ -732,7 +732,7 @@ int i915_resume(struct drm_device *dev)
pci_set_master(dev->pdev);
- intel_gt_reset(dev);
+ intel_gt_sanitize(dev);
/*
* Platforms with opregion should have sane BIOS, older ones (gen3 and
@@ -1253,21 +1253,21 @@ hsw_unclaimed_reg_check(struct drm_i915_private *dev_priv, u32 reg)
#define __i915_read(x, y) \
u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \
+ unsigned long irqflags; \
u##x val = 0; \
+ spin_lock_irqsave(&dev_priv->gt_lock, irqflags); \
if (IS_GEN5(dev_priv->dev)) \
ilk_dummy_write(dev_priv); \
if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
- unsigned long irqflags; \
- spin_lock_irqsave(&dev_priv->gt_lock, irqflags); \
if (dev_priv->forcewake_count == 0) \
dev_priv->gt.force_wake_get(dev_priv); \
val = read##y(dev_priv->regs + reg); \
if (dev_priv->forcewake_count == 0) \
dev_priv->gt.force_wake_put(dev_priv); \
- spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags); \
} else { \
val = read##y(dev_priv->regs + reg); \
} \
+ spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags); \
trace_i915_reg_rw(false, reg, val, sizeof(val)); \
return val; \
}
@@ -1280,8 +1280,10 @@ __i915_read(64, q)
#define __i915_write(x, y) \
void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val) { \
+ unsigned long irqflags; \
u32 __fifo_ret = 0; \
trace_i915_reg_rw(true, reg, val, sizeof(val)); \
+ spin_lock_irqsave(&dev_priv->gt_lock, irqflags); \
if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
__fifo_ret = __gen6_gt_wait_for_fifo(dev_priv); \
} \
@@ -1293,6 +1295,7 @@ void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val) { \
gen6_gt_check_fifodbg(dev_priv); \
} \
hsw_unclaimed_reg_check(dev_priv, reg); \
+ spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags); \
}
__i915_write(8, b)
__i915_write(16, w)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index a416645bcd23..d2ee3343c943 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -555,6 +555,7 @@ enum intel_sbi_destination {
#define QUIRK_PIPEA_FORCE (1<<0)
#define QUIRK_LVDS_SSC_DISABLE (1<<1)
#define QUIRK_INVERT_BRIGHTNESS (1<<2)
+#define QUIRK_NO_PCH_PWM_ENABLE (1<<3)
struct intel_fbdev;
struct intel_fbc_work;
@@ -1583,7 +1584,7 @@ void i915_handle_error(struct drm_device *dev, bool wedged);
extern void intel_irq_init(struct drm_device *dev);
extern void intel_hpd_init(struct drm_device *dev);
extern void intel_gt_init(struct drm_device *dev);
-extern void intel_gt_reset(struct drm_device *dev);
+extern void intel_gt_sanitize(struct drm_device *dev);
void i915_error_state_free(struct kref *error_ref);
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 4200c32407ec..d9e2208cfe98 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1880,6 +1880,10 @@ i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
u32 seqno = intel_ring_get_seqno(ring);
BUG_ON(ring == NULL);
+ if (obj->ring != ring && obj->last_write_seqno) {
+ /* Keep the seqno relative to the current ring */
+ obj->last_write_seqno = seqno;
+ }
obj->ring = ring;
/* Add a reference if we're newly entering the active list. */
@@ -2254,7 +2258,17 @@ void i915_gem_restore_fences(struct drm_device *dev)
for (i = 0; i < dev_priv->num_fence_regs; i++) {
struct drm_i915_fence_reg *reg = &dev_priv->fence_regs[i];
- i915_gem_write_fence(dev, i, reg->obj);
+
+ /*
+ * Commit delayed tiling changes if we have an object still
+ * attached to the fence, otherwise just clear the fence.
+ */
+ if (reg->obj) {
+ i915_gem_object_update_fence(reg->obj, reg,
+ reg->obj->tiling_mode);
+ } else {
+ i915_gem_write_fence(dev, i, NULL);
+ }
}
}
@@ -2653,7 +2667,6 @@ static void i965_write_fence_reg(struct drm_device *dev, int reg,
drm_i915_private_t *dev_priv = dev->dev_private;
int fence_reg;
int fence_pitch_shift;
- uint64_t val;
if (INTEL_INFO(dev)->gen >= 6) {
fence_reg = FENCE_REG_SANDYBRIDGE_0;
@@ -2663,8 +2676,23 @@ static void i965_write_fence_reg(struct drm_device *dev, int reg,
fence_pitch_shift = I965_FENCE_PITCH_SHIFT;
}
+ fence_reg += reg * 8;
+
+ /* To w/a incoherency with non-atomic 64-bit register updates,
+ * we split the 64-bit update into two 32-bit writes. In order
+ * for a partial fence not to be evaluated between writes, we
+ * precede the update with write to turn off the fence register,
+ * and only enable the fence as the last step.
+ *
+ * For extra levels of paranoia, we make sure each step lands
+ * before applying the next step.
+ */
+ I915_WRITE(fence_reg, 0);
+ POSTING_READ(fence_reg);
+
if (obj) {
u32 size = obj->gtt_space->size;
+ uint64_t val;
val = (uint64_t)((obj->gtt_offset + size - 4096) &
0xfffff000) << 32;
@@ -2673,12 +2701,16 @@ static void i965_write_fence_reg(struct drm_device *dev, int reg,
if (obj->tiling_mode == I915_TILING_Y)
val |= 1 << I965_FENCE_TILING_Y_SHIFT;
val |= I965_FENCE_REG_VALID;
- } else
- val = 0;
- fence_reg += reg * 8;
- I915_WRITE64(fence_reg, val);
- POSTING_READ(fence_reg);
+ I915_WRITE(fence_reg + 4, val >> 32);
+ POSTING_READ(fence_reg + 4);
+
+ I915_WRITE(fence_reg + 0, val);
+ POSTING_READ(fence_reg);
+ } else {
+ I915_WRITE(fence_reg + 4, 0);
+ POSTING_READ(fence_reg + 4);
+ }
}
static void i915_write_fence_reg(struct drm_device *dev, int reg,
@@ -2773,6 +2805,10 @@ static void i915_gem_write_fence(struct drm_device *dev, int reg,
if (i915_gem_object_needs_mb(dev_priv->fence_regs[reg].obj))
mb();
+ WARN(obj && (!obj->stride || !obj->tiling_mode),
+ "bogus fence setup with stride: 0x%x, tiling mode: %i\n",
+ obj->stride, obj->tiling_mode);
+
switch (INTEL_INFO(dev)->gen) {
case 7:
case 6:
@@ -2796,56 +2832,17 @@ static inline int fence_number(struct drm_i915_private *dev_priv,
return fence - dev_priv->fence_regs;
}
-struct write_fence {
- struct drm_device *dev;
- struct drm_i915_gem_object *obj;
- int fence;
-};
-
-static void i915_gem_write_fence__ipi(void *data)
-{
- struct write_fence *args = data;
-
- /* Required for SNB+ with LLC */
- wbinvd();
-
- /* Required for VLV */
- i915_gem_write_fence(args->dev, args->fence, args->obj);
-}
-
static void i915_gem_object_update_fence(struct drm_i915_gem_object *obj,
struct drm_i915_fence_reg *fence,
bool enable)
{
struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
- struct write_fence args = {
- .dev = obj->base.dev,
- .fence = fence_number(dev_priv, fence),
- .obj = enable ? obj : NULL,
- };
-
- /* In order to fully serialize access to the fenced region and
- * the update to the fence register we need to take extreme
- * measures on SNB+. In theory, the write to the fence register
- * flushes all memory transactions before, and coupled with the
- * mb() placed around the register write we serialise all memory
- * operations with respect to the changes in the tiler. Yet, on
- * SNB+ we need to take a step further and emit an explicit wbinvd()
- * on each processor in order to manually flush all memory
- * transactions before updating the fence register.
- *
- * However, Valleyview complicates matter. There the wbinvd is
- * insufficient and unlike SNB/IVB requires the serialising
- * register write. (Note that that register write by itself is
- * conversely not sufficient for SNB+.) To compromise, we do both.
- */
- if (INTEL_INFO(args.dev)->gen >= 6)
- on_each_cpu(i915_gem_write_fence__ipi, &args, 1);
- else
- i915_gem_write_fence(args.dev, args.fence, args.obj);
+ int reg = fence_number(dev_priv, fence);
+
+ i915_gem_write_fence(obj->base.dev, reg, enable ? obj : NULL);
if (enable) {
- obj->fence_reg = args.fence;
+ obj->fence_reg = reg;
fence->obj = obj;
list_move_tail(&fence->lru_list, &dev_priv->mm.fence_list);
} else {
@@ -2853,6 +2850,7 @@ static void i915_gem_object_update_fence(struct drm_i915_gem_object *obj,
fence->obj = NULL;
list_del_init(&fence->lru_list);
}
+ obj->fence_dirty = false;
}
static int
@@ -2982,7 +2980,6 @@ i915_gem_object_get_fence(struct drm_i915_gem_object *obj)
return 0;
i915_gem_object_update_fence(obj, reg, enable);
- obj->fence_dirty = false;
return 0;
}
@@ -4611,7 +4608,7 @@ i915_gem_inactive_shrink(struct shrinker *shrinker, struct shrink_control *sc)
list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_list)
if (obj->pages_pin_count == 0)
cnt += obj->base.size >> PAGE_SHIFT;
- list_for_each_entry(obj, &dev_priv->mm.inactive_list, global_list)
+ list_for_each_entry(obj, &dev_priv->mm.inactive_list, mm_list)
if (obj->pin_count == 0 && obj->pages_pin_count == 0)
cnt += obj->base.size >> PAGE_SHIFT;
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 324211ac9c55..b042ee5c4070 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -301,7 +301,7 @@ static void intel_ddi_mode_set(struct drm_encoder *encoder,
struct intel_digital_port *intel_dig_port =
enc_to_dig_port(encoder);
- intel_dp->DP = intel_dig_port->port_reversal |
+ intel_dp->DP = intel_dig_port->saved_port_bits |
DDI_BUF_CTL_ENABLE | DDI_BUF_EMP_400MV_0DB_HSW;
intel_dp->DP |= DDI_PORT_WIDTH(intel_dp->lane_count);
@@ -1109,7 +1109,8 @@ static void intel_enable_ddi(struct intel_encoder *intel_encoder)
* enabling the port.
*/
I915_WRITE(DDI_BUF_CTL(port),
- intel_dig_port->port_reversal | DDI_BUF_CTL_ENABLE);
+ intel_dig_port->saved_port_bits |
+ DDI_BUF_CTL_ENABLE);
} else if (type == INTEL_OUTPUT_EDP) {
struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
@@ -1347,8 +1348,9 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
intel_encoder->get_config = intel_ddi_get_config;
intel_dig_port->port = port;
- intel_dig_port->port_reversal = I915_READ(DDI_BUF_CTL(port)) &
- DDI_BUF_PORT_REVERSAL;
+ intel_dig_port->saved_port_bits = I915_READ(DDI_BUF_CTL(port)) &
+ (DDI_BUF_PORT_REVERSAL |
+ DDI_A_4_LANES);
intel_dig_port->dp.output_reg = DDI_BUF_CTL(port);
intel_encoder->type = INTEL_OUTPUT_UNKNOWN;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 85f3eb74d2b7..5fb305840db8 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -4913,22 +4913,19 @@ static void i9xx_get_pfit_config(struct intel_crtc *crtc,
uint32_t tmp;
tmp = I915_READ(PFIT_CONTROL);
+ if (!(tmp & PFIT_ENABLE))
+ return;
+ /* Check whether the pfit is attached to our pipe. */
if (INTEL_INFO(dev)->gen < 4) {
if (crtc->pipe != PIPE_B)
return;
-
- /* gen2/3 store dither state in pfit control, needs to match */
- pipe_config->gmch_pfit.control = tmp & PANEL_8TO6_DITHER_ENABLE;
} else {
if ((tmp & PFIT_PIPE_MASK) != (crtc->pipe << PFIT_PIPE_SHIFT))
return;
}
- if (!(tmp & PFIT_ENABLE))
- return;
-
- pipe_config->gmch_pfit.control = I915_READ(PFIT_CONTROL);
+ pipe_config->gmch_pfit.control = tmp;
pipe_config->gmch_pfit.pgm_ratios = I915_READ(PFIT_PGM_RATIOS);
if (INTEL_INFO(dev)->gen < 5)
pipe_config->gmch_pfit.lvds_border_bits =
@@ -8317,6 +8314,8 @@ check_shared_dpll_state(struct drm_device *dev)
pll->active, pll->refcount);
WARN(pll->active && !pll->on,
"pll in active use but not on in sw tracking\n");
+ WARN(pll->on && !pll->active,
+ "pll in on but not on in use in sw tracking\n");
WARN(pll->on != active,
"pll on state mismatch (expected %i, found %i)\n",
pll->on, active);
@@ -8541,15 +8540,20 @@ static void intel_set_config_restore_state(struct drm_device *dev,
}
static bool
-is_crtc_connector_off(struct drm_crtc *crtc, struct drm_connector *connectors,
- int num_connectors)
+is_crtc_connector_off(struct drm_mode_set *set)
{
int i;
- for (i = 0; i < num_connectors; i++)
- if (connectors[i].encoder &&
- connectors[i].encoder->crtc == crtc &&
- connectors[i].dpms != DRM_MODE_DPMS_ON)
+ if (set->num_connectors == 0)
+ return false;
+
+ if (WARN_ON(set->connectors == NULL))
+ return false;
+
+ for (i = 0; i < set->num_connectors; i++)
+ if (set->connectors[i]->encoder &&
+ set->connectors[i]->encoder->crtc == set->crtc &&
+ set->connectors[i]->dpms != DRM_MODE_DPMS_ON)
return true;
return false;
@@ -8562,10 +8566,8 @@ intel_set_config_compute_mode_changes(struct drm_mode_set *set,
/* We should be able to check here if the fb has the same properties
* and then just flip_or_move it */
- if (set->connectors != NULL &&
- is_crtc_connector_off(set->crtc, *set->connectors,
- set->num_connectors)) {
- config->mode_changed = true;
+ if (is_crtc_connector_off(set)) {
+ config->mode_changed = true;
} else if (set->crtc->fb != set->fb) {
/* If we have no fb then treat it as a full mode set */
if (set->crtc->fb == NULL) {
@@ -9398,6 +9400,17 @@ static void quirk_invert_brightness(struct drm_device *dev)
DRM_INFO("applying inverted panel brightness quirk\n");
}
+/*
+ * Some machines (Dell XPS13) suffer broken backlight controls if
+ * BLM_PCH_PWM_ENABLE is set.
+ */
+static void quirk_no_pcm_pwm_enable(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ dev_priv->quirks |= QUIRK_NO_PCH_PWM_ENABLE;
+ DRM_INFO("applying no-PCH_PWM_ENABLE quirk\n");
+}
+
struct intel_quirk {
int device;
int subsystem_vendor;
@@ -9467,6 +9480,11 @@ static struct intel_quirk intel_quirks[] = {
/* Acer Aspire 4736Z */
{ 0x2a42, 0x1025, 0x0260, quirk_invert_brightness },
+
+ /* Dell XPS13 HD Sandy Bridge */
+ { 0x0116, 0x1028, 0x052e, quirk_no_pcm_pwm_enable },
+ /* Dell XPS13 HD and XPS13 FHD Ivy Bridge */
+ { 0x0166, 0x1028, 0x058b, quirk_no_pcm_pwm_enable },
};
static void intel_init_quirks(struct drm_device *dev)
@@ -9817,8 +9835,8 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
}
pll->refcount = pll->active;
- DRM_DEBUG_KMS("%s hw state readout: refcount %i\n",
- pll->name, pll->refcount);
+ DRM_DEBUG_KMS("%s hw state readout: refcount %i, on %i\n",
+ pll->name, pll->refcount, pll->on);
}
list_for_each_entry(encoder, &dev->mode_config.encoder_list,
@@ -9869,6 +9887,7 @@ void intel_modeset_setup_hw_state(struct drm_device *dev,
struct drm_plane *plane;
struct intel_crtc *crtc;
struct intel_encoder *encoder;
+ int i;
intel_modeset_readout_hw_state(dev);
@@ -9884,6 +9903,18 @@ void intel_modeset_setup_hw_state(struct drm_device *dev,
intel_dump_pipe_config(crtc, &crtc->config, "[setup_hw_state]");
}
+ for (i = 0; i < dev_priv->num_shared_dpll; i++) {
+ struct intel_shared_dpll *pll = &dev_priv->shared_dplls[i];
+
+ if (!pll->on || pll->active)
+ continue;
+
+ DRM_DEBUG_KMS("%s enabled but not in use, disabling\n", pll->name);
+
+ pll->disable(dev_priv, pll);
+ pll->on = false;
+ }
+
if (force_restore) {
/*
* We need to use raw interfaces for restoring state to avoid
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index b73971234013..26e162bb3a51 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -75,7 +75,12 @@ intel_dp_max_link_bw(struct intel_dp *intel_dp)
case DP_LINK_BW_1_62:
case DP_LINK_BW_2_7:
break;
+ case DP_LINK_BW_5_4: /* 1.2 capable displays may advertise higher bw */
+ max_link_bw = DP_LINK_BW_2_7;
+ break;
default:
+ WARN(1, "invalid max DP link bw val %x, using 1.62Gbps\n",
+ max_link_bw);
max_link_bw = DP_LINK_BW_1_62;
break;
}
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index c8c9b6f48230..b7d6e09456ce 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -504,7 +504,7 @@ struct intel_dp {
struct intel_digital_port {
struct intel_encoder base;
enum port port;
- u32 port_reversal;
+ u32 saved_port_bits;
struct intel_dp dp;
struct intel_hdmi hdmi;
};
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 98df2a0c85bd..2fd3fd5b943e 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -785,10 +785,22 @@ static void intel_disable_hdmi(struct intel_encoder *encoder)
}
}
+static int hdmi_portclock_limit(struct intel_hdmi *hdmi)
+{
+ struct drm_device *dev = intel_hdmi_to_dev(hdmi);
+
+ if (IS_G4X(dev))
+ return 165000;
+ else if (IS_HASWELL(dev))
+ return 300000;
+ else
+ return 225000;
+}
+
static int intel_hdmi_mode_valid(struct drm_connector *connector,
struct drm_display_mode *mode)
{
- if (mode->clock > 165000)
+ if (mode->clock > hdmi_portclock_limit(intel_attached_hdmi(connector)))
return MODE_CLOCK_HIGH;
if (mode->clock < 20000)
return MODE_CLOCK_LOW;
@@ -806,6 +818,7 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
struct drm_device *dev = encoder->base.dev;
struct drm_display_mode *adjusted_mode = &pipe_config->adjusted_mode;
int clock_12bpc = pipe_config->requested_mode.clock * 3 / 2;
+ int portclock_limit = hdmi_portclock_limit(intel_hdmi);
int desired_bpp;
if (intel_hdmi->color_range_auto) {
@@ -829,7 +842,7 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
* outputs. We also need to check that the higher clock still fits
* within limits.
*/
- if (pipe_config->pipe_bpp > 8*3 && clock_12bpc <= 225000
+ if (pipe_config->pipe_bpp > 8*3 && clock_12bpc <= portclock_limit
&& HAS_PCH_SPLIT(dev)) {
DRM_DEBUG_KMS("picking bpc to 12 for HDMI output\n");
desired_bpp = 12*3;
@@ -846,7 +859,7 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
pipe_config->pipe_bpp = desired_bpp;
}
- if (adjusted_mode->clock > 225000) {
+ if (adjusted_mode->clock > portclock_limit) {
DRM_DEBUG_KMS("too high HDMI clock, rejecting mode\n");
return false;
}
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 021e8daa022d..61348eae2f04 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -109,6 +109,13 @@ static void intel_lvds_get_config(struct intel_encoder *encoder,
flags |= DRM_MODE_FLAG_PVSYNC;
pipe_config->adjusted_mode.flags |= flags;
+
+ /* gen2/3 store dither state in pfit control, needs to match */
+ if (INTEL_INFO(dev)->gen < 4) {
+ tmp = I915_READ(PFIT_CONTROL);
+
+ pipe_config->gmch_pfit.control |= tmp & PANEL_8TO6_DITHER_ENABLE;
+ }
}
/* The LVDS pin pair needs to be on before the DPLLs are enabled.
@@ -290,14 +297,11 @@ static bool intel_lvds_compute_config(struct intel_encoder *intel_encoder,
intel_pch_panel_fitting(intel_crtc, pipe_config,
intel_connector->panel.fitting_mode);
- return true;
} else {
intel_gmch_panel_fitting(intel_crtc, pipe_config,
intel_connector->panel.fitting_mode);
- }
- drm_mode_set_crtcinfo(adjusted_mode, 0);
- pipe_config->timings_set = true;
+ }
/*
* XXX: It would be nice to support lower refresh rates on the
diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
index 80bea1d3209f..67e2c1f1c9a8 100644
--- a/drivers/gpu/drm/i915/intel_panel.c
+++ b/drivers/gpu/drm/i915/intel_panel.c
@@ -194,6 +194,9 @@ void intel_gmch_panel_fitting(struct intel_crtc *intel_crtc,
adjusted_mode->vdisplay == mode->vdisplay)
goto out;
+ drm_mode_set_crtcinfo(adjusted_mode, 0);
+ pipe_config->timings_set = true;
+
switch (fitting_mode) {
case DRM_MODE_SCALE_CENTER:
/*
@@ -580,7 +583,8 @@ void intel_panel_enable_backlight(struct drm_device *dev,
POSTING_READ(reg);
I915_WRITE(reg, tmp | BLM_PWM_ENABLE);
- if (HAS_PCH_SPLIT(dev)) {
+ if (HAS_PCH_SPLIT(dev) &&
+ !(dev_priv->quirks & QUIRK_NO_PCH_PWM_ENABLE)) {
tmp = I915_READ(BLC_PWM_PCH_CTL1);
tmp |= BLM_PCH_PWM_ENABLE;
tmp &= ~BLM_PCH_OVERRIDE_ENABLE;
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index ccbdd83f5220..51a2a60f5bfc 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -5476,7 +5476,7 @@ static void vlv_force_wake_put(struct drm_i915_private *dev_priv)
gen6_gt_check_fifodbg(dev_priv);
}
-void intel_gt_reset(struct drm_device *dev)
+void intel_gt_sanitize(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
@@ -5487,22 +5487,51 @@ void intel_gt_reset(struct drm_device *dev)
if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev))
__gen6_gt_force_wake_mt_reset(dev_priv);
}
+
+ /* BIOS often leaves RC6 enabled, but disable it for hw init */
+ if (INTEL_INFO(dev)->gen >= 6)
+ intel_disable_gt_powersave(dev);
}
void intel_gt_init(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- spin_lock_init(&dev_priv->gt_lock);
-
- intel_gt_reset(dev);
-
if (IS_VALLEYVIEW(dev)) {
dev_priv->gt.force_wake_get = vlv_force_wake_get;
dev_priv->gt.force_wake_put = vlv_force_wake_put;
- } else if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev)) {
+ } else if (IS_HASWELL(dev)) {
dev_priv->gt.force_wake_get = __gen6_gt_force_wake_mt_get;
dev_priv->gt.force_wake_put = __gen6_gt_force_wake_mt_put;
+ } else if (IS_IVYBRIDGE(dev)) {
+ u32 ecobus;
+
+ /* IVB configs may use multi-threaded forcewake */
+
+ /* A small trick here - if the bios hasn't configured
+ * MT forcewake, and if the device is in RC6, then
+ * force_wake_mt_get will not wake the device and the
+ * ECOBUS read will return zero. Which will be
+ * (correctly) interpreted by the test below as MT
+ * forcewake being disabled.
+ */
+ mutex_lock(&dev->struct_mutex);
+ __gen6_gt_force_wake_mt_get(dev_priv);
+ ecobus = I915_READ_NOTRACE(ECOBUS);
+ __gen6_gt_force_wake_mt_put(dev_priv);
+ mutex_unlock(&dev->struct_mutex);
+
+ if (ecobus & FORCEWAKE_MT_ENABLE) {
+ dev_priv->gt.force_wake_get =
+ __gen6_gt_force_wake_mt_get;
+ dev_priv->gt.force_wake_put =
+ __gen6_gt_force_wake_mt_put;
+ } else {
+ DRM_INFO("No MT forcewake available on Ivybridge, this can result in issues\n");
+ DRM_INFO("when using vblank-synced partial screen updates.\n");
+ dev_priv->gt.force_wake_get = __gen6_gt_force_wake_get;
+ dev_priv->gt.force_wake_put = __gen6_gt_force_wake_put;
+ }
} else if (IS_GEN6(dev)) {
dev_priv->gt.force_wake_get = __gen6_gt_force_wake_get;
dev_priv->gt.force_wake_put = __gen6_gt_force_wake_put;
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index e51ab552046c..664118d8c1d6 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -379,6 +379,17 @@ u32 intel_ring_get_active_head(struct intel_ring_buffer *ring)
return I915_READ(acthd_reg);
}
+static void ring_setup_phys_status_page(struct intel_ring_buffer *ring)
+{
+ struct drm_i915_private *dev_priv = ring->dev->dev_private;
+ u32 addr;
+
+ addr = dev_priv->status_page_dmah->busaddr;
+ if (INTEL_INFO(ring->dev)->gen >= 4)
+ addr |= (dev_priv->status_page_dmah->busaddr >> 28) & 0xf0;
+ I915_WRITE(HWS_PGA, addr);
+}
+
static int init_ring_common(struct intel_ring_buffer *ring)
{
struct drm_device *dev = ring->dev;
@@ -390,6 +401,11 @@ static int init_ring_common(struct intel_ring_buffer *ring)
if (HAS_FORCE_WAKE(dev))
gen6_gt_force_wake_get(dev_priv);
+ if (I915_NEED_GFX_HWS(dev))
+ intel_ring_setup_status_page(ring);
+ else
+ ring_setup_phys_status_page(ring);
+
/* Stop the ring if it's running. */
I915_WRITE_CTL(ring, 0);
I915_WRITE_HEAD(ring, 0);
@@ -518,9 +534,6 @@ cleanup_pipe_control(struct intel_ring_buffer *ring)
struct pipe_control *pc = ring->private;
struct drm_i915_gem_object *obj;
- if (!ring->private)
- return;
-
obj = pc->obj;
kunmap(sg_page(obj->pages->sgl));
@@ -528,7 +541,6 @@ cleanup_pipe_control(struct intel_ring_buffer *ring)
drm_gem_object_unreference(&obj->base);
kfree(pc);
- ring->private = NULL;
}
static int init_render_ring(struct intel_ring_buffer *ring)
@@ -601,7 +613,10 @@ static void render_ring_cleanup(struct intel_ring_buffer *ring)
if (HAS_BROKEN_CS_TLB(dev))
drm_gem_object_unreference(to_gem_object(ring->private));
- cleanup_pipe_control(ring);
+ if (INTEL_INFO(dev)->gen >= 5)
+ cleanup_pipe_control(ring);
+
+ ring->private = NULL;
}
static void
@@ -1223,7 +1238,6 @@ static int init_status_page(struct intel_ring_buffer *ring)
ring->status_page.obj = obj;
memset(ring->status_page.page_addr, 0, PAGE_SIZE);
- intel_ring_setup_status_page(ring);
DRM_DEBUG_DRIVER("%s hws offset: 0x%08x\n",
ring->name, ring->status_page.gfx_addr);
@@ -1237,10 +1251,9 @@ err:
return ret;
}
-static int init_phys_hws_pga(struct intel_ring_buffer *ring)
+static int init_phys_status_page(struct intel_ring_buffer *ring)
{
struct drm_i915_private *dev_priv = ring->dev->dev_private;
- u32 addr;
if (!dev_priv->status_page_dmah) {
dev_priv->status_page_dmah =
@@ -1249,11 +1262,6 @@ static int init_phys_hws_pga(struct intel_ring_buffer *ring)
return -ENOMEM;
}
- addr = dev_priv->status_page_dmah->busaddr;
- if (INTEL_INFO(ring->dev)->gen >= 4)
- addr |= (dev_priv->status_page_dmah->busaddr >> 28) & 0xf0;
- I915_WRITE(HWS_PGA, addr);
-
ring->status_page.page_addr = dev_priv->status_page_dmah->vaddr;
memset(ring->status_page.page_addr, 0, PAGE_SIZE);
@@ -1281,7 +1289,7 @@ static int intel_init_ring_buffer(struct drm_device *dev,
return ret;
} else {
BUG_ON(ring->id != RCS);
- ret = init_phys_hws_pga(ring);
+ ret = init_phys_status_page(ring);
if (ret)
return ret;
}
@@ -1893,7 +1901,7 @@ int intel_render_ring_init_dri(struct drm_device *dev, u64 start, u32 size)
}
if (!I915_NEED_GFX_HWS(dev)) {
- ret = init_phys_hws_pga(ring);
+ ret = init_phys_status_page(ring);
if (ret)
return ret;
}
diff --git a/drivers/gpu/drm/nouveau/core/engine/bsp/nvc0.c b/drivers/gpu/drm/nouveau/core/engine/bsp/nvc0.c
index 262c9f5f5f60..ce860de43e61 100644
--- a/drivers/gpu/drm/nouveau/core/engine/bsp/nvc0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/bsp/nvc0.c
@@ -90,6 +90,7 @@ nvc0_bsp_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
return ret;
nv_subdev(priv)->unit = 0x00008000;
+ nv_subdev(priv)->intr = nouveau_falcon_intr;
nv_engine(priv)->cclass = &nvc0_bsp_cclass;
nv_engine(priv)->sclass = nvc0_bsp_sclass;
return 0;
diff --git a/drivers/gpu/drm/nouveau/core/engine/bsp/nve0.c b/drivers/gpu/drm/nouveau/core/engine/bsp/nve0.c
index c46882c83982..ba6aeca0285e 100644
--- a/drivers/gpu/drm/nouveau/core/engine/bsp/nve0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/bsp/nve0.c
@@ -90,6 +90,7 @@ nve0_bsp_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
return ret;
nv_subdev(priv)->unit = 0x00008000;
+ nv_subdev(priv)->intr = nouveau_falcon_intr;
nv_engine(priv)->cclass = &nve0_bsp_cclass;
nv_engine(priv)->sclass = nve0_bsp_sclass;
return 0;
diff --git a/drivers/gpu/drm/nouveau/core/engine/falcon.c b/drivers/gpu/drm/nouveau/core/engine/falcon.c
index 3c7a31f7590e..e03fc8e4dc1d 100644
--- a/drivers/gpu/drm/nouveau/core/engine/falcon.c
+++ b/drivers/gpu/drm/nouveau/core/engine/falcon.c
@@ -23,6 +23,25 @@
#include <engine/falcon.h>
#include <subdev/timer.h>
+void
+nouveau_falcon_intr(struct nouveau_subdev *subdev)
+{
+ struct nouveau_falcon *falcon = (void *)subdev;
+ u32 dispatch = nv_ro32(falcon, 0x01c);
+ u32 intr = nv_ro32(falcon, 0x008) & dispatch & ~(dispatch >> 16);
+
+ if (intr & 0x00000010) {
+ nv_debug(falcon, "ucode halted\n");
+ nv_wo32(falcon, 0x004, 0x00000010);
+ intr &= ~0x00000010;
+ }
+
+ if (intr) {
+ nv_error(falcon, "unhandled intr 0x%08x\n", intr);
+ nv_wo32(falcon, 0x004, intr);
+ }
+}
+
u32
_nouveau_falcon_rd32(struct nouveau_object *object, u64 addr)
{
diff --git a/drivers/gpu/drm/nouveau/core/engine/ppp/nvc0.c b/drivers/gpu/drm/nouveau/core/engine/ppp/nvc0.c
index 98072c1ff360..73719aaa62d6 100644
--- a/drivers/gpu/drm/nouveau/core/engine/ppp/nvc0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/ppp/nvc0.c
@@ -90,6 +90,7 @@ nvc0_ppp_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
return ret;
nv_subdev(priv)->unit = 0x00000002;
+ nv_subdev(priv)->intr = nouveau_falcon_intr;
nv_engine(priv)->cclass = &nvc0_ppp_cclass;
nv_engine(priv)->sclass = nvc0_ppp_sclass;
return 0;
diff --git a/drivers/gpu/drm/nouveau/core/engine/vp/nvc0.c b/drivers/gpu/drm/nouveau/core/engine/vp/nvc0.c
index 1879229b60eb..ac1f62aace72 100644
--- a/drivers/gpu/drm/nouveau/core/engine/vp/nvc0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/vp/nvc0.c
@@ -90,6 +90,7 @@ nvc0_vp_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
return ret;
nv_subdev(priv)->unit = 0x00020000;
+ nv_subdev(priv)->intr = nouveau_falcon_intr;
nv_engine(priv)->cclass = &nvc0_vp_cclass;
nv_engine(priv)->sclass = nvc0_vp_sclass;
return 0;
diff --git a/drivers/gpu/drm/nouveau/core/engine/vp/nve0.c b/drivers/gpu/drm/nouveau/core/engine/vp/nve0.c
index d28ecbf7bc49..d4c3108479c9 100644
--- a/drivers/gpu/drm/nouveau/core/engine/vp/nve0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/vp/nve0.c
@@ -90,6 +90,7 @@ nve0_vp_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
return ret;
nv_subdev(priv)->unit = 0x00020000;
+ nv_subdev(priv)->intr = nouveau_falcon_intr;
nv_engine(priv)->cclass = &nve0_vp_cclass;
nv_engine(priv)->sclass = nve0_vp_sclass;
return 0;
diff --git a/drivers/gpu/drm/nouveau/core/include/engine/falcon.h b/drivers/gpu/drm/nouveau/core/include/engine/falcon.h
index 1edec386ab36..181aa7da524d 100644
--- a/drivers/gpu/drm/nouveau/core/include/engine/falcon.h
+++ b/drivers/gpu/drm/nouveau/core/include/engine/falcon.h
@@ -72,6 +72,8 @@ int nouveau_falcon_create_(struct nouveau_object *, struct nouveau_object *,
struct nouveau_oclass *, u32, bool, const char *,
const char *, int, void **);
+void nouveau_falcon_intr(struct nouveau_subdev *subdev);
+
#define _nouveau_falcon_dtor _nouveau_engine_dtor
int _nouveau_falcon_init(struct nouveau_object *);
int _nouveau_falcon_fini(struct nouveau_object *, bool);
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index 4b1afb131380..4e7ee5f4155c 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -148,6 +148,7 @@ nouveau_bo_del_ttm(struct ttm_buffer_object *bo)
if (unlikely(nvbo->gem))
DRM_ERROR("bo %p still attached to GEM object\n", bo);
+ WARN_ON(nvbo->pin_refcnt > 0);
nv10_bo_put_tile_region(dev, nvbo->tile, NULL);
kfree(nvbo);
}
@@ -197,6 +198,12 @@ nouveau_bo_new(struct drm_device *dev, int size, int align,
size_t acc_size;
int ret;
int type = ttm_bo_type_device;
+ int max_size = INT_MAX & ~((1 << drm->client.base.vm->vmm->lpg_shift) - 1);
+
+ if (size <= 0 || size > max_size) {
+ nv_warn(drm, "skipped size %x\n", (u32)size);
+ return -EINVAL;
+ }
if (sg)
type = ttm_bo_type_sg;
@@ -340,13 +347,15 @@ nouveau_bo_unpin(struct nouveau_bo *nvbo)
{
struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev);
struct ttm_buffer_object *bo = &nvbo->bo;
- int ret;
+ int ret, ref;
ret = ttm_bo_reserve(bo, false, false, false, 0);
if (ret)
return ret;
- if (--nvbo->pin_refcnt)
+ ref = --nvbo->pin_refcnt;
+ WARN_ON_ONCE(ref < 0);
+ if (ref)
goto out;
nouveau_bo_placement_set(nvbo, bo->mem.placement, 0);
@@ -578,7 +587,7 @@ nve0_bo_move_init(struct nouveau_channel *chan, u32 handle)
int ret = RING_SPACE(chan, 2);
if (ret == 0) {
BEGIN_NVC0(chan, NvSubCopy, 0x0000, 1);
- OUT_RING (chan, handle);
+ OUT_RING (chan, handle & 0x0000ffff);
FIRE_RING (chan);
}
return ret;
@@ -973,7 +982,7 @@ nouveau_bo_move_m2mf(struct ttm_buffer_object *bo, int evict, bool intr,
struct ttm_mem_reg *old_mem = &bo->mem;
int ret;
- mutex_lock(&chan->cli->mutex);
+ mutex_lock_nested(&chan->cli->mutex, SINGLE_DEPTH_NESTING);
/* create temporary vmas for the transfer and attach them to the
* old nouveau_mem node, these will get cleaned up after ttm has
@@ -1014,7 +1023,7 @@ nouveau_bo_move_init(struct nouveau_drm *drm)
struct ttm_mem_reg *, struct ttm_mem_reg *);
int (*init)(struct nouveau_channel *, u32 handle);
} _methods[] = {
- { "COPY", 0, 0xa0b5, nve0_bo_move_copy, nve0_bo_move_init },
+ { "COPY", 4, 0xa0b5, nve0_bo_move_copy, nve0_bo_move_init },
{ "GRCE", 0, 0xa0b5, nve0_bo_move_copy, nvc0_bo_move_init },
{ "COPY1", 5, 0x90b8, nvc0_bo_move_copy, nvc0_bo_move_init },
{ "COPY0", 4, 0x90b5, nvc0_bo_move_copy, nvc0_bo_move_init },
@@ -1034,7 +1043,7 @@ nouveau_bo_move_init(struct nouveau_drm *drm)
struct nouveau_channel *chan;
u32 handle = (mthd->engine << 16) | mthd->oclass;
- if (mthd->init == nve0_bo_move_init)
+ if (mthd->engine)
chan = drm->cechan;
else
chan = drm->channel;
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
index 708b2d1c0037..907d20ef6d4d 100644
--- a/drivers/gpu/drm/nouveau/nouveau_display.c
+++ b/drivers/gpu/drm/nouveau/nouveau_display.c
@@ -138,7 +138,7 @@ nouveau_user_framebuffer_create(struct drm_device *dev,
{
struct nouveau_framebuffer *nouveau_fb;
struct drm_gem_object *gem;
- int ret;
+ int ret = -ENOMEM;
gem = drm_gem_object_lookup(dev, file_priv, mode_cmd->handles[0]);
if (!gem)
@@ -146,15 +146,19 @@ nouveau_user_framebuffer_create(struct drm_device *dev,
nouveau_fb = kzalloc(sizeof(struct nouveau_framebuffer), GFP_KERNEL);
if (!nouveau_fb)
- return ERR_PTR(-ENOMEM);
+ goto err_unref;
ret = nouveau_framebuffer_init(dev, nouveau_fb, mode_cmd, nouveau_gem_object(gem));
- if (ret) {
- drm_gem_object_unreference(gem);
- return ERR_PTR(ret);
- }
+ if (ret)
+ goto err;
return &nouveau_fb->base;
+
+err:
+ kfree(nouveau_fb);
+err_unref:
+ drm_gem_object_unreference(gem);
+ return ERR_PTR(ret);
}
static const struct drm_mode_config_funcs nouveau_mode_config_funcs = {
@@ -524,9 +528,12 @@ nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
struct nouveau_page_flip_state *s;
struct nouveau_channel *chan = NULL;
struct nouveau_fence *fence;
- struct list_head res;
- struct ttm_validate_buffer res_val[2];
+ struct ttm_validate_buffer resv[2] = {
+ { .bo = &old_bo->bo },
+ { .bo = &new_bo->bo },
+ };
struct ww_acquire_ctx ticket;
+ LIST_HEAD(res);
int ret;
if (!drm->channel)
@@ -545,27 +552,19 @@ nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
chan = drm->channel;
spin_unlock(&old_bo->bo.bdev->fence_lock);
- mutex_lock(&chan->cli->mutex);
-
if (new_bo != old_bo) {
ret = nouveau_bo_pin(new_bo, TTM_PL_FLAG_VRAM);
- if (likely(!ret)) {
- res_val[0].bo = &old_bo->bo;
- res_val[1].bo = &new_bo->bo;
- INIT_LIST_HEAD(&res);
- list_add_tail(&res_val[0].head, &res);
- list_add_tail(&res_val[1].head, &res);
- ret = ttm_eu_reserve_buffers(&ticket, &res);
- if (ret)
- nouveau_bo_unpin(new_bo);
- }
- } else
- ret = ttm_bo_reserve(&new_bo->bo, false, false, false, 0);
+ if (ret)
+ goto fail_free;
- if (ret) {
- mutex_unlock(&chan->cli->mutex);
- goto fail_free;
+ list_add(&resv[1].head, &res);
}
+ list_add(&resv[0].head, &res);
+
+ mutex_lock(&chan->cli->mutex);
+ ret = ttm_eu_reserve_buffers(&ticket, &res);
+ if (ret)
+ goto fail_unpin;
/* Initialize a page flip struct */
*s = (struct nouveau_page_flip_state)
@@ -576,10 +575,8 @@ nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
/* Emit a page flip */
if (nv_device(drm->device)->card_type >= NV_50) {
ret = nv50_display_flip_next(crtc, fb, chan, 0);
- if (ret) {
- mutex_unlock(&chan->cli->mutex);
+ if (ret)
goto fail_unreserve;
- }
}
ret = nouveau_page_flip_emit(chan, old_bo, new_bo, s, &fence);
@@ -590,22 +587,18 @@ nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
/* Update the crtc struct and cleanup */
crtc->fb = fb;
- if (old_bo != new_bo) {
- ttm_eu_fence_buffer_objects(&ticket, &res, fence);
+ ttm_eu_fence_buffer_objects(&ticket, &res, fence);
+ if (old_bo != new_bo)
nouveau_bo_unpin(old_bo);
- } else {
- nouveau_bo_fence(new_bo, fence);
- ttm_bo_unreserve(&new_bo->bo);
- }
nouveau_fence_unref(&fence);
return 0;
fail_unreserve:
- if (old_bo != new_bo) {
- ttm_eu_backoff_reservation(&ticket, &res);
+ ttm_eu_backoff_reservation(&ticket, &res);
+fail_unpin:
+ mutex_unlock(&chan->cli->mutex);
+ if (old_bo != new_bo)
nouveau_bo_unpin(new_bo);
- } else
- ttm_bo_unreserve(&new_bo->bo);
fail_free:
kfree(s);
return ret;
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
index 218a4b522fe5..61972668fd05 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
@@ -192,6 +192,18 @@ nouveau_accel_init(struct nouveau_drm *drm)
arg0 = NVE0_CHANNEL_IND_ENGINE_GR;
arg1 = 1;
+ } else
+ if (device->chipset >= 0xa3 &&
+ device->chipset != 0xaa &&
+ device->chipset != 0xac) {
+ ret = nouveau_channel_new(drm, &drm->client, NVDRM_DEVICE,
+ NVDRM_CHAN + 1, NvDmaFB, NvDmaTT,
+ &drm->cechan);
+ if (ret)
+ NV_ERROR(drm, "failed to create ce channel, %d\n", ret);
+
+ arg0 = NvDmaFB;
+ arg1 = NvDmaTT;
} else {
arg0 = NvDmaFB;
arg1 = NvDmaTT;
@@ -284,8 +296,6 @@ static int nouveau_drm_probe(struct pci_dev *pdev,
return 0;
}
-static struct lock_class_key drm_client_lock_class_key;
-
static int
nouveau_drm_load(struct drm_device *dev, unsigned long flags)
{
@@ -297,7 +307,6 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags)
ret = nouveau_cli_create(pdev, "DRM", sizeof(*drm), (void**)&drm);
if (ret)
return ret;
- lockdep_set_class(&drm->client.mutex, &drm_client_lock_class_key);
dev->dev_private = drm;
drm->dev = dev;
diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
index 9352010030e9..4c1bc061fae2 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
+++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
@@ -385,6 +385,7 @@ out_unlock:
mutex_unlock(&dev->struct_mutex);
if (chan)
nouveau_bo_vma_del(nvbo, &fbcon->nouveau_fb.vma);
+ nouveau_bo_unmap(nvbo);
out_unpin:
nouveau_bo_unpin(nvbo);
out_unref:
diff --git a/drivers/gpu/drm/nouveau/nouveau_fence.c b/drivers/gpu/drm/nouveau/nouveau_fence.c
index 1680d9187bab..be3149932c2d 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fence.c
+++ b/drivers/gpu/drm/nouveau/nouveau_fence.c
@@ -143,7 +143,7 @@ nouveau_fence_emit(struct nouveau_fence *fence, struct nouveau_channel *chan)
int ret;
fence->channel = chan;
- fence->timeout = jiffies + (3 * DRM_HZ);
+ fence->timeout = jiffies + (15 * DRM_HZ);
fence->sequence = ++fctx->sequence;
ret = fctx->emit(fence);
diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c
index e72d09c068a8..830cb7bad922 100644
--- a/drivers/gpu/drm/nouveau/nouveau_gem.c
+++ b/drivers/gpu/drm/nouveau/nouveau_gem.c
@@ -50,12 +50,6 @@ nouveau_gem_object_del(struct drm_gem_object *gem)
return;
nvbo->gem = NULL;
- /* Lockdep hates you for doing reserve with gem object lock held */
- if (WARN_ON_ONCE(nvbo->pin_refcnt)) {
- nvbo->pin_refcnt = 1;
- nouveau_bo_unpin(nvbo);
- }
-
if (gem->import_attach)
drm_prime_gem_destroy(gem, nvbo->bo.sg);
diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
index 54dc6355b0c2..8b40a36c1b57 100644
--- a/drivers/gpu/drm/nouveau/nv50_display.c
+++ b/drivers/gpu/drm/nouveau/nv50_display.c
@@ -355,6 +355,7 @@ struct nv50_oimm {
struct nv50_head {
struct nouveau_crtc base;
+ struct nouveau_bo *image;
struct nv50_curs curs;
struct nv50_sync sync;
struct nv50_ovly ovly;
@@ -517,9 +518,10 @@ nv50_display_flip_next(struct drm_crtc *crtc, struct drm_framebuffer *fb,
{
struct nouveau_framebuffer *nv_fb = nouveau_framebuffer(fb);
struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
+ struct nv50_head *head = nv50_head(crtc);
struct nv50_sync *sync = nv50_sync(crtc);
- int head = nv_crtc->index, ret;
u32 *push;
+ int ret;
swap_interval <<= 4;
if (swap_interval == 0)
@@ -537,7 +539,7 @@ nv50_display_flip_next(struct drm_crtc *crtc, struct drm_framebuffer *fb,
return ret;
BEGIN_NV04(chan, 0, NV11_SUBCHAN_DMA_SEMAPHORE, 2);
- OUT_RING (chan, NvEvoSema0 + head);
+ OUT_RING (chan, NvEvoSema0 + nv_crtc->index);
OUT_RING (chan, sync->addr ^ 0x10);
BEGIN_NV04(chan, 0, NV11_SUBCHAN_SEMAPHORE_RELEASE, 1);
OUT_RING (chan, sync->data + 1);
@@ -546,7 +548,7 @@ nv50_display_flip_next(struct drm_crtc *crtc, struct drm_framebuffer *fb,
OUT_RING (chan, sync->data);
} else
if (chan && nv_mclass(chan->object) < NVC0_CHANNEL_IND_CLASS) {
- u64 addr = nv84_fence_crtc(chan, head) + sync->addr;
+ u64 addr = nv84_fence_crtc(chan, nv_crtc->index) + sync->addr;
ret = RING_SPACE(chan, 12);
if (ret)
return ret;
@@ -565,7 +567,7 @@ nv50_display_flip_next(struct drm_crtc *crtc, struct drm_framebuffer *fb,
OUT_RING (chan, NV84_SUBCHAN_SEMAPHORE_TRIGGER_ACQUIRE_EQUAL);
} else
if (chan) {
- u64 addr = nv84_fence_crtc(chan, head) + sync->addr;
+ u64 addr = nv84_fence_crtc(chan, nv_crtc->index) + sync->addr;
ret = RING_SPACE(chan, 10);
if (ret)
return ret;
@@ -630,6 +632,8 @@ nv50_display_flip_next(struct drm_crtc *crtc, struct drm_framebuffer *fb,
evo_mthd(push, 0x0080, 1);
evo_data(push, 0x00000000);
evo_kick(push, sync);
+
+ nouveau_bo_ref(nv_fb->nvbo, &head->image);
return 0;
}
@@ -1038,18 +1042,17 @@ static int
nv50_crtc_swap_fbs(struct drm_crtc *crtc, struct drm_framebuffer *old_fb)
{
struct nouveau_framebuffer *nvfb = nouveau_framebuffer(crtc->fb);
+ struct nv50_head *head = nv50_head(crtc);
int ret;
ret = nouveau_bo_pin(nvfb->nvbo, TTM_PL_FLAG_VRAM);
- if (ret)
- return ret;
-
- if (old_fb) {
- nvfb = nouveau_framebuffer(old_fb);
- nouveau_bo_unpin(nvfb->nvbo);
+ if (ret == 0) {
+ if (head->image)
+ nouveau_bo_unpin(head->image);
+ nouveau_bo_ref(nvfb->nvbo, &head->image);
}
- return 0;
+ return ret;
}
static int
@@ -1198,6 +1201,15 @@ nv50_crtc_lut_load(struct drm_crtc *crtc)
}
}
+static void
+nv50_crtc_disable(struct drm_crtc *crtc)
+{
+ struct nv50_head *head = nv50_head(crtc);
+ if (head->image)
+ nouveau_bo_unpin(head->image);
+ nouveau_bo_ref(NULL, &head->image);
+}
+
static int
nv50_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv,
uint32_t handle, uint32_t width, uint32_t height)
@@ -1271,18 +1283,29 @@ nv50_crtc_destroy(struct drm_crtc *crtc)
struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
struct nv50_disp *disp = nv50_disp(crtc->dev);
struct nv50_head *head = nv50_head(crtc);
+
nv50_dmac_destroy(disp->core, &head->ovly.base);
nv50_pioc_destroy(disp->core, &head->oimm.base);
nv50_dmac_destroy(disp->core, &head->sync.base);
nv50_pioc_destroy(disp->core, &head->curs.base);
+
+ /*XXX: this shouldn't be necessary, but the core doesn't call
+ * disconnect() during the cleanup paths
+ */
+ if (head->image)
+ nouveau_bo_unpin(head->image);
+ nouveau_bo_ref(NULL, &head->image);
+
nouveau_bo_unmap(nv_crtc->cursor.nvbo);
if (nv_crtc->cursor.nvbo)
nouveau_bo_unpin(nv_crtc->cursor.nvbo);
nouveau_bo_ref(NULL, &nv_crtc->cursor.nvbo);
+
nouveau_bo_unmap(nv_crtc->lut.nvbo);
if (nv_crtc->lut.nvbo)
nouveau_bo_unpin(nv_crtc->lut.nvbo);
nouveau_bo_ref(NULL, &nv_crtc->lut.nvbo);
+
drm_crtc_cleanup(crtc);
kfree(crtc);
}
@@ -1296,6 +1319,7 @@ static const struct drm_crtc_helper_funcs nv50_crtc_hfunc = {
.mode_set_base = nv50_crtc_mode_set_base,
.mode_set_base_atomic = nv50_crtc_mode_set_base_atomic,
.load_lut = nv50_crtc_lut_load,
+ .disable = nv50_crtc_disable,
};
static const struct drm_crtc_funcs nv50_crtc_func = {
diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c
index 93c2f2cceb51..eb89653a7a17 100644
--- a/drivers/gpu/drm/qxl/qxl_cmd.c
+++ b/drivers/gpu/drm/qxl/qxl_cmd.c
@@ -179,9 +179,10 @@ qxl_push_command_ring_release(struct qxl_device *qdev, struct qxl_release *relea
uint32_t type, bool interruptible)
{
struct qxl_command cmd;
+ struct qxl_bo_list *entry = list_first_entry(&release->bos, struct qxl_bo_list, tv.head);
cmd.type = type;
- cmd.data = qxl_bo_physical_address(qdev, release->bos[0], release->release_offset);
+ cmd.data = qxl_bo_physical_address(qdev, to_qxl_bo(entry->tv.bo), release->release_offset);
return qxl_ring_push(qdev->command_ring, &cmd, interruptible);
}
@@ -191,9 +192,10 @@ qxl_push_cursor_ring_release(struct qxl_device *qdev, struct qxl_release *releas
uint32_t type, bool interruptible)
{
struct qxl_command cmd;
+ struct qxl_bo_list *entry = list_first_entry(&release->bos, struct qxl_bo_list, tv.head);
cmd.type = type;
- cmd.data = qxl_bo_physical_address(qdev, release->bos[0], release->release_offset);
+ cmd.data = qxl_bo_physical_address(qdev, to_qxl_bo(entry->tv.bo), release->release_offset);
return qxl_ring_push(qdev->cursor_ring, &cmd, interruptible);
}
@@ -214,7 +216,6 @@ int qxl_garbage_collect(struct qxl_device *qdev)
struct qxl_release *release;
uint64_t id, next_id;
int i = 0;
- int ret;
union qxl_release_info *info;
while (qxl_ring_pop(qdev->release_ring, &id)) {
@@ -224,17 +225,10 @@ int qxl_garbage_collect(struct qxl_device *qdev)
if (release == NULL)
break;
- ret = qxl_release_reserve(qdev, release, false);
- if (ret) {
- qxl_io_log(qdev, "failed to reserve release on garbage collect %lld\n", id);
- DRM_ERROR("failed to reserve release %lld\n", id);
- }
-
info = qxl_release_map(qdev, release);
next_id = info->next;
qxl_release_unmap(qdev, release, info);
- qxl_release_unreserve(qdev, release);
QXL_INFO(qdev, "popped %lld, next %lld\n", id,
next_id);
@@ -259,27 +253,29 @@ int qxl_garbage_collect(struct qxl_device *qdev)
return i;
}
-int qxl_alloc_bo_reserved(struct qxl_device *qdev, unsigned long size,
+int qxl_alloc_bo_reserved(struct qxl_device *qdev,
+ struct qxl_release *release,
+ unsigned long size,
struct qxl_bo **_bo)
{
struct qxl_bo *bo;
int ret;
ret = qxl_bo_create(qdev, size, false /* not kernel - device */,
- QXL_GEM_DOMAIN_VRAM, NULL, &bo);
+ false, QXL_GEM_DOMAIN_VRAM, NULL, &bo);
if (ret) {
DRM_ERROR("failed to allocate VRAM BO\n");
return ret;
}
- ret = qxl_bo_reserve(bo, false);
- if (unlikely(ret != 0))
+ ret = qxl_release_list_add(release, bo);
+ if (ret)
goto out_unref;
*_bo = bo;
return 0;
out_unref:
qxl_bo_unref(&bo);
- return 0;
+ return ret;
}
static int wait_for_io_cmd_user(struct qxl_device *qdev, uint8_t val, long port, bool intr)
@@ -503,6 +499,10 @@ int qxl_hw_surface_alloc(struct qxl_device *qdev,
if (ret)
return ret;
+ ret = qxl_release_reserve_list(release, true);
+ if (ret)
+ return ret;
+
cmd = (struct qxl_surface_cmd *)qxl_release_map(qdev, release);
cmd->type = QXL_SURFACE_CMD_CREATE;
cmd->u.surface_create.format = surf->surf.format;
@@ -524,14 +524,11 @@ int qxl_hw_surface_alloc(struct qxl_device *qdev,
surf->surf_create = release;
- /* no need to add a release to the fence for this bo,
+ /* no need to add a release to the fence for this surface bo,
since it is only released when we ask to destroy the surface
and it would never signal otherwise */
- qxl_fence_releaseable(qdev, release);
-
qxl_push_command_ring_release(qdev, release, QXL_CMD_SURFACE, false);
-
- qxl_release_unreserve(qdev, release);
+ qxl_release_fence_buffer_objects(release);
surf->hw_surf_alloc = true;
spin_lock(&qdev->surf_id_idr_lock);
@@ -573,12 +570,9 @@ int qxl_hw_surface_dealloc(struct qxl_device *qdev,
cmd->surface_id = id;
qxl_release_unmap(qdev, release, &cmd->release_info);
- qxl_fence_releaseable(qdev, release);
-
qxl_push_command_ring_release(qdev, release, QXL_CMD_SURFACE, false);
- qxl_release_unreserve(qdev, release);
-
+ qxl_release_fence_buffer_objects(release);
return 0;
}
diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
index f76f5dd7bfc4..835caba026d3 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -179,7 +179,7 @@ static void qxl_crtc_destroy(struct drm_crtc *crtc)
kfree(qxl_crtc);
}
-static void
+static int
qxl_hide_cursor(struct qxl_device *qdev)
{
struct qxl_release *release;
@@ -188,14 +188,22 @@ qxl_hide_cursor(struct qxl_device *qdev)
ret = qxl_alloc_release_reserved(qdev, sizeof(*cmd), QXL_RELEASE_CURSOR_CMD,
&release, NULL);
+ if (ret)
+ return ret;
+
+ ret = qxl_release_reserve_list(release, true);
+ if (ret) {
+ qxl_release_free(qdev, release);
+ return ret;
+ }
cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release);
cmd->type = QXL_CURSOR_HIDE;
qxl_release_unmap(qdev, release, &cmd->release_info);
- qxl_fence_releaseable(qdev, release);
qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false);
- qxl_release_unreserve(qdev, release);
+ qxl_release_fence_buffer_objects(release);
+ return 0;
}
static int qxl_crtc_cursor_set2(struct drm_crtc *crtc,
@@ -216,10 +224,8 @@ static int qxl_crtc_cursor_set2(struct drm_crtc *crtc,
int size = 64*64*4;
int ret = 0;
- if (!handle) {
- qxl_hide_cursor(qdev);
- return 0;
- }
+ if (!handle)
+ return qxl_hide_cursor(qdev);
obj = drm_gem_object_lookup(crtc->dev, file_priv, handle);
if (!obj) {
@@ -234,8 +240,9 @@ static int qxl_crtc_cursor_set2(struct drm_crtc *crtc,
goto out_unref;
ret = qxl_bo_pin(user_bo, QXL_GEM_DOMAIN_CPU, NULL);
+ qxl_bo_unreserve(user_bo);
if (ret)
- goto out_unreserve;
+ goto out_unref;
ret = qxl_bo_kmap(user_bo, &user_ptr);
if (ret)
@@ -246,14 +253,20 @@ static int qxl_crtc_cursor_set2(struct drm_crtc *crtc,
&release, NULL);
if (ret)
goto out_kunmap;
- ret = qxl_alloc_bo_reserved(qdev, sizeof(struct qxl_cursor) + size,
- &cursor_bo);
+
+ ret = qxl_alloc_bo_reserved(qdev, release, sizeof(struct qxl_cursor) + size,
+ &cursor_bo);
if (ret)
goto out_free_release;
- ret = qxl_bo_kmap(cursor_bo, (void **)&cursor);
+
+ ret = qxl_release_reserve_list(release, false);
if (ret)
goto out_free_bo;
+ ret = qxl_bo_kmap(cursor_bo, (void **)&cursor);
+ if (ret)
+ goto out_backoff;
+
cursor->header.unique = 0;
cursor->header.type = SPICE_CURSOR_TYPE_ALPHA;
cursor->header.width = 64;
@@ -269,11 +282,7 @@ static int qxl_crtc_cursor_set2(struct drm_crtc *crtc,
qxl_bo_kunmap(cursor_bo);
- /* finish with the userspace bo */
qxl_bo_kunmap(user_bo);
- qxl_bo_unpin(user_bo);
- qxl_bo_unreserve(user_bo);
- drm_gem_object_unreference_unlocked(obj);
cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release);
cmd->type = QXL_CURSOR_SET;
@@ -281,30 +290,35 @@ static int qxl_crtc_cursor_set2(struct drm_crtc *crtc,
cmd->u.set.position.y = qcrtc->cur_y;
cmd->u.set.shape = qxl_bo_physical_address(qdev, cursor_bo, 0);
- qxl_release_add_res(qdev, release, cursor_bo);
cmd->u.set.visible = 1;
qxl_release_unmap(qdev, release, &cmd->release_info);
- qxl_fence_releaseable(qdev, release);
qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false);
- qxl_release_unreserve(qdev, release);
+ qxl_release_fence_buffer_objects(release);
+
+ /* finish with the userspace bo */
+ ret = qxl_bo_reserve(user_bo, false);
+ if (!ret) {
+ qxl_bo_unpin(user_bo);
+ qxl_bo_unreserve(user_bo);
+ }
+ drm_gem_object_unreference_unlocked(obj);
- qxl_bo_unreserve(cursor_bo);
qxl_bo_unref(&cursor_bo);
return ret;
+
+out_backoff:
+ qxl_release_backoff_reserve_list(release);
out_free_bo:
qxl_bo_unref(&cursor_bo);
out_free_release:
- qxl_release_unreserve(qdev, release);
qxl_release_free(qdev, release);
out_kunmap:
qxl_bo_kunmap(user_bo);
out_unpin:
qxl_bo_unpin(user_bo);
-out_unreserve:
- qxl_bo_unreserve(user_bo);
out_unref:
drm_gem_object_unreference_unlocked(obj);
return ret;
@@ -322,6 +336,14 @@ static int qxl_crtc_cursor_move(struct drm_crtc *crtc,
ret = qxl_alloc_release_reserved(qdev, sizeof(*cmd), QXL_RELEASE_CURSOR_CMD,
&release, NULL);
+ if (ret)
+ return ret;
+
+ ret = qxl_release_reserve_list(release, true);
+ if (ret) {
+ qxl_release_free(qdev, release);
+ return ret;
+ }
qcrtc->cur_x = x;
qcrtc->cur_y = y;
@@ -332,9 +354,9 @@ static int qxl_crtc_cursor_move(struct drm_crtc *crtc,
cmd->u.position.y = qcrtc->cur_y;
qxl_release_unmap(qdev, release, &cmd->release_info);
- qxl_fence_releaseable(qdev, release);
qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false);
- qxl_release_unreserve(qdev, release);
+ qxl_release_fence_buffer_objects(release);
+
return 0;
}
diff --git a/drivers/gpu/drm/qxl/qxl_draw.c b/drivers/gpu/drm/qxl/qxl_draw.c
index 3c8c3dbf9378..56e1d633875e 100644
--- a/drivers/gpu/drm/qxl/qxl_draw.c
+++ b/drivers/gpu/drm/qxl/qxl_draw.c
@@ -23,25 +23,29 @@
#include "qxl_drv.h"
#include "qxl_object.h"
+static int alloc_clips(struct qxl_device *qdev,
+ struct qxl_release *release,
+ unsigned num_clips,
+ struct qxl_bo **clips_bo)
+{
+ int size = sizeof(struct qxl_clip_rects) + sizeof(struct qxl_rect) * num_clips;
+
+ return qxl_alloc_bo_reserved(qdev, release, size, clips_bo);
+}
+
/* returns a pointer to the already allocated qxl_rect array inside
* the qxl_clip_rects. This is *not* the same as the memory allocated
* on the device, it is offset to qxl_clip_rects.chunk.data */
static struct qxl_rect *drawable_set_clipping(struct qxl_device *qdev,
struct qxl_drawable *drawable,
unsigned num_clips,
- struct qxl_bo **clips_bo,
- struct qxl_release *release)
+ struct qxl_bo *clips_bo)
{
struct qxl_clip_rects *dev_clips;
int ret;
- int size = sizeof(*dev_clips) + sizeof(struct qxl_rect) * num_clips;
- ret = qxl_alloc_bo_reserved(qdev, size, clips_bo);
- if (ret)
- return NULL;
- ret = qxl_bo_kmap(*clips_bo, (void **)&dev_clips);
+ ret = qxl_bo_kmap(clips_bo, (void **)&dev_clips);
if (ret) {
- qxl_bo_unref(clips_bo);
return NULL;
}
dev_clips->num_rects = num_clips;
@@ -52,20 +56,34 @@ static struct qxl_rect *drawable_set_clipping(struct qxl_device *qdev,
}
static int
+alloc_drawable(struct qxl_device *qdev, struct qxl_release **release)
+{
+ int ret;
+ ret = qxl_alloc_release_reserved(qdev, sizeof(struct qxl_drawable),
+ QXL_RELEASE_DRAWABLE, release,
+ NULL);
+ return ret;
+}
+
+static void
+free_drawable(struct qxl_device *qdev, struct qxl_release *release)
+{
+ qxl_release_free(qdev, release);
+}
+
+/* release needs to be reserved at this point */
+static int
make_drawable(struct qxl_device *qdev, int surface, uint8_t type,
const struct qxl_rect *rect,
- struct qxl_release **release)
+ struct qxl_release *release)
{
struct qxl_drawable *drawable;
- int i, ret;
+ int i;
- ret = qxl_alloc_release_reserved(qdev, sizeof(*drawable),
- QXL_RELEASE_DRAWABLE, release,
- NULL);
- if (ret)
- return ret;
+ drawable = (struct qxl_drawable *)qxl_release_map(qdev, release);
+ if (!drawable)
+ return -ENOMEM;
- drawable = (struct qxl_drawable *)qxl_release_map(qdev, *release);
drawable->type = type;
drawable->surface_id = surface; /* Only primary for now */
@@ -91,14 +109,23 @@ make_drawable(struct qxl_device *qdev, int surface, uint8_t type,
drawable->bbox = *rect;
drawable->mm_time = qdev->rom->mm_clock;
- qxl_release_unmap(qdev, *release, &drawable->release_info);
+ qxl_release_unmap(qdev, release, &drawable->release_info);
return 0;
}
-static int qxl_palette_create_1bit(struct qxl_bo **palette_bo,
+static int alloc_palette_object(struct qxl_device *qdev,
+ struct qxl_release *release,
+ struct qxl_bo **palette_bo)
+{
+ return qxl_alloc_bo_reserved(qdev, release,
+ sizeof(struct qxl_palette) + sizeof(uint32_t) * 2,
+ palette_bo);
+}
+
+static int qxl_palette_create_1bit(struct qxl_bo *palette_bo,
+ struct qxl_release *release,
const struct qxl_fb_image *qxl_fb_image)
{
- struct qxl_device *qdev = qxl_fb_image->qdev;
const struct fb_image *fb_image = &qxl_fb_image->fb_image;
uint32_t visual = qxl_fb_image->visual;
const uint32_t *pseudo_palette = qxl_fb_image->pseudo_palette;
@@ -108,12 +135,7 @@ static int qxl_palette_create_1bit(struct qxl_bo **palette_bo,
static uint64_t unique; /* we make no attempt to actually set this
* correctly globaly, since that would require
* tracking all of our palettes. */
-
- ret = qxl_alloc_bo_reserved(qdev,
- sizeof(struct qxl_palette) + sizeof(uint32_t) * 2,
- palette_bo);
-
- ret = qxl_bo_kmap(*palette_bo, (void **)&pal);
+ ret = qxl_bo_kmap(palette_bo, (void **)&pal);
pal->num_ents = 2;
pal->unique = unique++;
if (visual == FB_VISUAL_TRUECOLOR || visual == FB_VISUAL_DIRECTCOLOR) {
@@ -126,7 +148,7 @@ static int qxl_palette_create_1bit(struct qxl_bo **palette_bo,
}
pal->ents[0] = bgcolor;
pal->ents[1] = fgcolor;
- qxl_bo_kunmap(*palette_bo);
+ qxl_bo_kunmap(palette_bo);
return 0;
}
@@ -144,44 +166,63 @@ void qxl_draw_opaque_fb(const struct qxl_fb_image *qxl_fb_image,
const char *src = fb_image->data;
int depth = fb_image->depth;
struct qxl_release *release;
- struct qxl_bo *image_bo;
struct qxl_image *image;
int ret;
-
+ struct qxl_drm_image *dimage;
+ struct qxl_bo *palette_bo = NULL;
if (stride == 0)
stride = depth * width / 8;
+ ret = alloc_drawable(qdev, &release);
+ if (ret)
+ return;
+
+ ret = qxl_image_alloc_objects(qdev, release,
+ &dimage,
+ height, stride);
+ if (ret)
+ goto out_free_drawable;
+
+ if (depth == 1) {
+ ret = alloc_palette_object(qdev, release, &palette_bo);
+ if (ret)
+ goto out_free_image;
+ }
+
+ /* do a reservation run over all the objects we just allocated */
+ ret = qxl_release_reserve_list(release, true);
+ if (ret)
+ goto out_free_palette;
+
rect.left = x;
rect.right = x + width;
rect.top = y;
rect.bottom = y + height;
- ret = make_drawable(qdev, 0, QXL_DRAW_COPY, &rect, &release);
- if (ret)
- return;
+ ret = make_drawable(qdev, 0, QXL_DRAW_COPY, &rect, release);
+ if (ret) {
+ qxl_release_backoff_reserve_list(release);
+ goto out_free_palette;
+ }
- ret = qxl_image_create(qdev, release, &image_bo,
- (const uint8_t *)src, 0, 0,
- width, height, depth, stride);
+ ret = qxl_image_init(qdev, release, dimage,
+ (const uint8_t *)src, 0, 0,
+ width, height, depth, stride);
if (ret) {
- qxl_release_unreserve(qdev, release);
+ qxl_release_backoff_reserve_list(release);
qxl_release_free(qdev, release);
return;
}
if (depth == 1) {
- struct qxl_bo *palette_bo;
void *ptr;
- ret = qxl_palette_create_1bit(&palette_bo, qxl_fb_image);
- qxl_release_add_res(qdev, release, palette_bo);
+ ret = qxl_palette_create_1bit(palette_bo, release, qxl_fb_image);
- ptr = qxl_bo_kmap_atomic_page(qdev, image_bo, 0);
+ ptr = qxl_bo_kmap_atomic_page(qdev, dimage->bo, 0);
image = ptr;
image->u.bitmap.palette =
qxl_bo_physical_address(qdev, palette_bo, 0);
- qxl_bo_kunmap_atomic_page(qdev, image_bo, ptr);
- qxl_bo_unreserve(palette_bo);
- qxl_bo_unref(&palette_bo);
+ qxl_bo_kunmap_atomic_page(qdev, dimage->bo, ptr);
}
drawable = (struct qxl_drawable *)qxl_release_map(qdev, release);
@@ -199,16 +240,20 @@ void qxl_draw_opaque_fb(const struct qxl_fb_image *qxl_fb_image,
drawable->u.copy.mask.bitmap = 0;
drawable->u.copy.src_bitmap =
- qxl_bo_physical_address(qdev, image_bo, 0);
+ qxl_bo_physical_address(qdev, dimage->bo, 0);
qxl_release_unmap(qdev, release, &drawable->release_info);
- qxl_release_add_res(qdev, release, image_bo);
- qxl_bo_unreserve(image_bo);
- qxl_bo_unref(&image_bo);
-
- qxl_fence_releaseable(qdev, release);
qxl_push_command_ring_release(qdev, release, QXL_CMD_DRAW, false);
- qxl_release_unreserve(qdev, release);
+ qxl_release_fence_buffer_objects(release);
+
+out_free_palette:
+ if (palette_bo)
+ qxl_bo_unref(&palette_bo);
+out_free_image:
+ qxl_image_free_objects(qdev, dimage);
+out_free_drawable:
+ if (ret)
+ free_drawable(qdev, release);
}
/* push a draw command using the given clipping rectangles as
@@ -243,10 +288,14 @@ void qxl_draw_dirty_fb(struct qxl_device *qdev,
int depth = qxl_fb->base.bits_per_pixel;
uint8_t *surface_base;
struct qxl_release *release;
- struct qxl_bo *image_bo;
struct qxl_bo *clips_bo;
+ struct qxl_drm_image *dimage;
int ret;
+ ret = alloc_drawable(qdev, &release);
+ if (ret)
+ return;
+
left = clips->x1;
right = clips->x2;
top = clips->y1;
@@ -263,36 +312,52 @@ void qxl_draw_dirty_fb(struct qxl_device *qdev,
width = right - left;
height = bottom - top;
+
+ ret = alloc_clips(qdev, release, num_clips, &clips_bo);
+ if (ret)
+ goto out_free_drawable;
+
+ ret = qxl_image_alloc_objects(qdev, release,
+ &dimage,
+ height, stride);
+ if (ret)
+ goto out_free_clips;
+
+ /* do a reservation run over all the objects we just allocated */
+ ret = qxl_release_reserve_list(release, true);
+ if (ret)
+ goto out_free_image;
+
drawable_rect.left = left;
drawable_rect.right = right;
drawable_rect.top = top;
drawable_rect.bottom = bottom;
+
ret = make_drawable(qdev, 0, QXL_DRAW_COPY, &drawable_rect,
- &release);
+ release);
if (ret)
- return;
+ goto out_release_backoff;
ret = qxl_bo_kmap(bo, (void **)&surface_base);
if (ret)
- goto out_unref;
+ goto out_release_backoff;
- ret = qxl_image_create(qdev, release, &image_bo, surface_base,
- left, top, width, height, depth, stride);
+
+ ret = qxl_image_init(qdev, release, dimage, surface_base,
+ left, top, width, height, depth, stride);
qxl_bo_kunmap(bo);
if (ret)
- goto out_unref;
+ goto out_release_backoff;
+
+ rects = drawable_set_clipping(qdev, drawable, num_clips, clips_bo);
+ if (!rects)
+ goto out_release_backoff;
- rects = drawable_set_clipping(qdev, drawable, num_clips, &clips_bo, release);
- if (!rects) {
- qxl_bo_unref(&image_bo);
- goto out_unref;
- }
drawable = (struct qxl_drawable *)qxl_release_map(qdev, release);
drawable->clip.type = SPICE_CLIP_TYPE_RECTS;
drawable->clip.data = qxl_bo_physical_address(qdev,
clips_bo, 0);
- qxl_release_add_res(qdev, release, clips_bo);
drawable->u.copy.src_area.top = 0;
drawable->u.copy.src_area.bottom = height;
@@ -306,11 +371,9 @@ void qxl_draw_dirty_fb(struct qxl_device *qdev,
drawable->u.copy.mask.pos.y = 0;
drawable->u.copy.mask.bitmap = 0;
- drawable->u.copy.src_bitmap = qxl_bo_physical_address(qdev, image_bo, 0);
+ drawable->u.copy.src_bitmap = qxl_bo_physical_address(qdev, dimage->bo, 0);
qxl_release_unmap(qdev, release, &drawable->release_info);
- qxl_release_add_res(qdev, release, image_bo);
- qxl_bo_unreserve(image_bo);
- qxl_bo_unref(&image_bo);
+
clips_ptr = clips;
for (i = 0; i < num_clips; i++, clips_ptr += inc) {
rects[i].left = clips_ptr->x1;
@@ -319,17 +382,22 @@ void qxl_draw_dirty_fb(struct qxl_device *qdev,
rects[i].bottom = clips_ptr->y2;
}
qxl_bo_kunmap(clips_bo);
- qxl_bo_unreserve(clips_bo);
- qxl_bo_unref(&clips_bo);
- qxl_fence_releaseable(qdev, release);
qxl_push_command_ring_release(qdev, release, QXL_CMD_DRAW, false);
- qxl_release_unreserve(qdev, release);
- return;
+ qxl_release_fence_buffer_objects(release);
+
+out_release_backoff:
+ if (ret)
+ qxl_release_backoff_reserve_list(release);
+out_free_image:
+ qxl_image_free_objects(qdev, dimage);
+out_free_clips:
+ qxl_bo_unref(&clips_bo);
+out_free_drawable:
+ /* only free drawable on error */
+ if (ret)
+ free_drawable(qdev, release);
-out_unref:
- qxl_release_unreserve(qdev, release);
- qxl_release_free(qdev, release);
}
void qxl_draw_copyarea(struct qxl_device *qdev,
@@ -342,22 +410,36 @@ void qxl_draw_copyarea(struct qxl_device *qdev,
struct qxl_release *release;
int ret;
+ ret = alloc_drawable(qdev, &release);
+ if (ret)
+ return;
+
+ /* do a reservation run over all the objects we just allocated */
+ ret = qxl_release_reserve_list(release, true);
+ if (ret)
+ goto out_free_release;
+
rect.left = dx;
rect.top = dy;
rect.right = dx + width;
rect.bottom = dy + height;
- ret = make_drawable(qdev, 0, QXL_COPY_BITS, &rect, &release);
- if (ret)
- return;
+ ret = make_drawable(qdev, 0, QXL_COPY_BITS, &rect, release);
+ if (ret) {
+ qxl_release_backoff_reserve_list(release);
+ goto out_free_release;
+ }
drawable = (struct qxl_drawable *)qxl_release_map(qdev, release);
drawable->u.copy_bits.src_pos.x = sx;
drawable->u.copy_bits.src_pos.y = sy;
-
qxl_release_unmap(qdev, release, &drawable->release_info);
- qxl_fence_releaseable(qdev, release);
+
qxl_push_command_ring_release(qdev, release, QXL_CMD_DRAW, false);
- qxl_release_unreserve(qdev, release);
+ qxl_release_fence_buffer_objects(release);
+
+out_free_release:
+ if (ret)
+ free_drawable(qdev, release);
}
void qxl_draw_fill(struct qxl_draw_fill *qxl_draw_fill_rec)
@@ -370,10 +452,21 @@ void qxl_draw_fill(struct qxl_draw_fill *qxl_draw_fill_rec)
struct qxl_release *release;
int ret;
- ret = make_drawable(qdev, 0, QXL_DRAW_FILL, &rect, &release);
+ ret = alloc_drawable(qdev, &release);
if (ret)
return;
+ /* do a reservation run over all the objects we just allocated */
+ ret = qxl_release_reserve_list(release, true);
+ if (ret)
+ goto out_free_release;
+
+ ret = make_drawable(qdev, 0, QXL_DRAW_FILL, &rect, release);
+ if (ret) {
+ qxl_release_backoff_reserve_list(release);
+ goto out_free_release;
+ }
+
drawable = (struct qxl_drawable *)qxl_release_map(qdev, release);
drawable->u.fill.brush.type = SPICE_BRUSH_TYPE_SOLID;
drawable->u.fill.brush.u.color = color;
@@ -384,7 +477,11 @@ void qxl_draw_fill(struct qxl_draw_fill *qxl_draw_fill_rec)
drawable->u.fill.mask.bitmap = 0;
qxl_release_unmap(qdev, release, &drawable->release_info);
- qxl_fence_releaseable(qdev, release);
+
qxl_push_command_ring_release(qdev, release, QXL_CMD_DRAW, false);
- qxl_release_unreserve(qdev, release);
+ qxl_release_fence_buffer_objects(release);
+
+out_free_release:
+ if (ret)
+ free_drawable(qdev, release);
}
diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
index aacb791464a3..7e96f4f11738 100644
--- a/drivers/gpu/drm/qxl/qxl_drv.h
+++ b/drivers/gpu/drm/qxl/qxl_drv.h
@@ -42,6 +42,9 @@
#include <ttm/ttm_placement.h>
#include <ttm/ttm_module.h>
+/* just for ttm_validate_buffer */
+#include <ttm/ttm_execbuf_util.h>
+
#include <drm/qxl_drm.h>
#include "qxl_dev.h"
@@ -118,9 +121,9 @@ struct qxl_bo {
uint32_t surface_id;
struct qxl_fence fence; /* per bo fence - list of releases */
struct qxl_release *surf_create;
- atomic_t reserve_count;
};
#define gem_to_qxl_bo(gobj) container_of((gobj), struct qxl_bo, gem_base)
+#define to_qxl_bo(tobj) container_of((tobj), struct qxl_bo, tbo)
struct qxl_gem {
struct mutex mutex;
@@ -128,12 +131,7 @@ struct qxl_gem {
};
struct qxl_bo_list {
- struct list_head lhead;
- struct qxl_bo *bo;
-};
-
-struct qxl_reloc_list {
- struct list_head bos;
+ struct ttm_validate_buffer tv;
};
struct qxl_crtc {
@@ -195,10 +193,20 @@ enum {
struct qxl_release {
int id;
int type;
- int bo_count;
uint32_t release_offset;
uint32_t surface_release_id;
- struct qxl_bo *bos[QXL_MAX_RES];
+ struct ww_acquire_ctx ticket;
+ struct list_head bos;
+};
+
+struct qxl_drm_chunk {
+ struct list_head head;
+ struct qxl_bo *bo;
+};
+
+struct qxl_drm_image {
+ struct qxl_bo *bo;
+ struct list_head chunk_list;
};
struct qxl_fb_image {
@@ -314,6 +322,7 @@ struct qxl_device {
struct workqueue_struct *gc_queue;
struct work_struct gc_work;
+ struct work_struct fb_work;
};
/* forward declaration for QXL_INFO_IO */
@@ -433,12 +442,19 @@ int qxl_mmap(struct file *filp, struct vm_area_struct *vma);
/* qxl image */
-int qxl_image_create(struct qxl_device *qdev,
- struct qxl_release *release,
- struct qxl_bo **image_bo,
- const uint8_t *data,
- int x, int y, int width, int height,
- int depth, int stride);
+int qxl_image_init(struct qxl_device *qdev,
+ struct qxl_release *release,
+ struct qxl_drm_image *dimage,
+ const uint8_t *data,
+ int x, int y, int width, int height,
+ int depth, int stride);
+int
+qxl_image_alloc_objects(struct qxl_device *qdev,
+ struct qxl_release *release,
+ struct qxl_drm_image **image_ptr,
+ int height, int stride);
+void qxl_image_free_objects(struct qxl_device *qdev, struct qxl_drm_image *dimage);
+
void qxl_update_screen(struct qxl_device *qxl);
/* qxl io operations (qxl_cmd.c) */
@@ -459,20 +475,15 @@ int qxl_ring_push(struct qxl_ring *ring, const void *new_elt, bool interruptible
void qxl_io_flush_release(struct qxl_device *qdev);
void qxl_io_flush_surfaces(struct qxl_device *qdev);
-int qxl_release_reserve(struct qxl_device *qdev,
- struct qxl_release *release, bool no_wait);
-void qxl_release_unreserve(struct qxl_device *qdev,
- struct qxl_release *release);
union qxl_release_info *qxl_release_map(struct qxl_device *qdev,
struct qxl_release *release);
void qxl_release_unmap(struct qxl_device *qdev,
struct qxl_release *release,
union qxl_release_info *info);
-/*
- * qxl_bo_add_resource.
- *
- */
-void qxl_bo_add_resource(struct qxl_bo *main_bo, struct qxl_bo *resource);
+int qxl_release_list_add(struct qxl_release *release, struct qxl_bo *bo);
+int qxl_release_reserve_list(struct qxl_release *release, bool no_intr);
+void qxl_release_backoff_reserve_list(struct qxl_release *release);
+void qxl_release_fence_buffer_objects(struct qxl_release *release);
int qxl_alloc_surface_release_reserved(struct qxl_device *qdev,
enum qxl_surface_cmd_type surface_cmd_type,
@@ -481,15 +492,16 @@ int qxl_alloc_surface_release_reserved(struct qxl_device *qdev,
int qxl_alloc_release_reserved(struct qxl_device *qdev, unsigned long size,
int type, struct qxl_release **release,
struct qxl_bo **rbo);
-int qxl_fence_releaseable(struct qxl_device *qdev,
- struct qxl_release *release);
+
int
qxl_push_command_ring_release(struct qxl_device *qdev, struct qxl_release *release,
uint32_t type, bool interruptible);
int
qxl_push_cursor_ring_release(struct qxl_device *qdev, struct qxl_release *release,
uint32_t type, bool interruptible);
-int qxl_alloc_bo_reserved(struct qxl_device *qdev, unsigned long size,
+int qxl_alloc_bo_reserved(struct qxl_device *qdev,
+ struct qxl_release *release,
+ unsigned long size,
struct qxl_bo **_bo);
/* qxl drawing commands */
@@ -510,15 +522,9 @@ void qxl_draw_copyarea(struct qxl_device *qdev,
u32 sx, u32 sy,
u32 dx, u32 dy);
-uint64_t
-qxl_release_alloc(struct qxl_device *qdev, int type,
- struct qxl_release **ret);
-
void qxl_release_free(struct qxl_device *qdev,
struct qxl_release *release);
-void qxl_release_add_res(struct qxl_device *qdev,
- struct qxl_release *release,
- struct qxl_bo *bo);
+
/* used by qxl_debugfs_release */
struct qxl_release *qxl_release_from_id_locked(struct qxl_device *qdev,
uint64_t id);
@@ -561,7 +567,7 @@ void qxl_surface_evict(struct qxl_device *qdev, struct qxl_bo *surf, bool freein
int qxl_update_surface(struct qxl_device *qdev, struct qxl_bo *surf);
/* qxl_fence.c */
-int qxl_fence_add_release(struct qxl_fence *qfence, uint32_t rel_id);
+void qxl_fence_add_release_locked(struct qxl_fence *qfence, uint32_t rel_id);
int qxl_fence_remove_release(struct qxl_fence *qfence, uint32_t rel_id);
int qxl_fence_init(struct qxl_device *qdev, struct qxl_fence *qfence);
void qxl_fence_fini(struct qxl_fence *qfence);
diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c
index 76f39d88d684..88722f233430 100644
--- a/drivers/gpu/drm/qxl/qxl_fb.c
+++ b/drivers/gpu/drm/qxl/qxl_fb.c
@@ -37,12 +37,29 @@
#define QXL_DIRTY_DELAY (HZ / 30)
+#define QXL_FB_OP_FILLRECT 1
+#define QXL_FB_OP_COPYAREA 2
+#define QXL_FB_OP_IMAGEBLIT 3
+
+struct qxl_fb_op {
+ struct list_head head;
+ int op_type;
+ union {
+ struct fb_fillrect fr;
+ struct fb_copyarea ca;
+ struct fb_image ib;
+ } op;
+ void *img_data;
+};
+
struct qxl_fbdev {
struct drm_fb_helper helper;
struct qxl_framebuffer qfb;
struct list_head fbdev_list;
struct qxl_device *qdev;
+ spinlock_t delayed_ops_lock;
+ struct list_head delayed_ops;
void *shadow;
int size;
@@ -164,8 +181,69 @@ static struct fb_deferred_io qxl_defio = {
.deferred_io = qxl_deferred_io,
};
-static void qxl_fb_fillrect(struct fb_info *info,
- const struct fb_fillrect *fb_rect)
+static void qxl_fb_delayed_fillrect(struct qxl_fbdev *qfbdev,
+ const struct fb_fillrect *fb_rect)
+{
+ struct qxl_fb_op *op;
+ unsigned long flags;
+
+ op = kmalloc(sizeof(struct qxl_fb_op), GFP_ATOMIC | __GFP_NOWARN);
+ if (!op)
+ return;
+
+ op->op.fr = *fb_rect;
+ op->img_data = NULL;
+ op->op_type = QXL_FB_OP_FILLRECT;
+
+ spin_lock_irqsave(&qfbdev->delayed_ops_lock, flags);
+ list_add_tail(&op->head, &qfbdev->delayed_ops);
+ spin_unlock_irqrestore(&qfbdev->delayed_ops_lock, flags);
+}
+
+static void qxl_fb_delayed_copyarea(struct qxl_fbdev *qfbdev,
+ const struct fb_copyarea *fb_copy)
+{
+ struct qxl_fb_op *op;
+ unsigned long flags;
+
+ op = kmalloc(sizeof(struct qxl_fb_op), GFP_ATOMIC | __GFP_NOWARN);
+ if (!op)
+ return;
+
+ op->op.ca = *fb_copy;
+ op->img_data = NULL;
+ op->op_type = QXL_FB_OP_COPYAREA;
+
+ spin_lock_irqsave(&qfbdev->delayed_ops_lock, flags);
+ list_add_tail(&op->head, &qfbdev->delayed_ops);
+ spin_unlock_irqrestore(&qfbdev->delayed_ops_lock, flags);
+}
+
+static void qxl_fb_delayed_imageblit(struct qxl_fbdev *qfbdev,
+ const struct fb_image *fb_image)
+{
+ struct qxl_fb_op *op;
+ unsigned long flags;
+ uint32_t size = fb_image->width * fb_image->height * (fb_image->depth >= 8 ? fb_image->depth / 8 : 1);
+
+ op = kmalloc(sizeof(struct qxl_fb_op) + size, GFP_ATOMIC | __GFP_NOWARN);
+ if (!op)
+ return;
+
+ op->op.ib = *fb_image;
+ op->img_data = (void *)(op + 1);
+ op->op_type = QXL_FB_OP_IMAGEBLIT;
+
+ memcpy(op->img_data, fb_image->data, size);
+
+ op->op.ib.data = op->img_data;
+ spin_lock_irqsave(&qfbdev->delayed_ops_lock, flags);
+ list_add_tail(&op->head, &qfbdev->delayed_ops);
+ spin_unlock_irqrestore(&qfbdev->delayed_ops_lock, flags);
+}
+
+static void qxl_fb_fillrect_internal(struct fb_info *info,
+ const struct fb_fillrect *fb_rect)
{
struct qxl_fbdev *qfbdev = info->par;
struct qxl_device *qdev = qfbdev->qdev;
@@ -203,17 +281,28 @@ static void qxl_fb_fillrect(struct fb_info *info,
qxl_draw_fill_rec.rect = rect;
qxl_draw_fill_rec.color = color;
qxl_draw_fill_rec.rop = rop;
+
+ qxl_draw_fill(&qxl_draw_fill_rec);
+}
+
+static void qxl_fb_fillrect(struct fb_info *info,
+ const struct fb_fillrect *fb_rect)
+{
+ struct qxl_fbdev *qfbdev = info->par;
+ struct qxl_device *qdev = qfbdev->qdev;
+
if (!drm_can_sleep()) {
- qxl_io_log(qdev,
- "%s: TODO use RCU, mysterious locks with spin_lock\n",
- __func__);
+ qxl_fb_delayed_fillrect(qfbdev, fb_rect);
+ schedule_work(&qdev->fb_work);
return;
}
- qxl_draw_fill(&qxl_draw_fill_rec);
+ /* make sure any previous work is done */
+ flush_work(&qdev->fb_work);
+ qxl_fb_fillrect_internal(info, fb_rect);
}
-static void qxl_fb_copyarea(struct fb_info *info,
- const struct fb_copyarea *region)
+static void qxl_fb_copyarea_internal(struct fb_info *info,
+ const struct fb_copyarea *region)
{
struct qxl_fbdev *qfbdev = info->par;
@@ -223,37 +312,89 @@ static void qxl_fb_copyarea(struct fb_info *info,
region->dx, region->dy);
}
+static void qxl_fb_copyarea(struct fb_info *info,
+ const struct fb_copyarea *region)
+{
+ struct qxl_fbdev *qfbdev = info->par;
+ struct qxl_device *qdev = qfbdev->qdev;
+
+ if (!drm_can_sleep()) {
+ qxl_fb_delayed_copyarea(qfbdev, region);
+ schedule_work(&qdev->fb_work);
+ return;
+ }
+ /* make sure any previous work is done */
+ flush_work(&qdev->fb_work);
+ qxl_fb_copyarea_internal(info, region);
+}
+
static void qxl_fb_imageblit_safe(struct qxl_fb_image *qxl_fb_image)
{
qxl_draw_opaque_fb(qxl_fb_image, 0);
}
+static void qxl_fb_imageblit_internal(struct fb_info *info,
+ const struct fb_image *image)
+{
+ struct qxl_fbdev *qfbdev = info->par;
+ struct qxl_fb_image qxl_fb_image;
+
+ /* ensure proper order rendering operations - TODO: must do this
+ * for everything. */
+ qxl_fb_image_init(&qxl_fb_image, qfbdev->qdev, info, image);
+ qxl_fb_imageblit_safe(&qxl_fb_image);
+}
+
static void qxl_fb_imageblit(struct fb_info *info,
const struct fb_image *image)
{
struct qxl_fbdev *qfbdev = info->par;
struct qxl_device *qdev = qfbdev->qdev;
- struct qxl_fb_image qxl_fb_image;
if (!drm_can_sleep()) {
- /* we cannot do any ttm_bo allocation since that will fail on
- * ioremap_wc..__get_vm_area_node, so queue the work item
- * instead This can happen from printk inside an interrupt
- * context, i.e.: smp_apic_timer_interrupt..check_cpu_stall */
- qxl_io_log(qdev,
- "%s: TODO use RCU, mysterious locks with spin_lock\n",
- __func__);
+ qxl_fb_delayed_imageblit(qfbdev, image);
+ schedule_work(&qdev->fb_work);
return;
}
+ /* make sure any previous work is done */
+ flush_work(&qdev->fb_work);
+ qxl_fb_imageblit_internal(info, image);
+}
- /* ensure proper order of rendering operations - TODO: must do this
- * for everything. */
- qxl_fb_image_init(&qxl_fb_image, qfbdev->qdev, info, image);
- qxl_fb_imageblit_safe(&qxl_fb_image);
+static void qxl_fb_work(struct work_struct *work)
+{
+ struct qxl_device *qdev = container_of(work, struct qxl_device, fb_work);
+ unsigned long flags;
+ struct qxl_fb_op *entry, *tmp;
+ struct qxl_fbdev *qfbdev = qdev->mode_info.qfbdev;
+
+ /* since the irq context just adds entries to the end of the
+ list dropping the lock should be fine, as entry isn't modified
+ in the operation code */
+ spin_lock_irqsave(&qfbdev->delayed_ops_lock, flags);
+ list_for_each_entry_safe(entry, tmp, &qfbdev->delayed_ops, head) {
+ spin_unlock_irqrestore(&qfbdev->delayed_ops_lock, flags);
+ switch (entry->op_type) {
+ case QXL_FB_OP_FILLRECT:
+ qxl_fb_fillrect_internal(qfbdev->helper.fbdev, &entry->op.fr);
+ break;
+ case QXL_FB_OP_COPYAREA:
+ qxl_fb_copyarea_internal(qfbdev->helper.fbdev, &entry->op.ca);
+ break;
+ case QXL_FB_OP_IMAGEBLIT:
+ qxl_fb_imageblit_internal(qfbdev->helper.fbdev, &entry->op.ib);
+ break;
+ }
+ spin_lock_irqsave(&qfbdev->delayed_ops_lock, flags);
+ list_del(&entry->head);
+ kfree(entry);
+ }
+ spin_unlock_irqrestore(&qfbdev->delayed_ops_lock, flags);
}
int qxl_fb_init(struct qxl_device *qdev)
{
+ INIT_WORK(&qdev->fb_work, qxl_fb_work);
return 0;
}
@@ -536,7 +677,8 @@ int qxl_fbdev_init(struct qxl_device *qdev)
qfbdev->qdev = qdev;
qdev->mode_info.qfbdev = qfbdev;
qfbdev->helper.funcs = &qxl_fb_helper_funcs;
-
+ spin_lock_init(&qfbdev->delayed_ops_lock);
+ INIT_LIST_HEAD(&qfbdev->delayed_ops);
ret = drm_fb_helper_init(qdev->ddev, &qfbdev->helper,
qxl_num_crtc /* num_crtc - QXL supports just 1 */,
QXLFB_CONN_LIMIT);
diff --git a/drivers/gpu/drm/qxl/qxl_fence.c b/drivers/gpu/drm/qxl/qxl_fence.c
index 63c6715ad385..ae59e91cfb9a 100644
--- a/drivers/gpu/drm/qxl/qxl_fence.c
+++ b/drivers/gpu/drm/qxl/qxl_fence.c
@@ -49,17 +49,11 @@
For some reason every so often qxl hw fails to release, things go wrong.
*/
-
-
-int qxl_fence_add_release(struct qxl_fence *qfence, uint32_t rel_id)
+/* must be called with the fence lock held */
+void qxl_fence_add_release_locked(struct qxl_fence *qfence, uint32_t rel_id)
{
- struct qxl_bo *bo = container_of(qfence, struct qxl_bo, fence);
-
- spin_lock(&bo->tbo.bdev->fence_lock);
radix_tree_insert(&qfence->tree, rel_id, qfence);
qfence->num_active_releases++;
- spin_unlock(&bo->tbo.bdev->fence_lock);
- return 0;
}
int qxl_fence_remove_release(struct qxl_fence *qfence, uint32_t rel_id)
diff --git a/drivers/gpu/drm/qxl/qxl_gem.c b/drivers/gpu/drm/qxl/qxl_gem.c
index a235693aabba..25e1777fb0a2 100644
--- a/drivers/gpu/drm/qxl/qxl_gem.c
+++ b/drivers/gpu/drm/qxl/qxl_gem.c
@@ -55,7 +55,7 @@ int qxl_gem_object_create(struct qxl_device *qdev, int size,
/* At least align on page size */
if (alignment < PAGE_SIZE)
alignment = PAGE_SIZE;
- r = qxl_bo_create(qdev, size, kernel, initial_domain, surf, &qbo);
+ r = qxl_bo_create(qdev, size, kernel, false, initial_domain, surf, &qbo);
if (r) {
if (r != -ERESTARTSYS)
DRM_ERROR(
diff --git a/drivers/gpu/drm/qxl/qxl_image.c b/drivers/gpu/drm/qxl/qxl_image.c
index cf856206996b..7fbcc35e8ad3 100644
--- a/drivers/gpu/drm/qxl/qxl_image.c
+++ b/drivers/gpu/drm/qxl/qxl_image.c
@@ -30,31 +30,100 @@
#include "qxl_object.h"
static int
-qxl_image_create_helper(struct qxl_device *qdev,
+qxl_allocate_chunk(struct qxl_device *qdev,
+ struct qxl_release *release,
+ struct qxl_drm_image *image,
+ unsigned int chunk_size)
+{
+ struct qxl_drm_chunk *chunk;
+ int ret;
+
+ chunk = kmalloc(sizeof(struct qxl_drm_chunk), GFP_KERNEL);
+ if (!chunk)
+ return -ENOMEM;
+
+ ret = qxl_alloc_bo_reserved(qdev, release, chunk_size, &chunk->bo);
+ if (ret) {
+ kfree(chunk);
+ return ret;
+ }
+
+ list_add_tail(&chunk->head, &image->chunk_list);
+ return 0;
+}
+
+int
+qxl_image_alloc_objects(struct qxl_device *qdev,
struct qxl_release *release,
- struct qxl_bo **image_bo,
- const uint8_t *data,
- int width, int height,
- int depth, unsigned int hash,
- int stride)
+ struct qxl_drm_image **image_ptr,
+ int height, int stride)
+{
+ struct qxl_drm_image *image;
+ int ret;
+
+ image = kmalloc(sizeof(struct qxl_drm_image), GFP_KERNEL);
+ if (!image)
+ return -ENOMEM;
+
+ INIT_LIST_HEAD(&image->chunk_list);
+
+ ret = qxl_alloc_bo_reserved(qdev, release, sizeof(struct qxl_image), &image->bo);
+ if (ret) {
+ kfree(image);
+ return ret;
+ }
+
+ ret = qxl_allocate_chunk(qdev, release, image, sizeof(struct qxl_data_chunk) + stride * height);
+ if (ret) {
+ qxl_bo_unref(&image->bo);
+ kfree(image);
+ return ret;
+ }
+ *image_ptr = image;
+ return 0;
+}
+
+void qxl_image_free_objects(struct qxl_device *qdev, struct qxl_drm_image *dimage)
{
+ struct qxl_drm_chunk *chunk, *tmp;
+
+ list_for_each_entry_safe(chunk, tmp, &dimage->chunk_list, head) {
+ qxl_bo_unref(&chunk->bo);
+ kfree(chunk);
+ }
+
+ qxl_bo_unref(&dimage->bo);
+ kfree(dimage);
+}
+
+static int
+qxl_image_init_helper(struct qxl_device *qdev,
+ struct qxl_release *release,
+ struct qxl_drm_image *dimage,
+ const uint8_t *data,
+ int width, int height,
+ int depth, unsigned int hash,
+ int stride)
+{
+ struct qxl_drm_chunk *drv_chunk;
struct qxl_image *image;
struct qxl_data_chunk *chunk;
int i;
int chunk_stride;
int linesize = width * depth / 8;
- struct qxl_bo *chunk_bo;
- int ret;
+ struct qxl_bo *chunk_bo, *image_bo;
void *ptr;
/* Chunk */
/* FIXME: Check integer overflow */
/* TODO: variable number of chunks */
+
+ drv_chunk = list_first_entry(&dimage->chunk_list, struct qxl_drm_chunk, head);
+
+ chunk_bo = drv_chunk->bo;
chunk_stride = stride; /* TODO: should use linesize, but it renders
wrong (check the bitmaps are sent correctly
first) */
- ret = qxl_alloc_bo_reserved(qdev, sizeof(*chunk) + height * chunk_stride,
- &chunk_bo);
-
+
ptr = qxl_bo_kmap_atomic_page(qdev, chunk_bo, 0);
chunk = ptr;
chunk->data_size = height * chunk_stride;
@@ -102,7 +171,6 @@ qxl_image_create_helper(struct qxl_device *qdev,
while (remain > 0) {
page_base = out_offset & PAGE_MASK;
page_offset = offset_in_page(out_offset);
-
size = min((int)(PAGE_SIZE - page_offset), remain);
ptr = qxl_bo_kmap_atomic_page(qdev, chunk_bo, page_base);
@@ -116,14 +184,10 @@ qxl_image_create_helper(struct qxl_device *qdev,
}
}
}
-
-
qxl_bo_kunmap(chunk_bo);
- /* Image */
- ret = qxl_alloc_bo_reserved(qdev, sizeof(*image), image_bo);
-
- ptr = qxl_bo_kmap_atomic_page(qdev, *image_bo, 0);
+ image_bo = dimage->bo;
+ ptr = qxl_bo_kmap_atomic_page(qdev, image_bo, 0);
image = ptr;
image->descriptor.id = 0;
@@ -154,23 +218,20 @@ qxl_image_create_helper(struct qxl_device *qdev,
image->u.bitmap.stride = chunk_stride;
image->u.bitmap.palette = 0;
image->u.bitmap.data = qxl_bo_physical_address(qdev, chunk_bo, 0);
- qxl_release_add_res(qdev, release, chunk_bo);
- qxl_bo_unreserve(chunk_bo);
- qxl_bo_unref(&chunk_bo);
- qxl_bo_kunmap_atomic_page(qdev, *image_bo, ptr);
+ qxl_bo_kunmap_atomic_page(qdev, image_bo, ptr);
return 0;
}
-int qxl_image_create(struct qxl_device *qdev,
+int qxl_image_init(struct qxl_device *qdev,
struct qxl_release *release,
- struct qxl_bo **image_bo,
+ struct qxl_drm_image *dimage,
const uint8_t *data,
int x, int y, int width, int height,
int depth, int stride)
{
data += y * stride + x * (depth / 8);
- return qxl_image_create_helper(qdev, release, image_bo, data,
+ return qxl_image_init_helper(qdev, release, dimage, data,
width, height, depth, 0, stride);
}
diff --git a/drivers/gpu/drm/qxl/qxl_ioctl.c b/drivers/gpu/drm/qxl/qxl_ioctl.c
index 27f45e49250d..6de33563d6f1 100644
--- a/drivers/gpu/drm/qxl/qxl_ioctl.c
+++ b/drivers/gpu/drm/qxl/qxl_ioctl.c
@@ -68,55 +68,60 @@ static int qxl_map_ioctl(struct drm_device *dev, void *data,
&qxl_map->offset);
}
+struct qxl_reloc_info {
+ int type;
+ struct qxl_bo *dst_bo;
+ uint32_t dst_offset;
+ struct qxl_bo *src_bo;
+ int src_offset;
+};
+
/*
* dst must be validated, i.e. whole bo on vram/surfacesram (right now all bo's
* are on vram).
* *(dst + dst_off) = qxl_bo_physical_address(src, src_off)
*/
static void
-apply_reloc(struct qxl_device *qdev, struct qxl_bo *dst, uint64_t dst_off,
- struct qxl_bo *src, uint64_t src_off)
+apply_reloc(struct qxl_device *qdev, struct qxl_reloc_info *info)
{
void *reloc_page;
-
- reloc_page = qxl_bo_kmap_atomic_page(qdev, dst, dst_off & PAGE_MASK);
- *(uint64_t *)(reloc_page + (dst_off & ~PAGE_MASK)) = qxl_bo_physical_address(qdev,
- src, src_off);
- qxl_bo_kunmap_atomic_page(qdev, dst, reloc_page);
+ reloc_page = qxl_bo_kmap_atomic_page(qdev, info->dst_bo, info->dst_offset & PAGE_MASK);
+ *(uint64_t *)(reloc_page + (info->dst_offset & ~PAGE_MASK)) = qxl_bo_physical_address(qdev,
+ info->src_bo,
+ info->src_offset);
+ qxl_bo_kunmap_atomic_page(qdev, info->dst_bo, reloc_page);
}
static void
-apply_surf_reloc(struct qxl_device *qdev, struct qxl_bo *dst, uint64_t dst_off,
- struct qxl_bo *src)
+apply_surf_reloc(struct qxl_device *qdev, struct qxl_reloc_info *info)
{
uint32_t id = 0;
void *reloc_page;
- if (src && !src->is_primary)
- id = src->surface_id;
+ if (info->src_bo && !info->src_bo->is_primary)
+ id = info->src_bo->surface_id;
- reloc_page = qxl_bo_kmap_atomic_page(qdev, dst, dst_off & PAGE_MASK);
- *(uint32_t *)(reloc_page + (dst_off & ~PAGE_MASK)) = id;
- qxl_bo_kunmap_atomic_page(qdev, dst, reloc_page);
+ reloc_page = qxl_bo_kmap_atomic_page(qdev, info->dst_bo, info->dst_offset & PAGE_MASK);
+ *(uint32_t *)(reloc_page + (info->dst_offset & ~PAGE_MASK)) = id;
+ qxl_bo_kunmap_atomic_page(qdev, info->dst_bo, reloc_page);
}
/* return holding the reference to this object */
static struct qxl_bo *qxlhw_handle_to_bo(struct qxl_device *qdev,
struct drm_file *file_priv, uint64_t handle,
- struct qxl_reloc_list *reloc_list)
+ struct qxl_release *release)
{
struct drm_gem_object *gobj;
struct qxl_bo *qobj;
int ret;
gobj = drm_gem_object_lookup(qdev->ddev, file_priv, handle);
- if (!gobj) {
- DRM_ERROR("bad bo handle %lld\n", handle);
+ if (!gobj)
return NULL;
- }
+
qobj = gem_to_qxl_bo(gobj);
- ret = qxl_bo_list_add(reloc_list, qobj);
+ ret = qxl_release_list_add(release, qobj);
if (ret)
return NULL;
@@ -129,151 +134,177 @@ static struct qxl_bo *qxlhw_handle_to_bo(struct qxl_device *qdev,
* However, the command as passed from user space must *not* contain the initial
* QXLReleaseInfo struct (first XXX bytes)
*/
-static int qxl_execbuffer_ioctl(struct drm_device *dev, void *data,
- struct drm_file *file_priv)
+static int qxl_process_single_command(struct qxl_device *qdev,
+ struct drm_qxl_command *cmd,
+ struct drm_file *file_priv)
{
- struct qxl_device *qdev = dev->dev_private;
- struct drm_qxl_execbuffer *execbuffer = data;
- struct drm_qxl_command user_cmd;
- int cmd_num;
- struct qxl_bo *reloc_src_bo;
- struct qxl_bo *reloc_dst_bo;
- struct drm_qxl_reloc reloc;
+ struct qxl_reloc_info *reloc_info;
+ int release_type;
+ struct qxl_release *release;
+ struct qxl_bo *cmd_bo;
void *fb_cmd;
- int i, ret;
- struct qxl_reloc_list reloc_list;
+ int i, j, ret, num_relocs;
int unwritten;
- uint32_t reloc_dst_offset;
- INIT_LIST_HEAD(&reloc_list.bos);
- for (cmd_num = 0; cmd_num < execbuffer->commands_num; ++cmd_num) {
- struct qxl_release *release;
- struct qxl_bo *cmd_bo;
- int release_type;
- struct drm_qxl_command *commands =
- (struct drm_qxl_command *)(uintptr_t)execbuffer->commands;
+ switch (cmd->type) {
+ case QXL_CMD_DRAW:
+ release_type = QXL_RELEASE_DRAWABLE;
+ break;
+ case QXL_CMD_SURFACE:
+ case QXL_CMD_CURSOR:
+ default:
+ DRM_DEBUG("Only draw commands in execbuffers\n");
+ return -EINVAL;
+ break;
+ }
- if (DRM_COPY_FROM_USER(&user_cmd, &commands[cmd_num],
- sizeof(user_cmd)))
- return -EFAULT;
- switch (user_cmd.type) {
- case QXL_CMD_DRAW:
- release_type = QXL_RELEASE_DRAWABLE;
- break;
- case QXL_CMD_SURFACE:
- case QXL_CMD_CURSOR:
- default:
- DRM_DEBUG("Only draw commands in execbuffers\n");
- return -EINVAL;
- break;
- }
+ if (cmd->command_size > PAGE_SIZE - sizeof(union qxl_release_info))
+ return -EINVAL;
- if (user_cmd.command_size > PAGE_SIZE - sizeof(union qxl_release_info))
- return -EINVAL;
+ if (!access_ok(VERIFY_READ,
+ (void *)(unsigned long)cmd->command,
+ cmd->command_size))
+ return -EFAULT;
- if (!access_ok(VERIFY_READ,
- (void *)(unsigned long)user_cmd.command,
- user_cmd.command_size))
- return -EFAULT;
+ reloc_info = kmalloc(sizeof(struct qxl_reloc_info) * cmd->relocs_num, GFP_KERNEL);
+ if (!reloc_info)
+ return -ENOMEM;
- ret = qxl_alloc_release_reserved(qdev,
- sizeof(union qxl_release_info) +
- user_cmd.command_size,
- release_type,
- &release,
- &cmd_bo);
- if (ret)
- return ret;
+ ret = qxl_alloc_release_reserved(qdev,
+ sizeof(union qxl_release_info) +
+ cmd->command_size,
+ release_type,
+ &release,
+ &cmd_bo);
+ if (ret)
+ goto out_free_reloc;
- /* TODO copy slow path code from i915 */
- fb_cmd = qxl_bo_kmap_atomic_page(qdev, cmd_bo, (release->release_offset & PAGE_SIZE));
- unwritten = __copy_from_user_inatomic_nocache(fb_cmd + sizeof(union qxl_release_info) + (release->release_offset & ~PAGE_SIZE), (void *)(unsigned long)user_cmd.command, user_cmd.command_size);
+ /* TODO copy slow path code from i915 */
+ fb_cmd = qxl_bo_kmap_atomic_page(qdev, cmd_bo, (release->release_offset & PAGE_SIZE));
+ unwritten = __copy_from_user_inatomic_nocache(fb_cmd + sizeof(union qxl_release_info) + (release->release_offset & ~PAGE_SIZE), (void *)(unsigned long)cmd->command, cmd->command_size);
- {
- struct qxl_drawable *draw = fb_cmd;
+ {
+ struct qxl_drawable *draw = fb_cmd;
+ draw->mm_time = qdev->rom->mm_clock;
+ }
- draw->mm_time = qdev->rom->mm_clock;
- }
- qxl_bo_kunmap_atomic_page(qdev, cmd_bo, fb_cmd);
- if (unwritten) {
- DRM_ERROR("got unwritten %d\n", unwritten);
- qxl_release_unreserve(qdev, release);
- qxl_release_free(qdev, release);
- return -EFAULT;
+ qxl_bo_kunmap_atomic_page(qdev, cmd_bo, fb_cmd);
+ if (unwritten) {
+ DRM_ERROR("got unwritten %d\n", unwritten);
+ ret = -EFAULT;
+ goto out_free_release;
+ }
+
+ /* fill out reloc info structs */
+ num_relocs = 0;
+ for (i = 0; i < cmd->relocs_num; ++i) {
+ struct drm_qxl_reloc reloc;
+
+ if (DRM_COPY_FROM_USER(&reloc,
+ &((struct drm_qxl_reloc *)(uintptr_t)cmd->relocs)[i],
+ sizeof(reloc))) {
+ ret = -EFAULT;
+ goto out_free_bos;
}
- for (i = 0 ; i < user_cmd.relocs_num; ++i) {
- if (DRM_COPY_FROM_USER(&reloc,
- &((struct drm_qxl_reloc *)(uintptr_t)user_cmd.relocs)[i],
- sizeof(reloc))) {
- qxl_bo_list_unreserve(&reloc_list, true);
- qxl_release_unreserve(qdev, release);
- qxl_release_free(qdev, release);
- return -EFAULT;
- }
+ /* add the bos to the list of bos to validate -
+ need to validate first then process relocs? */
+ if (reloc.reloc_type != QXL_RELOC_TYPE_BO && reloc.reloc_type != QXL_RELOC_TYPE_SURF) {
+ DRM_DEBUG("unknown reloc type %d\n", reloc_info[i].type);
- /* add the bos to the list of bos to validate -
- need to validate first then process relocs? */
- if (reloc.dst_handle) {
- reloc_dst_bo = qxlhw_handle_to_bo(qdev, file_priv,
- reloc.dst_handle, &reloc_list);
- if (!reloc_dst_bo) {
- qxl_bo_list_unreserve(&reloc_list, true);
- qxl_release_unreserve(qdev, release);
- qxl_release_free(qdev, release);
- return -EINVAL;
- }
- reloc_dst_offset = 0;
- } else {
- reloc_dst_bo = cmd_bo;
- reloc_dst_offset = release->release_offset;
+ ret = -EINVAL;
+ goto out_free_bos;
+ }
+ reloc_info[i].type = reloc.reloc_type;
+
+ if (reloc.dst_handle) {
+ reloc_info[i].dst_bo = qxlhw_handle_to_bo(qdev, file_priv,
+ reloc.dst_handle, release);
+ if (!reloc_info[i].dst_bo) {
+ ret = -EINVAL;
+ reloc_info[i].src_bo = NULL;
+ goto out_free_bos;
}
-
- /* reserve and validate the reloc dst bo */
- if (reloc.reloc_type == QXL_RELOC_TYPE_BO || reloc.src_handle > 0) {
- reloc_src_bo =
- qxlhw_handle_to_bo(qdev, file_priv,
- reloc.src_handle, &reloc_list);
- if (!reloc_src_bo) {
- if (reloc_dst_bo != cmd_bo)
- drm_gem_object_unreference_unlocked(&reloc_dst_bo->gem_base);
- qxl_bo_list_unreserve(&reloc_list, true);
- qxl_release_unreserve(qdev, release);
- qxl_release_free(qdev, release);
- return -EINVAL;
- }
- } else
- reloc_src_bo = NULL;
- if (reloc.reloc_type == QXL_RELOC_TYPE_BO) {
- apply_reloc(qdev, reloc_dst_bo, reloc_dst_offset + reloc.dst_offset,
- reloc_src_bo, reloc.src_offset);
- } else if (reloc.reloc_type == QXL_RELOC_TYPE_SURF) {
- apply_surf_reloc(qdev, reloc_dst_bo, reloc_dst_offset + reloc.dst_offset, reloc_src_bo);
- } else {
- DRM_ERROR("unknown reloc type %d\n", reloc.reloc_type);
- return -EINVAL;
+ reloc_info[i].dst_offset = reloc.dst_offset;
+ } else {
+ reloc_info[i].dst_bo = cmd_bo;
+ reloc_info[i].dst_offset = reloc.dst_offset + release->release_offset;
+ }
+ num_relocs++;
+
+ /* reserve and validate the reloc dst bo */
+ if (reloc.reloc_type == QXL_RELOC_TYPE_BO || reloc.src_handle > 0) {
+ reloc_info[i].src_bo =
+ qxlhw_handle_to_bo(qdev, file_priv,
+ reloc.src_handle, release);
+ if (!reloc_info[i].src_bo) {
+ if (reloc_info[i].dst_bo != cmd_bo)
+ drm_gem_object_unreference_unlocked(&reloc_info[i].dst_bo->gem_base);
+ ret = -EINVAL;
+ goto out_free_bos;
}
+ reloc_info[i].src_offset = reloc.src_offset;
+ } else {
+ reloc_info[i].src_bo = NULL;
+ reloc_info[i].src_offset = 0;
+ }
+ }
- if (reloc_src_bo && reloc_src_bo != cmd_bo) {
- qxl_release_add_res(qdev, release, reloc_src_bo);
- drm_gem_object_unreference_unlocked(&reloc_src_bo->gem_base);
- }
+ /* validate all buffers */
+ ret = qxl_release_reserve_list(release, false);
+ if (ret)
+ goto out_free_bos;
- if (reloc_dst_bo != cmd_bo)
- drm_gem_object_unreference_unlocked(&reloc_dst_bo->gem_base);
- }
- qxl_fence_releaseable(qdev, release);
+ for (i = 0; i < cmd->relocs_num; ++i) {
+ if (reloc_info[i].type == QXL_RELOC_TYPE_BO)
+ apply_reloc(qdev, &reloc_info[i]);
+ else if (reloc_info[i].type == QXL_RELOC_TYPE_SURF)
+ apply_surf_reloc(qdev, &reloc_info[i]);
+ }
- ret = qxl_push_command_ring_release(qdev, release, user_cmd.type, true);
- if (ret == -ERESTARTSYS) {
- qxl_release_unreserve(qdev, release);
- qxl_release_free(qdev, release);
- qxl_bo_list_unreserve(&reloc_list, true);
+ ret = qxl_push_command_ring_release(qdev, release, cmd->type, true);
+ if (ret)
+ qxl_release_backoff_reserve_list(release);
+ else
+ qxl_release_fence_buffer_objects(release);
+
+out_free_bos:
+ for (j = 0; j < num_relocs; j++) {
+ if (reloc_info[j].dst_bo != cmd_bo)
+ drm_gem_object_unreference_unlocked(&reloc_info[j].dst_bo->gem_base);
+ if (reloc_info[j].src_bo && reloc_info[j].src_bo != cmd_bo)
+ drm_gem_object_unreference_unlocked(&reloc_info[j].src_bo->gem_base);
+ }
+out_free_release:
+ if (ret)
+ qxl_release_free(qdev, release);
+out_free_reloc:
+ kfree(reloc_info);
+ return ret;
+}
+
+static int qxl_execbuffer_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct qxl_device *qdev = dev->dev_private;
+ struct drm_qxl_execbuffer *execbuffer = data;
+ struct drm_qxl_command user_cmd;
+ int cmd_num;
+ int ret;
+
+ for (cmd_num = 0; cmd_num < execbuffer->commands_num; ++cmd_num) {
+
+ struct drm_qxl_command *commands =
+ (struct drm_qxl_command *)(uintptr_t)execbuffer->commands;
+
+ if (DRM_COPY_FROM_USER(&user_cmd, &commands[cmd_num],
+ sizeof(user_cmd)))
+ return -EFAULT;
+
+ ret = qxl_process_single_command(qdev, &user_cmd, file_priv);
+ if (ret)
return ret;
- }
- qxl_release_unreserve(qdev, release);
}
- qxl_bo_list_unreserve(&reloc_list, 0);
return 0;
}
@@ -305,7 +336,7 @@ static int qxl_update_area_ioctl(struct drm_device *dev, void *data,
goto out;
if (!qobj->pin_count) {
- qxl_ttm_placement_from_domain(qobj, qobj->type);
+ qxl_ttm_placement_from_domain(qobj, qobj->type, false);
ret = ttm_bo_validate(&qobj->tbo, &qobj->placement,
true, false);
if (unlikely(ret))
diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
index 1191fe7788c9..aa161cddd87e 100644
--- a/drivers/gpu/drm/qxl/qxl_object.c
+++ b/drivers/gpu/drm/qxl/qxl_object.c
@@ -51,20 +51,21 @@ bool qxl_ttm_bo_is_qxl_bo(struct ttm_buffer_object *bo)
return false;
}
-void qxl_ttm_placement_from_domain(struct qxl_bo *qbo, u32 domain)
+void qxl_ttm_placement_from_domain(struct qxl_bo *qbo, u32 domain, bool pinned)
{
u32 c = 0;
+ u32 pflag = pinned ? TTM_PL_FLAG_NO_EVICT : 0;
qbo->placement.fpfn = 0;
qbo->placement.lpfn = 0;
qbo->placement.placement = qbo->placements;
qbo->placement.busy_placement = qbo->placements;
if (domain == QXL_GEM_DOMAIN_VRAM)
- qbo->placements[c++] = TTM_PL_FLAG_CACHED | TTM_PL_FLAG_VRAM;
+ qbo->placements[c++] = TTM_PL_FLAG_CACHED | TTM_PL_FLAG_VRAM | pflag;
if (domain == QXL_GEM_DOMAIN_SURFACE)
- qbo->placements[c++] = TTM_PL_FLAG_CACHED | TTM_PL_FLAG_PRIV0;
+ qbo->placements[c++] = TTM_PL_FLAG_CACHED | TTM_PL_FLAG_PRIV0 | pflag;
if (domain == QXL_GEM_DOMAIN_CPU)
- qbo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM;
+ qbo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM | pflag;
if (!c)
qbo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM;
qbo->placement.num_placement = c;
@@ -73,7 +74,7 @@ void qxl_ttm_placement_from_domain(struct qxl_bo *qbo, u32 domain)
int qxl_bo_create(struct qxl_device *qdev,
- unsigned long size, bool kernel, u32 domain,
+ unsigned long size, bool kernel, bool pinned, u32 domain,
struct qxl_surface *surf,
struct qxl_bo **bo_ptr)
{
@@ -99,15 +100,15 @@ int qxl_bo_create(struct qxl_device *qdev,
}
bo->gem_base.driver_private = NULL;
bo->type = domain;
- bo->pin_count = 0;
+ bo->pin_count = pinned ? 1 : 0;
bo->surface_id = 0;
qxl_fence_init(qdev, &bo->fence);
INIT_LIST_HEAD(&bo->list);
- atomic_set(&bo->reserve_count, 0);
+
if (surf)
bo->surf = *surf;
- qxl_ttm_placement_from_domain(bo, domain);
+ qxl_ttm_placement_from_domain(bo, domain, pinned);
r = ttm_bo_init(&qdev->mman.bdev, &bo->tbo, size, type,
&bo->placement, 0, !kernel, NULL, size,
@@ -228,7 +229,7 @@ struct qxl_bo *qxl_bo_ref(struct qxl_bo *bo)
int qxl_bo_pin(struct qxl_bo *bo, u32 domain, u64 *gpu_addr)
{
struct qxl_device *qdev = (struct qxl_device *)bo->gem_base.dev->dev_private;
- int r, i;
+ int r;
if (bo->pin_count) {
bo->pin_count++;
@@ -236,9 +237,7 @@ int qxl_bo_pin(struct qxl_bo *bo, u32 domain, u64 *gpu_addr)
*gpu_addr = qxl_bo_gpu_offset(bo);
return 0;
}
- qxl_ttm_placement_from_domain(bo, domain);
- for (i = 0; i < bo->placement.num_placement; i++)
- bo->placements[i] |= TTM_PL_FLAG_NO_EVICT;
+ qxl_ttm_placement_from_domain(bo, domain, true);
r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false);
if (likely(r == 0)) {
bo->pin_count = 1;
@@ -317,53 +316,6 @@ int qxl_bo_check_id(struct qxl_device *qdev, struct qxl_bo *bo)
return 0;
}
-void qxl_bo_list_unreserve(struct qxl_reloc_list *reloc_list, bool failed)
-{
- struct qxl_bo_list *entry, *sf;
-
- list_for_each_entry_safe(entry, sf, &reloc_list->bos, lhead) {
- qxl_bo_unreserve(entry->bo);
- list_del(&entry->lhead);
- kfree(entry);
- }
-}
-
-int qxl_bo_list_add(struct qxl_reloc_list *reloc_list, struct qxl_bo *bo)
-{
- struct qxl_bo_list *entry;
- int ret;
-
- list_for_each_entry(entry, &reloc_list->bos, lhead) {
- if (entry->bo == bo)
- return 0;
- }
-
- entry = kmalloc(sizeof(struct qxl_bo_list), GFP_KERNEL);
- if (!entry)
- return -ENOMEM;
-
- entry->bo = bo;
- list_add(&entry->lhead, &reloc_list->bos);
-
- ret = qxl_bo_reserve(bo, false);
- if (ret)
- return ret;
-
- if (!bo->pin_count) {
- qxl_ttm_placement_from_domain(bo, bo->type);
- ret = ttm_bo_validate(&bo->tbo, &bo->placement,
- true, false);
- if (ret)
- return ret;
- }
-
- /* allocate a surface for reserved + validated buffers */
- ret = qxl_bo_check_id(bo->gem_base.dev->dev_private, bo);
- if (ret)
- return ret;
- return 0;
-}
-
int qxl_surf_evict(struct qxl_device *qdev)
{
return ttm_bo_evict_mm(&qdev->mman.bdev, TTM_PL_PRIV0);
diff --git a/drivers/gpu/drm/qxl/qxl_object.h b/drivers/gpu/drm/qxl/qxl_object.h
index ee7ad79ce781..8cb6167038e5 100644
--- a/drivers/gpu/drm/qxl/qxl_object.h
+++ b/drivers/gpu/drm/qxl/qxl_object.h
@@ -88,7 +88,7 @@ static inline int qxl_bo_wait(struct qxl_bo *bo, u32 *mem_type,
extern int qxl_bo_create(struct qxl_device *qdev,
unsigned long size,
- bool kernel, u32 domain,
+ bool kernel, bool pinned, u32 domain,
struct qxl_surface *surf,
struct qxl_bo **bo_ptr);
extern int qxl_bo_kmap(struct qxl_bo *bo, void **ptr);
@@ -99,9 +99,7 @@ extern struct qxl_bo *qxl_bo_ref(struct qxl_bo *bo);
extern void qxl_bo_unref(struct qxl_bo **bo);
extern int qxl_bo_pin(struct qxl_bo *bo, u32 domain, u64 *gpu_addr);
extern int qxl_bo_unpin(struct qxl_bo *bo);
-extern void qxl_ttm_placement_from_domain(struct qxl_bo *qbo, u32 domain);
+extern void qxl_ttm_placement_from_domain(struct qxl_bo *qbo, u32 domain, bool pinned);
extern bool qxl_ttm_bo_is_qxl_bo(struct ttm_buffer_object *bo);
-extern int qxl_bo_list_add(struct qxl_reloc_list *reloc_list, struct qxl_bo *bo);
-extern void qxl_bo_list_unreserve(struct qxl_reloc_list *reloc_list, bool failed);
#endif
diff --git a/drivers/gpu/drm/qxl/qxl_release.c b/drivers/gpu/drm/qxl/qxl_release.c
index b443d6751d5f..b61449e52cd5 100644
--- a/drivers/gpu/drm/qxl/qxl_release.c
+++ b/drivers/gpu/drm/qxl/qxl_release.c
@@ -38,7 +38,8 @@
static const int release_size_per_bo[] = { RELEASE_SIZE, SURFACE_RELEASE_SIZE, RELEASE_SIZE };
static const int releases_per_bo[] = { RELEASES_PER_BO, SURFACE_RELEASES_PER_BO, RELEASES_PER_BO };
-uint64_t
+
+static uint64_t
qxl_release_alloc(struct qxl_device *qdev, int type,
struct qxl_release **ret)
{
@@ -53,9 +54,9 @@ qxl_release_alloc(struct qxl_device *qdev, int type,
return 0;
}
release->type = type;
- release->bo_count = 0;
release->release_offset = 0;
release->surface_release_id = 0;
+ INIT_LIST_HEAD(&release->bos);
idr_preload(GFP_KERNEL);
spin_lock(&qdev->release_idr_lock);
@@ -77,20 +78,20 @@ void
qxl_release_free(struct qxl_device *qdev,
struct qxl_release *release)
{
- int i;
-
- QXL_INFO(qdev, "release %d, type %d, %d bos\n", release->id,
- release->type, release->bo_count);
+ struct qxl_bo_list *entry, *tmp;
+ QXL_INFO(qdev, "release %d, type %d\n", release->id,
+ release->type);
if (release->surface_release_id)
qxl_surface_id_dealloc(qdev, release->surface_release_id);
- for (i = 0 ; i < release->bo_count; ++i) {
+ list_for_each_entry_safe(entry, tmp, &release->bos, tv.head) {
+ struct qxl_bo *bo = to_qxl_bo(entry->tv.bo);
QXL_INFO(qdev, "release %llx\n",
- release->bos[i]->tbo.addr_space_offset
+ entry->tv.bo->addr_space_offset
- DRM_FILE_OFFSET);
- qxl_fence_remove_release(&release->bos[i]->fence, release->id);
- qxl_bo_unref(&release->bos[i]);
+ qxl_fence_remove_release(&bo->fence, release->id);
+ qxl_bo_unref(&bo);
}
spin_lock(&qdev->release_idr_lock);
idr_remove(&qdev->release_idr, release->id);
@@ -98,83 +99,117 @@ qxl_release_free(struct qxl_device *qdev,
kfree(release);
}
-void
-qxl_release_add_res(struct qxl_device *qdev, struct qxl_release *release,
- struct qxl_bo *bo)
-{
- int i;
- for (i = 0; i < release->bo_count; i++)
- if (release->bos[i] == bo)
- return;
-
- if (release->bo_count >= QXL_MAX_RES) {
- DRM_ERROR("exceeded max resource on a qxl_release item\n");
- return;
- }
- release->bos[release->bo_count++] = qxl_bo_ref(bo);
-}
-
static int qxl_release_bo_alloc(struct qxl_device *qdev,
struct qxl_bo **bo)
{
int ret;
- ret = qxl_bo_create(qdev, PAGE_SIZE, false, QXL_GEM_DOMAIN_VRAM, NULL,
+ /* pin releases bo's they are too messy to evict */
+ ret = qxl_bo_create(qdev, PAGE_SIZE, false, true,
+ QXL_GEM_DOMAIN_VRAM, NULL,
bo);
return ret;
}
-int qxl_release_reserve(struct qxl_device *qdev,
- struct qxl_release *release, bool no_wait)
+int qxl_release_list_add(struct qxl_release *release, struct qxl_bo *bo)
+{
+ struct qxl_bo_list *entry;
+
+ list_for_each_entry(entry, &release->bos, tv.head) {
+ if (entry->tv.bo == &bo->tbo)
+ return 0;
+ }
+
+ entry = kmalloc(sizeof(struct qxl_bo_list), GFP_KERNEL);
+ if (!entry)
+ return -ENOMEM;
+
+ qxl_bo_ref(bo);
+ entry->tv.bo = &bo->tbo;
+ list_add_tail(&entry->tv.head, &release->bos);
+ return 0;
+}
+
+static int qxl_release_validate_bo(struct qxl_bo *bo)
{
int ret;
- if (atomic_inc_return(&release->bos[0]->reserve_count) == 1) {
- ret = qxl_bo_reserve(release->bos[0], no_wait);
+
+ if (!bo->pin_count) {
+ qxl_ttm_placement_from_domain(bo, bo->type, false);
+ ret = ttm_bo_validate(&bo->tbo, &bo->placement,
+ true, false);
if (ret)
return ret;
}
+
+ /* allocate a surface for reserved + validated buffers */
+ ret = qxl_bo_check_id(bo->gem_base.dev->dev_private, bo);
+ if (ret)
+ return ret;
+ return 0;
+}
+
+int qxl_release_reserve_list(struct qxl_release *release, bool no_intr)
+{
+ int ret;
+ struct qxl_bo_list *entry;
+
+ /* if only one object on the release its the release itself
+ since these objects are pinned no need to reserve */
+ if (list_is_singular(&release->bos))
+ return 0;
+
+ ret = ttm_eu_reserve_buffers(&release->ticket, &release->bos);
+ if (ret)
+ return ret;
+
+ list_for_each_entry(entry, &release->bos, tv.head) {
+ struct qxl_bo *bo = to_qxl_bo(entry->tv.bo);
+
+ ret = qxl_release_validate_bo(bo);
+ if (ret) {
+ ttm_eu_backoff_reservation(&release->ticket, &release->bos);
+ return ret;
+ }
+ }
return 0;
}
-void qxl_release_unreserve(struct qxl_device *qdev,
- struct qxl_release *release)
+void qxl_release_backoff_reserve_list(struct qxl_release *release)
{
- if (atomic_dec_and_test(&release->bos[0]->reserve_count))
- qxl_bo_unreserve(release->bos[0]);
+ /* if only one object on the release its the release itself
+ since these objects are pinned no need to reserve */
+ if (list_is_singular(&release->bos))
+ return;
+
+ ttm_eu_backoff_reservation(&release->ticket, &release->bos);
}
+
int qxl_alloc_surface_release_reserved(struct qxl_device *qdev,
enum qxl_surface_cmd_type surface_cmd_type,
struct qxl_release *create_rel,
struct qxl_release **release)
{
- int ret;
-
if (surface_cmd_type == QXL_SURFACE_CMD_DESTROY && create_rel) {
int idr_ret;
+ struct qxl_bo_list *entry = list_first_entry(&create_rel->bos, struct qxl_bo_list, tv.head);
struct qxl_bo *bo;
union qxl_release_info *info;
/* stash the release after the create command */
idr_ret = qxl_release_alloc(qdev, QXL_RELEASE_SURFACE_CMD, release);
- bo = qxl_bo_ref(create_rel->bos[0]);
+ bo = qxl_bo_ref(to_qxl_bo(entry->tv.bo));
(*release)->release_offset = create_rel->release_offset + 64;
- qxl_release_add_res(qdev, *release, bo);
+ qxl_release_list_add(*release, bo);
- ret = qxl_release_reserve(qdev, *release, false);
- if (ret) {
- DRM_ERROR("release reserve failed\n");
- goto out_unref;
- }
info = qxl_release_map(qdev, *release);
info->id = idr_ret;
qxl_release_unmap(qdev, *release, info);
-
-out_unref:
qxl_bo_unref(&bo);
- return ret;
+ return 0;
}
return qxl_alloc_release_reserved(qdev, sizeof(struct qxl_surface_cmd),
@@ -187,7 +222,7 @@ int qxl_alloc_release_reserved(struct qxl_device *qdev, unsigned long size,
{
struct qxl_bo *bo;
int idr_ret;
- int ret;
+ int ret = 0;
union qxl_release_info *info;
int cur_idx;
@@ -216,11 +251,6 @@ int qxl_alloc_release_reserved(struct qxl_device *qdev, unsigned long size,
mutex_unlock(&qdev->release_mutex);
return ret;
}
-
- /* pin releases bo's they are too messy to evict */
- ret = qxl_bo_reserve(qdev->current_release_bo[cur_idx], false);
- qxl_bo_pin(qdev->current_release_bo[cur_idx], QXL_GEM_DOMAIN_VRAM, NULL);
- qxl_bo_unreserve(qdev->current_release_bo[cur_idx]);
}
bo = qxl_bo_ref(qdev->current_release_bo[cur_idx]);
@@ -231,36 +261,18 @@ int qxl_alloc_release_reserved(struct qxl_device *qdev, unsigned long size,
if (rbo)
*rbo = bo;
- qxl_release_add_res(qdev, *release, bo);
-
- ret = qxl_release_reserve(qdev, *release, false);
mutex_unlock(&qdev->release_mutex);
- if (ret)
- goto out_unref;
+
+ qxl_release_list_add(*release, bo);
info = qxl_release_map(qdev, *release);
info->id = idr_ret;
qxl_release_unmap(qdev, *release, info);
-out_unref:
qxl_bo_unref(&bo);
return ret;
}
-int qxl_fence_releaseable(struct qxl_device *qdev,
- struct qxl_release *release)
-{
- int i, ret;
- for (i = 0; i < release->bo_count; i++) {
- if (!release->bos[i]->tbo.sync_obj)
- release->bos[i]->tbo.sync_obj = &release->bos[i]->fence;
- ret = qxl_fence_add_release(&release->bos[i]->fence, release->id);
- if (ret)
- return ret;
- }
- return 0;
-}
-
struct qxl_release *qxl_release_from_id_locked(struct qxl_device *qdev,
uint64_t id)
{
@@ -273,10 +285,7 @@ struct qxl_release *qxl_release_from_id_locked(struct qxl_device *qdev,
DRM_ERROR("failed to find id in release_idr\n");
return NULL;
}
- if (release->bo_count < 1) {
- DRM_ERROR("read a released resource with 0 bos\n");
- return NULL;
- }
+
return release;
}
@@ -285,9 +294,12 @@ union qxl_release_info *qxl_release_map(struct qxl_device *qdev,
{
void *ptr;
union qxl_release_info *info;
- struct qxl_bo *bo = release->bos[0];
+ struct qxl_bo_list *entry = list_first_entry(&release->bos, struct qxl_bo_list, tv.head);
+ struct qxl_bo *bo = to_qxl_bo(entry->tv.bo);
ptr = qxl_bo_kmap_atomic_page(qdev, bo, release->release_offset & PAGE_SIZE);
+ if (!ptr)
+ return NULL;
info = ptr + (release->release_offset & ~PAGE_SIZE);
return info;
}
@@ -296,9 +308,51 @@ void qxl_release_unmap(struct qxl_device *qdev,
struct qxl_release *release,
union qxl_release_info *info)
{
- struct qxl_bo *bo = release->bos[0];
+ struct qxl_bo_list *entry = list_first_entry(&release->bos, struct qxl_bo_list, tv.head);
+ struct qxl_bo *bo = to_qxl_bo(entry->tv.bo);
void *ptr;
ptr = ((void *)info) - (release->release_offset & ~PAGE_SIZE);
qxl_bo_kunmap_atomic_page(qdev, bo, ptr);
}
+
+void qxl_release_fence_buffer_objects(struct qxl_release *release)
+{
+ struct ttm_validate_buffer *entry;
+ struct ttm_buffer_object *bo;
+ struct ttm_bo_global *glob;
+ struct ttm_bo_device *bdev;
+ struct ttm_bo_driver *driver;
+ struct qxl_bo *qbo;
+
+ /* if only one object on the release its the release itself
+ since these objects are pinned no need to reserve */
+ if (list_is_singular(&release->bos))
+ return;
+
+ bo = list_first_entry(&release->bos, struct ttm_validate_buffer, head)->bo;
+ bdev = bo->bdev;
+ driver = bdev->driver;
+ glob = bo->glob;
+
+ spin_lock(&glob->lru_lock);
+ spin_lock(&bdev->fence_lock);
+
+ list_for_each_entry(entry, &release->bos, head) {
+ bo = entry->bo;
+ qbo = to_qxl_bo(bo);
+
+ if (!entry->bo->sync_obj)
+ entry->bo->sync_obj = &qbo->fence;
+
+ qxl_fence_add_release_locked(&qbo->fence, release->id);
+
+ ttm_bo_add_to_lru(bo);
+ ww_mutex_unlock(&bo->resv->lock);
+ entry->reserved = false;
+ }
+ spin_unlock(&bdev->fence_lock);
+ spin_unlock(&glob->lru_lock);
+ ww_acquire_fini(&release->ticket);
+}
+
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
index 489cb8cece4d..1dfd84cda2a1 100644
--- a/drivers/gpu/drm/qxl/qxl_ttm.c
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
@@ -206,7 +206,7 @@ static void qxl_evict_flags(struct ttm_buffer_object *bo,
return;
}
qbo = container_of(bo, struct qxl_bo, tbo);
- qxl_ttm_placement_from_domain(qbo, QXL_GEM_DOMAIN_CPU);
+ qxl_ttm_placement_from_domain(qbo, QXL_GEM_DOMAIN_CPU, false);
*placement = qbo->placement;
}
diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
index 064023bed480..32501f6ec991 100644
--- a/drivers/gpu/drm/radeon/atombios_dp.c
+++ b/drivers/gpu/drm/radeon/atombios_dp.c
@@ -44,6 +44,41 @@ static char *pre_emph_names[] = {
};
/***** radeon AUX functions *****/
+
+/* Atom needs data in little endian format
+ * so swap as appropriate when copying data to
+ * or from atom. Note that atom operates on
+ * dw units.
+ */
+static void radeon_copy_swap(u8 *dst, u8 *src, u8 num_bytes, bool to_le)
+{
+#ifdef __BIG_ENDIAN
+ u8 src_tmp[20], dst_tmp[20]; /* used for byteswapping */
+ u32 *dst32, *src32;
+ int i;
+
+ memcpy(src_tmp, src, num_bytes);
+ src32 = (u32 *)src_tmp;
+ dst32 = (u32 *)dst_tmp;
+ if (to_le) {
+ for (i = 0; i < ((num_bytes + 3) / 4); i++)
+ dst32[i] = cpu_to_le32(src32[i]);
+ memcpy(dst, dst_tmp, num_bytes);
+ } else {
+ u8 dws = num_bytes & ~3;
+ for (i = 0; i < ((num_bytes + 3) / 4); i++)
+ dst32[i] = le32_to_cpu(src32[i]);
+ memcpy(dst, dst_tmp, dws);
+ if (num_bytes % 4) {
+ for (i = 0; i < (num_bytes % 4); i++)
+ dst[dws+i] = dst_tmp[dws+i];
+ }
+ }
+#else
+ memcpy(dst, src, num_bytes);
+#endif
+}
+
union aux_channel_transaction {
PROCESS_AUX_CHANNEL_TRANSACTION_PS_ALLOCATION v1;
PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS_V2 v2;
@@ -65,10 +100,10 @@ static int radeon_process_aux_ch(struct radeon_i2c_chan *chan,
base = (unsigned char *)(rdev->mode_info.atom_context->scratch + 1);
- memcpy(base, send, send_bytes);
+ radeon_copy_swap(base, send, send_bytes, true);
- args.v1.lpAuxRequest = 0 + 4;
- args.v1.lpDataOut = 16 + 4;
+ args.v1.lpAuxRequest = cpu_to_le16((u16)(0 + 4));
+ args.v1.lpDataOut = cpu_to_le16((u16)(16 + 4));
args.v1.ucDataOutLen = 0;
args.v1.ucChannelID = chan->rec.i2c_id;
args.v1.ucDelay = delay / 10;
@@ -102,7 +137,7 @@ static int radeon_process_aux_ch(struct radeon_i2c_chan *chan,
recv_bytes = recv_size;
if (recv && recv_size)
- memcpy(recv, base + 16, recv_bytes);
+ radeon_copy_swap(recv, base + 16, recv_bytes, false);
return recv_bytes;
}
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
index ed1d91025928..6dacec4e2090 100644
--- a/drivers/gpu/drm/radeon/cik.c
+++ b/drivers/gpu/drm/radeon/cik.c
@@ -22,7 +22,6 @@
* Authors: Alex Deucher
*/
#include <linux/firmware.h>
-#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/module.h>
#include "drmP.h"
@@ -742,7 +741,6 @@ static int ci_mc_load_microcode(struct radeon_device *rdev)
*/
static int cik_init_microcode(struct radeon_device *rdev)
{
- struct platform_device *pdev;
const char *chip_name;
size_t pfp_req_size, me_req_size, ce_req_size,
mec_req_size, rlc_req_size, mc_req_size,
@@ -752,13 +750,6 @@ static int cik_init_microcode(struct radeon_device *rdev)
DRM_DEBUG("\n");
- pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
- err = IS_ERR(pdev);
- if (err) {
- printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
- return -EINVAL;
- }
-
switch (rdev->family) {
case CHIP_BONAIRE:
chip_name = "BONAIRE";
@@ -794,7 +785,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
DRM_INFO("Loading %s Microcode\n", chip_name);
snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
- err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->pfp_fw->size != pfp_req_size) {
@@ -806,7 +797,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
- err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->me_fw->size != me_req_size) {
@@ -817,7 +808,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name);
- err = request_firmware(&rdev->ce_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->ce_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->ce_fw->size != ce_req_size) {
@@ -828,7 +819,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec.bin", chip_name);
- err = request_firmware(&rdev->mec_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->mec_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->mec_fw->size != mec_req_size) {
@@ -839,7 +830,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", chip_name);
- err = request_firmware(&rdev->rlc_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->rlc_fw->size != rlc_req_size) {
@@ -850,7 +841,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_sdma.bin", chip_name);
- err = request_firmware(&rdev->sdma_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->sdma_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->sdma_fw->size != sdma_req_size) {
@@ -863,7 +854,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
/* No MC ucode on APUs */
if (!(rdev->flags & RADEON_IS_IGP)) {
snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
- err = request_firmware(&rdev->mc_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->mc_fw->size != mc_req_size) {
@@ -875,8 +866,6 @@ static int cik_init_microcode(struct radeon_device *rdev)
}
out:
- platform_device_unregister(pdev);
-
if (err) {
if (err != -EINVAL)
printk(KERN_ERR
@@ -4453,6 +4442,29 @@ void cik_vm_fini(struct radeon_device *rdev)
}
/**
+ * cik_vm_decode_fault - print human readable fault info
+ *
+ * @rdev: radeon_device pointer
+ * @status: VM_CONTEXT1_PROTECTION_FAULT_STATUS register value
+ * @addr: VM_CONTEXT1_PROTECTION_FAULT_ADDR register value
+ *
+ * Print human readable fault information (CIK).
+ */
+static void cik_vm_decode_fault(struct radeon_device *rdev,
+ u32 status, u32 addr, u32 mc_client)
+{
+ u32 mc_id = (status & MEMORY_CLIENT_ID_MASK) >> MEMORY_CLIENT_ID_SHIFT;
+ u32 vmid = (status & FAULT_VMID_MASK) >> FAULT_VMID_SHIFT;
+ u32 protections = (status & PROTECTIONS_MASK) >> PROTECTIONS_SHIFT;
+ char *block = (char *)&mc_client;
+
+ printk("VM fault (0x%02x, vmid %d) at page %u, %s from %s (%d)\n",
+ protections, vmid, addr,
+ (status & MEMORY_CLIENT_RW_MASK) ? "write" : "read",
+ block, mc_id);
+}
+
+/**
* cik_vm_flush - cik vm flush using the CP
*
* @rdev: radeon_device pointer
@@ -5507,6 +5519,7 @@ int cik_irq_process(struct radeon_device *rdev)
u32 ring_index;
bool queue_hotplug = false;
bool queue_reset = false;
+ u32 addr, status, mc_client;
if (!rdev->ih.enabled || rdev->shutdown)
return IRQ_NONE;
@@ -5742,11 +5755,15 @@ restart_ih:
break;
case 146:
case 147:
+ addr = RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR);
+ status = RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS);
+ mc_client = RREG32(VM_CONTEXT1_PROTECTION_FAULT_MCCLIENT);
dev_err(rdev->dev, "GPU fault detected: %d 0x%08x\n", src_id, src_data);
dev_err(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x%08X\n",
- RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR));
+ addr);
dev_err(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
- RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS));
+ status);
+ cik_vm_decode_fault(rdev, status, addr, mc_client);
/* reset addr and status */
WREG32_P(VM_CONTEXT1_CNTL2, 1, ~1);
break;
@@ -6961,7 +6978,7 @@ int cik_uvd_resume(struct radeon_device *rdev)
/* programm the VCPU memory controller bits 0-27 */
addr = rdev->uvd.gpu_addr >> 3;
- size = RADEON_GPU_PAGE_ALIGN(rdev->uvd_fw->size + 4) >> 3;
+ size = RADEON_GPU_PAGE_ALIGN(rdev->uvd.fw_size + 4) >> 3;
WREG32(UVD_VCPU_CACHE_OFFSET0, addr);
WREG32(UVD_VCPU_CACHE_SIZE0, size);
diff --git a/drivers/gpu/drm/radeon/cikd.h b/drivers/gpu/drm/radeon/cikd.h
index 63514b95889a..7e9275eaef80 100644
--- a/drivers/gpu/drm/radeon/cikd.h
+++ b/drivers/gpu/drm/radeon/cikd.h
@@ -136,6 +136,22 @@
#define VM_INVALIDATE_RESPONSE 0x147c
#define VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x14DC
+#define PROTECTIONS_MASK (0xf << 0)
+#define PROTECTIONS_SHIFT 0
+ /* bit 0: range
+ * bit 1: pde0
+ * bit 2: valid
+ * bit 3: read
+ * bit 4: write
+ */
+#define MEMORY_CLIENT_ID_MASK (0xff << 12)
+#define MEMORY_CLIENT_ID_SHIFT 12
+#define MEMORY_CLIENT_RW_MASK (1 << 24)
+#define MEMORY_CLIENT_RW_SHIFT 24
+#define FAULT_VMID_MASK (0xf << 25)
+#define FAULT_VMID_SHIFT 25
+
+#define VM_CONTEXT1_PROTECTION_FAULT_MCCLIENT 0x14E4
#define VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x14FC
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index e49059dc9b8f..038dcac7670c 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -139,6 +139,8 @@ void evergreen_pcie_gen2_enable(struct radeon_device *rdev);
void evergreen_program_aspm(struct radeon_device *rdev);
extern void cayman_cp_int_cntl_setup(struct radeon_device *rdev,
int ring, u32 cp_int_cntl);
+extern void cayman_vm_decode_fault(struct radeon_device *rdev,
+ u32 status, u32 addr);
static const u32 evergreen_golden_registers[] =
{
@@ -4586,6 +4588,7 @@ int evergreen_irq_process(struct radeon_device *rdev)
bool queue_hotplug = false;
bool queue_hdmi = false;
bool queue_thermal = false;
+ u32 status, addr;
if (!rdev->ih.enabled || rdev->shutdown)
return IRQ_NONE;
@@ -4872,11 +4875,14 @@ restart_ih:
break;
case 146:
case 147:
+ addr = RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR);
+ status = RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS);
dev_err(rdev->dev, "GPU fault detected: %d 0x%08x\n", src_id, src_data);
dev_err(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x%08X\n",
- RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR));
+ addr);
dev_err(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
- RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS));
+ status);
+ cayman_vm_decode_fault(rdev, status, addr);
/* reset addr and status */
WREG32_P(VM_CONTEXT1_CNTL2, 1, ~1);
break;
@@ -5509,6 +5515,9 @@ void evergreen_program_aspm(struct radeon_device *rdev)
*/
bool fusion_platform = false;
+ if (radeon_aspm == 0)
+ return;
+
if (!(rdev->flags & RADEON_IS_PCIE))
return;
diff --git a/drivers/gpu/drm/radeon/evergreen_hdmi.c b/drivers/gpu/drm/radeon/evergreen_hdmi.c
index b9c6f7675e59..b0d3fb341417 100644
--- a/drivers/gpu/drm/radeon/evergreen_hdmi.c
+++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c
@@ -177,6 +177,9 @@ void evergreen_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode
uint32_t offset;
ssize_t err;
+ if (!dig || !dig->afmt)
+ return;
+
/* Silent, r600_hdmi_enable will raise WARN for us */
if (!dig->afmt->enabled)
return;
@@ -280,6 +283,9 @@ void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable)
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
+ if (!dig || !dig->afmt)
+ return;
+
/* Silent, r600_hdmi_enable will raise WARN for us */
if (enable && dig->afmt->enabled)
return;
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index f30127cb30ef..56bd4f3be4fe 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -22,7 +22,6 @@
* Authors: Alex Deucher
*/
#include <linux/firmware.h>
-#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <drm/drmP.h>
@@ -684,7 +683,6 @@ int ni_mc_load_microcode(struct radeon_device *rdev)
int ni_init_microcode(struct radeon_device *rdev)
{
- struct platform_device *pdev;
const char *chip_name;
const char *rlc_chip_name;
size_t pfp_req_size, me_req_size, rlc_req_size, mc_req_size;
@@ -694,13 +692,6 @@ int ni_init_microcode(struct radeon_device *rdev)
DRM_DEBUG("\n");
- pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
- err = IS_ERR(pdev);
- if (err) {
- printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
- return -EINVAL;
- }
-
switch (rdev->family) {
case CHIP_BARTS:
chip_name = "BARTS";
@@ -753,7 +744,7 @@ int ni_init_microcode(struct radeon_device *rdev)
DRM_INFO("Loading %s Microcode\n", chip_name);
snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
- err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->pfp_fw->size != pfp_req_size) {
@@ -765,7 +756,7 @@ int ni_init_microcode(struct radeon_device *rdev)
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
- err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->me_fw->size != me_req_size) {
@@ -776,7 +767,7 @@ int ni_init_microcode(struct radeon_device *rdev)
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", rlc_chip_name);
- err = request_firmware(&rdev->rlc_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->rlc_fw->size != rlc_req_size) {
@@ -789,7 +780,7 @@ int ni_init_microcode(struct radeon_device *rdev)
/* no MC ucode on TN */
if (!(rdev->flags & RADEON_IS_IGP)) {
snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
- err = request_firmware(&rdev->mc_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->mc_fw->size != mc_req_size) {
@@ -802,7 +793,7 @@ int ni_init_microcode(struct radeon_device *rdev)
if ((rdev->family >= CHIP_BARTS) && (rdev->family <= CHIP_CAYMAN)) {
snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name);
- err = request_firmware(&rdev->smc_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->smc_fw->size != smc_req_size) {
@@ -814,8 +805,6 @@ int ni_init_microcode(struct radeon_device *rdev)
}
out:
- platform_device_unregister(pdev);
-
if (err) {
if (err != -EINVAL)
printk(KERN_ERR
@@ -2461,6 +2450,167 @@ void cayman_vm_fini(struct radeon_device *rdev)
{
}
+/**
+ * cayman_vm_decode_fault - print human readable fault info
+ *
+ * @rdev: radeon_device pointer
+ * @status: VM_CONTEXT1_PROTECTION_FAULT_STATUS register value
+ * @addr: VM_CONTEXT1_PROTECTION_FAULT_ADDR register value
+ *
+ * Print human readable fault information (cayman/TN).
+ */
+void cayman_vm_decode_fault(struct radeon_device *rdev,
+ u32 status, u32 addr)
+{
+ u32 mc_id = (status & MEMORY_CLIENT_ID_MASK) >> MEMORY_CLIENT_ID_SHIFT;
+ u32 vmid = (status & FAULT_VMID_MASK) >> FAULT_VMID_SHIFT;
+ u32 protections = (status & PROTECTIONS_MASK) >> PROTECTIONS_SHIFT;
+ char *block;
+
+ switch (mc_id) {
+ case 32:
+ case 16:
+ case 96:
+ case 80:
+ case 160:
+ case 144:
+ case 224:
+ case 208:
+ block = "CB";
+ break;
+ case 33:
+ case 17:
+ case 97:
+ case 81:
+ case 161:
+ case 145:
+ case 225:
+ case 209:
+ block = "CB_FMASK";
+ break;
+ case 34:
+ case 18:
+ case 98:
+ case 82:
+ case 162:
+ case 146:
+ case 226:
+ case 210:
+ block = "CB_CMASK";
+ break;
+ case 35:
+ case 19:
+ case 99:
+ case 83:
+ case 163:
+ case 147:
+ case 227:
+ case 211:
+ block = "CB_IMMED";
+ break;
+ case 36:
+ case 20:
+ case 100:
+ case 84:
+ case 164:
+ case 148:
+ case 228:
+ case 212:
+ block = "DB";
+ break;
+ case 37:
+ case 21:
+ case 101:
+ case 85:
+ case 165:
+ case 149:
+ case 229:
+ case 213:
+ block = "DB_HTILE";
+ break;
+ case 38:
+ case 22:
+ case 102:
+ case 86:
+ case 166:
+ case 150:
+ case 230:
+ case 214:
+ block = "SX";
+ break;
+ case 39:
+ case 23:
+ case 103:
+ case 87:
+ case 167:
+ case 151:
+ case 231:
+ case 215:
+ block = "DB_STEN";
+ break;
+ case 40:
+ case 24:
+ case 104:
+ case 88:
+ case 232:
+ case 216:
+ case 168:
+ case 152:
+ block = "TC_TFETCH";
+ break;
+ case 41:
+ case 25:
+ case 105:
+ case 89:
+ case 233:
+ case 217:
+ case 169:
+ case 153:
+ block = "TC_VFETCH";
+ break;
+ case 42:
+ case 26:
+ case 106:
+ case 90:
+ case 234:
+ case 218:
+ case 170:
+ case 154:
+ block = "VC";
+ break;
+ case 112:
+ block = "CP";
+ break;
+ case 113:
+ case 114:
+ block = "SH";
+ break;
+ case 115:
+ block = "VGT";
+ break;
+ case 178:
+ block = "IH";
+ break;
+ case 51:
+ block = "RLC";
+ break;
+ case 55:
+ block = "DMA";
+ break;
+ case 56:
+ block = "HDP";
+ break;
+ default:
+ block = "unknown";
+ break;
+ }
+
+ printk("VM fault (0x%02x, vmid %d) at page %u, %s from %s (%d)\n",
+ protections, vmid, addr,
+ (status & MEMORY_CLIENT_RW_MASK) ? "write" : "read",
+ block, mc_id);
+}
+
#define R600_ENTRY_VALID (1 << 0)
#define R600_PTE_SYSTEM (1 << 1)
#define R600_PTE_SNOOPED (1 << 2)
diff --git a/drivers/gpu/drm/radeon/nid.h b/drivers/gpu/drm/radeon/nid.h
index fe24a93542ec..22421bc80c0d 100644
--- a/drivers/gpu/drm/radeon/nid.h
+++ b/drivers/gpu/drm/radeon/nid.h
@@ -133,6 +133,22 @@
#define VM_CONTEXT1_CNTL2 0x1434
#define VM_INVALIDATE_REQUEST 0x1478
#define VM_INVALIDATE_RESPONSE 0x147c
+#define VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x14FC
+#define VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x14DC
+#define PROTECTIONS_MASK (0xf << 0)
+#define PROTECTIONS_SHIFT 0
+ /* bit 0: range
+ * bit 2: pde0
+ * bit 3: valid
+ * bit 4: read
+ * bit 5: write
+ */
+#define MEMORY_CLIENT_ID_MASK (0xff << 12)
+#define MEMORY_CLIENT_ID_SHIFT 12
+#define MEMORY_CLIENT_RW_MASK (1 << 24)
+#define MEMORY_CLIENT_RW_SHIFT 24
+#define FAULT_VMID_MASK (0x7 << 25)
+#define FAULT_VMID_SHIFT 25
#define VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR 0x1518
#define VM_CONTEXT1_PROTECTION_FAULT_DEFAULT_ADDR 0x151c
#define VM_CONTEXT0_PAGE_TABLE_BASE_ADDR 0x153C
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
index c9affefd79f6..75349cdaa84b 100644
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
@@ -39,7 +39,6 @@
#include "atom.h"
#include <linux/firmware.h>
-#include <linux/platform_device.h>
#include <linux/module.h>
#include "r100_reg_safe.h"
@@ -989,18 +988,11 @@ void r100_ring_start(struct radeon_device *rdev, struct radeon_ring *ring)
/* Load the microcode for the CP */
static int r100_cp_init_microcode(struct radeon_device *rdev)
{
- struct platform_device *pdev;
const char *fw_name = NULL;
int err;
DRM_DEBUG_KMS("\n");
- pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
- err = IS_ERR(pdev);
- if (err) {
- printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
- return -EINVAL;
- }
if ((rdev->family == CHIP_R100) || (rdev->family == CHIP_RV100) ||
(rdev->family == CHIP_RV200) || (rdev->family == CHIP_RS100) ||
(rdev->family == CHIP_RS200)) {
@@ -1042,8 +1034,7 @@ static int r100_cp_init_microcode(struct radeon_device *rdev)
fw_name = FIRMWARE_R520;
}
- err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
- platform_device_unregister(pdev);
+ err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
if (err) {
printk(KERN_ERR "radeon_cp: Failed to load firmware \"%s\"\n",
fw_name);
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 2d3655f7f41e..10f712e37003 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -28,7 +28,6 @@
#include <linux/slab.h>
#include <linux/seq_file.h>
#include <linux/firmware.h>
-#include <linux/platform_device.h>
#include <linux/module.h>
#include <drm/drmP.h>
#include <drm/radeon_drm.h>
@@ -2144,7 +2143,6 @@ void r600_cp_stop(struct radeon_device *rdev)
int r600_init_microcode(struct radeon_device *rdev)
{
- struct platform_device *pdev;
const char *chip_name;
const char *rlc_chip_name;
const char *smc_chip_name = "RV770";
@@ -2154,13 +2152,6 @@ int r600_init_microcode(struct radeon_device *rdev)
DRM_DEBUG("\n");
- pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
- err = IS_ERR(pdev);
- if (err) {
- printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
- return -EINVAL;
- }
-
switch (rdev->family) {
case CHIP_R600:
chip_name = "R600";
@@ -2272,7 +2263,7 @@ int r600_init_microcode(struct radeon_device *rdev)
DRM_INFO("Loading %s Microcode\n", chip_name);
snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
- err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->pfp_fw->size != pfp_req_size) {
@@ -2284,7 +2275,7 @@ int r600_init_microcode(struct radeon_device *rdev)
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
- err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->me_fw->size != me_req_size) {
@@ -2295,7 +2286,7 @@ int r600_init_microcode(struct radeon_device *rdev)
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", rlc_chip_name);
- err = request_firmware(&rdev->rlc_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->rlc_fw->size != rlc_req_size) {
@@ -2307,7 +2298,7 @@ int r600_init_microcode(struct radeon_device *rdev)
if ((rdev->family >= CHIP_RV770) && (rdev->family <= CHIP_HEMLOCK)) {
snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", smc_chip_name);
- err = request_firmware(&rdev->smc_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->smc_fw->size != smc_req_size) {
@@ -2319,8 +2310,6 @@ int r600_init_microcode(struct radeon_device *rdev)
}
out:
- platform_device_unregister(pdev);
-
if (err) {
if (err != -EINVAL)
printk(KERN_ERR
@@ -3019,7 +3008,7 @@ void r600_uvd_fence_emit(struct radeon_device *rdev,
struct radeon_fence *fence)
{
struct radeon_ring *ring = &rdev->ring[fence->ring];
- uint32_t addr = rdev->fence_drv[fence->ring].gpu_addr;
+ uint64_t addr = rdev->fence_drv[fence->ring].gpu_addr;
radeon_ring_write(ring, PACKET0(UVD_CONTEXT_ID, 0));
radeon_ring_write(ring, fence->seq);
@@ -3145,6 +3134,90 @@ int r600_copy_blit(struct radeon_device *rdev,
}
/**
+ * r600_copy_cpdma - copy pages using the CP DMA engine
+ *
+ * @rdev: radeon_device pointer
+ * @src_offset: src GPU address
+ * @dst_offset: dst GPU address
+ * @num_gpu_pages: number of GPU pages to xfer
+ * @fence: radeon fence object
+ *
+ * Copy GPU paging using the CP DMA engine (r6xx+).
+ * Used by the radeon ttm implementation to move pages if
+ * registered as the asic copy callback.
+ */
+int r600_copy_cpdma(struct radeon_device *rdev,
+ uint64_t src_offset, uint64_t dst_offset,
+ unsigned num_gpu_pages,
+ struct radeon_fence **fence)
+{
+ struct radeon_semaphore *sem = NULL;
+ int ring_index = rdev->asic->copy.blit_ring_index;
+ struct radeon_ring *ring = &rdev->ring[ring_index];
+ u32 size_in_bytes, cur_size_in_bytes, tmp;
+ int i, num_loops;
+ int r = 0;
+
+ r = radeon_semaphore_create(rdev, &sem);
+ if (r) {
+ DRM_ERROR("radeon: moving bo (%d).\n", r);
+ return r;
+ }
+
+ size_in_bytes = (num_gpu_pages << RADEON_GPU_PAGE_SHIFT);
+ num_loops = DIV_ROUND_UP(size_in_bytes, 0x1fffff);
+ r = radeon_ring_lock(rdev, ring, num_loops * 6 + 24);
+ if (r) {
+ DRM_ERROR("radeon: moving bo (%d).\n", r);
+ radeon_semaphore_free(rdev, &sem, NULL);
+ return r;
+ }
+
+ if (radeon_fence_need_sync(*fence, ring->idx)) {
+ radeon_semaphore_sync_rings(rdev, sem, (*fence)->ring,
+ ring->idx);
+ radeon_fence_note_sync(*fence, ring->idx);
+ } else {
+ radeon_semaphore_free(rdev, &sem, NULL);
+ }
+
+ radeon_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1));
+ radeon_ring_write(ring, (WAIT_UNTIL - PACKET3_SET_CONFIG_REG_OFFSET) >> 2);
+ radeon_ring_write(ring, WAIT_3D_IDLE_bit);
+ for (i = 0; i < num_loops; i++) {
+ cur_size_in_bytes = size_in_bytes;
+ if (cur_size_in_bytes > 0x1fffff)
+ cur_size_in_bytes = 0x1fffff;
+ size_in_bytes -= cur_size_in_bytes;
+ tmp = upper_32_bits(src_offset) & 0xff;
+ if (size_in_bytes == 0)
+ tmp |= PACKET3_CP_DMA_CP_SYNC;
+ radeon_ring_write(ring, PACKET3(PACKET3_CP_DMA, 4));
+ radeon_ring_write(ring, src_offset & 0xffffffff);
+ radeon_ring_write(ring, tmp);
+ radeon_ring_write(ring, dst_offset & 0xffffffff);
+ radeon_ring_write(ring, upper_32_bits(dst_offset) & 0xff);
+ radeon_ring_write(ring, cur_size_in_bytes);
+ src_offset += cur_size_in_bytes;
+ dst_offset += cur_size_in_bytes;
+ }
+ radeon_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1));
+ radeon_ring_write(ring, (WAIT_UNTIL - PACKET3_SET_CONFIG_REG_OFFSET) >> 2);
+ radeon_ring_write(ring, WAIT_CP_DMA_IDLE_bit);
+
+ r = radeon_fence_emit(rdev, fence, ring->idx);
+ if (r) {
+ radeon_ring_unlock_undo(rdev, ring);
+ return r;
+ }
+
+ radeon_ring_unlock_commit(rdev, ring);
+ radeon_semaphore_free(rdev, &sem, *fence);
+
+ return r;
+}
+
+/**
* r600_copy_dma - copy pages using the DMA engine
*
* @rdev: radeon_device pointer
diff --git a/drivers/gpu/drm/radeon/r600_dpm.c b/drivers/gpu/drm/radeon/r600_dpm.c
index b88f54b134ab..e5c860f4ccbe 100644
--- a/drivers/gpu/drm/radeon/r600_dpm.c
+++ b/drivers/gpu/drm/radeon/r600_dpm.c
@@ -278,9 +278,9 @@ bool r600_dynamicpm_enabled(struct radeon_device *rdev)
void r600_enable_sclk_control(struct radeon_device *rdev, bool enable)
{
if (enable)
- WREG32_P(GENERAL_PWRMGT, 0, ~SCLK_PWRMGT_OFF);
+ WREG32_P(SCLK_PWRMGT_CNTL, 0, ~SCLK_PWRMGT_OFF);
else
- WREG32_P(GENERAL_PWRMGT, SCLK_PWRMGT_OFF, ~SCLK_PWRMGT_OFF);
+ WREG32_P(SCLK_PWRMGT_CNTL, SCLK_PWRMGT_OFF, ~SCLK_PWRMGT_OFF);
}
void r600_enable_mclk_control(struct radeon_device *rdev, bool enable)
diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
index e73b2a73494a..f48240bb8c56 100644
--- a/drivers/gpu/drm/radeon/r600_hdmi.c
+++ b/drivers/gpu/drm/radeon/r600_hdmi.c
@@ -266,6 +266,9 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mod
uint32_t offset;
ssize_t err;
+ if (!dig || !dig->afmt)
+ return;
+
/* Silent, r600_hdmi_enable will raise WARN for us */
if (!dig->afmt->enabled)
return;
@@ -448,6 +451,9 @@ void r600_hdmi_enable(struct drm_encoder *encoder, bool enable)
struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
u32 hdmi = HDMI0_ERROR_ACK;
+ if (!dig || !dig->afmt)
+ return;
+
/* Silent, r600_hdmi_enable will raise WARN for us */
if (enable && dig->afmt->enabled)
return;
diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h
index f1b3084d8f51..8e3fe815edab 100644
--- a/drivers/gpu/drm/radeon/r600d.h
+++ b/drivers/gpu/drm/radeon/r600d.h
@@ -602,6 +602,7 @@
#define L2_BUSY (1 << 0)
#define WAIT_UNTIL 0x8040
+#define WAIT_CP_DMA_IDLE_bit (1 << 8)
#define WAIT_2D_IDLE_bit (1 << 14)
#define WAIT_3D_IDLE_bit (1 << 15)
#define WAIT_2D_IDLECLEAN_bit (1 << 16)
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 9b7025d02cd0..2f08219c39b6 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -97,6 +97,7 @@ extern int radeon_msi;
extern int radeon_lockup_timeout;
extern int radeon_fastfb;
extern int radeon_dpm;
+extern int radeon_aspm;
/*
* Copy from radeon_drv.h so we don't have to include both and have conflicting
@@ -455,6 +456,7 @@ struct radeon_sa_manager {
uint64_t gpu_addr;
void *cpu_ptr;
uint32_t domain;
+ uint32_t align;
};
struct radeon_sa_bo;
@@ -783,6 +785,11 @@ struct radeon_mec {
/* number of entries in page table */
#define RADEON_VM_PTE_COUNT (1 << RADEON_VM_BLOCK_SIZE)
+/* PTBs (Page Table Blocks) need to be aligned to 32K */
+#define RADEON_VM_PTB_ALIGN_SIZE 32768
+#define RADEON_VM_PTB_ALIGN_MASK (RADEON_VM_PTB_ALIGN_SIZE - 1)
+#define RADEON_VM_PTB_ALIGN(a) (((a) + RADEON_VM_PTB_ALIGN_MASK) & ~RADEON_VM_PTB_ALIGN_MASK)
+
struct radeon_vm {
struct list_head list;
struct list_head va;
@@ -1460,6 +1467,8 @@ struct radeon_uvd {
struct radeon_bo *vcpu_bo;
void *cpu_addr;
uint64_t gpu_addr;
+ void *saved_bo;
+ unsigned fw_size;
atomic_t handles[RADEON_MAX_UVD_HANDLES];
struct drm_file *filp[RADEON_MAX_UVD_HANDLES];
struct delayed_work idle_work;
@@ -2054,7 +2063,6 @@ struct radeon_device {
const struct firmware *rlc_fw; /* r6/700 RLC firmware */
const struct firmware *mc_fw; /* NI MC firmware */
const struct firmware *ce_fw; /* SI CE firmware */
- const struct firmware *uvd_fw; /* UVD firmware */
const struct firmware *mec_fw; /* CIK MEC firmware */
const struct firmware *sdma_fw; /* CIK SDMA firmware */
const struct firmware *smc_fw; /* SMC firmware */
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
index 097077499cc6..f8f8b3113ddd 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.c
+++ b/drivers/gpu/drm/radeon/radeon_asic.c
@@ -1026,8 +1026,8 @@ static struct radeon_asic r600_asic = {
.blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
.dma = &r600_copy_dma,
.dma_ring_index = R600_RING_TYPE_DMA_INDEX,
- .copy = &r600_copy_dma,
- .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
+ .copy = &r600_copy_cpdma,
+ .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
},
.surface = {
.set_reg = r600_set_surface_reg,
@@ -1119,8 +1119,8 @@ static struct radeon_asic rv6xx_asic = {
.blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
.dma = &r600_copy_dma,
.dma_ring_index = R600_RING_TYPE_DMA_INDEX,
- .copy = &r600_copy_dma,
- .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
+ .copy = &r600_copy_cpdma,
+ .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
},
.surface = {
.set_reg = r600_set_surface_reg,
@@ -1161,6 +1161,7 @@ static struct radeon_asic rv6xx_asic = {
.get_mclk = &rv6xx_dpm_get_mclk,
.print_power_state = &rv6xx_dpm_print_power_state,
.debugfs_print_current_performance_level = &rv6xx_dpm_debugfs_print_current_performance_level,
+ .force_performance_level = &rv6xx_dpm_force_performance_level,
},
.pflip = {
.pre_page_flip = &rs600_pre_page_flip,
@@ -1229,8 +1230,8 @@ static struct radeon_asic rs780_asic = {
.blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
.dma = &r600_copy_dma,
.dma_ring_index = R600_RING_TYPE_DMA_INDEX,
- .copy = &r600_copy_dma,
- .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
+ .copy = &r600_copy_cpdma,
+ .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
},
.surface = {
.set_reg = r600_set_surface_reg,
@@ -1270,6 +1271,7 @@ static struct radeon_asic rs780_asic = {
.get_sclk = &rs780_dpm_get_sclk,
.get_mclk = &rs780_dpm_get_mclk,
.print_power_state = &rs780_dpm_print_power_state,
+ .debugfs_print_current_performance_level = &rs780_dpm_debugfs_print_current_performance_level,
},
.pflip = {
.pre_page_flip = &rs600_pre_page_flip,
diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h
index 45d0693cddd5..902479fa737f 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.h
+++ b/drivers/gpu/drm/radeon/radeon_asic.h
@@ -340,6 +340,9 @@ int r600_uvd_ring_test(struct radeon_device *rdev, struct radeon_ring *ring);
int r600_copy_blit(struct radeon_device *rdev,
uint64_t src_offset, uint64_t dst_offset,
unsigned num_gpu_pages, struct radeon_fence **fence);
+int r600_copy_cpdma(struct radeon_device *rdev,
+ uint64_t src_offset, uint64_t dst_offset,
+ unsigned num_gpu_pages, struct radeon_fence **fence);
int r600_copy_dma(struct radeon_device *rdev,
uint64_t src_offset, uint64_t dst_offset,
unsigned num_gpu_pages, struct radeon_fence **fence);
@@ -418,6 +421,8 @@ void rv6xx_dpm_print_power_state(struct radeon_device *rdev,
struct radeon_ps *ps);
void rv6xx_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
struct seq_file *m);
+int rv6xx_dpm_force_performance_level(struct radeon_device *rdev,
+ enum radeon_dpm_forced_level level);
/* rs780 dpm */
int rs780_dpm_init(struct radeon_device *rdev);
int rs780_dpm_enable(struct radeon_device *rdev);
@@ -430,6 +435,8 @@ u32 rs780_dpm_get_sclk(struct radeon_device *rdev, bool low);
u32 rs780_dpm_get_mclk(struct radeon_device *rdev, bool low);
void rs780_dpm_print_power_state(struct radeon_device *rdev,
struct radeon_ps *ps);
+void rs780_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
+ struct seq_file *m);
/* uvd */
int r600_uvd_init(struct radeon_device *rdev);
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
index fbdaff55556b..e3f3e8841789 100644
--- a/drivers/gpu/drm/radeon/radeon_atombios.c
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
@@ -3513,7 +3513,6 @@ int radeon_atom_get_memory_info(struct radeon_device *rdev,
u8 frev, crev, i;
u16 data_offset, size;
union vram_info *vram_info;
- u8 *p;
memset(mem_info, 0, sizeof(struct atom_memory_info));
@@ -3529,13 +3528,12 @@ int radeon_atom_get_memory_info(struct radeon_device *rdev,
if (module_index < vram_info->v1_3.ucNumOfVRAMModule) {
ATOM_VRAM_MODULE_V3 *vram_module =
(ATOM_VRAM_MODULE_V3 *)vram_info->v1_3.aVramInfo;
- p = (u8 *)vram_info->v1_3.aVramInfo;
for (i = 0; i < module_index; i++) {
- vram_module = (ATOM_VRAM_MODULE_V3 *)p;
if (le16_to_cpu(vram_module->usSize) == 0)
return -EINVAL;
- p += le16_to_cpu(vram_module->usSize);
+ vram_module = (ATOM_VRAM_MODULE_V3 *)
+ ((u8 *)vram_module + le16_to_cpu(vram_module->usSize));
}
mem_info->mem_vendor = vram_module->asMemory.ucMemoryVenderID & 0xf;
mem_info->mem_type = vram_module->asMemory.ucMemoryType & 0xf0;
@@ -3547,13 +3545,12 @@ int radeon_atom_get_memory_info(struct radeon_device *rdev,
if (module_index < vram_info->v1_4.ucNumOfVRAMModule) {
ATOM_VRAM_MODULE_V4 *vram_module =
(ATOM_VRAM_MODULE_V4 *)vram_info->v1_4.aVramInfo;
- p = (u8 *)vram_info->v1_4.aVramInfo;
for (i = 0; i < module_index; i++) {
- vram_module = (ATOM_VRAM_MODULE_V4 *)p;
if (le16_to_cpu(vram_module->usModuleSize) == 0)
return -EINVAL;
- p += le16_to_cpu(vram_module->usModuleSize);
+ vram_module = (ATOM_VRAM_MODULE_V4 *)
+ ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize));
}
mem_info->mem_vendor = vram_module->ucMemoryVenderID & 0xf;
mem_info->mem_type = vram_module->ucMemoryType & 0xf0;
@@ -3572,13 +3569,12 @@ int radeon_atom_get_memory_info(struct radeon_device *rdev,
if (module_index < vram_info->v2_1.ucNumOfVRAMModule) {
ATOM_VRAM_MODULE_V7 *vram_module =
(ATOM_VRAM_MODULE_V7 *)vram_info->v2_1.aVramInfo;
- p = (u8 *)vram_info->v2_1.aVramInfo;
for (i = 0; i < module_index; i++) {
- vram_module = (ATOM_VRAM_MODULE_V7 *)p;
if (le16_to_cpu(vram_module->usModuleSize) == 0)
return -EINVAL;
- p += le16_to_cpu(vram_module->usModuleSize);
+ vram_module = (ATOM_VRAM_MODULE_V7 *)
+ ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize));
}
mem_info->mem_vendor = vram_module->ucMemoryVenderID & 0xf;
mem_info->mem_type = vram_module->ucMemoryType & 0xf0;
@@ -3628,21 +3624,19 @@ int radeon_atom_get_mclk_range_table(struct radeon_device *rdev,
if (module_index < vram_info->v1_4.ucNumOfVRAMModule) {
ATOM_VRAM_MODULE_V4 *vram_module =
(ATOM_VRAM_MODULE_V4 *)vram_info->v1_4.aVramInfo;
- ATOM_MEMORY_TIMING_FORMAT *format;
- p = (u8 *)vram_info->v1_4.aVramInfo;
for (i = 0; i < module_index; i++) {
- vram_module = (ATOM_VRAM_MODULE_V4 *)p;
if (le16_to_cpu(vram_module->usModuleSize) == 0)
return -EINVAL;
- p += le16_to_cpu(vram_module->usModuleSize);
+ vram_module = (ATOM_VRAM_MODULE_V4 *)
+ ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize));
}
mclk_range_table->num_entries = (u8)
- ((vram_module->usModuleSize - offsetof(ATOM_VRAM_MODULE_V4, asMemTiming)) /
+ ((le16_to_cpu(vram_module->usModuleSize) - offsetof(ATOM_VRAM_MODULE_V4, asMemTiming)) /
mem_timing_size);
- p = (u8 *)vram_module->asMemTiming;
+ p = (u8 *)&vram_module->asMemTiming[0];
for (i = 0; i < mclk_range_table->num_entries; i++) {
- format = (ATOM_MEMORY_TIMING_FORMAT *)p;
+ ATOM_MEMORY_TIMING_FORMAT *format = (ATOM_MEMORY_TIMING_FORMAT *)p;
mclk_range_table->mclk[i] = le32_to_cpu(format->ulClkRange);
p += mem_timing_size;
}
@@ -3705,17 +3699,21 @@ int radeon_atom_init_mc_reg_table(struct radeon_device *rdev,
(ATOM_MEMORY_SETTING_DATA_BLOCK *)
((u8 *)reg_block + (2 * sizeof(u16)) +
le16_to_cpu(reg_block->usRegIndexTblSize));
+ ATOM_INIT_REG_INDEX_FORMAT *format = &reg_block->asRegIndexBuf[0];
num_entries = (u8)((le16_to_cpu(reg_block->usRegIndexTblSize)) /
sizeof(ATOM_INIT_REG_INDEX_FORMAT)) - 1;
if (num_entries > VBIOS_MC_REGISTER_ARRAY_SIZE)
return -EINVAL;
- while (!(reg_block->asRegIndexBuf[i].ucPreRegDataLength & ACCESS_PLACEHOLDER) &&
- (i < num_entries)) {
+ while (i < num_entries) {
+ if (format->ucPreRegDataLength & ACCESS_PLACEHOLDER)
+ break;
reg_table->mc_reg_address[i].s1 =
- (u16)(le16_to_cpu(reg_block->asRegIndexBuf[i].usRegIndex));
+ (u16)(le16_to_cpu(format->usRegIndex));
reg_table->mc_reg_address[i].pre_reg_data =
- (u8)(reg_block->asRegIndexBuf[i].ucPreRegDataLength);
+ (u8)(format->ucPreRegDataLength);
i++;
+ format = (ATOM_INIT_REG_INDEX_FORMAT *)
+ ((u8 *)format + sizeof(ATOM_INIT_REG_INDEX_FORMAT));
}
reg_table->last = i;
while ((*(u32 *)reg_data != END_OF_REG_DATA_BLOCK) &&
diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
index 78edadc9e86b..68ce36056019 100644
--- a/drivers/gpu/drm/radeon/radeon_combios.c
+++ b/drivers/gpu/drm/radeon/radeon_combios.c
@@ -147,7 +147,7 @@ static uint16_t combios_get_table_offset(struct drm_device *dev,
enum radeon_combios_table_offset table)
{
struct radeon_device *rdev = dev->dev_private;
- int rev;
+ int rev, size;
uint16_t offset = 0, check_offset;
if (!rdev->bios)
@@ -156,174 +156,106 @@ static uint16_t combios_get_table_offset(struct drm_device *dev,
switch (table) {
/* absolute offset tables */
case COMBIOS_ASIC_INIT_1_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0xc);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0xc;
break;
case COMBIOS_BIOS_SUPPORT_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x14);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x14;
break;
case COMBIOS_DAC_PROGRAMMING_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x2a);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x2a;
break;
case COMBIOS_MAX_COLOR_DEPTH_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x2c);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x2c;
break;
case COMBIOS_CRTC_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x2e);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x2e;
break;
case COMBIOS_PLL_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x30);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x30;
break;
case COMBIOS_TV_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x32);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x32;
break;
case COMBIOS_DFP_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x34);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x34;
break;
case COMBIOS_HW_CONFIG_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x36);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x36;
break;
case COMBIOS_MULTIMEDIA_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x38);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x38;
break;
case COMBIOS_TV_STD_PATCH_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x3e);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x3e;
break;
case COMBIOS_LCD_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x40);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x40;
break;
case COMBIOS_MOBILE_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x42);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x42;
break;
case COMBIOS_PLL_INIT_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x46);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x46;
break;
case COMBIOS_MEM_CONFIG_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x48);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x48;
break;
case COMBIOS_SAVE_MASK_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x4a);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x4a;
break;
case COMBIOS_HARDCODED_EDID_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x4c);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x4c;
break;
case COMBIOS_ASIC_INIT_2_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x4e);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x4e;
break;
case COMBIOS_CONNECTOR_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x50);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x50;
break;
case COMBIOS_DYN_CLK_1_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x52);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x52;
break;
case COMBIOS_RESERVED_MEM_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x54);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x54;
break;
case COMBIOS_EXT_TMDS_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x58);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x58;
break;
case COMBIOS_MEM_CLK_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x5a);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x5a;
break;
case COMBIOS_EXT_DAC_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x5c);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x5c;
break;
case COMBIOS_MISC_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x5e);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x5e;
break;
case COMBIOS_CRT_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x60);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x60;
break;
case COMBIOS_INTEGRATED_SYSTEM_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x62);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x62;
break;
case COMBIOS_COMPONENT_VIDEO_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x64);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x64;
break;
case COMBIOS_FAN_SPEED_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x66);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x66;
break;
case COMBIOS_OVERDRIVE_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x68);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x68;
break;
case COMBIOS_OEM_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x6a);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x6a;
break;
case COMBIOS_DYN_CLK_2_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x6c);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x6c;
break;
case COMBIOS_POWER_CONNECTOR_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x6e);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x6e;
break;
case COMBIOS_I2C_INFO_TABLE:
- check_offset = RBIOS16(rdev->bios_header_start + 0x70);
- if (check_offset)
- offset = check_offset;
+ check_offset = 0x70;
break;
/* relative offset tables */
case COMBIOS_ASIC_INIT_3_TABLE: /* offset from misc info */
@@ -439,11 +371,16 @@ static uint16_t combios_get_table_offset(struct drm_device *dev,
}
break;
default:
+ check_offset = 0;
break;
}
- return offset;
+ size = RBIOS8(rdev->bios_header_start + 0x6);
+ /* check absolute offset tables */
+ if (table < COMBIOS_ASIC_INIT_3_TABLE && check_offset && check_offset < size)
+ offset = RBIOS16(rdev->bios_header_start + check_offset);
+ return offset;
}
bool radeon_combios_check_hardcoded_edid(struct radeon_device *rdev)
@@ -965,16 +902,22 @@ struct radeon_encoder_primary_dac *radeon_combios_get_primary_dac_info(struct
dac = RBIOS8(dac_info + 0x3) & 0xf;
p_dac->ps2_pdac_adj = (bg << 8) | (dac);
}
- /* if the values are all zeros, use the table */
- if (p_dac->ps2_pdac_adj)
+ /* if the values are zeros, use the table */
+ if ((dac == 0) || (bg == 0))
+ found = 0;
+ else
found = 1;
}
/* quirks */
+ /* Radeon 7000 (RV100) */
+ if (((dev->pdev->device == 0x5159) &&
+ (dev->pdev->subsystem_vendor == 0x174B) &&
+ (dev->pdev->subsystem_device == 0x7c28)) ||
/* Radeon 9100 (R200) */
- if ((dev->pdev->device == 0x514D) &&
+ ((dev->pdev->device == 0x514D) &&
(dev->pdev->subsystem_vendor == 0x174B) &&
- (dev->pdev->subsystem_device == 0x7149)) {
+ (dev->pdev->subsystem_device == 0x7149))) {
/* vbios value is bad, use the default */
found = 0;
}
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index e5419b350170..29876b1be8ec 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -167,6 +167,7 @@ int radeon_msi = -1;
int radeon_lockup_timeout = 10000;
int radeon_fastfb = 0;
int radeon_dpm = -1;
+int radeon_aspm = -1;
MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers");
module_param_named(no_wb, radeon_no_wb, int, 0444);
@@ -225,6 +226,9 @@ module_param_named(fastfb, radeon_fastfb, int, 0444);
MODULE_PARM_DESC(dpm, "DPM support (1 = enable, 0 = disable, -1 = auto)");
module_param_named(dpm, radeon_dpm, int, 0444);
+MODULE_PARM_DESC(aspm, "ASPM support (1 = enable, 0 = disable, -1 = auto)");
+module_param_named(aspm, radeon_aspm, int, 0444);
+
static struct pci_device_id pciidlist[] = {
radeon_PCI_IDS
};
diff --git a/drivers/gpu/drm/radeon/radeon_fence.c b/drivers/gpu/drm/radeon/radeon_fence.c
index ddb8f8e04eb5..7ddb0efe2408 100644
--- a/drivers/gpu/drm/radeon/radeon_fence.c
+++ b/drivers/gpu/drm/radeon/radeon_fence.c
@@ -782,7 +782,7 @@ int radeon_fence_driver_start_ring(struct radeon_device *rdev, int ring)
} else {
/* put fence directly behind firmware */
- index = ALIGN(rdev->uvd_fw->size, 8);
+ index = ALIGN(rdev->uvd.fw_size, 8);
rdev->fence_drv[ring].cpu_addr = rdev->uvd.cpu_addr + index;
rdev->fence_drv[ring].gpu_addr = rdev->uvd.gpu_addr + index;
}
diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c
index 43ec4a401f07..6a51d943ccf4 100644
--- a/drivers/gpu/drm/radeon/radeon_gart.c
+++ b/drivers/gpu/drm/radeon/radeon_gart.c
@@ -467,6 +467,7 @@ int radeon_vm_manager_init(struct radeon_device *rdev)
size *= 2;
r = radeon_sa_bo_manager_init(rdev, &rdev->vm_manager.sa_manager,
RADEON_GPU_PAGE_ALIGN(size),
+ RADEON_VM_PTB_ALIGN_SIZE,
RADEON_GEM_DOMAIN_VRAM);
if (r) {
dev_err(rdev->dev, "failed to allocate vm bo (%dKB)\n",
@@ -620,10 +621,10 @@ int radeon_vm_alloc_pt(struct radeon_device *rdev, struct radeon_vm *vm)
}
retry:
- pd_size = RADEON_GPU_PAGE_ALIGN(radeon_vm_directory_size(rdev));
+ pd_size = radeon_vm_directory_size(rdev);
r = radeon_sa_bo_new(rdev, &rdev->vm_manager.sa_manager,
&vm->page_directory, pd_size,
- RADEON_GPU_PAGE_SIZE, false);
+ RADEON_VM_PTB_ALIGN_SIZE, false);
if (r == -ENOMEM) {
r = radeon_vm_evict(rdev, vm);
if (r)
diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
index bcdefd1dcd43..081886b0642d 100644
--- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
@@ -260,10 +260,6 @@ int radeon_irq_kms_init(struct radeon_device *rdev)
{
int r = 0;
- INIT_WORK(&rdev->hotplug_work, radeon_hotplug_work_func);
- INIT_WORK(&rdev->audio_work, r600_audio_update_hdmi);
- INIT_WORK(&rdev->reset_work, radeon_irq_reset_work_func);
-
spin_lock_init(&rdev->irq.lock);
r = drm_vblank_init(rdev->ddev, rdev->num_crtc);
if (r) {
@@ -285,6 +281,11 @@ int radeon_irq_kms_init(struct radeon_device *rdev)
rdev->irq.installed = false;
return r;
}
+
+ INIT_WORK(&rdev->hotplug_work, radeon_hotplug_work_func);
+ INIT_WORK(&rdev->audio_work, r600_audio_update_hdmi);
+ INIT_WORK(&rdev->reset_work, radeon_irq_reset_work_func);
+
DRM_INFO("radeon: irq initialized.\n");
return 0;
}
@@ -304,8 +305,8 @@ void radeon_irq_kms_fini(struct radeon_device *rdev)
rdev->irq.installed = false;
if (rdev->msi_enabled)
pci_disable_msi(rdev->pdev);
+ flush_work(&rdev->hotplug_work);
}
- flush_work(&rdev->hotplug_work);
}
/**
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
index 0219d263e2df..2020bf4a3830 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -377,6 +377,7 @@ int radeon_bo_list_validate(struct ww_acquire_ctx *ticket,
domain = lobj->alt_domain;
goto retry;
}
+ ttm_eu_backoff_reservation(ticket, head);
return r;
}
}
diff --git a/drivers/gpu/drm/radeon/radeon_object.h b/drivers/gpu/drm/radeon/radeon_object.h
index 91519a5622b4..49c82c480013 100644
--- a/drivers/gpu/drm/radeon/radeon_object.h
+++ b/drivers/gpu/drm/radeon/radeon_object.h
@@ -174,7 +174,7 @@ static inline void * radeon_sa_bo_cpu_addr(struct radeon_sa_bo *sa_bo)
extern int radeon_sa_bo_manager_init(struct radeon_device *rdev,
struct radeon_sa_manager *sa_manager,
- unsigned size, u32 domain);
+ unsigned size, u32 align, u32 domain);
extern void radeon_sa_bo_manager_fini(struct radeon_device *rdev,
struct radeon_sa_manager *sa_manager);
extern int radeon_sa_bo_manager_start(struct radeon_device *rdev,
diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
index 5f1c51a776ed..fb5ea6208970 100644
--- a/drivers/gpu/drm/radeon/radeon_ring.c
+++ b/drivers/gpu/drm/radeon/radeon_ring.c
@@ -224,6 +224,7 @@ int radeon_ib_pool_init(struct radeon_device *rdev)
}
r = radeon_sa_bo_manager_init(rdev, &rdev->ring_tmp_bo,
RADEON_IB_POOL_SIZE*64*1024,
+ RADEON_GPU_PAGE_SIZE,
RADEON_GEM_DOMAIN_GTT);
if (r) {
return r;
diff --git a/drivers/gpu/drm/radeon/radeon_sa.c b/drivers/gpu/drm/radeon/radeon_sa.c
index 0abe5a9431bb..f0bac68254b7 100644
--- a/drivers/gpu/drm/radeon/radeon_sa.c
+++ b/drivers/gpu/drm/radeon/radeon_sa.c
@@ -49,7 +49,7 @@ static void radeon_sa_bo_try_free(struct radeon_sa_manager *sa_manager);
int radeon_sa_bo_manager_init(struct radeon_device *rdev,
struct radeon_sa_manager *sa_manager,
- unsigned size, u32 domain)
+ unsigned size, u32 align, u32 domain)
{
int i, r;
@@ -57,13 +57,14 @@ int radeon_sa_bo_manager_init(struct radeon_device *rdev,
sa_manager->bo = NULL;
sa_manager->size = size;
sa_manager->domain = domain;
+ sa_manager->align = align;
sa_manager->hole = &sa_manager->olist;
INIT_LIST_HEAD(&sa_manager->olist);
for (i = 0; i < RADEON_NUM_RINGS; ++i) {
INIT_LIST_HEAD(&sa_manager->flist[i]);
}
- r = radeon_bo_create(rdev, size, RADEON_GPU_PAGE_SIZE, true,
+ r = radeon_bo_create(rdev, size, align, true,
domain, NULL, &sa_manager->bo);
if (r) {
dev_err(rdev->dev, "(%d) failed to allocate bo for manager\n", r);
@@ -317,7 +318,7 @@ int radeon_sa_bo_new(struct radeon_device *rdev,
unsigned tries[RADEON_NUM_RINGS];
int i, r;
- BUG_ON(align > RADEON_GPU_PAGE_SIZE);
+ BUG_ON(align > sa_manager->align);
BUG_ON(size > sa_manager->size);
*sa_bo = kmalloc(sizeof(struct radeon_sa_bo), GFP_KERNEL);
diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c
index 41efcec28cd8..414fd145d20e 100644
--- a/drivers/gpu/drm/radeon/radeon_uvd.c
+++ b/drivers/gpu/drm/radeon/radeon_uvd.c
@@ -56,20 +56,13 @@ static void radeon_uvd_idle_work_handler(struct work_struct *work);
int radeon_uvd_init(struct radeon_device *rdev)
{
- struct platform_device *pdev;
+ const struct firmware *fw;
unsigned long bo_size;
const char *fw_name;
int i, r;
INIT_DELAYED_WORK(&rdev->uvd.idle_work, radeon_uvd_idle_work_handler);
- pdev = platform_device_register_simple("radeon_uvd", 0, NULL, 0);
- r = IS_ERR(pdev);
- if (r) {
- dev_err(rdev->dev, "radeon_uvd: Failed to register firmware\n");
- return -EINVAL;
- }
-
switch (rdev->family) {
case CHIP_RV710:
case CHIP_RV730:
@@ -112,17 +105,14 @@ int radeon_uvd_init(struct radeon_device *rdev)
return -EINVAL;
}
- r = request_firmware(&rdev->uvd_fw, fw_name, &pdev->dev);
+ r = request_firmware(&fw, fw_name, rdev->dev);
if (r) {
dev_err(rdev->dev, "radeon_uvd: Can't load firmware \"%s\"\n",
fw_name);
- platform_device_unregister(pdev);
return r;
}
- platform_device_unregister(pdev);
-
- bo_size = RADEON_GPU_PAGE_ALIGN(rdev->uvd_fw->size + 8) +
+ bo_size = RADEON_GPU_PAGE_ALIGN(fw->size + 8) +
RADEON_UVD_STACK_SIZE + RADEON_UVD_HEAP_SIZE;
r = radeon_bo_create(rdev, bo_size, PAGE_SIZE, true,
RADEON_GEM_DOMAIN_VRAM, NULL, &rdev->uvd.vcpu_bo);
@@ -131,16 +121,35 @@ int radeon_uvd_init(struct radeon_device *rdev)
return r;
}
- r = radeon_uvd_resume(rdev);
- if (r)
+ r = radeon_bo_reserve(rdev->uvd.vcpu_bo, false);
+ if (r) {
+ radeon_bo_unref(&rdev->uvd.vcpu_bo);
+ dev_err(rdev->dev, "(%d) failed to reserve UVD bo\n", r);
return r;
+ }
- memset(rdev->uvd.cpu_addr, 0, bo_size);
- memcpy(rdev->uvd.cpu_addr, rdev->uvd_fw->data, rdev->uvd_fw->size);
+ r = radeon_bo_pin(rdev->uvd.vcpu_bo, RADEON_GEM_DOMAIN_VRAM,
+ &rdev->uvd.gpu_addr);
+ if (r) {
+ radeon_bo_unreserve(rdev->uvd.vcpu_bo);
+ radeon_bo_unref(&rdev->uvd.vcpu_bo);
+ dev_err(rdev->dev, "(%d) UVD bo pin failed\n", r);
+ return r;
+ }
- r = radeon_uvd_suspend(rdev);
- if (r)
+ r = radeon_bo_kmap(rdev->uvd.vcpu_bo, &rdev->uvd.cpu_addr);
+ if (r) {
+ dev_err(rdev->dev, "(%d) UVD map failed\n", r);
return r;
+ }
+
+ radeon_bo_unreserve(rdev->uvd.vcpu_bo);
+
+ rdev->uvd.fw_size = fw->size;
+ memset(rdev->uvd.cpu_addr, 0, bo_size);
+ memcpy(rdev->uvd.cpu_addr, fw->data, fw->size);
+
+ release_firmware(fw);
for (i = 0; i < RADEON_MAX_UVD_HANDLES; ++i) {
atomic_set(&rdev->uvd.handles[i], 0);
@@ -152,71 +161,47 @@ int radeon_uvd_init(struct radeon_device *rdev)
void radeon_uvd_fini(struct radeon_device *rdev)
{
- radeon_uvd_suspend(rdev);
- radeon_bo_unref(&rdev->uvd.vcpu_bo);
-}
-
-int radeon_uvd_suspend(struct radeon_device *rdev)
-{
int r;
if (rdev->uvd.vcpu_bo == NULL)
- return 0;
+ return;
r = radeon_bo_reserve(rdev->uvd.vcpu_bo, false);
if (!r) {
radeon_bo_kunmap(rdev->uvd.vcpu_bo);
radeon_bo_unpin(rdev->uvd.vcpu_bo);
- rdev->uvd.cpu_addr = NULL;
- if (!radeon_bo_pin(rdev->uvd.vcpu_bo, RADEON_GEM_DOMAIN_CPU, NULL)) {
- radeon_bo_kmap(rdev->uvd.vcpu_bo, &rdev->uvd.cpu_addr);
- }
radeon_bo_unreserve(rdev->uvd.vcpu_bo);
-
- if (rdev->uvd.cpu_addr) {
- radeon_fence_driver_start_ring(rdev, R600_RING_TYPE_UVD_INDEX);
- } else {
- rdev->fence_drv[R600_RING_TYPE_UVD_INDEX].cpu_addr = NULL;
- }
}
- return r;
+
+ radeon_bo_unref(&rdev->uvd.vcpu_bo);
}
-int radeon_uvd_resume(struct radeon_device *rdev)
+int radeon_uvd_suspend(struct radeon_device *rdev)
{
- int r;
+ unsigned size;
if (rdev->uvd.vcpu_bo == NULL)
- return -EINVAL;
+ return 0;
- r = radeon_bo_reserve(rdev->uvd.vcpu_bo, false);
- if (r) {
- radeon_bo_unref(&rdev->uvd.vcpu_bo);
- dev_err(rdev->dev, "(%d) failed to reserve UVD bo\n", r);
- return r;
- }
+ size = radeon_bo_size(rdev->uvd.vcpu_bo);
+ rdev->uvd.saved_bo = kmalloc(size, GFP_KERNEL);
+ memcpy(rdev->uvd.saved_bo, rdev->uvd.cpu_addr, size);
- /* Have been pin in cpu unmap unpin */
- radeon_bo_kunmap(rdev->uvd.vcpu_bo);
- radeon_bo_unpin(rdev->uvd.vcpu_bo);
+ return 0;
+}
- r = radeon_bo_pin(rdev->uvd.vcpu_bo, RADEON_GEM_DOMAIN_VRAM,
- &rdev->uvd.gpu_addr);
- if (r) {
- radeon_bo_unreserve(rdev->uvd.vcpu_bo);
- radeon_bo_unref(&rdev->uvd.vcpu_bo);
- dev_err(rdev->dev, "(%d) UVD bo pin failed\n", r);
- return r;
- }
+int radeon_uvd_resume(struct radeon_device *rdev)
+{
+ if (rdev->uvd.vcpu_bo == NULL)
+ return -EINVAL;
- r = radeon_bo_kmap(rdev->uvd.vcpu_bo, &rdev->uvd.cpu_addr);
- if (r) {
- dev_err(rdev->dev, "(%d) UVD map failed\n", r);
- return r;
+ if (rdev->uvd.saved_bo != NULL) {
+ unsigned size = radeon_bo_size(rdev->uvd.vcpu_bo);
+ memcpy(rdev->uvd.cpu_addr, rdev->uvd.saved_bo, size);
+ kfree(rdev->uvd.saved_bo);
+ rdev->uvd.saved_bo = NULL;
}
- radeon_bo_unreserve(rdev->uvd.vcpu_bo);
-
return 0;
}
diff --git a/drivers/gpu/drm/radeon/rs780_dpm.c b/drivers/gpu/drm/radeon/rs780_dpm.c
index bef832a62fee..d1a1ce73bd45 100644
--- a/drivers/gpu/drm/radeon/rs780_dpm.c
+++ b/drivers/gpu/drm/radeon/rs780_dpm.c
@@ -28,6 +28,7 @@
#include "r600_dpm.h"
#include "rs780_dpm.h"
#include "atom.h"
+#include <linux/seq_file.h>
static struct igp_ps *rs780_get_ps(struct radeon_ps *rps)
{
@@ -961,3 +962,27 @@ u32 rs780_dpm_get_mclk(struct radeon_device *rdev, bool low)
return pi->bootup_uma_clk;
}
+
+void rs780_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
+ struct seq_file *m)
+{
+ struct radeon_ps *rps = rdev->pm.dpm.current_ps;
+ struct igp_ps *ps = rs780_get_ps(rps);
+ u32 current_fb_div = RREG32(FVTHROT_STATUS_REG0) & CURRENT_FEEDBACK_DIV_MASK;
+ u32 func_cntl = RREG32(CG_SPLL_FUNC_CNTL);
+ u32 ref_div = ((func_cntl & SPLL_REF_DIV_MASK) >> SPLL_REF_DIV_SHIFT) + 1;
+ u32 post_div = ((func_cntl & SPLL_SW_HILEN_MASK) >> SPLL_SW_HILEN_SHIFT) + 1 +
+ ((func_cntl & SPLL_SW_LOLEN_MASK) >> SPLL_SW_LOLEN_SHIFT) + 1;
+ u32 sclk = (rdev->clock.spll.reference_freq * current_fb_div) /
+ (post_div * ref_div);
+
+ seq_printf(m, "uvd vclk: %d dclk: %d\n", rps->vclk, rps->dclk);
+
+ /* guess based on the current sclk */
+ if (sclk < (ps->sclk_low + 500))
+ seq_printf(m, "power level 0 sclk: %u vddc_index: %d\n",
+ ps->sclk_low, ps->min_voltage);
+ else
+ seq_printf(m, "power level 1 sclk: %u vddc_index: %d\n",
+ ps->sclk_high, ps->max_voltage);
+}
diff --git a/drivers/gpu/drm/radeon/rs780d.h b/drivers/gpu/drm/radeon/rs780d.h
index b1142ed1c628..cfbe9a43d97b 100644
--- a/drivers/gpu/drm/radeon/rs780d.h
+++ b/drivers/gpu/drm/radeon/rs780d.h
@@ -28,6 +28,7 @@
# define SPLL_SLEEP (1 << 1)
# define SPLL_REF_DIV(x) ((x) << 2)
# define SPLL_REF_DIV_MASK (7 << 2)
+# define SPLL_REF_DIV_SHIFT 2
# define SPLL_FB_DIV(x) ((x) << 5)
# define SPLL_FB_DIV_MASK (0xff << 2)
# define SPLL_FB_DIV_SHIFT 2
@@ -36,8 +37,10 @@
# define SPLL_PULSENUM_MASK (3 << 14)
# define SPLL_SW_HILEN(x) ((x) << 16)
# define SPLL_SW_HILEN_MASK (0xf << 16)
+# define SPLL_SW_HILEN_SHIFT 16
# define SPLL_SW_LOLEN(x) ((x) << 20)
# define SPLL_SW_LOLEN_MASK (0xf << 20)
+# define SPLL_SW_LOLEN_SHIFT 20
# define SPLL_DIVEN (1 << 24)
# define SPLL_BYPASS_EN (1 << 25)
# define SPLL_CHG_STATUS (1 << 29)
diff --git a/drivers/gpu/drm/radeon/rv6xx_dpm.c b/drivers/gpu/drm/radeon/rv6xx_dpm.c
index 8303de267ee5..363018c60412 100644
--- a/drivers/gpu/drm/radeon/rv6xx_dpm.c
+++ b/drivers/gpu/drm/radeon/rv6xx_dpm.c
@@ -819,7 +819,7 @@ static void rv6xx_program_memory_timing_parameters(struct radeon_device *rdev)
POWERMODE1(calculate_memory_refresh_rate(rdev,
pi->hw.sclks[R600_POWER_LEVEL_MEDIUM])) |
POWERMODE2(calculate_memory_refresh_rate(rdev,
- pi->hw.sclks[R600_POWER_LEVEL_MEDIUM])) |
+ pi->hw.sclks[R600_POWER_LEVEL_HIGH])) |
POWERMODE3(calculate_memory_refresh_rate(rdev,
pi->hw.sclks[R600_POWER_LEVEL_HIGH])));
WREG32(ARB_RFSH_RATE, arb_refresh_rate);
@@ -1182,10 +1182,10 @@ static void rv6xx_program_display_gap(struct radeon_device *rdev)
u32 tmp = RREG32(CG_DISPLAY_GAP_CNTL);
tmp &= ~(DISP1_GAP_MCHG_MASK | DISP2_GAP_MCHG_MASK);
- if (RREG32(AVIVO_D1CRTC_CONTROL) & AVIVO_CRTC_EN) {
+ if (rdev->pm.dpm.new_active_crtcs & 1) {
tmp |= DISP1_GAP_MCHG(R600_PM_DISPLAY_GAP_VBLANK);
tmp |= DISP2_GAP_MCHG(R600_PM_DISPLAY_GAP_IGNORE);
- } else if (RREG32(AVIVO_D2CRTC_CONTROL) & AVIVO_CRTC_EN) {
+ } else if (rdev->pm.dpm.new_active_crtcs & 2) {
tmp |= DISP1_GAP_MCHG(R600_PM_DISPLAY_GAP_IGNORE);
tmp |= DISP2_GAP_MCHG(R600_PM_DISPLAY_GAP_VBLANK);
} else {
@@ -1670,6 +1670,8 @@ int rv6xx_dpm_set_power_state(struct radeon_device *rdev)
struct radeon_ps *old_ps = rdev->pm.dpm.current_ps;
int ret;
+ pi->restricted_levels = 0;
+
rv6xx_set_uvd_clock_before_set_eng_clock(rdev, new_ps, old_ps);
rv6xx_clear_vc(rdev);
@@ -1756,6 +1758,8 @@ int rv6xx_dpm_set_power_state(struct radeon_device *rdev)
rv6xx_set_uvd_clock_after_set_eng_clock(rdev, new_ps, old_ps);
+ rdev->pm.dpm.forced_level = RADEON_DPM_FORCED_LEVEL_AUTO;
+
return 0;
}
@@ -1763,12 +1767,14 @@ void rv6xx_setup_asic(struct radeon_device *rdev)
{
r600_enable_acpi_pm(rdev);
- if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L0s)
- rv6xx_enable_l0s(rdev);
- if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L1)
- rv6xx_enable_l1(rdev);
- if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_TURNOFFPLL_ASPML1)
- rv6xx_enable_pll_sleep_in_l1(rdev);
+ if (radeon_aspm != 0) {
+ if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L0s)
+ rv6xx_enable_l0s(rdev);
+ if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L1)
+ rv6xx_enable_l1(rdev);
+ if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_TURNOFFPLL_ASPML1)
+ rv6xx_enable_pll_sleep_in_l1(rdev);
+ }
}
void rv6xx_dpm_display_configuration_changed(struct radeon_device *rdev)
@@ -2083,3 +2089,34 @@ u32 rv6xx_dpm_get_mclk(struct radeon_device *rdev, bool low)
else
return requested_state->high.mclk;
}
+
+int rv6xx_dpm_force_performance_level(struct radeon_device *rdev,
+ enum radeon_dpm_forced_level level)
+{
+ struct rv6xx_power_info *pi = rv6xx_get_pi(rdev);
+
+ if (level == RADEON_DPM_FORCED_LEVEL_HIGH) {
+ pi->restricted_levels = 3;
+ } else if (level == RADEON_DPM_FORCED_LEVEL_LOW) {
+ pi->restricted_levels = 2;
+ } else {
+ pi->restricted_levels = 0;
+ }
+
+ rv6xx_clear_vc(rdev);
+ r600_power_level_enable(rdev, R600_POWER_LEVEL_LOW, true);
+ r600_set_at(rdev, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF);
+ r600_wait_for_power_level(rdev, R600_POWER_LEVEL_LOW);
+ r600_power_level_enable(rdev, R600_POWER_LEVEL_HIGH, false);
+ r600_power_level_enable(rdev, R600_POWER_LEVEL_MEDIUM, false);
+ rv6xx_enable_medium(rdev);
+ rv6xx_enable_high(rdev);
+ if (pi->restricted_levels == 3)
+ r600_power_level_enable(rdev, R600_POWER_LEVEL_LOW, false);
+ rv6xx_program_vc(rdev);
+ rv6xx_program_at(rdev);
+
+ rdev->pm.dpm.forced_level = level;
+
+ return 0;
+}
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index 4a62ad2e5399..30ea14e8854c 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -813,7 +813,7 @@ int rv770_uvd_resume(struct radeon_device *rdev)
/* programm the VCPU memory controller bits 0-27 */
addr = rdev->uvd.gpu_addr >> 3;
- size = RADEON_GPU_PAGE_ALIGN(rdev->uvd_fw->size + 4) >> 3;
+ size = RADEON_GPU_PAGE_ALIGN(rdev->uvd.fw_size + 4) >> 3;
WREG32(UVD_VCPU_CACHE_OFFSET0, addr);
WREG32(UVD_VCPU_CACHE_SIZE0, size);
diff --git a/drivers/gpu/drm/radeon/rv770_dpm.c b/drivers/gpu/drm/radeon/rv770_dpm.c
index d914e04ea39a..2d347925f77d 100644
--- a/drivers/gpu/drm/radeon/rv770_dpm.c
+++ b/drivers/gpu/drm/radeon/rv770_dpm.c
@@ -2099,12 +2099,14 @@ void rv770_dpm_setup_asic(struct radeon_device *rdev)
rv770_enable_acpi_pm(rdev);
- if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L0s)
- rv770_enable_l0s(rdev);
- if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L1)
- rv770_enable_l1(rdev);
- if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_TURNOFFPLL_ASPML1)
- rv770_enable_pll_sleep_in_l1(rdev);
+ if (radeon_aspm != 0) {
+ if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L0s)
+ rv770_enable_l0s(rdev);
+ if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L1)
+ rv770_enable_l1(rdev);
+ if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_TURNOFFPLL_ASPML1)
+ rv770_enable_pll_sleep_in_l1(rdev);
+ }
}
void rv770_dpm_display_configuration_changed(struct radeon_device *rdev)
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index 234906709067..d325280e2f9f 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -22,7 +22,6 @@
* Authors: Alex Deucher
*/
#include <linux/firmware.h>
-#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <drm/drmP.h>
@@ -1541,7 +1540,6 @@ static int si_mc_load_microcode(struct radeon_device *rdev)
static int si_init_microcode(struct radeon_device *rdev)
{
- struct platform_device *pdev;
const char *chip_name;
const char *rlc_chip_name;
size_t pfp_req_size, me_req_size, ce_req_size, rlc_req_size, mc_req_size;
@@ -1551,13 +1549,6 @@ static int si_init_microcode(struct radeon_device *rdev)
DRM_DEBUG("\n");
- pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
- err = IS_ERR(pdev);
- if (err) {
- printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
- return -EINVAL;
- }
-
switch (rdev->family) {
case CHIP_TAHITI:
chip_name = "TAHITI";
@@ -1615,7 +1606,7 @@ static int si_init_microcode(struct radeon_device *rdev)
DRM_INFO("Loading %s Microcode\n", chip_name);
snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
- err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->pfp_fw->size != pfp_req_size) {
@@ -1627,7 +1618,7 @@ static int si_init_microcode(struct radeon_device *rdev)
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
- err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->me_fw->size != me_req_size) {
@@ -1638,7 +1629,7 @@ static int si_init_microcode(struct radeon_device *rdev)
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name);
- err = request_firmware(&rdev->ce_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->ce_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->ce_fw->size != ce_req_size) {
@@ -1649,7 +1640,7 @@ static int si_init_microcode(struct radeon_device *rdev)
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", rlc_chip_name);
- err = request_firmware(&rdev->rlc_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->rlc_fw->size != rlc_req_size) {
@@ -1660,7 +1651,7 @@ static int si_init_microcode(struct radeon_device *rdev)
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
- err = request_firmware(&rdev->mc_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->mc_fw->size != mc_req_size) {
@@ -1671,7 +1662,7 @@ static int si_init_microcode(struct radeon_device *rdev)
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name);
- err = request_firmware(&rdev->smc_fw, fw_name, &pdev->dev);
+ err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
if (err)
goto out;
if (rdev->smc_fw->size != smc_req_size) {
@@ -1682,8 +1673,6 @@ static int si_init_microcode(struct radeon_device *rdev)
}
out:
- platform_device_unregister(pdev);
-
if (err) {
if (err != -EINVAL)
printk(KERN_ERR
@@ -4401,6 +4390,270 @@ void si_vm_fini(struct radeon_device *rdev)
}
/**
+ * si_vm_decode_fault - print human readable fault info
+ *
+ * @rdev: radeon_device pointer
+ * @status: VM_CONTEXT1_PROTECTION_FAULT_STATUS register value
+ * @addr: VM_CONTEXT1_PROTECTION_FAULT_ADDR register value
+ *
+ * Print human readable fault information (SI).
+ */
+static void si_vm_decode_fault(struct radeon_device *rdev,
+ u32 status, u32 addr)
+{
+ u32 mc_id = (status & MEMORY_CLIENT_ID_MASK) >> MEMORY_CLIENT_ID_SHIFT;
+ u32 vmid = (status & FAULT_VMID_MASK) >> FAULT_VMID_SHIFT;
+ u32 protections = (status & PROTECTIONS_MASK) >> PROTECTIONS_SHIFT;
+ char *block;
+
+ if (rdev->family == CHIP_TAHITI) {
+ switch (mc_id) {
+ case 160:
+ case 144:
+ case 96:
+ case 80:
+ case 224:
+ case 208:
+ case 32:
+ case 16:
+ block = "CB";
+ break;
+ case 161:
+ case 145:
+ case 97:
+ case 81:
+ case 225:
+ case 209:
+ case 33:
+ case 17:
+ block = "CB_FMASK";
+ break;
+ case 162:
+ case 146:
+ case 98:
+ case 82:
+ case 226:
+ case 210:
+ case 34:
+ case 18:
+ block = "CB_CMASK";
+ break;
+ case 163:
+ case 147:
+ case 99:
+ case 83:
+ case 227:
+ case 211:
+ case 35:
+ case 19:
+ block = "CB_IMMED";
+ break;
+ case 164:
+ case 148:
+ case 100:
+ case 84:
+ case 228:
+ case 212:
+ case 36:
+ case 20:
+ block = "DB";
+ break;
+ case 165:
+ case 149:
+ case 101:
+ case 85:
+ case 229:
+ case 213:
+ case 37:
+ case 21:
+ block = "DB_HTILE";
+ break;
+ case 167:
+ case 151:
+ case 103:
+ case 87:
+ case 231:
+ case 215:
+ case 39:
+ case 23:
+ block = "DB_STEN";
+ break;
+ case 72:
+ case 68:
+ case 64:
+ case 8:
+ case 4:
+ case 0:
+ case 136:
+ case 132:
+ case 128:
+ case 200:
+ case 196:
+ case 192:
+ block = "TC";
+ break;
+ case 112:
+ case 48:
+ block = "CP";
+ break;
+ case 49:
+ case 177:
+ case 50:
+ case 178:
+ block = "SH";
+ break;
+ case 53:
+ case 190:
+ block = "VGT";
+ break;
+ case 117:
+ block = "IH";
+ break;
+ case 51:
+ case 115:
+ block = "RLC";
+ break;
+ case 119:
+ case 183:
+ block = "DMA0";
+ break;
+ case 61:
+ block = "DMA1";
+ break;
+ case 248:
+ case 120:
+ block = "HDP";
+ break;
+ default:
+ block = "unknown";
+ break;
+ }
+ } else {
+ switch (mc_id) {
+ case 32:
+ case 16:
+ case 96:
+ case 80:
+ case 160:
+ case 144:
+ case 224:
+ case 208:
+ block = "CB";
+ break;
+ case 33:
+ case 17:
+ case 97:
+ case 81:
+ case 161:
+ case 145:
+ case 225:
+ case 209:
+ block = "CB_FMASK";
+ break;
+ case 34:
+ case 18:
+ case 98:
+ case 82:
+ case 162:
+ case 146:
+ case 226:
+ case 210:
+ block = "CB_CMASK";
+ break;
+ case 35:
+ case 19:
+ case 99:
+ case 83:
+ case 163:
+ case 147:
+ case 227:
+ case 211:
+ block = "CB_IMMED";
+ break;
+ case 36:
+ case 20:
+ case 100:
+ case 84:
+ case 164:
+ case 148:
+ case 228:
+ case 212:
+ block = "DB";
+ break;
+ case 37:
+ case 21:
+ case 101:
+ case 85:
+ case 165:
+ case 149:
+ case 229:
+ case 213:
+ block = "DB_HTILE";
+ break;
+ case 39:
+ case 23:
+ case 103:
+ case 87:
+ case 167:
+ case 151:
+ case 231:
+ case 215:
+ block = "DB_STEN";
+ break;
+ case 72:
+ case 68:
+ case 8:
+ case 4:
+ case 136:
+ case 132:
+ case 200:
+ case 196:
+ block = "TC";
+ break;
+ case 112:
+ case 48:
+ block = "CP";
+ break;
+ case 49:
+ case 177:
+ case 50:
+ case 178:
+ block = "SH";
+ break;
+ case 53:
+ block = "VGT";
+ break;
+ case 117:
+ block = "IH";
+ break;
+ case 51:
+ case 115:
+ block = "RLC";
+ break;
+ case 119:
+ case 183:
+ block = "DMA0";
+ break;
+ case 61:
+ block = "DMA1";
+ break;
+ case 248:
+ case 120:
+ block = "HDP";
+ break;
+ default:
+ block = "unknown";
+ break;
+ }
+ }
+
+ printk("VM fault (0x%02x, vmid %d) at page %u, %s from %s (%d)\n",
+ protections, vmid, addr,
+ (status & MEMORY_CLIENT_RW_MASK) ? "write" : "read",
+ block, mc_id);
+}
+
+/**
* si_vm_set_page - update the page tables using the CP
*
* @rdev: radeon_device pointer
@@ -5766,6 +6019,7 @@ int si_irq_process(struct radeon_device *rdev)
u32 ring_index;
bool queue_hotplug = false;
bool queue_thermal = false;
+ u32 status, addr;
if (!rdev->ih.enabled || rdev->shutdown)
return IRQ_NONE;
@@ -6001,11 +6255,14 @@ restart_ih:
break;
case 146:
case 147:
+ addr = RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR);
+ status = RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS);
dev_err(rdev->dev, "GPU fault detected: %d 0x%08x\n", src_id, src_data);
dev_err(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x%08X\n",
- RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR));
+ addr);
dev_err(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
- RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS));
+ status);
+ si_vm_decode_fault(rdev, status, addr);
/* reset addr and status */
WREG32_P(VM_CONTEXT1_CNTL2, 1, ~1);
break;
@@ -6796,6 +7053,9 @@ static void si_program_aspm(struct radeon_device *rdev)
bool disable_l0s = false, disable_l1 = false, disable_plloff_in_l1 = false;
bool disable_clkreq = false;
+ if (radeon_aspm == 0)
+ return;
+
if (!(rdev->flags & RADEON_IS_PCIE))
return;
diff --git a/drivers/gpu/drm/radeon/sid.h b/drivers/gpu/drm/radeon/sid.h
index 12a20eb77d0c..2c8da27a929f 100644
--- a/drivers/gpu/drm/radeon/sid.h
+++ b/drivers/gpu/drm/radeon/sid.h
@@ -367,6 +367,20 @@
#define VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x14FC
#define VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x14DC
+#define PROTECTIONS_MASK (0xf << 0)
+#define PROTECTIONS_SHIFT 0
+ /* bit 0: range
+ * bit 1: pde0
+ * bit 2: valid
+ * bit 3: read
+ * bit 4: write
+ */
+#define MEMORY_CLIENT_ID_MASK (0xff << 12)
+#define MEMORY_CLIENT_ID_SHIFT 12
+#define MEMORY_CLIENT_RW_MASK (1 << 24)
+#define MEMORY_CLIENT_RW_SHIFT 24
+#define FAULT_VMID_MASK (0xf << 25)
+#define FAULT_VMID_SHIFT 25
#define VM_INVALIDATE_REQUEST 0x1478
#define VM_INVALIDATE_RESPONSE 0x147c
diff --git a/drivers/gpu/drm/radeon/sumo_dpm.c b/drivers/gpu/drm/radeon/sumo_dpm.c
index 11b6b9924f1b..c0a850319908 100644
--- a/drivers/gpu/drm/radeon/sumo_dpm.c
+++ b/drivers/gpu/drm/radeon/sumo_dpm.c
@@ -1732,7 +1732,13 @@ int sumo_dpm_init(struct radeon_device *rdev)
pi->enable_sclk_ds = true;
pi->enable_dynamic_m3_arbiter = false;
pi->enable_dynamic_patch_ps = true;
- pi->enable_gfx_power_gating = true;
+ /* Some PALM chips don't seem to properly ungate gfx when UVD is in use;
+ * for now just disable gfx PG.
+ */
+ if (rdev->family == CHIP_PALM)
+ pi->enable_gfx_power_gating = false;
+ else
+ pi->enable_gfx_power_gating = true;
pi->enable_gfx_clock_gating = true;
pi->enable_mg_clock_gating = true;
pi->enable_auto_thermal_throttling = true;
@@ -1845,6 +1851,8 @@ int sumo_dpm_force_performance_level(struct radeon_device *rdev,
return 0;
if (level == RADEON_DPM_FORCED_LEVEL_HIGH) {
+ if (pi->enable_boost)
+ sumo_enable_boost(rdev, rps, false);
sumo_power_level_enable(rdev, ps->num_levels - 1, true);
sumo_set_forced_level(rdev, ps->num_levels - 1);
sumo_set_forced_mode_enabled(rdev);
@@ -1855,6 +1863,8 @@ int sumo_dpm_force_performance_level(struct radeon_device *rdev,
sumo_set_forced_mode_enabled(rdev);
sumo_set_forced_mode(rdev, false);
} else if (level == RADEON_DPM_FORCED_LEVEL_LOW) {
+ if (pi->enable_boost)
+ sumo_enable_boost(rdev, rps, false);
sumo_power_level_enable(rdev, 0, true);
sumo_set_forced_level(rdev, 0);
sumo_set_forced_mode_enabled(rdev);
@@ -1868,6 +1878,8 @@ int sumo_dpm_force_performance_level(struct radeon_device *rdev,
for (i = 0; i < ps->num_levels; i++) {
sumo_power_level_enable(rdev, i, true);
}
+ if (pi->enable_boost)
+ sumo_enable_boost(rdev, rps, true);
}
rdev->pm.dpm.forced_level = level;
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
index ff82877de876..dc0fe09b2ba1 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
@@ -249,8 +249,13 @@ static struct drm_driver rcar_du_driver = {
.gem_vm_ops = &drm_gem_cma_vm_ops,
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
- .gem_prime_import = drm_gem_cma_dmabuf_import,
- .gem_prime_export = drm_gem_cma_dmabuf_export,
+ .gem_prime_import = drm_gem_prime_import,
+ .gem_prime_export = drm_gem_prime_export,
+ .gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
+ .gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
+ .gem_prime_vmap = drm_gem_cma_prime_vmap,
+ .gem_prime_vunmap = drm_gem_cma_prime_vunmap,
+ .gem_prime_mmap = drm_gem_cma_prime_mmap,
.dumb_create = rcar_du_dumb_create,
.dumb_map_offset = drm_gem_cma_dumb_map_offset,
.dumb_destroy = drm_gem_cma_dumb_destroy,
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
index edc10181f551..5f83f9a3ef59 100644
--- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
+++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
@@ -276,8 +276,13 @@ static struct drm_driver shmob_drm_driver = {
.gem_vm_ops = &drm_gem_cma_vm_ops,
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
- .gem_prime_import = drm_gem_cma_dmabuf_import,
- .gem_prime_export = drm_gem_cma_dmabuf_export,
+ .gem_prime_import = drm_gem_prime_import,
+ .gem_prime_export = drm_gem_prime_export,
+ .gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
+ .gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
+ .gem_prime_vmap = drm_gem_cma_prime_vmap,
+ .gem_prime_vunmap = drm_gem_cma_prime_vunmap,
+ .gem_prime_mmap = drm_gem_cma_prime_mmap,
.dumb_create = drm_gem_cma_dumb_create,
.dumb_map_offset = drm_gem_cma_dumb_map_offset,
.dumb_destroy = drm_gem_cma_dumb_destroy,
diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c
index 4c605c70ebf9..deb5c25305af 100644
--- a/drivers/hv/hv_balloon.c
+++ b/drivers/hv/hv_balloon.c
@@ -562,7 +562,7 @@ static void hv_mem_hot_add(unsigned long start, unsigned long size,
struct hv_hotadd_state *has)
{
int ret = 0;
- int i, nid, t;
+ int i, nid;
unsigned long start_pfn;
unsigned long processed_pfn;
unsigned long total_pfn = pfn_count;
@@ -607,14 +607,11 @@ static void hv_mem_hot_add(unsigned long start, unsigned long size,
/*
* Wait for the memory block to be onlined.
+ * Since the hot add has succeeded, it is ok to
+ * proceed even if the pages in the hot added region
+ * have not been "onlined" within the allowed time.
*/
- t = wait_for_completion_timeout(&dm_device.ol_waitevent, 5*HZ);
- if (t == 0) {
- pr_info("hot_add memory timedout\n");
- has->ha_end_pfn -= HA_CHUNK;
- has->covered_end_pfn -= processed_pfn;
- break;
- }
+ wait_for_completion_timeout(&dm_device.ol_waitevent, 5*HZ);
}
@@ -978,6 +975,14 @@ static void post_status(struct hv_dynmem_device *dm)
dm->num_pages_ballooned +
compute_balloon_floor();
+ /*
+ * If our transaction ID is no longer current, just don't
+ * send the status. This can happen if we were interrupted
+ * after we picked our transaction ID.
+ */
+ if (status.hdr.trans_id != atomic_read(&trans_id))
+ return;
+
vmbus_sendpacket(dm->dev->channel, &status,
sizeof(struct dm_status),
(unsigned long)NULL,
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index a2464bf07c49..e8e071fc1d6d 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -690,7 +690,7 @@ int vmbus_device_register(struct hv_device *child_device_obj)
if (ret)
pr_err("Unable to register child device\n");
else
- pr_info("child device %s registered\n",
+ pr_debug("child device %s registered\n",
dev_name(&child_device_obj->device));
return ret;
@@ -702,14 +702,14 @@ int vmbus_device_register(struct hv_device *child_device_obj)
*/
void vmbus_device_unregister(struct hv_device *device_obj)
{
+ pr_debug("child device %s unregistered\n",
+ dev_name(&device_obj->device));
+
/*
* Kick off the process of unregistering the device.
* This will call vmbus_remove() and eventually vmbus_device_release()
*/
device_unregister(&device_obj->device);
-
- pr_info("child device %s unregistered\n",
- dev_name(&device_obj->device));
}
diff --git a/drivers/hwmon/abx500.c b/drivers/hwmon/abx500.c
index eee1134274c8..769fe20ec938 100644
--- a/drivers/hwmon/abx500.c
+++ b/drivers/hwmon/abx500.c
@@ -315,7 +315,7 @@ static SENSOR_DEVICE_ATTR(temp4_max_hyst, S_IWUSR | S_IRUGO,
static SENSOR_DEVICE_ATTR(temp4_min_alarm, S_IRUGO, show_min_alarm, NULL, 3);
static SENSOR_DEVICE_ATTR(temp4_max_alarm, S_IRUGO, show_max_alarm, NULL, 3);
-struct attribute *abx500_temp_attributes[] = {
+static struct attribute *abx500_temp_attributes[] = {
&sensor_dev_attr_name.dev_attr.attr,
&sensor_dev_attr_temp1_label.dev_attr.attr,
diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
index ade35cf3f488..2e5e2dc47eaf 100644
--- a/drivers/hwmon/coretemp.c
+++ b/drivers/hwmon/coretemp.c
@@ -195,7 +195,7 @@ struct tjmax {
int tjmax;
};
-static const struct tjmax __cpuinitconst tjmax_table[] = {
+static const struct tjmax tjmax_table[] = {
{ "CPU 230", 100000 }, /* Model 0x1c, stepping 2 */
{ "CPU 330", 125000 }, /* Model 0x1c, stepping 2 */
{ "CPU CE4110", 110000 }, /* Model 0x1c, stepping 10 Sodaville */
@@ -211,7 +211,7 @@ struct tjmax_model {
#define ANY 0xff
-static const struct tjmax_model __cpuinitconst tjmax_model_table[] = {
+static const struct tjmax_model tjmax_model_table[] = {
{ 0x1c, 10, 100000 }, /* D4xx, K4xx, N4xx, D5xx, K5xx, N5xx */
{ 0x1c, ANY, 90000 }, /* Z5xx, N2xx, possibly others
* Note: Also matches 230 and 330,
@@ -226,8 +226,7 @@ static const struct tjmax_model __cpuinitconst tjmax_model_table[] = {
{ 0x36, ANY, 100000 }, /* Atom Cedar Trail/Cedarview (N2xxx, D2xxx) */
};
-static int __cpuinit adjust_tjmax(struct cpuinfo_x86 *c, u32 id,
- struct device *dev)
+static int adjust_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev)
{
/* The 100C is default for both mobile and non mobile CPUs */
@@ -317,8 +316,7 @@ static int __cpuinit adjust_tjmax(struct cpuinfo_x86 *c, u32 id,
return tjmax;
}
-static int __cpuinit get_tjmax(struct cpuinfo_x86 *c, u32 id,
- struct device *dev)
+static int get_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev)
{
int err;
u32 eax, edx;
@@ -367,8 +365,8 @@ static int create_name_attr(struct platform_data *pdata,
return device_create_file(dev, &pdata->name_attr);
}
-static int __cpuinit create_core_attrs(struct temp_data *tdata,
- struct device *dev, int attr_no)
+static int create_core_attrs(struct temp_data *tdata, struct device *dev,
+ int attr_no)
{
int err, i;
static ssize_t (*const rd_ptr[TOTAL_ATTRS]) (struct device *dev,
@@ -401,7 +399,7 @@ exit_free:
}
-static int __cpuinit chk_ucode_version(unsigned int cpu)
+static int chk_ucode_version(unsigned int cpu)
{
struct cpuinfo_x86 *c = &cpu_data(cpu);
@@ -417,7 +415,7 @@ static int __cpuinit chk_ucode_version(unsigned int cpu)
return 0;
}
-static struct platform_device __cpuinit *coretemp_get_pdev(unsigned int cpu)
+static struct platform_device *coretemp_get_pdev(unsigned int cpu)
{
u16 phys_proc_id = TO_PHYS_ID(cpu);
struct pdev_entry *p;
@@ -434,8 +432,7 @@ static struct platform_device __cpuinit *coretemp_get_pdev(unsigned int cpu)
return NULL;
}
-static struct temp_data __cpuinit *init_temp_data(unsigned int cpu,
- int pkg_flag)
+static struct temp_data *init_temp_data(unsigned int cpu, int pkg_flag)
{
struct temp_data *tdata;
@@ -453,8 +450,8 @@ static struct temp_data __cpuinit *init_temp_data(unsigned int cpu,
return tdata;
}
-static int __cpuinit create_core_data(struct platform_device *pdev,
- unsigned int cpu, int pkg_flag)
+static int create_core_data(struct platform_device *pdev, unsigned int cpu,
+ int pkg_flag)
{
struct temp_data *tdata;
struct platform_data *pdata = platform_get_drvdata(pdev);
@@ -524,7 +521,7 @@ exit_free:
return err;
}
-static void __cpuinit coretemp_add_core(unsigned int cpu, int pkg_flag)
+static void coretemp_add_core(unsigned int cpu, int pkg_flag)
{
struct platform_device *pdev = coretemp_get_pdev(cpu);
int err;
@@ -607,7 +604,7 @@ static struct platform_driver coretemp_driver = {
.remove = coretemp_remove,
};
-static int __cpuinit coretemp_device_add(unsigned int cpu)
+static int coretemp_device_add(unsigned int cpu)
{
int err;
struct platform_device *pdev;
@@ -651,7 +648,7 @@ exit:
return err;
}
-static void __cpuinit coretemp_device_remove(unsigned int cpu)
+static void coretemp_device_remove(unsigned int cpu)
{
struct pdev_entry *p, *n;
u16 phys_proc_id = TO_PHYS_ID(cpu);
@@ -667,7 +664,7 @@ static void __cpuinit coretemp_device_remove(unsigned int cpu)
mutex_unlock(&pdev_list_mutex);
}
-static bool __cpuinit is_any_core_online(struct platform_data *pdata)
+static bool is_any_core_online(struct platform_data *pdata)
{
int i;
@@ -681,7 +678,7 @@ static bool __cpuinit is_any_core_online(struct platform_data *pdata)
return false;
}
-static void __cpuinit get_core_online(unsigned int cpu)
+static void get_core_online(unsigned int cpu)
{
struct cpuinfo_x86 *c = &cpu_data(cpu);
struct platform_device *pdev = coretemp_get_pdev(cpu);
@@ -723,7 +720,7 @@ static void __cpuinit get_core_online(unsigned int cpu)
coretemp_add_core(cpu, 0);
}
-static void __cpuinit put_core_offline(unsigned int cpu)
+static void put_core_offline(unsigned int cpu)
{
int i, indx;
struct platform_data *pdata;
@@ -771,7 +768,7 @@ static void __cpuinit put_core_offline(unsigned int cpu)
coretemp_device_remove(cpu);
}
-static int __cpuinit coretemp_cpu_callback(struct notifier_block *nfb,
+static int coretemp_cpu_callback(struct notifier_block *nfb,
unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long) hcpu;
diff --git a/drivers/hwmon/via-cputemp.c b/drivers/hwmon/via-cputemp.c
index 76f157b568ed..38944e94f65f 100644
--- a/drivers/hwmon/via-cputemp.c
+++ b/drivers/hwmon/via-cputemp.c
@@ -221,7 +221,7 @@ struct pdev_entry {
static LIST_HEAD(pdev_list);
static DEFINE_MUTEX(pdev_list_mutex);
-static int __cpuinit via_cputemp_device_add(unsigned int cpu)
+static int via_cputemp_device_add(unsigned int cpu)
{
int err;
struct platform_device *pdev;
@@ -262,7 +262,7 @@ exit:
return err;
}
-static void __cpuinit via_cputemp_device_remove(unsigned int cpu)
+static void via_cputemp_device_remove(unsigned int cpu)
{
struct pdev_entry *p;
@@ -279,8 +279,8 @@ static void __cpuinit via_cputemp_device_remove(unsigned int cpu)
mutex_unlock(&pdev_list_mutex);
}
-static int __cpuinit via_cputemp_cpu_callback(struct notifier_block *nfb,
- unsigned long action, void *hcpu)
+static int via_cputemp_cpu_callback(struct notifier_block *nfb,
+ unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long) hcpu;
diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index 4427e8e46a7f..0ad208a69c29 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -183,6 +183,7 @@ static int tiadc_read_raw(struct iio_dev *indio_dev,
static const struct iio_info tiadc_info = {
.read_raw = &tiadc_read_raw,
+ .driver_module = THIS_MODULE,
};
static int tiadc_probe(struct platform_device *pdev)
diff --git a/drivers/iio/dac/ad7303.c b/drivers/iio/dac/ad7303.c
index 85aeef60dc5f..d546f50f9258 100644
--- a/drivers/iio/dac/ad7303.c
+++ b/drivers/iio/dac/ad7303.c
@@ -235,8 +235,10 @@ static int ad7303_probe(struct spi_device *spi)
if (ext_ref) {
st->vref_reg = regulator_get(&spi->dev, "REF");
- if (IS_ERR(st->vref_reg))
+ if (IS_ERR(st->vref_reg)) {
+ ret = PTR_ERR(st->vref_reg);
goto err_disable_vdd_reg;
+ }
ret = regulator_enable(st->vref_reg);
if (ret)
diff --git a/drivers/iio/industrialio-trigger.c b/drivers/iio/industrialio-trigger.c
index 4d6c7d84e155..ea8a4146620d 100644
--- a/drivers/iio/industrialio-trigger.c
+++ b/drivers/iio/industrialio-trigger.c
@@ -104,7 +104,7 @@ void iio_trigger_unregister(struct iio_trigger *trig_info)
ida_simple_remove(&iio_trigger_ida, trig_info->id);
/* Possible issue in here */
- device_unregister(&trig_info->dev);
+ device_del(&trig_info->dev);
}
EXPORT_SYMBOL(iio_trigger_unregister);
diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c
index 98ddc323add0..0cf5f8e06cfc 100644
--- a/drivers/iio/inkern.c
+++ b/drivers/iio/inkern.c
@@ -451,7 +451,7 @@ static int iio_convert_raw_to_processed_unlocked(struct iio_channel *chan,
int ret;
ret = iio_channel_read(chan, &offset, NULL, IIO_CHAN_INFO_OFFSET);
- if (ret == 0)
+ if (ret >= 0)
raw64 += offset;
scale_type = iio_channel_read(chan, &scale_val, &scale_val2,
diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c
index 9c343b40665e..3ffbc56917b4 100644
--- a/drivers/iio/pressure/st_pressure_core.c
+++ b/drivers/iio/pressure/st_pressure_core.c
@@ -28,7 +28,9 @@
#include <linux/iio/common/st_sensors.h>
#include "st_pressure.h"
-#define ST_PRESS_MBAR_TO_KPASCAL(x) (x * 10)
+#define ST_PRESS_LSB_PER_MBAR 4096UL
+#define ST_PRESS_KPASCAL_NANO_SCALE (100000000UL / \
+ ST_PRESS_LSB_PER_MBAR)
#define ST_PRESS_NUMBER_DATA_CHANNELS 1
/* DEFAULT VALUE FOR SENSORS */
@@ -51,8 +53,8 @@
#define ST_PRESS_1_FS_ADDR 0x23
#define ST_PRESS_1_FS_MASK 0x30
#define ST_PRESS_1_FS_AVL_1260_VAL 0x00
-#define ST_PRESS_1_FS_AVL_1260_GAIN ST_PRESS_MBAR_TO_KPASCAL(244141)
#define ST_PRESS_1_FS_AVL_TEMP_GAIN 2083000
+#define ST_PRESS_1_FS_AVL_1260_GAIN ST_PRESS_KPASCAL_NANO_SCALE
#define ST_PRESS_1_BDU_ADDR 0x20
#define ST_PRESS_1_BDU_MASK 0x04
#define ST_PRESS_1_DRDY_IRQ_ADDR 0x22
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
index 19ceaa60e0f4..ee7c50312066 100644
--- a/drivers/irqchip/irq-gic.c
+++ b/drivers/irqchip/irq-gic.c
@@ -414,7 +414,7 @@ static void __init gic_dist_init(struct gic_chip_data *gic)
writel_relaxed(1, base + GIC_DIST_CTRL);
}
-static void __cpuinit gic_cpu_init(struct gic_chip_data *gic)
+static void gic_cpu_init(struct gic_chip_data *gic)
{
void __iomem *dist_base = gic_data_dist_base(gic);
void __iomem *base = gic_data_cpu_base(gic);
@@ -702,8 +702,8 @@ static int gic_irq_domain_xlate(struct irq_domain *d,
}
#ifdef CONFIG_SMP
-static int __cpuinit gic_secondary_init(struct notifier_block *nfb,
- unsigned long action, void *hcpu)
+static int gic_secondary_init(struct notifier_block *nfb, unsigned long action,
+ void *hcpu)
{
if (action == CPU_STARTING || action == CPU_STARTING_FROZEN)
gic_cpu_init(&gic_data[0]);
@@ -714,7 +714,7 @@ static int __cpuinit gic_secondary_init(struct notifier_block *nfb,
* Notifier for enabling the GIC CPU interface. Set an arbitrarily high
* priority because the GIC needs to be up before the ARM generic timers.
*/
-static struct notifier_block __cpuinitdata gic_cpu_notifier = {
+static struct notifier_block gic_cpu_notifier = {
.notifier_call = gic_secondary_init,
.priority = 100,
};
diff --git a/drivers/md/bcache/alloc.c b/drivers/md/bcache/alloc.c
index 048f2947e08b..e45f5575fd4d 100644
--- a/drivers/md/bcache/alloc.c
+++ b/drivers/md/bcache/alloc.c
@@ -63,7 +63,10 @@
#include "bcache.h"
#include "btree.h"
+#include <linux/freezer.h>
+#include <linux/kthread.h>
#include <linux/random.h>
+#include <trace/events/bcache.h>
#define MAX_IN_FLIGHT_DISCARDS 8U
@@ -151,7 +154,7 @@ static void discard_finish(struct work_struct *w)
mutex_unlock(&ca->set->bucket_lock);
closure_wake_up(&ca->set->bucket_wait);
- wake_up(&ca->set->alloc_wait);
+ wake_up_process(ca->alloc_thread);
closure_put(&ca->set->cl);
}
@@ -350,38 +353,30 @@ static void invalidate_buckets(struct cache *ca)
break;
}
- pr_debug("free %zu/%zu free_inc %zu/%zu unused %zu/%zu",
- fifo_used(&ca->free), ca->free.size,
- fifo_used(&ca->free_inc), ca->free_inc.size,
- fifo_used(&ca->unused), ca->unused.size);
+ trace_bcache_alloc_invalidate(ca);
}
#define allocator_wait(ca, cond) \
do { \
- DEFINE_WAIT(__wait); \
- \
while (1) { \
- prepare_to_wait(&ca->set->alloc_wait, \
- &__wait, TASK_INTERRUPTIBLE); \
+ set_current_state(TASK_INTERRUPTIBLE); \
if (cond) \
break; \
\
mutex_unlock(&(ca)->set->bucket_lock); \
- if (test_bit(CACHE_SET_STOPPING_2, &ca->set->flags)) { \
- finish_wait(&ca->set->alloc_wait, &__wait); \
- closure_return(cl); \
- } \
+ if (kthread_should_stop()) \
+ return 0; \
\
+ try_to_freeze(); \
schedule(); \
mutex_lock(&(ca)->set->bucket_lock); \
} \
- \
- finish_wait(&ca->set->alloc_wait, &__wait); \
+ __set_current_state(TASK_RUNNING); \
} while (0)
-void bch_allocator_thread(struct closure *cl)
+static int bch_allocator_thread(void *arg)
{
- struct cache *ca = container_of(cl, struct cache, alloc);
+ struct cache *ca = arg;
mutex_lock(&ca->set->bucket_lock);
@@ -442,7 +437,7 @@ long bch_bucket_alloc(struct cache *ca, unsigned watermark, struct closure *cl)
{
long r = -1;
again:
- wake_up(&ca->set->alloc_wait);
+ wake_up_process(ca->alloc_thread);
if (fifo_used(&ca->free) > ca->watermark[watermark] &&
fifo_pop(&ca->free, r)) {
@@ -476,9 +471,7 @@ again:
return r;
}
- pr_debug("alloc failure: blocked %i free %zu free_inc %zu unused %zu",
- atomic_read(&ca->set->prio_blocked), fifo_used(&ca->free),
- fifo_used(&ca->free_inc), fifo_used(&ca->unused));
+ trace_bcache_alloc_fail(ca);
if (cl) {
closure_wait(&ca->set->bucket_wait, cl);
@@ -552,6 +545,17 @@ int bch_bucket_alloc_set(struct cache_set *c, unsigned watermark,
/* Init */
+int bch_cache_allocator_start(struct cache *ca)
+{
+ struct task_struct *k = kthread_run(bch_allocator_thread,
+ ca, "bcache_allocator");
+ if (IS_ERR(k))
+ return PTR_ERR(k);
+
+ ca->alloc_thread = k;
+ return 0;
+}
+
void bch_cache_allocator_exit(struct cache *ca)
{
struct discard *d;
diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h
index d3e15b42a4ab..b39f6f0b45f2 100644
--- a/drivers/md/bcache/bcache.h
+++ b/drivers/md/bcache/bcache.h
@@ -178,7 +178,6 @@
#define pr_fmt(fmt) "bcache: %s() " fmt "\n", __func__
#include <linux/bio.h>
-#include <linux/blktrace_api.h>
#include <linux/kobject.h>
#include <linux/list.h>
#include <linux/mutex.h>
@@ -388,8 +387,6 @@ struct keybuf_key {
typedef bool (keybuf_pred_fn)(struct keybuf *, struct bkey *);
struct keybuf {
- keybuf_pred_fn *key_predicate;
-
struct bkey last_scanned;
spinlock_t lock;
@@ -437,9 +434,12 @@ struct bcache_device {
/* If nonzero, we're detaching/unregistering from cache set */
atomic_t detaching;
+ int flush_done;
+
+ uint64_t nr_stripes;
+ unsigned stripe_size_bits;
+ atomic_t *stripe_sectors_dirty;
- atomic_long_t sectors_dirty;
- unsigned long sectors_dirty_gc;
unsigned long sectors_dirty_last;
long sectors_dirty_derivative;
@@ -531,6 +531,7 @@ struct cached_dev {
unsigned sequential_merge:1;
unsigned verify:1;
+ unsigned partial_stripes_expensive:1;
unsigned writeback_metadata:1;
unsigned writeback_running:1;
unsigned char writeback_percent;
@@ -565,8 +566,7 @@ struct cache {
unsigned watermark[WATERMARK_MAX];
- struct closure alloc;
- struct workqueue_struct *alloc_workqueue;
+ struct task_struct *alloc_thread;
struct closure prio;
struct prio_set *disk_buckets;
@@ -664,13 +664,9 @@ struct gc_stat {
* CACHE_SET_STOPPING always gets set first when we're closing down a cache set;
* we'll continue to run normally for awhile with CACHE_SET_STOPPING set (i.e.
* flushing dirty data).
- *
- * CACHE_SET_STOPPING_2 gets set at the last phase, when it's time to shut down
- * the allocation thread.
*/
#define CACHE_SET_UNREGISTERING 0
#define CACHE_SET_STOPPING 1
-#define CACHE_SET_STOPPING_2 2
struct cache_set {
struct closure cl;
@@ -703,9 +699,6 @@ struct cache_set {
/* For the btree cache */
struct shrinker shrink;
- /* For the allocator itself */
- wait_queue_head_t alloc_wait;
-
/* For the btree cache and anything allocation related */
struct mutex bucket_lock;
@@ -823,10 +816,9 @@ struct cache_set {
/*
* A btree node on disk could have too many bsets for an iterator to fit
- * on the stack - this is a single element mempool for btree_read_work()
+ * on the stack - have to dynamically allocate them
*/
- struct mutex fill_lock;
- struct btree_iter *fill_iter;
+ mempool_t *fill_iter;
/*
* btree_sort() is a merge sort and requires temporary space - single
@@ -834,6 +826,7 @@ struct cache_set {
*/
struct mutex sort_lock;
struct bset *sort;
+ unsigned sort_crit_factor;
/* List of buckets we're currently writing data to */
struct list_head data_buckets;
@@ -906,8 +899,6 @@ static inline unsigned local_clock_us(void)
return local_clock() >> 10;
}
-#define MAX_BSETS 4U
-
#define BTREE_PRIO USHRT_MAX
#define INITIAL_PRIO 32768
@@ -1112,23 +1103,6 @@ static inline void __bkey_put(struct cache_set *c, struct bkey *k)
atomic_dec_bug(&PTR_BUCKET(c, k, i)->pin);
}
-/* Blktrace macros */
-
-#define blktrace_msg(c, fmt, ...) \
-do { \
- struct request_queue *q = bdev_get_queue(c->bdev); \
- if (q) \
- blk_add_trace_msg(q, fmt, ##__VA_ARGS__); \
-} while (0)
-
-#define blktrace_msg_all(s, fmt, ...) \
-do { \
- struct cache *_c; \
- unsigned i; \
- for_each_cache(_c, (s), i) \
- blktrace_msg(_c, fmt, ##__VA_ARGS__); \
-} while (0)
-
static inline void cached_dev_put(struct cached_dev *dc)
{
if (atomic_dec_and_test(&dc->count))
@@ -1173,10 +1147,16 @@ static inline uint8_t bucket_disk_gen(struct bucket *b)
static struct kobj_attribute ksysfs_##n = \
__ATTR(n, S_IWUSR|S_IRUSR, show, store)
-/* Forward declarations */
+static inline void wake_up_allocators(struct cache_set *c)
+{
+ struct cache *ca;
+ unsigned i;
+
+ for_each_cache(ca, c, i)
+ wake_up_process(ca->alloc_thread);
+}
-void bch_writeback_queue(struct cached_dev *);
-void bch_writeback_add(struct cached_dev *, unsigned);
+/* Forward declarations */
void bch_count_io_errors(struct cache *, int, const char *);
void bch_bbio_count_io_errors(struct cache_set *, struct bio *,
@@ -1193,7 +1173,6 @@ void bch_submit_bbio(struct bio *, struct cache_set *, struct bkey *, unsigned);
uint8_t bch_inc_gen(struct cache *, struct bucket *);
void bch_rescale_priorities(struct cache_set *, int);
bool bch_bucket_add_unused(struct cache *, struct bucket *);
-void bch_allocator_thread(struct closure *);
long bch_bucket_alloc(struct cache *, unsigned, struct closure *);
void bch_bucket_free(struct cache_set *, struct bkey *);
@@ -1241,9 +1220,9 @@ void bch_cache_set_stop(struct cache_set *);
struct cache_set *bch_cache_set_alloc(struct cache_sb *);
void bch_btree_cache_free(struct cache_set *);
int bch_btree_cache_alloc(struct cache_set *);
-void bch_cached_dev_writeback_init(struct cached_dev *);
void bch_moving_init_cache_set(struct cache_set *);
+int bch_cache_allocator_start(struct cache *ca);
void bch_cache_allocator_exit(struct cache *ca);
int bch_cache_allocator_init(struct cache *ca);
diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c
index 1d27d3af3251..8010eed06a51 100644
--- a/drivers/md/bcache/bset.c
+++ b/drivers/md/bcache/bset.c
@@ -78,6 +78,7 @@ struct bkey *bch_keylist_pop(struct keylist *l)
bool __bch_ptr_invalid(struct cache_set *c, int level, const struct bkey *k)
{
unsigned i;
+ char buf[80];
if (level && (!KEY_PTRS(k) || !KEY_SIZE(k) || KEY_DIRTY(k)))
goto bad;
@@ -102,7 +103,8 @@ bool __bch_ptr_invalid(struct cache_set *c, int level, const struct bkey *k)
return false;
bad:
- cache_bug(c, "spotted bad key %s: %s", pkey(k), bch_ptr_status(c, k));
+ bch_bkey_to_text(buf, sizeof(buf), k);
+ cache_bug(c, "spotted bad key %s: %s", buf, bch_ptr_status(c, k));
return true;
}
@@ -162,10 +164,16 @@ bool bch_ptr_bad(struct btree *b, const struct bkey *k)
#ifdef CONFIG_BCACHE_EDEBUG
bug:
mutex_unlock(&b->c->bucket_lock);
- btree_bug(b,
+
+ {
+ char buf[80];
+
+ bch_bkey_to_text(buf, sizeof(buf), k);
+ btree_bug(b,
"inconsistent pointer %s: bucket %zu pin %i prio %i gen %i last_gc %i mark %llu gc_gen %i",
- pkey(k), PTR_BUCKET_NR(b->c, k, i), atomic_read(&g->pin),
- g->prio, g->gen, g->last_gc, GC_MARK(g), g->gc_gen);
+ buf, PTR_BUCKET_NR(b->c, k, i), atomic_read(&g->pin),
+ g->prio, g->gen, g->last_gc, GC_MARK(g), g->gc_gen);
+ }
return true;
#endif
}
@@ -1084,33 +1092,39 @@ void bch_btree_sort_into(struct btree *b, struct btree *new)
new->sets->size = 0;
}
+#define SORT_CRIT (4096 / sizeof(uint64_t))
+
void bch_btree_sort_lazy(struct btree *b)
{
- if (b->nsets) {
- unsigned i, j, keys = 0, total;
+ unsigned crit = SORT_CRIT;
+ int i;
- for (i = 0; i <= b->nsets; i++)
- keys += b->sets[i].data->keys;
-
- total = keys;
+ /* Don't sort if nothing to do */
+ if (!b->nsets)
+ goto out;
- for (j = 0; j < b->nsets; j++) {
- if (keys * 2 < total ||
- keys < 1000) {
- bch_btree_sort_partial(b, j);
- return;
- }
+ /* If not a leaf node, always sort */
+ if (b->level) {
+ bch_btree_sort(b);
+ return;
+ }
- keys -= b->sets[j].data->keys;
- }
+ for (i = b->nsets - 1; i >= 0; --i) {
+ crit *= b->c->sort_crit_factor;
- /* Must sort if b->nsets == 3 or we'll overflow */
- if (b->nsets >= (MAX_BSETS - 1) - b->level) {
- bch_btree_sort(b);
+ if (b->sets[i].data->keys < crit) {
+ bch_btree_sort_partial(b, i);
return;
}
}
+ /* Sort if we'd overflow */
+ if (b->nsets + 1 == MAX_BSETS) {
+ bch_btree_sort(b);
+ return;
+ }
+
+out:
bset_build_written_tree(b);
}
diff --git a/drivers/md/bcache/bset.h b/drivers/md/bcache/bset.h
index 57a9cff41546..ae115a253d73 100644
--- a/drivers/md/bcache/bset.h
+++ b/drivers/md/bcache/bset.h
@@ -1,6 +1,8 @@
#ifndef _BCACHE_BSET_H
#define _BCACHE_BSET_H
+#include <linux/slab.h>
+
/*
* BKEYS:
*
@@ -142,6 +144,8 @@
/* Btree key comparison/iteration */
+#define MAX_BSETS 4U
+
struct btree_iter {
size_t size, used;
struct btree_iter_set {
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
index 7a5658f04e62..ee372884c405 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -24,6 +24,7 @@
#include "btree.h"
#include "debug.h"
#include "request.h"
+#include "writeback.h"
#include <linux/slab.h>
#include <linux/bitops.h>
@@ -134,44 +135,17 @@ static uint64_t btree_csum_set(struct btree *b, struct bset *i)
return crc ^ 0xffffffffffffffffULL;
}
-static void btree_bio_endio(struct bio *bio, int error)
+static void bch_btree_node_read_done(struct btree *b)
{
- struct closure *cl = bio->bi_private;
- struct btree *b = container_of(cl, struct btree, io.cl);
-
- if (error)
- set_btree_node_io_error(b);
-
- bch_bbio_count_io_errors(b->c, bio, error, (bio->bi_rw & WRITE)
- ? "writing btree" : "reading btree");
- closure_put(cl);
-}
-
-static void btree_bio_init(struct btree *b)
-{
- BUG_ON(b->bio);
- b->bio = bch_bbio_alloc(b->c);
-
- b->bio->bi_end_io = btree_bio_endio;
- b->bio->bi_private = &b->io.cl;
-}
-
-void bch_btree_read_done(struct closure *cl)
-{
- struct btree *b = container_of(cl, struct btree, io.cl);
- struct bset *i = b->sets[0].data;
- struct btree_iter *iter = b->c->fill_iter;
const char *err = "bad btree header";
- BUG_ON(b->nsets || b->written);
-
- bch_bbio_free(b->bio, b->c);
- b->bio = NULL;
+ struct bset *i = b->sets[0].data;
+ struct btree_iter *iter;
- mutex_lock(&b->c->fill_lock);
+ iter = mempool_alloc(b->c->fill_iter, GFP_NOWAIT);
+ iter->size = b->c->sb.bucket_size / b->c->sb.block_size;
iter->used = 0;
- if (btree_node_io_error(b) ||
- !i->seq)
+ if (!i->seq)
goto err;
for (;
@@ -228,17 +202,8 @@ void bch_btree_read_done(struct closure *cl)
if (b->written < btree_blocks(b))
bch_bset_init_next(b);
out:
-
- mutex_unlock(&b->c->fill_lock);
-
- spin_lock(&b->c->btree_read_time_lock);
- bch_time_stats_update(&b->c->btree_read_time, b->io_start_time);
- spin_unlock(&b->c->btree_read_time_lock);
-
- smp_wmb(); /* read_done is our write lock */
- set_btree_node_read_done(b);
-
- closure_return(cl);
+ mempool_free(iter, b->c->fill_iter);
+ return;
err:
set_btree_node_io_error(b);
bch_cache_set_error(b->c, "%s at bucket %zu, block %zu, %u keys",
@@ -247,48 +212,69 @@ err:
goto out;
}
-void bch_btree_read(struct btree *b)
+static void btree_node_read_endio(struct bio *bio, int error)
+{
+ struct closure *cl = bio->bi_private;
+ closure_put(cl);
+}
+
+void bch_btree_node_read(struct btree *b)
{
- BUG_ON(b->nsets || b->written);
+ uint64_t start_time = local_clock();
+ struct closure cl;
+ struct bio *bio;
+
+ trace_bcache_btree_read(b);
+
+ closure_init_stack(&cl);
+
+ bio = bch_bbio_alloc(b->c);
+ bio->bi_rw = REQ_META|READ_SYNC;
+ bio->bi_size = KEY_SIZE(&b->key) << 9;
+ bio->bi_end_io = btree_node_read_endio;
+ bio->bi_private = &cl;
+
+ bch_bio_map(bio, b->sets[0].data);
+
+ bch_submit_bbio(bio, b->c, &b->key, 0);
+ closure_sync(&cl);
- if (!closure_trylock(&b->io.cl, &b->c->cl))
- BUG();
+ if (!test_bit(BIO_UPTODATE, &bio->bi_flags))
+ set_btree_node_io_error(b);
- b->io_start_time = local_clock();
+ bch_bbio_free(bio, b->c);
- btree_bio_init(b);
- b->bio->bi_rw = REQ_META|READ_SYNC;
- b->bio->bi_size = KEY_SIZE(&b->key) << 9;
+ if (btree_node_io_error(b))
+ goto err;
- bch_bio_map(b->bio, b->sets[0].data);
+ bch_btree_node_read_done(b);
- pr_debug("%s", pbtree(b));
- trace_bcache_btree_read(b->bio);
- bch_submit_bbio(b->bio, b->c, &b->key, 0);
+ spin_lock(&b->c->btree_read_time_lock);
+ bch_time_stats_update(&b->c->btree_read_time, start_time);
+ spin_unlock(&b->c->btree_read_time_lock);
- continue_at(&b->io.cl, bch_btree_read_done, system_wq);
+ return;
+err:
+ bch_cache_set_error(b->c, "io error reading bucket %lu",
+ PTR_BUCKET_NR(b->c, &b->key, 0));
}
static void btree_complete_write(struct btree *b, struct btree_write *w)
{
if (w->prio_blocked &&
!atomic_sub_return(w->prio_blocked, &b->c->prio_blocked))
- wake_up(&b->c->alloc_wait);
+ wake_up_allocators(b->c);
if (w->journal) {
atomic_dec_bug(w->journal);
__closure_wake_up(&b->c->journal.wait);
}
- if (w->owner)
- closure_put(w->owner);
-
w->prio_blocked = 0;
w->journal = NULL;
- w->owner = NULL;
}
-static void __btree_write_done(struct closure *cl)
+static void __btree_node_write_done(struct closure *cl)
{
struct btree *b = container_of(cl, struct btree, io.cl);
struct btree_write *w = btree_prev_write(b);
@@ -304,7 +290,7 @@ static void __btree_write_done(struct closure *cl)
closure_return(cl);
}
-static void btree_write_done(struct closure *cl)
+static void btree_node_write_done(struct closure *cl)
{
struct btree *b = container_of(cl, struct btree, io.cl);
struct bio_vec *bv;
@@ -313,10 +299,22 @@ static void btree_write_done(struct closure *cl)
__bio_for_each_segment(bv, b->bio, n, 0)
__free_page(bv->bv_page);
- __btree_write_done(cl);
+ __btree_node_write_done(cl);
}
-static void do_btree_write(struct btree *b)
+static void btree_node_write_endio(struct bio *bio, int error)
+{
+ struct closure *cl = bio->bi_private;
+ struct btree *b = container_of(cl, struct btree, io.cl);
+
+ if (error)
+ set_btree_node_io_error(b);
+
+ bch_bbio_count_io_errors(b->c, bio, error, "writing btree");
+ closure_put(cl);
+}
+
+static void do_btree_node_write(struct btree *b)
{
struct closure *cl = &b->io.cl;
struct bset *i = b->sets[b->nsets].data;
@@ -325,15 +323,34 @@ static void do_btree_write(struct btree *b)
i->version = BCACHE_BSET_VERSION;
i->csum = btree_csum_set(b, i);
- btree_bio_init(b);
- b->bio->bi_rw = REQ_META|WRITE_SYNC;
- b->bio->bi_size = set_blocks(i, b->c) * block_bytes(b->c);
+ BUG_ON(b->bio);
+ b->bio = bch_bbio_alloc(b->c);
+
+ b->bio->bi_end_io = btree_node_write_endio;
+ b->bio->bi_private = &b->io.cl;
+ b->bio->bi_rw = REQ_META|WRITE_SYNC|REQ_FUA;
+ b->bio->bi_size = set_blocks(i, b->c) * block_bytes(b->c);
bch_bio_map(b->bio, i);
+ /*
+ * If we're appending to a leaf node, we don't technically need FUA -
+ * this write just needs to be persisted before the next journal write,
+ * which will be marked FLUSH|FUA.
+ *
+ * Similarly if we're writing a new btree root - the pointer is going to
+ * be in the next journal entry.
+ *
+ * But if we're writing a new btree node (that isn't a root) or
+ * appending to a non leaf btree node, we need either FUA or a flush
+ * when we write the parent with the new pointer. FUA is cheaper than a
+ * flush, and writes appending to leaf nodes aren't blocking anything so
+ * just make all btree node writes FUA to keep things sane.
+ */
+
bkey_copy(&k.key, &b->key);
SET_PTR_OFFSET(&k.key, 0, PTR_OFFSET(&k.key, 0) + bset_offset(b, i));
- if (!bch_bio_alloc_pages(b->bio, GFP_NOIO)) {
+ if (!bio_alloc_pages(b->bio, GFP_NOIO)) {
int j;
struct bio_vec *bv;
void *base = (void *) ((unsigned long) i & ~(PAGE_SIZE - 1));
@@ -342,40 +359,41 @@ static void do_btree_write(struct btree *b)
memcpy(page_address(bv->bv_page),
base + j * PAGE_SIZE, PAGE_SIZE);
- trace_bcache_btree_write(b->bio);
bch_submit_bbio(b->bio, b->c, &k.key, 0);
- continue_at(cl, btree_write_done, NULL);
+ continue_at(cl, btree_node_write_done, NULL);
} else {
b->bio->bi_vcnt = 0;
bch_bio_map(b->bio, i);
- trace_bcache_btree_write(b->bio);
bch_submit_bbio(b->bio, b->c, &k.key, 0);
closure_sync(cl);
- __btree_write_done(cl);
+ __btree_node_write_done(cl);
}
}
-static void __btree_write(struct btree *b)
+void bch_btree_node_write(struct btree *b, struct closure *parent)
{
struct bset *i = b->sets[b->nsets].data;
+ trace_bcache_btree_write(b);
+
BUG_ON(current->bio_list);
+ BUG_ON(b->written >= btree_blocks(b));
+ BUG_ON(b->written && !i->keys);
+ BUG_ON(b->sets->data->seq != i->seq);
+ bch_check_key_order(b, i);
- closure_lock(&b->io, &b->c->cl);
cancel_delayed_work(&b->work);
+ /* If caller isn't waiting for write, parent refcount is cache set */
+ closure_lock(&b->io, parent ?: &b->c->cl);
+
clear_bit(BTREE_NODE_dirty, &b->flags);
change_bit(BTREE_NODE_write_idx, &b->flags);
- bch_check_key_order(b, i);
- BUG_ON(b->written && !i->keys);
-
- do_btree_write(b);
-
- pr_debug("%s block %i keys %i", pbtree(b), b->written, i->keys);
+ do_btree_node_write(b);
b->written += set_blocks(i, b->c);
atomic_long_add(set_blocks(i, b->c) * b->c->sb.block_size,
@@ -387,37 +405,31 @@ static void __btree_write(struct btree *b)
bch_bset_init_next(b);
}
-static void btree_write_work(struct work_struct *w)
+static void btree_node_write_work(struct work_struct *w)
{
struct btree *b = container_of(to_delayed_work(w), struct btree, work);
- down_write(&b->lock);
+ rw_lock(true, b, b->level);
if (btree_node_dirty(b))
- __btree_write(b);
- up_write(&b->lock);
+ bch_btree_node_write(b, NULL);
+ rw_unlock(true, b);
}
-void bch_btree_write(struct btree *b, bool now, struct btree_op *op)
+static void bch_btree_leaf_dirty(struct btree *b, struct btree_op *op)
{
struct bset *i = b->sets[b->nsets].data;
struct btree_write *w = btree_current_write(b);
- BUG_ON(b->written &&
- (b->written >= btree_blocks(b) ||
- i->seq != b->sets[0].data->seq ||
- !i->keys));
+ BUG_ON(!b->written);
+ BUG_ON(!i->keys);
- if (!btree_node_dirty(b)) {
- set_btree_node_dirty(b);
- queue_delayed_work(btree_io_wq, &b->work,
- msecs_to_jiffies(30000));
- }
+ if (!btree_node_dirty(b))
+ queue_delayed_work(btree_io_wq, &b->work, 30 * HZ);
- w->prio_blocked += b->prio_blocked;
- b->prio_blocked = 0;
+ set_btree_node_dirty(b);
- if (op && op->journal && !b->level) {
+ if (op && op->journal) {
if (w->journal &&
journal_pin_cmp(b->c, w, op)) {
atomic_dec_bug(w->journal);
@@ -430,23 +442,10 @@ void bch_btree_write(struct btree *b, bool now, struct btree_op *op)
}
}
- if (current->bio_list)
- return;
-
/* Force write if set is too big */
- if (now ||
- b->level ||
- set_bytes(i) > PAGE_SIZE - 48) {
- if (op && now) {
- /* Must wait on multiple writes */
- BUG_ON(w->owner);
- w->owner = &op->cl;
- closure_get(&op->cl);
- }
-
- __btree_write(b);
- }
- BUG_ON(!b->written);
+ if (set_bytes(i) > PAGE_SIZE - 48 &&
+ !current->bio_list)
+ bch_btree_node_write(b, NULL);
}
/*
@@ -559,7 +558,7 @@ static struct btree *mca_bucket_alloc(struct cache_set *c,
init_rwsem(&b->lock);
lockdep_set_novalidate_class(&b->lock);
INIT_LIST_HEAD(&b->list);
- INIT_DELAYED_WORK(&b->work, btree_write_work);
+ INIT_DELAYED_WORK(&b->work, btree_node_write_work);
b->c = c;
closure_init_unlocked(&b->io);
@@ -582,7 +581,7 @@ static int mca_reap(struct btree *b, struct closure *cl, unsigned min_order)
BUG_ON(btree_node_dirty(b) && !b->sets[0].data);
if (cl && btree_node_dirty(b))
- bch_btree_write(b, true, NULL);
+ bch_btree_node_write(b, NULL);
if (cl)
closure_wait_event_async(&b->io.wait, cl,
@@ -623,6 +622,13 @@ static int bch_mca_shrink(struct shrinker *shrink, struct shrink_control *sc)
else if (!mutex_trylock(&c->bucket_lock))
return -1;
+ /*
+ * It's _really_ critical that we don't free too many btree nodes - we
+ * have to always leave ourselves a reserve. The reserve is how we
+ * guarantee that allocating memory for a new btree node can always
+ * succeed, so that inserting keys into the btree can always succeed and
+ * IO can always make forward progress:
+ */
nr /= c->btree_pages;
nr = min_t(unsigned long, nr, mca_can_free(c));
@@ -766,6 +772,8 @@ static struct btree *mca_cannibalize(struct cache_set *c, struct bkey *k,
int ret = -ENOMEM;
struct btree *i;
+ trace_bcache_btree_cache_cannibalize(c);
+
if (!cl)
return ERR_PTR(-ENOMEM);
@@ -784,7 +792,6 @@ static struct btree *mca_cannibalize(struct cache_set *c, struct bkey *k,
return ERR_PTR(-EAGAIN);
}
- /* XXX: tracepoint */
c->try_harder = cl;
c->try_harder_start = local_clock();
retry:
@@ -905,6 +912,9 @@ retry:
b = mca_find(c, k);
if (!b) {
+ if (current->bio_list)
+ return ERR_PTR(-EAGAIN);
+
mutex_lock(&c->bucket_lock);
b = mca_alloc(c, k, level, &op->cl);
mutex_unlock(&c->bucket_lock);
@@ -914,7 +924,7 @@ retry:
if (IS_ERR(b))
return b;
- bch_btree_read(b);
+ bch_btree_node_read(b);
if (!write)
downgrade_write(&b->lock);
@@ -937,15 +947,12 @@ retry:
for (; i <= b->nsets; i++)
prefetch(b->sets[i].data);
- if (!closure_wait_event(&b->io.wait, &op->cl,
- btree_node_read_done(b))) {
- rw_unlock(write, b);
- b = ERR_PTR(-EAGAIN);
- } else if (btree_node_io_error(b)) {
+ if (btree_node_io_error(b)) {
rw_unlock(write, b);
- b = ERR_PTR(-EIO);
- } else
- BUG_ON(!b->written);
+ return ERR_PTR(-EIO);
+ }
+
+ BUG_ON(!b->written);
return b;
}
@@ -959,7 +966,7 @@ static void btree_node_prefetch(struct cache_set *c, struct bkey *k, int level)
mutex_unlock(&c->bucket_lock);
if (!IS_ERR_OR_NULL(b)) {
- bch_btree_read(b);
+ bch_btree_node_read(b);
rw_unlock(true, b);
}
}
@@ -970,24 +977,19 @@ static void btree_node_free(struct btree *b, struct btree_op *op)
{
unsigned i;
+ trace_bcache_btree_node_free(b);
+
/*
* The BUG_ON() in btree_node_get() implies that we must have a write
* lock on parent to free or even invalidate a node
*/
BUG_ON(op->lock <= b->level);
BUG_ON(b == b->c->root);
- pr_debug("bucket %s", pbtree(b));
if (btree_node_dirty(b))
btree_complete_write(b, btree_current_write(b));
clear_bit(BTREE_NODE_dirty, &b->flags);
- if (b->prio_blocked &&
- !atomic_sub_return(b->prio_blocked, &b->c->prio_blocked))
- wake_up(&b->c->alloc_wait);
-
- b->prio_blocked = 0;
-
cancel_delayed_work(&b->work);
mutex_lock(&b->c->bucket_lock);
@@ -1028,17 +1030,20 @@ retry:
goto retry;
}
- set_btree_node_read_done(b);
b->accessed = 1;
bch_bset_init_next(b);
mutex_unlock(&c->bucket_lock);
+
+ trace_bcache_btree_node_alloc(b);
return b;
err_free:
bch_bucket_free(c, &k.key);
__bkey_put(c, &k.key);
err:
mutex_unlock(&c->bucket_lock);
+
+ trace_bcache_btree_node_alloc_fail(b);
return b;
}
@@ -1137,11 +1142,8 @@ static int btree_gc_mark_node(struct btree *b, unsigned *keys,
gc->nkeys++;
gc->data += KEY_SIZE(k);
- if (KEY_DIRTY(k)) {
+ if (KEY_DIRTY(k))
gc->dirty += KEY_SIZE(k);
- if (d)
- d->sectors_dirty_gc += KEY_SIZE(k);
- }
}
for (t = b->sets; t <= &b->sets[b->nsets]; t++)
@@ -1166,14 +1168,11 @@ static struct btree *btree_gc_alloc(struct btree *b, struct bkey *k,
if (!IS_ERR_OR_NULL(n)) {
swap(b, n);
+ __bkey_put(b->c, &b->key);
memcpy(k->ptr, b->key.ptr,
sizeof(uint64_t) * KEY_PTRS(&b->key));
- __bkey_put(b->c, &b->key);
- atomic_inc(&b->c->prio_blocked);
- b->prio_blocked++;
-
btree_node_free(n, op);
up_write(&n->lock);
}
@@ -1278,7 +1277,7 @@ static void btree_gc_coalesce(struct btree *b, struct btree_op *op,
btree_node_free(r->b, op);
up_write(&r->b->lock);
- pr_debug("coalesced %u nodes", nodes);
+ trace_bcache_btree_gc_coalesce(nodes);
gc->nodes--;
nodes--;
@@ -1293,14 +1292,9 @@ static int btree_gc_recurse(struct btree *b, struct btree_op *op,
void write(struct btree *r)
{
if (!r->written)
- bch_btree_write(r, true, op);
- else if (btree_node_dirty(r)) {
- BUG_ON(btree_current_write(r)->owner);
- btree_current_write(r)->owner = writes;
- closure_get(writes);
-
- bch_btree_write(r, true, NULL);
- }
+ bch_btree_node_write(r, &op->cl);
+ else if (btree_node_dirty(r))
+ bch_btree_node_write(r, writes);
up_write(&r->lock);
}
@@ -1386,9 +1380,7 @@ static int bch_btree_gc_root(struct btree *b, struct btree_op *op,
ret = btree_gc_recurse(b, op, writes, gc);
if (!b->written || btree_node_dirty(b)) {
- atomic_inc(&b->c->prio_blocked);
- b->prio_blocked++;
- bch_btree_write(b, true, n ? op : NULL);
+ bch_btree_node_write(b, n ? &op->cl : NULL);
}
if (!IS_ERR_OR_NULL(n)) {
@@ -1405,7 +1397,6 @@ static void btree_gc_start(struct cache_set *c)
{
struct cache *ca;
struct bucket *b;
- struct bcache_device **d;
unsigned i;
if (!c->gc_mark_valid)
@@ -1419,16 +1410,12 @@ static void btree_gc_start(struct cache_set *c)
for_each_cache(ca, c, i)
for_each_bucket(b, ca) {
b->gc_gen = b->gen;
- if (!atomic_read(&b->pin))
+ if (!atomic_read(&b->pin)) {
SET_GC_MARK(b, GC_MARK_RECLAIMABLE);
+ SET_GC_SECTORS_USED(b, 0);
+ }
}
- for (d = c->devices;
- d < c->devices + c->nr_uuids;
- d++)
- if (*d)
- (*d)->sectors_dirty_gc = 0;
-
mutex_unlock(&c->bucket_lock);
}
@@ -1437,7 +1424,6 @@ size_t bch_btree_gc_finish(struct cache_set *c)
size_t available = 0;
struct bucket *b;
struct cache *ca;
- struct bcache_device **d;
unsigned i;
mutex_lock(&c->bucket_lock);
@@ -1480,22 +1466,6 @@ size_t bch_btree_gc_finish(struct cache_set *c)
}
}
- for (d = c->devices;
- d < c->devices + c->nr_uuids;
- d++)
- if (*d) {
- unsigned long last =
- atomic_long_read(&((*d)->sectors_dirty));
- long difference = (*d)->sectors_dirty_gc - last;
-
- pr_debug("sectors dirty off by %li", difference);
-
- (*d)->sectors_dirty_last += difference;
-
- atomic_long_set(&((*d)->sectors_dirty),
- (*d)->sectors_dirty_gc);
- }
-
mutex_unlock(&c->bucket_lock);
return available;
}
@@ -1508,10 +1478,9 @@ static void bch_btree_gc(struct closure *cl)
struct gc_stat stats;
struct closure writes;
struct btree_op op;
-
uint64_t start_time = local_clock();
- trace_bcache_gc_start(c->sb.set_uuid);
- blktrace_msg_all(c, "Starting gc");
+
+ trace_bcache_gc_start(c);
memset(&stats, 0, sizeof(struct gc_stat));
closure_init_stack(&writes);
@@ -1520,14 +1489,14 @@ static void bch_btree_gc(struct closure *cl)
btree_gc_start(c);
+ atomic_inc(&c->prio_blocked);
+
ret = btree_root(gc_root, c, &op, &writes, &stats);
closure_sync(&op.cl);
closure_sync(&writes);
if (ret) {
- blktrace_msg_all(c, "Stopped gc");
pr_warn("gc failed!");
-
continue_at(cl, bch_btree_gc, bch_gc_wq);
}
@@ -1537,6 +1506,9 @@ static void bch_btree_gc(struct closure *cl)
available = bch_btree_gc_finish(c);
+ atomic_dec(&c->prio_blocked);
+ wake_up_allocators(c);
+
bch_time_stats_update(&c->btree_gc_time, start_time);
stats.key_bytes *= sizeof(uint64_t);
@@ -1544,10 +1516,8 @@ static void bch_btree_gc(struct closure *cl)
stats.data <<= 9;
stats.in_use = (c->nbuckets - available) * 100 / c->nbuckets;
memcpy(&c->gc_stats, &stats, sizeof(struct gc_stat));
- blktrace_msg_all(c, "Finished gc");
- trace_bcache_gc_end(c->sb.set_uuid);
- wake_up(&c->alloc_wait);
+ trace_bcache_gc_end(c);
continue_at(cl, bch_moving_gc, bch_gc_wq);
}
@@ -1654,14 +1624,14 @@ static bool fix_overlapping_extents(struct btree *b,
struct btree_iter *iter,
struct btree_op *op)
{
- void subtract_dirty(struct bkey *k, int sectors)
+ void subtract_dirty(struct bkey *k, uint64_t offset, int sectors)
{
- struct bcache_device *d = b->c->devices[KEY_INODE(k)];
-
- if (KEY_DIRTY(k) && d)
- atomic_long_sub(sectors, &d->sectors_dirty);
+ if (KEY_DIRTY(k))
+ bcache_dev_sectors_dirty_add(b->c, KEY_INODE(k),
+ offset, -sectors);
}
+ uint64_t old_offset;
unsigned old_size, sectors_found = 0;
while (1) {
@@ -1673,6 +1643,7 @@ static bool fix_overlapping_extents(struct btree *b,
if (bkey_cmp(k, &START_KEY(insert)) <= 0)
continue;
+ old_offset = KEY_START(k);
old_size = KEY_SIZE(k);
/*
@@ -1728,7 +1699,7 @@ static bool fix_overlapping_extents(struct btree *b,
struct bkey *top;
- subtract_dirty(k, KEY_SIZE(insert));
+ subtract_dirty(k, KEY_START(insert), KEY_SIZE(insert));
if (bkey_written(b, k)) {
/*
@@ -1775,7 +1746,7 @@ static bool fix_overlapping_extents(struct btree *b,
}
}
- subtract_dirty(k, old_size - KEY_SIZE(k));
+ subtract_dirty(k, old_offset, old_size - KEY_SIZE(k));
}
check_failed:
@@ -1798,7 +1769,7 @@ static bool btree_insert_key(struct btree *b, struct btree_op *op,
{
struct bset *i = b->sets[b->nsets].data;
struct bkey *m, *prev;
- const char *status = "insert";
+ unsigned status = BTREE_INSERT_STATUS_INSERT;
BUG_ON(bkey_cmp(k, &b->key) > 0);
BUG_ON(b->level && !KEY_PTRS(k));
@@ -1831,17 +1802,17 @@ static bool btree_insert_key(struct btree *b, struct btree_op *op,
goto insert;
/* prev is in the tree, if we merge we're done */
- status = "back merging";
+ status = BTREE_INSERT_STATUS_BACK_MERGE;
if (prev &&
bch_bkey_try_merge(b, prev, k))
goto merged;
- status = "overwrote front";
+ status = BTREE_INSERT_STATUS_OVERWROTE;
if (m != end(i) &&
KEY_PTRS(m) == KEY_PTRS(k) && !KEY_SIZE(m))
goto copy;
- status = "front merge";
+ status = BTREE_INSERT_STATUS_FRONT_MERGE;
if (m != end(i) &&
bch_bkey_try_merge(b, k, m))
goto copy;
@@ -1851,21 +1822,21 @@ static bool btree_insert_key(struct btree *b, struct btree_op *op,
insert: shift_keys(b, m, k);
copy: bkey_copy(m, k);
merged:
- bch_check_keys(b, "%s for %s at %s: %s", status,
- op_type(op), pbtree(b), pkey(k));
- bch_check_key_order_msg(b, i, "%s for %s at %s: %s", status,
- op_type(op), pbtree(b), pkey(k));
+ if (KEY_DIRTY(k))
+ bcache_dev_sectors_dirty_add(b->c, KEY_INODE(k),
+ KEY_START(k), KEY_SIZE(k));
+
+ bch_check_keys(b, "%u for %s", status, op_type(op));
if (b->level && !KEY_OFFSET(k))
- b->prio_blocked++;
+ btree_current_write(b)->prio_blocked++;
- pr_debug("%s for %s at %s: %s", status,
- op_type(op), pbtree(b), pkey(k));
+ trace_bcache_btree_insert_key(b, k, op->type, status);
return true;
}
-bool bch_btree_insert_keys(struct btree *b, struct btree_op *op)
+static bool bch_btree_insert_keys(struct btree *b, struct btree_op *op)
{
bool ret = false;
struct bkey *k;
@@ -1896,7 +1867,7 @@ bool bch_btree_insert_check_key(struct btree *b, struct btree_op *op,
should_split(b))
goto out;
- op->replace = KEY(op->inode, bio_end(bio), bio_sectors(bio));
+ op->replace = KEY(op->inode, bio_end_sector(bio), bio_sectors(bio));
SET_KEY_PTRS(&op->replace, 1);
get_random_bytes(&op->replace.ptr[0], sizeof(uint64_t));
@@ -1907,7 +1878,6 @@ bool bch_btree_insert_check_key(struct btree *b, struct btree_op *op,
BUG_ON(op->type != BTREE_INSERT);
BUG_ON(!btree_insert_key(b, op, &tmp.k));
- bch_btree_write(b, false, NULL);
ret = true;
out:
downgrade_write(&b->lock);
@@ -1929,12 +1899,11 @@ static int btree_split(struct btree *b, struct btree_op *op)
split = set_blocks(n1->sets[0].data, n1->c) > (btree_blocks(b) * 4) / 5;
- pr_debug("%ssplitting at %s keys %i", split ? "" : "not ",
- pbtree(b), n1->sets[0].data->keys);
-
if (split) {
unsigned keys = 0;
+ trace_bcache_btree_node_split(b, n1->sets[0].data->keys);
+
n2 = bch_btree_node_alloc(b->c, b->level, &op->cl);
if (IS_ERR(n2))
goto err_free1;
@@ -1967,18 +1936,21 @@ static int btree_split(struct btree *b, struct btree_op *op)
bkey_copy_key(&n2->key, &b->key);
bch_keylist_add(&op->keys, &n2->key);
- bch_btree_write(n2, true, op);
+ bch_btree_node_write(n2, &op->cl);
rw_unlock(true, n2);
- } else
+ } else {
+ trace_bcache_btree_node_compact(b, n1->sets[0].data->keys);
+
bch_btree_insert_keys(n1, op);
+ }
bch_keylist_add(&op->keys, &n1->key);
- bch_btree_write(n1, true, op);
+ bch_btree_node_write(n1, &op->cl);
if (n3) {
bkey_copy_key(&n3->key, &MAX_KEY);
bch_btree_insert_keys(n3, op);
- bch_btree_write(n3, true, op);
+ bch_btree_node_write(n3, &op->cl);
closure_sync(&op->cl);
bch_btree_set_root(n3);
@@ -2082,8 +2054,12 @@ static int bch_btree_insert_recurse(struct btree *b, struct btree_op *op,
BUG_ON(write_block(b) != b->sets[b->nsets].data);
- if (bch_btree_insert_keys(b, op))
- bch_btree_write(b, false, op);
+ if (bch_btree_insert_keys(b, op)) {
+ if (!b->level)
+ bch_btree_leaf_dirty(b, op);
+ else
+ bch_btree_node_write(b, &op->cl);
+ }
}
return 0;
@@ -2140,6 +2116,11 @@ int bch_btree_insert(struct btree_op *op, struct cache_set *c)
void bch_btree_set_root(struct btree *b)
{
unsigned i;
+ struct closure cl;
+
+ closure_init_stack(&cl);
+
+ trace_bcache_btree_set_root(b);
BUG_ON(!b->written);
@@ -2153,8 +2134,8 @@ void bch_btree_set_root(struct btree *b)
b->c->root = b;
__bkey_put(b->c, &b->key);
- bch_journal_meta(b->c, NULL);
- pr_debug("%s for %pf", pbtree(b), __builtin_return_address(0));
+ bch_journal_meta(b->c, &cl);
+ closure_sync(&cl);
}
/* Cache lookup */
@@ -2215,9 +2196,6 @@ static int submit_partial_cache_hit(struct btree *b, struct btree_op *op,
KEY_OFFSET(k) - bio->bi_sector);
n = bch_bio_split(bio, sectors, GFP_NOIO, s->d->bio_split);
- if (!n)
- return -EAGAIN;
-
if (n == bio)
op->lookup_done = true;
@@ -2240,7 +2218,6 @@ static int submit_partial_cache_hit(struct btree *b, struct btree_op *op,
n->bi_end_io = bch_cache_read_endio;
n->bi_private = &s->cl;
- trace_bcache_cache_hit(n);
__bch_submit_bbio(n, b->c);
}
@@ -2257,9 +2234,6 @@ int bch_btree_search_recurse(struct btree *b, struct btree_op *op)
struct btree_iter iter;
bch_btree_iter_init(b, &iter, &KEY(op->inode, bio->bi_sector, 0));
- pr_debug("at %s searching for %u:%llu", pbtree(b), op->inode,
- (uint64_t) bio->bi_sector);
-
do {
k = bch_btree_iter_next_filter(&iter, b, bch_ptr_bad);
if (!k) {
@@ -2303,7 +2277,8 @@ static inline int keybuf_nonoverlapping_cmp(struct keybuf_key *l,
}
static int bch_btree_refill_keybuf(struct btree *b, struct btree_op *op,
- struct keybuf *buf, struct bkey *end)
+ struct keybuf *buf, struct bkey *end,
+ keybuf_pred_fn *pred)
{
struct btree_iter iter;
bch_btree_iter_init(b, &iter, &buf->last_scanned);
@@ -2322,11 +2297,9 @@ static int bch_btree_refill_keybuf(struct btree *b, struct btree_op *op,
if (bkey_cmp(&buf->last_scanned, end) >= 0)
break;
- if (buf->key_predicate(buf, k)) {
+ if (pred(buf, k)) {
struct keybuf_key *w;
- pr_debug("%s", pkey(k));
-
spin_lock(&buf->lock);
w = array_alloc(&buf->freelist);
@@ -2343,7 +2316,7 @@ static int bch_btree_refill_keybuf(struct btree *b, struct btree_op *op,
if (!k)
break;
- btree(refill_keybuf, k, b, op, buf, end);
+ btree(refill_keybuf, k, b, op, buf, end, pred);
/*
* Might get an error here, but can't really do anything
* and it'll get logged elsewhere. Just read what we
@@ -2361,7 +2334,7 @@ static int bch_btree_refill_keybuf(struct btree *b, struct btree_op *op,
}
void bch_refill_keybuf(struct cache_set *c, struct keybuf *buf,
- struct bkey *end)
+ struct bkey *end, keybuf_pred_fn *pred)
{
struct bkey start = buf->last_scanned;
struct btree_op op;
@@ -2369,7 +2342,7 @@ void bch_refill_keybuf(struct cache_set *c, struct keybuf *buf,
cond_resched();
- btree_root(refill_keybuf, c, &op, buf, end);
+ btree_root(refill_keybuf, c, &op, buf, end, pred);
closure_sync(&op.cl);
pr_debug("found %s keys from %llu:%llu to %llu:%llu",
@@ -2455,7 +2428,8 @@ struct keybuf_key *bch_keybuf_next(struct keybuf *buf)
struct keybuf_key *bch_keybuf_next_rescan(struct cache_set *c,
struct keybuf *buf,
- struct bkey *end)
+ struct bkey *end,
+ keybuf_pred_fn *pred)
{
struct keybuf_key *ret;
@@ -2469,15 +2443,14 @@ struct keybuf_key *bch_keybuf_next_rescan(struct cache_set *c,
break;
}
- bch_refill_keybuf(c, buf, end);
+ bch_refill_keybuf(c, buf, end, pred);
}
return ret;
}
-void bch_keybuf_init(struct keybuf *buf, keybuf_pred_fn *fn)
+void bch_keybuf_init(struct keybuf *buf)
{
- buf->key_predicate = fn;
buf->last_scanned = MAX_KEY;
buf->keys = RB_ROOT;
diff --git a/drivers/md/bcache/btree.h b/drivers/md/bcache/btree.h
index af4a7092a28c..3333d3723633 100644
--- a/drivers/md/bcache/btree.h
+++ b/drivers/md/bcache/btree.h
@@ -102,7 +102,6 @@
#include "debug.h"
struct btree_write {
- struct closure *owner;
atomic_t *journal;
/* If btree_split() frees a btree node, it writes a new pointer to that
@@ -142,16 +141,12 @@ struct btree {
*/
struct bset_tree sets[MAX_BSETS];
- /* Used to refcount bio splits, also protects b->bio */
+ /* For outstanding btree writes, used as a lock - protects write_idx */
struct closure_with_waitlist io;
- /* Gets transferred to w->prio_blocked - see the comment there */
- int prio_blocked;
-
struct list_head list;
struct delayed_work work;
- uint64_t io_start_time;
struct btree_write writes[2];
struct bio *bio;
};
@@ -164,13 +159,11 @@ static inline void set_btree_node_ ## flag(struct btree *b) \
{ set_bit(BTREE_NODE_ ## flag, &b->flags); } \
enum btree_flags {
- BTREE_NODE_read_done,
BTREE_NODE_io_error,
BTREE_NODE_dirty,
BTREE_NODE_write_idx,
};
-BTREE_FLAG(read_done);
BTREE_FLAG(io_error);
BTREE_FLAG(dirty);
BTREE_FLAG(write_idx);
@@ -278,6 +271,13 @@ struct btree_op {
BKEY_PADDED(replace);
};
+enum {
+ BTREE_INSERT_STATUS_INSERT,
+ BTREE_INSERT_STATUS_BACK_MERGE,
+ BTREE_INSERT_STATUS_OVERWROTE,
+ BTREE_INSERT_STATUS_FRONT_MERGE,
+};
+
void bch_btree_op_init_stack(struct btree_op *);
static inline void rw_lock(bool w, struct btree *b, int level)
@@ -293,9 +293,7 @@ static inline void rw_unlock(bool w, struct btree *b)
#ifdef CONFIG_BCACHE_EDEBUG
unsigned i;
- if (w &&
- b->key.ptr[0] &&
- btree_node_read_done(b))
+ if (w && b->key.ptr[0])
for (i = 0; i <= b->nsets; i++)
bch_check_key_order(b, b->sets[i].data);
#endif
@@ -370,9 +368,8 @@ static inline bool should_split(struct btree *b)
> btree_blocks(b));
}
-void bch_btree_read_done(struct closure *);
-void bch_btree_read(struct btree *);
-void bch_btree_write(struct btree *b, bool now, struct btree_op *op);
+void bch_btree_node_read(struct btree *);
+void bch_btree_node_write(struct btree *, struct closure *);
void bch_cannibalize_unlock(struct cache_set *, struct closure *);
void bch_btree_set_root(struct btree *);
@@ -380,7 +377,6 @@ struct btree *bch_btree_node_alloc(struct cache_set *, int, struct closure *);
struct btree *bch_btree_node_get(struct cache_set *, struct bkey *,
int, struct btree_op *);
-bool bch_btree_insert_keys(struct btree *, struct btree_op *);
bool bch_btree_insert_check_key(struct btree *, struct btree_op *,
struct bio *);
int bch_btree_insert(struct btree_op *, struct cache_set *);
@@ -393,13 +389,14 @@ void bch_moving_gc(struct closure *);
int bch_btree_check(struct cache_set *, struct btree_op *);
uint8_t __bch_btree_mark_key(struct cache_set *, int, struct bkey *);
-void bch_keybuf_init(struct keybuf *, keybuf_pred_fn *);
-void bch_refill_keybuf(struct cache_set *, struct keybuf *, struct bkey *);
+void bch_keybuf_init(struct keybuf *);
+void bch_refill_keybuf(struct cache_set *, struct keybuf *, struct bkey *,
+ keybuf_pred_fn *);
bool bch_keybuf_check_overlapping(struct keybuf *, struct bkey *,
struct bkey *);
void bch_keybuf_del(struct keybuf *, struct keybuf_key *);
struct keybuf_key *bch_keybuf_next(struct keybuf *);
-struct keybuf_key *bch_keybuf_next_rescan(struct cache_set *,
- struct keybuf *, struct bkey *);
+struct keybuf_key *bch_keybuf_next_rescan(struct cache_set *, struct keybuf *,
+ struct bkey *, keybuf_pred_fn *);
#endif
diff --git a/drivers/md/bcache/closure.c b/drivers/md/bcache/closure.c
index bd05a9a8c7cf..9aba2017f0d1 100644
--- a/drivers/md/bcache/closure.c
+++ b/drivers/md/bcache/closure.c
@@ -66,16 +66,18 @@ static inline void closure_put_after_sub(struct closure *cl, int flags)
} else {
struct closure *parent = cl->parent;
struct closure_waitlist *wait = closure_waitlist(cl);
+ closure_fn *destructor = cl->fn;
closure_debug_destroy(cl);
+ smp_mb();
atomic_set(&cl->remaining, -1);
if (wait)
closure_wake_up(wait);
- if (cl->fn)
- cl->fn(cl);
+ if (destructor)
+ destructor(cl);
if (parent)
closure_put(parent);
diff --git a/drivers/md/bcache/debug.c b/drivers/md/bcache/debug.c
index 89fd5204924e..88e6411eab4f 100644
--- a/drivers/md/bcache/debug.c
+++ b/drivers/md/bcache/debug.c
@@ -47,11 +47,10 @@ const char *bch_ptr_status(struct cache_set *c, const struct bkey *k)
return "";
}
-struct keyprint_hack bch_pkey(const struct bkey *k)
+int bch_bkey_to_text(char *buf, size_t size, const struct bkey *k)
{
unsigned i = 0;
- struct keyprint_hack r;
- char *out = r.s, *end = r.s + KEYHACK_SIZE;
+ char *out = buf, *end = buf + size;
#define p(...) (out += scnprintf(out, end - out, __VA_ARGS__))
@@ -75,16 +74,14 @@ struct keyprint_hack bch_pkey(const struct bkey *k)
if (KEY_CSUM(k))
p(" cs%llu %llx", KEY_CSUM(k), k->ptr[1]);
#undef p
- return r;
+ return out - buf;
}
-struct keyprint_hack bch_pbtree(const struct btree *b)
+int bch_btree_to_text(char *buf, size_t size, const struct btree *b)
{
- struct keyprint_hack r;
-
- snprintf(r.s, 40, "%zu level %i/%i", PTR_BUCKET_NR(b->c, &b->key, 0),
- b->level, b->c->root ? b->c->root->level : -1);
- return r;
+ return scnprintf(buf, size, "%zu level %i/%i",
+ PTR_BUCKET_NR(b->c, &b->key, 0),
+ b->level, b->c->root ? b->c->root->level : -1);
}
#if defined(CONFIG_BCACHE_DEBUG) || defined(CONFIG_BCACHE_EDEBUG)
@@ -100,10 +97,12 @@ static void dump_bset(struct btree *b, struct bset *i)
{
struct bkey *k;
unsigned j;
+ char buf[80];
for (k = i->start; k < end(i); k = bkey_next(k)) {
+ bch_bkey_to_text(buf, sizeof(buf), k);
printk(KERN_ERR "block %zu key %zi/%u: %s", index(i, b),
- (uint64_t *) k - i->d, i->keys, pkey(k));
+ (uint64_t *) k - i->d, i->keys, buf);
for (j = 0; j < KEY_PTRS(k); j++) {
size_t n = PTR_BUCKET_NR(b->c, k, j);
@@ -144,7 +143,7 @@ void bch_btree_verify(struct btree *b, struct bset *new)
v->written = 0;
v->level = b->level;
- bch_btree_read(v);
+ bch_btree_node_read(v);
closure_wait_event(&v->io.wait, &cl,
atomic_read(&b->io.cl.remaining) == -1);
@@ -200,7 +199,7 @@ void bch_data_verify(struct search *s)
if (!check)
return;
- if (bch_bio_alloc_pages(check, GFP_NOIO))
+ if (bio_alloc_pages(check, GFP_NOIO))
goto out_put;
check->bi_rw = READ_SYNC;
@@ -252,6 +251,7 @@ static void vdump_bucket_and_panic(struct btree *b, const char *fmt,
va_list args)
{
unsigned i;
+ char buf[80];
console_lock();
@@ -262,7 +262,8 @@ static void vdump_bucket_and_panic(struct btree *b, const char *fmt,
console_unlock();
- panic("at %s\n", pbtree(b));
+ bch_btree_to_text(buf, sizeof(buf), b);
+ panic("at %s\n", buf);
}
void bch_check_key_order_msg(struct btree *b, struct bset *i,
@@ -337,6 +338,7 @@ static ssize_t bch_dump_read(struct file *file, char __user *buf,
{
struct dump_iterator *i = file->private_data;
ssize_t ret = 0;
+ char kbuf[80];
while (size) {
struct keybuf_key *w;
@@ -355,11 +357,12 @@ static ssize_t bch_dump_read(struct file *file, char __user *buf,
if (i->bytes)
break;
- w = bch_keybuf_next_rescan(i->c, &i->keys, &MAX_KEY);
+ w = bch_keybuf_next_rescan(i->c, &i->keys, &MAX_KEY, dump_pred);
if (!w)
break;
- i->bytes = snprintf(i->buf, PAGE_SIZE, "%s\n", pkey(&w->key));
+ bch_bkey_to_text(kbuf, sizeof(kbuf), &w->key);
+ i->bytes = snprintf(i->buf, PAGE_SIZE, "%s\n", kbuf);
bch_keybuf_del(&i->keys, w);
}
@@ -377,7 +380,7 @@ static int bch_dump_open(struct inode *inode, struct file *file)
file->private_data = i;
i->c = c;
- bch_keybuf_init(&i->keys, dump_pred);
+ bch_keybuf_init(&i->keys);
i->keys.last_scanned = KEY(0, 0, 0);
return 0;
@@ -409,142 +412,6 @@ void bch_debug_init_cache_set(struct cache_set *c)
#endif
-/* Fuzz tester has rotted: */
-#if 0
-
-static ssize_t btree_fuzz(struct kobject *k, struct kobj_attribute *a,
- const char *buffer, size_t size)
-{
- void dump(struct btree *b)
- {
- struct bset *i;
-
- for (i = b->sets[0].data;
- index(i, b) < btree_blocks(b) &&
- i->seq == b->sets[0].data->seq;
- i = ((void *) i) + set_blocks(i, b->c) * block_bytes(b->c))
- dump_bset(b, i);
- }
-
- struct cache_sb *sb;
- struct cache_set *c;
- struct btree *all[3], *b, *fill, *orig;
- int j;
-
- struct btree_op op;
- bch_btree_op_init_stack(&op);
-
- sb = kzalloc(sizeof(struct cache_sb), GFP_KERNEL);
- if (!sb)
- return -ENOMEM;
-
- sb->bucket_size = 128;
- sb->block_size = 4;
-
- c = bch_cache_set_alloc(sb);
- if (!c)
- return -ENOMEM;
-
- for (j = 0; j < 3; j++) {
- BUG_ON(list_empty(&c->btree_cache));
- all[j] = list_first_entry(&c->btree_cache, struct btree, list);
- list_del_init(&all[j]->list);
-
- all[j]->key = KEY(0, 0, c->sb.bucket_size);
- bkey_copy_key(&all[j]->key, &MAX_KEY);
- }
-
- b = all[0];
- fill = all[1];
- orig = all[2];
-
- while (1) {
- for (j = 0; j < 3; j++)
- all[j]->written = all[j]->nsets = 0;
-
- bch_bset_init_next(b);
-
- while (1) {
- struct bset *i = write_block(b);
- struct bkey *k = op.keys.top;
- unsigned rand;
-
- bkey_init(k);
- rand = get_random_int();
-
- op.type = rand & 1
- ? BTREE_INSERT
- : BTREE_REPLACE;
- rand >>= 1;
-
- SET_KEY_SIZE(k, bucket_remainder(c, rand));
- rand >>= c->bucket_bits;
- rand &= 1024 * 512 - 1;
- rand += c->sb.bucket_size;
- SET_KEY_OFFSET(k, rand);
-#if 0
- SET_KEY_PTRS(k, 1);
-#endif
- bch_keylist_push(&op.keys);
- bch_btree_insert_keys(b, &op);
-
- if (should_split(b) ||
- set_blocks(i, b->c) !=
- __set_blocks(i, i->keys + 15, b->c)) {
- i->csum = csum_set(i);
-
- memcpy(write_block(fill),
- i, set_bytes(i));
-
- b->written += set_blocks(i, b->c);
- fill->written = b->written;
- if (b->written == btree_blocks(b))
- break;
-
- bch_btree_sort_lazy(b);
- bch_bset_init_next(b);
- }
- }
-
- memcpy(orig->sets[0].data,
- fill->sets[0].data,
- btree_bytes(c));
-
- bch_btree_sort(b);
- fill->written = 0;
- bch_btree_read_done(&fill->io.cl);
-
- if (b->sets[0].data->keys != fill->sets[0].data->keys ||
- memcmp(b->sets[0].data->start,
- fill->sets[0].data->start,
- b->sets[0].data->keys * sizeof(uint64_t))) {
- struct bset *i = b->sets[0].data;
- struct bkey *k, *l;
-
- for (k = i->start,
- l = fill->sets[0].data->start;
- k < end(i);
- k = bkey_next(k), l = bkey_next(l))
- if (bkey_cmp(k, l) ||
- KEY_SIZE(k) != KEY_SIZE(l))
- pr_err("key %zi differs: %s != %s",
- (uint64_t *) k - i->d,
- pkey(k), pkey(l));
-
- for (j = 0; j < 3; j++) {
- pr_err("**** Set %i ****", j);
- dump(all[j]);
- }
- panic("\n");
- }
-
- pr_info("fuzz complete: %i keys", b->sets[0].data->keys);
- }
-}
-
-kobj_attribute_write(fuzz, btree_fuzz);
-#endif
-
void bch_debug_exit(void)
{
if (!IS_ERR_OR_NULL(debug))
@@ -554,11 +421,6 @@ void bch_debug_exit(void)
int __init bch_debug_init(struct kobject *kobj)
{
int ret = 0;
-#if 0
- ret = sysfs_create_file(kobj, &ksysfs_fuzz.attr);
- if (ret)
- return ret;
-#endif
debug = debugfs_create_dir("bcache", NULL);
return ret;
diff --git a/drivers/md/bcache/debug.h b/drivers/md/bcache/debug.h
index f9378a218148..1c39b5a2489b 100644
--- a/drivers/md/bcache/debug.h
+++ b/drivers/md/bcache/debug.h
@@ -3,15 +3,8 @@
/* Btree/bkey debug printing */
-#define KEYHACK_SIZE 80
-struct keyprint_hack {
- char s[KEYHACK_SIZE];
-};
-
-struct keyprint_hack bch_pkey(const struct bkey *k);
-struct keyprint_hack bch_pbtree(const struct btree *b);
-#define pkey(k) (&bch_pkey(k).s[0])
-#define pbtree(b) (&bch_pbtree(b).s[0])
+int bch_bkey_to_text(char *buf, size_t size, const struct bkey *k);
+int bch_btree_to_text(char *buf, size_t size, const struct btree *b);
#ifdef CONFIG_BCACHE_EDEBUG
diff --git a/drivers/md/bcache/io.c b/drivers/md/bcache/io.c
index 48efd4dea645..9056632995b1 100644
--- a/drivers/md/bcache/io.c
+++ b/drivers/md/bcache/io.c
@@ -9,6 +9,8 @@
#include "bset.h"
#include "debug.h"
+#include <linux/blkdev.h>
+
static void bch_bi_idx_hack_endio(struct bio *bio, int error)
{
struct bio *p = bio->bi_private;
@@ -66,13 +68,6 @@ static void bch_generic_make_request_hack(struct bio *bio)
* The newly allocated bio will point to @bio's bi_io_vec, if the split was on a
* bvec boundry; it is the caller's responsibility to ensure that @bio is not
* freed before the split.
- *
- * If bch_bio_split() is running under generic_make_request(), it's not safe to
- * allocate more than one bio from the same bio set. Therefore, if it is running
- * under generic_make_request() it masks out __GFP_WAIT when doing the
- * allocation. The caller must check for failure if there's any possibility of
- * it being called from under generic_make_request(); it is then the caller's
- * responsibility to retry from a safe context (by e.g. punting to workqueue).
*/
struct bio *bch_bio_split(struct bio *bio, int sectors,
gfp_t gfp, struct bio_set *bs)
@@ -83,20 +78,13 @@ struct bio *bch_bio_split(struct bio *bio, int sectors,
BUG_ON(sectors <= 0);
- /*
- * If we're being called from underneath generic_make_request() and we
- * already allocated any bios from this bio set, we risk deadlock if we
- * use the mempool. So instead, we possibly fail and let the caller punt
- * to workqueue or somesuch and retry in a safe context.
- */
- if (current->bio_list)
- gfp &= ~__GFP_WAIT;
-
if (sectors >= bio_sectors(bio))
return bio;
if (bio->bi_rw & REQ_DISCARD) {
ret = bio_alloc_bioset(gfp, 1, bs);
+ if (!ret)
+ return NULL;
idx = 0;
goto out;
}
@@ -160,17 +148,18 @@ static unsigned bch_bio_max_sectors(struct bio *bio)
struct request_queue *q = bdev_get_queue(bio->bi_bdev);
unsigned max_segments = min_t(unsigned, BIO_MAX_PAGES,
queue_max_segments(q));
- struct bio_vec *bv, *end = bio_iovec(bio) +
- min_t(int, bio_segments(bio), max_segments);
if (bio->bi_rw & REQ_DISCARD)
return min(ret, q->limits.max_discard_sectors);
if (bio_segments(bio) > max_segments ||
q->merge_bvec_fn) {
+ struct bio_vec *bv;
+ int i, seg = 0;
+
ret = 0;
- for (bv = bio_iovec(bio); bv < end; bv++) {
+ bio_for_each_segment(bv, bio, i) {
struct bvec_merge_data bvm = {
.bi_bdev = bio->bi_bdev,
.bi_sector = bio->bi_sector,
@@ -178,10 +167,14 @@ static unsigned bch_bio_max_sectors(struct bio *bio)
.bi_rw = bio->bi_rw,
};
+ if (seg == max_segments)
+ break;
+
if (q->merge_bvec_fn &&
q->merge_bvec_fn(q, &bvm, bv) < (int) bv->bv_len)
break;
+ seg++;
ret += bv->bv_len >> 9;
}
}
@@ -218,30 +211,10 @@ static void bch_bio_submit_split_endio(struct bio *bio, int error)
closure_put(cl);
}
-static void __bch_bio_submit_split(struct closure *cl)
-{
- struct bio_split_hook *s = container_of(cl, struct bio_split_hook, cl);
- struct bio *bio = s->bio, *n;
-
- do {
- n = bch_bio_split(bio, bch_bio_max_sectors(bio),
- GFP_NOIO, s->p->bio_split);
- if (!n)
- continue_at(cl, __bch_bio_submit_split, system_wq);
-
- n->bi_end_io = bch_bio_submit_split_endio;
- n->bi_private = cl;
-
- closure_get(cl);
- bch_generic_make_request_hack(n);
- } while (n != bio);
-
- continue_at(cl, bch_bio_submit_split_done, NULL);
-}
-
void bch_generic_make_request(struct bio *bio, struct bio_split_pool *p)
{
struct bio_split_hook *s;
+ struct bio *n;
if (!bio_has_data(bio) && !(bio->bi_rw & REQ_DISCARD))
goto submit;
@@ -250,6 +223,7 @@ void bch_generic_make_request(struct bio *bio, struct bio_split_pool *p)
goto submit;
s = mempool_alloc(p->bio_split_hook, GFP_NOIO);
+ closure_init(&s->cl, NULL);
s->bio = bio;
s->p = p;
@@ -257,8 +231,18 @@ void bch_generic_make_request(struct bio *bio, struct bio_split_pool *p)
s->bi_private = bio->bi_private;
bio_get(bio);
- closure_call(&s->cl, __bch_bio_submit_split, NULL, NULL);
- return;
+ do {
+ n = bch_bio_split(bio, bch_bio_max_sectors(bio),
+ GFP_NOIO, s->p->bio_split);
+
+ n->bi_end_io = bch_bio_submit_split_endio;
+ n->bi_private = &s->cl;
+
+ closure_get(&s->cl);
+ bch_generic_make_request_hack(n);
+ } while (n != bio);
+
+ continue_at(&s->cl, bch_bio_submit_split_done, NULL);
submit:
bch_generic_make_request_hack(bio);
}
diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c
index 8c8dfdcd9d4c..ba95ab84b2be 100644
--- a/drivers/md/bcache/journal.c
+++ b/drivers/md/bcache/journal.c
@@ -9,6 +9,8 @@
#include "debug.h"
#include "request.h"
+#include <trace/events/bcache.h>
+
/*
* Journal replay/recovery:
*
@@ -182,9 +184,14 @@ bsearch:
pr_debug("starting binary search, l %u r %u", l, r);
while (l + 1 < r) {
+ seq = list_entry(list->prev, struct journal_replay,
+ list)->j.seq;
+
m = (l + r) >> 1;
+ read_bucket(m);
- if (read_bucket(m))
+ if (seq != list_entry(list->prev, struct journal_replay,
+ list)->j.seq)
l = m;
else
r = m;
@@ -300,7 +307,8 @@ int bch_journal_replay(struct cache_set *s, struct list_head *list,
for (k = i->j.start;
k < end(&i->j);
k = bkey_next(k)) {
- pr_debug("%s", pkey(k));
+ trace_bcache_journal_replay_key(k);
+
bkey_copy(op->keys.top, k);
bch_keylist_push(&op->keys);
@@ -384,7 +392,7 @@ out:
return;
found:
if (btree_node_dirty(best))
- bch_btree_write(best, true, NULL);
+ bch_btree_node_write(best, NULL);
rw_unlock(true, best);
}
@@ -617,7 +625,7 @@ static void journal_write_unlocked(struct closure *cl)
bio_reset(bio);
bio->bi_sector = PTR_OFFSET(k, i);
bio->bi_bdev = ca->bdev;
- bio->bi_rw = REQ_WRITE|REQ_SYNC|REQ_META|REQ_FLUSH;
+ bio->bi_rw = REQ_WRITE|REQ_SYNC|REQ_META|REQ_FLUSH|REQ_FUA;
bio->bi_size = sectors << 9;
bio->bi_end_io = journal_write_endio;
@@ -712,7 +720,8 @@ void bch_journal(struct closure *cl)
spin_lock(&c->journal.lock);
if (journal_full(&c->journal)) {
- /* XXX: tracepoint */
+ trace_bcache_journal_full(c);
+
closure_wait(&c->journal.wait, cl);
journal_reclaim(c);
@@ -728,13 +737,15 @@ void bch_journal(struct closure *cl)
if (b * c->sb.block_size > PAGE_SECTORS << JSET_BITS ||
b > c->journal.blocks_free) {
- /* XXX: If we were inserting so many keys that they won't fit in
+ trace_bcache_journal_entry_full(c);
+
+ /*
+ * XXX: If we were inserting so many keys that they won't fit in
* an _empty_ journal write, we'll deadlock. For now, handle
* this in bch_keylist_realloc() - but something to think about.
*/
BUG_ON(!w->data->keys);
- /* XXX: tracepoint */
BUG_ON(!closure_wait(&w->wait, cl));
closure_flush(&c->journal.io);
diff --git a/drivers/md/bcache/movinggc.c b/drivers/md/bcache/movinggc.c
index 8589512c972e..1a3b4f4786c3 100644
--- a/drivers/md/bcache/movinggc.c
+++ b/drivers/md/bcache/movinggc.c
@@ -9,6 +9,8 @@
#include "debug.h"
#include "request.h"
+#include <trace/events/bcache.h>
+
struct moving_io {
struct keybuf_key *w;
struct search s;
@@ -44,14 +46,14 @@ static void write_moving_finish(struct closure *cl)
{
struct moving_io *io = container_of(cl, struct moving_io, s.cl);
struct bio *bio = &io->bio.bio;
- struct bio_vec *bv = bio_iovec_idx(bio, bio->bi_vcnt);
+ struct bio_vec *bv;
+ int i;
- while (bv-- != bio->bi_io_vec)
+ bio_for_each_segment_all(bv, bio, i)
__free_page(bv->bv_page);
- pr_debug("%s %s", io->s.op.insert_collision
- ? "collision moving" : "moved",
- pkey(&io->w->key));
+ if (io->s.op.insert_collision)
+ trace_bcache_gc_copy_collision(&io->w->key);
bch_keybuf_del(&io->s.op.c->moving_gc_keys, io->w);
@@ -94,8 +96,6 @@ static void write_moving(struct closure *cl)
struct moving_io *io = container_of(s, struct moving_io, s);
if (!s->error) {
- trace_bcache_write_moving(&io->bio.bio);
-
moving_init(io);
io->bio.bio.bi_sector = KEY_START(&io->w->key);
@@ -122,7 +122,6 @@ static void read_moving_submit(struct closure *cl)
struct moving_io *io = container_of(s, struct moving_io, s);
struct bio *bio = &io->bio.bio;
- trace_bcache_read_moving(bio);
bch_submit_bbio(bio, s->op.c, &io->w->key, 0);
continue_at(cl, write_moving, bch_gc_wq);
@@ -138,7 +137,8 @@ static void read_moving(struct closure *cl)
/* XXX: if we error, background writeback could stall indefinitely */
while (!test_bit(CACHE_SET_STOPPING, &c->flags)) {
- w = bch_keybuf_next_rescan(c, &c->moving_gc_keys, &MAX_KEY);
+ w = bch_keybuf_next_rescan(c, &c->moving_gc_keys,
+ &MAX_KEY, moving_pred);
if (!w)
break;
@@ -159,10 +159,10 @@ static void read_moving(struct closure *cl)
bio->bi_rw = READ;
bio->bi_end_io = read_moving_endio;
- if (bch_bio_alloc_pages(bio, GFP_KERNEL))
+ if (bio_alloc_pages(bio, GFP_KERNEL))
goto err;
- pr_debug("%s", pkey(&w->key));
+ trace_bcache_gc_copy(&w->key);
closure_call(&io->s.cl, read_moving_submit, NULL, &c->gc.cl);
@@ -250,5 +250,5 @@ void bch_moving_gc(struct closure *cl)
void bch_moving_init_cache_set(struct cache_set *c)
{
- bch_keybuf_init(&c->moving_gc_keys, moving_pred);
+ bch_keybuf_init(&c->moving_gc_keys);
}
diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c
index e5ff12e52d5b..786a1a4f74d8 100644
--- a/drivers/md/bcache/request.c
+++ b/drivers/md/bcache/request.c
@@ -10,6 +10,7 @@
#include "btree.h"
#include "debug.h"
#include "request.h"
+#include "writeback.h"
#include <linux/cgroup.h>
#include <linux/module.h>
@@ -21,8 +22,6 @@
#define CUTOFF_CACHE_ADD 95
#define CUTOFF_CACHE_READA 90
-#define CUTOFF_WRITEBACK 50
-#define CUTOFF_WRITEBACK_SYNC 75
struct kmem_cache *bch_search_cache;
@@ -489,6 +488,12 @@ static void bch_insert_data_loop(struct closure *cl)
bch_queue_gc(op->c);
}
+ /*
+ * Journal writes are marked REQ_FLUSH; if the original write was a
+ * flush, it'll wait on the journal write.
+ */
+ bio->bi_rw &= ~(REQ_FLUSH|REQ_FUA);
+
do {
unsigned i;
struct bkey *k;
@@ -510,10 +515,6 @@ static void bch_insert_data_loop(struct closure *cl)
goto err;
n = bch_bio_split(bio, KEY_SIZE(k), GFP_NOIO, split);
- if (!n) {
- __bkey_put(op->c, k);
- continue_at(cl, bch_insert_data_loop, bcache_wq);
- }
n->bi_end_io = bch_insert_data_endio;
n->bi_private = cl;
@@ -530,10 +531,9 @@ static void bch_insert_data_loop(struct closure *cl)
if (KEY_CSUM(k))
bio_csum(n, k);
- pr_debug("%s", pkey(k));
+ trace_bcache_cache_insert(k);
bch_keylist_push(&op->keys);
- trace_bcache_cache_insert(n, n->bi_sector, n->bi_bdev);
n->bi_rw |= REQ_WRITE;
bch_submit_bbio(n, op->c, k, 0);
} while (n != bio);
@@ -716,7 +716,7 @@ static struct search *search_alloc(struct bio *bio, struct bcache_device *d)
s->task = current;
s->orig_bio = bio;
s->write = (bio->bi_rw & REQ_WRITE) != 0;
- s->op.flush_journal = (bio->bi_rw & REQ_FLUSH) != 0;
+ s->op.flush_journal = (bio->bi_rw & (REQ_FLUSH|REQ_FUA)) != 0;
s->op.skip = (bio->bi_rw & REQ_DISCARD) != 0;
s->recoverable = 1;
s->start_time = jiffies;
@@ -784,11 +784,8 @@ static void request_read_error(struct closure *cl)
int i;
if (s->recoverable) {
- /* The cache read failed, but we can retry from the backing
- * device.
- */
- pr_debug("recovering at sector %llu",
- (uint64_t) s->orig_bio->bi_sector);
+ /* Retry from the backing device: */
+ trace_bcache_read_retry(s->orig_bio);
s->error = 0;
bv = s->bio.bio.bi_io_vec;
@@ -806,7 +803,6 @@ static void request_read_error(struct closure *cl)
/* XXX: invalidate cache */
- trace_bcache_read_retry(&s->bio.bio);
closure_bio_submit(&s->bio.bio, &s->cl, s->d);
}
@@ -827,53 +823,13 @@ static void request_read_done(struct closure *cl)
*/
if (s->op.cache_bio) {
- struct bio_vec *src, *dst;
- unsigned src_offset, dst_offset, bytes;
- void *dst_ptr;
-
bio_reset(s->op.cache_bio);
s->op.cache_bio->bi_sector = s->cache_miss->bi_sector;
s->op.cache_bio->bi_bdev = s->cache_miss->bi_bdev;
s->op.cache_bio->bi_size = s->cache_bio_sectors << 9;
bch_bio_map(s->op.cache_bio, NULL);
- src = bio_iovec(s->op.cache_bio);
- dst = bio_iovec(s->cache_miss);
- src_offset = src->bv_offset;
- dst_offset = dst->bv_offset;
- dst_ptr = kmap(dst->bv_page);
-
- while (1) {
- if (dst_offset == dst->bv_offset + dst->bv_len) {
- kunmap(dst->bv_page);
- dst++;
- if (dst == bio_iovec_idx(s->cache_miss,
- s->cache_miss->bi_vcnt))
- break;
-
- dst_offset = dst->bv_offset;
- dst_ptr = kmap(dst->bv_page);
- }
-
- if (src_offset == src->bv_offset + src->bv_len) {
- src++;
- if (src == bio_iovec_idx(s->op.cache_bio,
- s->op.cache_bio->bi_vcnt))
- BUG();
-
- src_offset = src->bv_offset;
- }
-
- bytes = min(dst->bv_offset + dst->bv_len - dst_offset,
- src->bv_offset + src->bv_len - src_offset);
-
- memcpy(dst_ptr + dst_offset,
- page_address(src->bv_page) + src_offset,
- bytes);
-
- src_offset += bytes;
- dst_offset += bytes;
- }
+ bio_copy_data(s->cache_miss, s->op.cache_bio);
bio_put(s->cache_miss);
s->cache_miss = NULL;
@@ -899,6 +855,7 @@ static void request_read_done_bh(struct closure *cl)
struct cached_dev *dc = container_of(s->d, struct cached_dev, disk);
bch_mark_cache_accounting(s, !s->cache_miss, s->op.skip);
+ trace_bcache_read(s->orig_bio, !s->cache_miss, s->op.skip);
if (s->error)
continue_at_nobarrier(cl, request_read_error, bcache_wq);
@@ -917,9 +874,6 @@ static int cached_dev_cache_miss(struct btree *b, struct search *s,
struct bio *miss;
miss = bch_bio_split(bio, sectors, GFP_NOIO, s->d->bio_split);
- if (!miss)
- return -EAGAIN;
-
if (miss == bio)
s->op.lookup_done = true;
@@ -938,8 +892,9 @@ static int cached_dev_cache_miss(struct btree *b, struct search *s,
reada = min(dc->readahead >> 9,
sectors - bio_sectors(miss));
- if (bio_end(miss) + reada > bdev_sectors(miss->bi_bdev))
- reada = bdev_sectors(miss->bi_bdev) - bio_end(miss);
+ if (bio_end_sector(miss) + reada > bdev_sectors(miss->bi_bdev))
+ reada = bdev_sectors(miss->bi_bdev) -
+ bio_end_sector(miss);
}
s->cache_bio_sectors = bio_sectors(miss) + reada;
@@ -963,13 +918,12 @@ static int cached_dev_cache_miss(struct btree *b, struct search *s,
goto out_put;
bch_bio_map(s->op.cache_bio, NULL);
- if (bch_bio_alloc_pages(s->op.cache_bio, __GFP_NOWARN|GFP_NOIO))
+ if (bio_alloc_pages(s->op.cache_bio, __GFP_NOWARN|GFP_NOIO))
goto out_put;
s->cache_miss = miss;
bio_get(s->op.cache_bio);
- trace_bcache_cache_miss(s->orig_bio);
closure_bio_submit(s->op.cache_bio, &s->cl, s->d);
return ret;
@@ -1002,24 +956,13 @@ static void cached_dev_write_complete(struct closure *cl)
cached_dev_bio_complete(cl);
}
-static bool should_writeback(struct cached_dev *dc, struct bio *bio)
-{
- unsigned threshold = (bio->bi_rw & REQ_SYNC)
- ? CUTOFF_WRITEBACK_SYNC
- : CUTOFF_WRITEBACK;
-
- return !atomic_read(&dc->disk.detaching) &&
- cache_mode(dc, bio) == CACHE_MODE_WRITEBACK &&
- dc->disk.c->gc_stats.in_use < threshold;
-}
-
static void request_write(struct cached_dev *dc, struct search *s)
{
struct closure *cl = &s->cl;
struct bio *bio = &s->bio.bio;
struct bkey start, end;
start = KEY(dc->disk.id, bio->bi_sector, 0);
- end = KEY(dc->disk.id, bio_end(bio), 0);
+ end = KEY(dc->disk.id, bio_end_sector(bio), 0);
bch_keybuf_check_overlapping(&s->op.c->moving_gc_keys, &start, &end);
@@ -1034,22 +977,37 @@ static void request_write(struct cached_dev *dc, struct search *s)
if (bio->bi_rw & REQ_DISCARD)
goto skip;
+ if (should_writeback(dc, s->orig_bio,
+ cache_mode(dc, bio),
+ s->op.skip)) {
+ s->op.skip = false;
+ s->writeback = true;
+ }
+
if (s->op.skip)
goto skip;
- if (should_writeback(dc, s->orig_bio))
- s->writeback = true;
+ trace_bcache_write(s->orig_bio, s->writeback, s->op.skip);
if (!s->writeback) {
s->op.cache_bio = bio_clone_bioset(bio, GFP_NOIO,
dc->disk.bio_split);
- trace_bcache_writethrough(s->orig_bio);
closure_bio_submit(bio, cl, s->d);
} else {
- s->op.cache_bio = bio;
- trace_bcache_writeback(s->orig_bio);
- bch_writeback_add(dc, bio_sectors(bio));
+ bch_writeback_add(dc);
+
+ if (s->op.flush_journal) {
+ /* Also need to send a flush to the backing device */
+ s->op.cache_bio = bio_clone_bioset(bio, GFP_NOIO,
+ dc->disk.bio_split);
+
+ bio->bi_size = 0;
+ bio->bi_vcnt = 0;
+ closure_bio_submit(bio, cl, s->d);
+ } else {
+ s->op.cache_bio = bio;
+ }
}
out:
closure_call(&s->op.cl, bch_insert_data, NULL, cl);
@@ -1058,7 +1016,6 @@ skip:
s->op.skip = true;
s->op.cache_bio = s->orig_bio;
bio_get(s->op.cache_bio);
- trace_bcache_write_skip(s->orig_bio);
if ((bio->bi_rw & REQ_DISCARD) &&
!blk_queue_discard(bdev_get_queue(dc->bdev)))
@@ -1088,9 +1045,10 @@ static void request_nodata(struct cached_dev *dc, struct search *s)
/* Cached devices - read & write stuff */
-int bch_get_congested(struct cache_set *c)
+unsigned bch_get_congested(struct cache_set *c)
{
int i;
+ long rand;
if (!c->congested_read_threshold_us &&
!c->congested_write_threshold_us)
@@ -1106,7 +1064,13 @@ int bch_get_congested(struct cache_set *c)
i += CONGESTED_MAX;
- return i <= 0 ? 1 : fract_exp_two(i, 6);
+ if (i > 0)
+ i = fract_exp_two(i, 6);
+
+ rand = get_random_int();
+ i -= bitmap_weight(&rand, BITS_PER_LONG);
+
+ return i > 0 ? i : 1;
}
static void add_sequential(struct task_struct *t)
@@ -1126,10 +1090,8 @@ static void check_should_skip(struct cached_dev *dc, struct search *s)
{
struct cache_set *c = s->op.c;
struct bio *bio = &s->bio.bio;
-
- long rand;
- int cutoff = bch_get_congested(c);
unsigned mode = cache_mode(dc, bio);
+ unsigned sectors, congested = bch_get_congested(c);
if (atomic_read(&dc->disk.detaching) ||
c->gc_stats.in_use > CUTOFF_CACHE_ADD ||
@@ -1147,17 +1109,14 @@ static void check_should_skip(struct cached_dev *dc, struct search *s)
goto skip;
}
- if (!cutoff) {
- cutoff = dc->sequential_cutoff >> 9;
+ if (!congested && !dc->sequential_cutoff)
+ goto rescale;
- if (!cutoff)
- goto rescale;
-
- if (mode == CACHE_MODE_WRITEBACK &&
- (bio->bi_rw & REQ_WRITE) &&
- (bio->bi_rw & REQ_SYNC))
- goto rescale;
- }
+ if (!congested &&
+ mode == CACHE_MODE_WRITEBACK &&
+ (bio->bi_rw & REQ_WRITE) &&
+ (bio->bi_rw & REQ_SYNC))
+ goto rescale;
if (dc->sequential_merge) {
struct io *i;
@@ -1177,7 +1136,7 @@ found:
if (i->sequential + bio->bi_size > i->sequential)
i->sequential += bio->bi_size;
- i->last = bio_end(bio);
+ i->last = bio_end_sector(bio);
i->jiffies = jiffies + msecs_to_jiffies(5000);
s->task->sequential_io = i->sequential;
@@ -1192,12 +1151,19 @@ found:
add_sequential(s->task);
}
- rand = get_random_int();
- cutoff -= bitmap_weight(&rand, BITS_PER_LONG);
+ sectors = max(s->task->sequential_io,
+ s->task->sequential_io_avg) >> 9;
- if (cutoff <= (int) (max(s->task->sequential_io,
- s->task->sequential_io_avg) >> 9))
+ if (dc->sequential_cutoff &&
+ sectors >= dc->sequential_cutoff >> 9) {
+ trace_bcache_bypass_sequential(s->orig_bio);
goto skip;
+ }
+
+ if (congested && sectors >= congested) {
+ trace_bcache_bypass_congested(s->orig_bio);
+ goto skip;
+ }
rescale:
bch_rescale_priorities(c, bio_sectors(bio));
@@ -1288,30 +1254,25 @@ void bch_cached_dev_request_init(struct cached_dev *dc)
static int flash_dev_cache_miss(struct btree *b, struct search *s,
struct bio *bio, unsigned sectors)
{
+ struct bio_vec *bv;
+ int i;
+
/* Zero fill bio */
- while (bio->bi_idx != bio->bi_vcnt) {
- struct bio_vec *bv = bio_iovec(bio);
+ bio_for_each_segment(bv, bio, i) {
unsigned j = min(bv->bv_len >> 9, sectors);
void *p = kmap(bv->bv_page);
memset(p + bv->bv_offset, 0, j << 9);
kunmap(bv->bv_page);
- bv->bv_len -= j << 9;
- bv->bv_offset += j << 9;
-
- if (bv->bv_len)
- return 0;
-
- bio->bi_sector += j;
- bio->bi_size -= j << 9;
-
- bio->bi_idx++;
- sectors -= j;
+ sectors -= j;
}
- s->op.lookup_done = true;
+ bio_advance(bio, min(sectors << 9, bio->bi_size));
+
+ if (!bio->bi_size)
+ s->op.lookup_done = true;
return 0;
}
@@ -1338,8 +1299,8 @@ static void flash_dev_make_request(struct request_queue *q, struct bio *bio)
closure_call(&s->op.cl, btree_read_async, NULL, cl);
} else if (bio_has_data(bio) || s->op.skip) {
bch_keybuf_check_overlapping(&s->op.c->moving_gc_keys,
- &KEY(d->id, bio->bi_sector, 0),
- &KEY(d->id, bio_end(bio), 0));
+ &KEY(d->id, bio->bi_sector, 0),
+ &KEY(d->id, bio_end_sector(bio), 0));
s->writeback = true;
s->op.cache_bio = bio;
diff --git a/drivers/md/bcache/request.h b/drivers/md/bcache/request.h
index 254d9ab5707c..57dc4784f4f4 100644
--- a/drivers/md/bcache/request.h
+++ b/drivers/md/bcache/request.h
@@ -30,7 +30,7 @@ struct search {
};
void bch_cache_read_endio(struct bio *, int);
-int bch_get_congested(struct cache_set *);
+unsigned bch_get_congested(struct cache_set *);
void bch_insert_data(struct closure *cl);
void bch_btree_insert_async(struct closure *);
void bch_cache_read_endio(struct bio *, int);
diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
index f88e2b653a3f..547c4c57b052 100644
--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -10,10 +10,13 @@
#include "btree.h"
#include "debug.h"
#include "request.h"
+#include "writeback.h"
+#include <linux/blkdev.h>
#include <linux/buffer_head.h>
#include <linux/debugfs.h>
#include <linux/genhd.h>
+#include <linux/kthread.h>
#include <linux/module.h>
#include <linux/random.h>
#include <linux/reboot.h>
@@ -342,6 +345,7 @@ static void uuid_io(struct cache_set *c, unsigned long rw,
struct closure *cl = &c->uuid_write.cl;
struct uuid_entry *u;
unsigned i;
+ char buf[80];
BUG_ON(!parent);
closure_lock(&c->uuid_write, parent);
@@ -362,8 +366,8 @@ static void uuid_io(struct cache_set *c, unsigned long rw,
break;
}
- pr_debug("%s UUIDs at %s", rw & REQ_WRITE ? "wrote" : "read",
- pkey(&c->uuid_bucket));
+ bch_bkey_to_text(buf, sizeof(buf), k);
+ pr_debug("%s UUIDs at %s", rw & REQ_WRITE ? "wrote" : "read", buf);
for (u = c->uuids; u < c->uuids + c->nr_uuids; u++)
if (!bch_is_zero(u->uuid, 16))
@@ -543,7 +547,6 @@ void bch_prio_write(struct cache *ca)
pr_debug("free %zu, free_inc %zu, unused %zu", fifo_used(&ca->free),
fifo_used(&ca->free_inc), fifo_used(&ca->unused));
- blktrace_msg(ca, "Starting priorities: " buckets_free(ca));
for (i = prio_buckets(ca) - 1; i >= 0; --i) {
long bucket;
@@ -704,7 +707,8 @@ static void bcache_device_detach(struct bcache_device *d)
atomic_set(&d->detaching, 0);
}
- bcache_device_unlink(d);
+ if (!d->flush_done)
+ bcache_device_unlink(d);
d->c->devices[d->id] = NULL;
closure_put(&d->c->caching);
@@ -743,13 +747,35 @@ static void bcache_device_free(struct bcache_device *d)
mempool_destroy(d->unaligned_bvec);
if (d->bio_split)
bioset_free(d->bio_split);
+ if (is_vmalloc_addr(d->stripe_sectors_dirty))
+ vfree(d->stripe_sectors_dirty);
+ else
+ kfree(d->stripe_sectors_dirty);
closure_debug_destroy(&d->cl);
}
-static int bcache_device_init(struct bcache_device *d, unsigned block_size)
+static int bcache_device_init(struct bcache_device *d, unsigned block_size,
+ sector_t sectors)
{
struct request_queue *q;
+ size_t n;
+
+ if (!d->stripe_size_bits)
+ d->stripe_size_bits = 31;
+
+ d->nr_stripes = round_up(sectors, 1 << d->stripe_size_bits) >>
+ d->stripe_size_bits;
+
+ if (!d->nr_stripes || d->nr_stripes > SIZE_MAX / sizeof(atomic_t))
+ return -ENOMEM;
+
+ n = d->nr_stripes * sizeof(atomic_t);
+ d->stripe_sectors_dirty = n < PAGE_SIZE << 6
+ ? kzalloc(n, GFP_KERNEL)
+ : vzalloc(n);
+ if (!d->stripe_sectors_dirty)
+ return -ENOMEM;
if (!(d->bio_split = bioset_create(4, offsetof(struct bbio, bio))) ||
!(d->unaligned_bvec = mempool_create_kmalloc_pool(1,
@@ -759,6 +785,7 @@ static int bcache_device_init(struct bcache_device *d, unsigned block_size)
!(q = blk_alloc_queue(GFP_KERNEL)))
return -ENOMEM;
+ set_capacity(d->disk, sectors);
snprintf(d->disk->disk_name, DISK_NAME_LEN, "bcache%i", bcache_minor);
d->disk->major = bcache_major;
@@ -781,6 +808,8 @@ static int bcache_device_init(struct bcache_device *d, unsigned block_size)
set_bit(QUEUE_FLAG_NONROT, &d->disk->queue->queue_flags);
set_bit(QUEUE_FLAG_DISCARD, &d->disk->queue->queue_flags);
+ blk_queue_flush(q, REQ_FLUSH|REQ_FUA);
+
return 0;
}
@@ -800,6 +829,17 @@ static void calc_cached_dev_sectors(struct cache_set *c)
void bch_cached_dev_run(struct cached_dev *dc)
{
struct bcache_device *d = &dc->disk;
+ char buf[SB_LABEL_SIZE + 1];
+ char *env[] = {
+ "DRIVER=bcache",
+ kasprintf(GFP_KERNEL, "CACHED_UUID=%pU", dc->sb.uuid),
+ NULL,
+ NULL,
+ };
+
+ memcpy(buf, dc->sb.label, SB_LABEL_SIZE);
+ buf[SB_LABEL_SIZE] = '\0';
+ env[2] = kasprintf(GFP_KERNEL, "CACHED_LABEL=%s", buf);
if (atomic_xchg(&dc->running, 1))
return;
@@ -816,10 +856,12 @@ void bch_cached_dev_run(struct cached_dev *dc)
add_disk(d->disk);
bd_link_disk_holder(dc->bdev, dc->disk.disk);
-#if 0
- char *env[] = { "SYMLINK=label" , NULL };
+ /* won't show up in the uevent file, use udevadm monitor -e instead
+ * only class / kset properties are persistent */
kobject_uevent_env(&disk_to_dev(d->disk)->kobj, KOBJ_CHANGE, env);
-#endif
+ kfree(env[1]);
+ kfree(env[2]);
+
if (sysfs_create_link(&d->kobj, &disk_to_dev(d->disk)->kobj, "dev") ||
sysfs_create_link(&disk_to_dev(d->disk)->kobj, &d->kobj, "bcache"))
pr_debug("error creating sysfs link");
@@ -960,6 +1002,7 @@ int bch_cached_dev_attach(struct cached_dev *dc, struct cache_set *c)
atomic_set(&dc->count, 1);
if (BDEV_STATE(&dc->sb) == BDEV_STATE_DIRTY) {
+ bch_sectors_dirty_init(dc);
atomic_set(&dc->has_dirty, 1);
atomic_inc(&dc->count);
bch_writeback_queue(dc);
@@ -1014,6 +1057,14 @@ static void cached_dev_flush(struct closure *cl)
struct cached_dev *dc = container_of(cl, struct cached_dev, disk.cl);
struct bcache_device *d = &dc->disk;
+ mutex_lock(&bch_register_lock);
+ d->flush_done = 1;
+
+ if (d->c)
+ bcache_device_unlink(d);
+
+ mutex_unlock(&bch_register_lock);
+
bch_cache_accounting_destroy(&dc->accounting);
kobject_del(&d->kobj);
@@ -1045,7 +1096,8 @@ static int cached_dev_init(struct cached_dev *dc, unsigned block_size)
hlist_add_head(&io->hash, dc->io_hash + RECENT_IO);
}
- ret = bcache_device_init(&dc->disk, block_size);
+ ret = bcache_device_init(&dc->disk, block_size,
+ dc->bdev->bd_part->nr_sects - dc->sb.data_offset);
if (ret)
return ret;
@@ -1144,11 +1196,10 @@ static int flash_dev_run(struct cache_set *c, struct uuid_entry *u)
kobject_init(&d->kobj, &bch_flash_dev_ktype);
- if (bcache_device_init(d, block_bytes(c)))
+ if (bcache_device_init(d, block_bytes(c), u->sectors))
goto err;
bcache_device_attach(d, c, u - c->uuids);
- set_capacity(d->disk, u->sectors);
bch_flash_dev_request_init(d);
add_disk(d->disk);
@@ -1255,9 +1306,10 @@ static void cache_set_free(struct closure *cl)
free_pages((unsigned long) c->uuids, ilog2(bucket_pages(c)));
free_pages((unsigned long) c->sort, ilog2(bucket_pages(c)));
- kfree(c->fill_iter);
if (c->bio_split)
bioset_free(c->bio_split);
+ if (c->fill_iter)
+ mempool_destroy(c->fill_iter);
if (c->bio_meta)
mempool_destroy(c->bio_meta);
if (c->search)
@@ -1278,11 +1330,9 @@ static void cache_set_free(struct closure *cl)
static void cache_set_flush(struct closure *cl)
{
struct cache_set *c = container_of(cl, struct cache_set, caching);
+ struct cache *ca;
struct btree *b;
-
- /* Shut down allocator threads */
- set_bit(CACHE_SET_STOPPING_2, &c->flags);
- wake_up(&c->alloc_wait);
+ unsigned i;
bch_cache_accounting_destroy(&c->accounting);
@@ -1295,7 +1345,11 @@ static void cache_set_flush(struct closure *cl)
/* Should skip this if we're unregistering because of an error */
list_for_each_entry(b, &c->btree_cache, list)
if (btree_node_dirty(b))
- bch_btree_write(b, true, NULL);
+ bch_btree_node_write(b, NULL);
+
+ for_each_cache(ca, c, i)
+ if (ca->alloc_thread)
+ kthread_stop(ca->alloc_thread);
closure_return(cl);
}
@@ -1303,18 +1357,22 @@ static void cache_set_flush(struct closure *cl)
static void __cache_set_unregister(struct closure *cl)
{
struct cache_set *c = container_of(cl, struct cache_set, caching);
- struct cached_dev *dc, *t;
+ struct cached_dev *dc;
size_t i;
mutex_lock(&bch_register_lock);
- if (test_bit(CACHE_SET_UNREGISTERING, &c->flags))
- list_for_each_entry_safe(dc, t, &c->cached_devs, list)
- bch_cached_dev_detach(dc);
-
for (i = 0; i < c->nr_uuids; i++)
- if (c->devices[i] && UUID_FLASH_ONLY(&c->uuids[i]))
- bcache_device_stop(c->devices[i]);
+ if (c->devices[i]) {
+ if (!UUID_FLASH_ONLY(&c->uuids[i]) &&
+ test_bit(CACHE_SET_UNREGISTERING, &c->flags)) {
+ dc = container_of(c->devices[i],
+ struct cached_dev, disk);
+ bch_cached_dev_detach(dc);
+ } else {
+ bcache_device_stop(c->devices[i]);
+ }
+ }
mutex_unlock(&bch_register_lock);
@@ -1373,9 +1431,9 @@ struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
c->btree_pages = max_t(int, c->btree_pages / 4,
BTREE_MAX_PAGES);
- init_waitqueue_head(&c->alloc_wait);
+ c->sort_crit_factor = int_sqrt(c->btree_pages);
+
mutex_init(&c->bucket_lock);
- mutex_init(&c->fill_lock);
mutex_init(&c->sort_lock);
spin_lock_init(&c->sort_time_lock);
closure_init_unlocked(&c->sb_write);
@@ -1401,8 +1459,8 @@ struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
!(c->bio_meta = mempool_create_kmalloc_pool(2,
sizeof(struct bbio) + sizeof(struct bio_vec) *
bucket_pages(c))) ||
+ !(c->fill_iter = mempool_create_kmalloc_pool(1, iter_size)) ||
!(c->bio_split = bioset_create(4, offsetof(struct bbio, bio))) ||
- !(c->fill_iter = kmalloc(iter_size, GFP_KERNEL)) ||
!(c->sort = alloc_bucket_pages(GFP_KERNEL, c)) ||
!(c->uuids = alloc_bucket_pages(GFP_KERNEL, c)) ||
bch_journal_alloc(c) ||
@@ -1410,8 +1468,6 @@ struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
bch_open_buckets_alloc(c))
goto err;
- c->fill_iter->size = sb->bucket_size / sb->block_size;
-
c->congested_read_threshold_us = 2000;
c->congested_write_threshold_us = 20000;
c->error_limit = 8 << IO_ERROR_SHIFT;
@@ -1496,9 +1552,10 @@ static void run_cache_set(struct cache_set *c)
*/
bch_journal_next(&c->journal);
+ err = "error starting allocator thread";
for_each_cache(ca, c, i)
- closure_call(&ca->alloc, bch_allocator_thread,
- system_wq, &c->cl);
+ if (bch_cache_allocator_start(ca))
+ goto err;
/*
* First place it's safe to allocate: btree_check() and
@@ -1531,17 +1588,16 @@ static void run_cache_set(struct cache_set *c)
bch_btree_gc_finish(c);
+ err = "error starting allocator thread";
for_each_cache(ca, c, i)
- closure_call(&ca->alloc, bch_allocator_thread,
- ca->alloc_workqueue, &c->cl);
+ if (bch_cache_allocator_start(ca))
+ goto err;
mutex_lock(&c->bucket_lock);
for_each_cache(ca, c, i)
bch_prio_write(ca);
mutex_unlock(&c->bucket_lock);
- wake_up(&c->alloc_wait);
-
err = "cannot allocate new UUID bucket";
if (__uuid_write(c))
goto err_unlock_gc;
@@ -1552,7 +1608,7 @@ static void run_cache_set(struct cache_set *c)
goto err_unlock_gc;
bkey_copy_key(&c->root->key, &MAX_KEY);
- bch_btree_write(c->root, true, &op);
+ bch_btree_node_write(c->root, &op.cl);
bch_btree_set_root(c->root);
rw_unlock(true, c->root);
@@ -1673,9 +1729,6 @@ void bch_cache_release(struct kobject *kobj)
bio_split_pool_free(&ca->bio_split_hook);
- if (ca->alloc_workqueue)
- destroy_workqueue(ca->alloc_workqueue);
-
free_pages((unsigned long) ca->disk_buckets, ilog2(bucket_pages(ca)));
kfree(ca->prio_buckets);
vfree(ca->buckets);
@@ -1723,7 +1776,6 @@ static int cache_alloc(struct cache_sb *sb, struct cache *ca)
!(ca->prio_buckets = kzalloc(sizeof(uint64_t) * prio_buckets(ca) *
2, GFP_KERNEL)) ||
!(ca->disk_buckets = alloc_bucket_pages(GFP_KERNEL, ca)) ||
- !(ca->alloc_workqueue = alloc_workqueue("bch_allocator", 0, 1)) ||
bio_split_pool_init(&ca->bio_split_hook))
return -ENOMEM;
@@ -1786,6 +1838,36 @@ static ssize_t register_bcache(struct kobject *, struct kobj_attribute *,
kobj_attribute_write(register, register_bcache);
kobj_attribute_write(register_quiet, register_bcache);
+static bool bch_is_open_backing(struct block_device *bdev) {
+ struct cache_set *c, *tc;
+ struct cached_dev *dc, *t;
+
+ list_for_each_entry_safe(c, tc, &bch_cache_sets, list)
+ list_for_each_entry_safe(dc, t, &c->cached_devs, list)
+ if (dc->bdev == bdev)
+ return true;
+ list_for_each_entry_safe(dc, t, &uncached_devices, list)
+ if (dc->bdev == bdev)
+ return true;
+ return false;
+}
+
+static bool bch_is_open_cache(struct block_device *bdev) {
+ struct cache_set *c, *tc;
+ struct cache *ca;
+ unsigned i;
+
+ list_for_each_entry_safe(c, tc, &bch_cache_sets, list)
+ for_each_cache(ca, c, i)
+ if (ca->bdev == bdev)
+ return true;
+ return false;
+}
+
+static bool bch_is_open(struct block_device *bdev) {
+ return bch_is_open_cache(bdev) || bch_is_open_backing(bdev);
+}
+
static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
const char *buffer, size_t size)
{
@@ -1810,8 +1892,13 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
FMODE_READ|FMODE_WRITE|FMODE_EXCL,
sb);
if (IS_ERR(bdev)) {
- if (bdev == ERR_PTR(-EBUSY))
- err = "device busy";
+ if (bdev == ERR_PTR(-EBUSY)) {
+ bdev = lookup_bdev(strim(path));
+ if (!IS_ERR(bdev) && bch_is_open(bdev))
+ err = "device already registered";
+ else
+ err = "device busy";
+ }
goto err;
}
diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
index 4d9cca47e4c6..12a2c2846f99 100644
--- a/drivers/md/bcache/sysfs.c
+++ b/drivers/md/bcache/sysfs.c
@@ -9,7 +9,9 @@
#include "sysfs.h"
#include "btree.h"
#include "request.h"
+#include "writeback.h"
+#include <linux/blkdev.h>
#include <linux/sort.h>
static const char * const cache_replacement_policies[] = {
@@ -79,6 +81,9 @@ rw_attribute(writeback_rate_p_term_inverse);
rw_attribute(writeback_rate_d_smooth);
read_attribute(writeback_rate_debug);
+read_attribute(stripe_size);
+read_attribute(partial_stripes_expensive);
+
rw_attribute(synchronous);
rw_attribute(journal_delay_ms);
rw_attribute(discard);
@@ -127,7 +132,7 @@ SHOW(__bch_cached_dev)
char derivative[20];
char target[20];
bch_hprint(dirty,
- atomic_long_read(&dc->disk.sectors_dirty) << 9);
+ bcache_dev_sectors_dirty(&dc->disk) << 9);
bch_hprint(derivative, dc->writeback_rate_derivative << 9);
bch_hprint(target, dc->writeback_rate_target << 9);
@@ -143,7 +148,10 @@ SHOW(__bch_cached_dev)
}
sysfs_hprint(dirty_data,
- atomic_long_read(&dc->disk.sectors_dirty) << 9);
+ bcache_dev_sectors_dirty(&dc->disk) << 9);
+
+ sysfs_hprint(stripe_size, (1 << dc->disk.stripe_size_bits) << 9);
+ var_printf(partial_stripes_expensive, "%u");
var_printf(sequential_merge, "%i");
var_hprint(sequential_cutoff);
@@ -170,6 +178,7 @@ STORE(__cached_dev)
disk.kobj);
unsigned v = size;
struct cache_set *c;
+ struct kobj_uevent_env *env;
#define d_strtoul(var) sysfs_strtoul(var, dc->var)
#define d_strtoi_h(var) sysfs_hatoi(var, dc->var)
@@ -214,6 +223,7 @@ STORE(__cached_dev)
}
if (attr == &sysfs_label) {
+ /* note: endlines are preserved */
memcpy(dc->sb.label, buf, SB_LABEL_SIZE);
bch_write_bdev_super(dc, NULL);
if (dc->disk.c) {
@@ -221,6 +231,15 @@ STORE(__cached_dev)
buf, SB_LABEL_SIZE);
bch_uuid_write(dc->disk.c);
}
+ env = kzalloc(sizeof(struct kobj_uevent_env), GFP_KERNEL);
+ if (!env)
+ return -ENOMEM;
+ add_uevent_var(env, "DRIVER=bcache");
+ add_uevent_var(env, "CACHED_UUID=%pU", dc->sb.uuid),
+ add_uevent_var(env, "CACHED_LABEL=%s", buf);
+ kobject_uevent_env(
+ &disk_to_dev(dc->disk.disk)->kobj, KOBJ_CHANGE, env->envp);
+ kfree(env);
}
if (attr == &sysfs_attach) {
@@ -284,6 +303,8 @@ static struct attribute *bch_cached_dev_files[] = {
&sysfs_writeback_rate_d_smooth,
&sysfs_writeback_rate_debug,
&sysfs_dirty_data,
+ &sysfs_stripe_size,
+ &sysfs_partial_stripes_expensive,
&sysfs_sequential_cutoff,
&sysfs_sequential_merge,
&sysfs_clear_stats,
@@ -665,12 +686,10 @@ SHOW(__bch_cache)
int cmp(const void *l, const void *r)
{ return *((uint16_t *) r) - *((uint16_t *) l); }
- /* Number of quantiles we compute */
- const unsigned nq = 31;
-
size_t n = ca->sb.nbuckets, i, unused, btree;
uint64_t sum = 0;
- uint16_t q[nq], *p, *cached;
+ /* Compute 31 quantiles */
+ uint16_t q[31], *p, *cached;
ssize_t ret;
cached = p = vmalloc(ca->sb.nbuckets * sizeof(uint16_t));
@@ -703,26 +722,29 @@ SHOW(__bch_cache)
if (n)
do_div(sum, n);
- for (i = 0; i < nq; i++)
- q[i] = INITIAL_PRIO - cached[n * (i + 1) / (nq + 1)];
+ for (i = 0; i < ARRAY_SIZE(q); i++)
+ q[i] = INITIAL_PRIO - cached[n * (i + 1) /
+ (ARRAY_SIZE(q) + 1)];
vfree(p);
- ret = snprintf(buf, PAGE_SIZE,
- "Unused: %zu%%\n"
- "Metadata: %zu%%\n"
- "Average: %llu\n"
- "Sectors per Q: %zu\n"
- "Quantiles: [",
- unused * 100 / (size_t) ca->sb.nbuckets,
- btree * 100 / (size_t) ca->sb.nbuckets, sum,
- n * ca->sb.bucket_size / (nq + 1));
-
- for (i = 0; i < nq && ret < (ssize_t) PAGE_SIZE; i++)
- ret += snprintf(buf + ret, PAGE_SIZE - ret,
- i < nq - 1 ? "%u " : "%u]\n", q[i]);
-
- buf[PAGE_SIZE - 1] = '\0';
+ ret = scnprintf(buf, PAGE_SIZE,
+ "Unused: %zu%%\n"
+ "Metadata: %zu%%\n"
+ "Average: %llu\n"
+ "Sectors per Q: %zu\n"
+ "Quantiles: [",
+ unused * 100 / (size_t) ca->sb.nbuckets,
+ btree * 100 / (size_t) ca->sb.nbuckets, sum,
+ n * ca->sb.bucket_size / (ARRAY_SIZE(q) + 1));
+
+ for (i = 0; i < ARRAY_SIZE(q); i++)
+ ret += scnprintf(buf + ret, PAGE_SIZE - ret,
+ "%u ", q[i]);
+ ret--;
+
+ ret += scnprintf(buf + ret, PAGE_SIZE - ret, "]\n");
+
return ret;
}
diff --git a/drivers/md/bcache/trace.c b/drivers/md/bcache/trace.c
index 983f9bb411bc..f7b6c197f90f 100644
--- a/drivers/md/bcache/trace.c
+++ b/drivers/md/bcache/trace.c
@@ -2,6 +2,7 @@
#include "btree.h"
#include "request.h"
+#include <linux/blktrace_api.h>
#include <linux/module.h>
#define CREATE_TRACE_POINTS
@@ -9,18 +10,44 @@
EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_request_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_request_end);
-EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_passthrough);
-EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_cache_hit);
-EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_cache_miss);
+
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_bypass_sequential);
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_bypass_congested);
+
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_read);
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_write);
EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_read_retry);
-EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_writethrough);
-EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_writeback);
-EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_write_skip);
+
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_cache_insert);
+
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_journal_replay_key);
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_journal_write);
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_journal_full);
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_journal_entry_full);
+
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_btree_cache_cannibalize);
+
EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_btree_read);
EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_btree_write);
-EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_write_dirty);
-EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_read_dirty);
-EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_journal_write);
-EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_cache_insert);
+
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_btree_node_alloc);
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_btree_node_alloc_fail);
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_btree_node_free);
+
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_btree_gc_coalesce);
EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_gc_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_gc_end);
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_gc_copy);
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_gc_copy_collision);
+
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_btree_insert_key);
+
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_btree_node_split);
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_btree_node_compact);
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_btree_set_root);
+
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_alloc_invalidate);
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_alloc_fail);
+
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_writeback);
+EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_writeback_collision);
diff --git a/drivers/md/bcache/util.c b/drivers/md/bcache/util.c
index da3a99e85b1e..98eb81159a22 100644
--- a/drivers/md/bcache/util.c
+++ b/drivers/md/bcache/util.c
@@ -228,23 +228,6 @@ start: bv->bv_len = min_t(size_t, PAGE_SIZE - bv->bv_offset,
}
}
-int bch_bio_alloc_pages(struct bio *bio, gfp_t gfp)
-{
- int i;
- struct bio_vec *bv;
-
- bio_for_each_segment(bv, bio, i) {
- bv->bv_page = alloc_page(gfp);
- if (!bv->bv_page) {
- while (bv-- != bio->bi_io_vec + bio->bi_idx)
- __free_page(bv->bv_page);
- return -ENOMEM;
- }
- }
-
- return 0;
-}
-
/*
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group (Any
* use permitted, subject to terms of PostgreSQL license; see.)
diff --git a/drivers/md/bcache/util.h b/drivers/md/bcache/util.h
index 577393e38c3a..1ae2a73ad85f 100644
--- a/drivers/md/bcache/util.h
+++ b/drivers/md/bcache/util.h
@@ -15,8 +15,6 @@
struct closure;
-#include <trace/events/bcache.h>
-
#ifdef CONFIG_BCACHE_EDEBUG
#define atomic_dec_bug(v) BUG_ON(atomic_dec_return(v) < 0)
@@ -566,12 +564,8 @@ static inline unsigned fract_exp_two(unsigned x, unsigned fract_bits)
return x;
}
-#define bio_end(bio) ((bio)->bi_sector + bio_sectors(bio))
-
void bch_bio_map(struct bio *bio, void *base);
-int bch_bio_alloc_pages(struct bio *bio, gfp_t gfp);
-
static inline sector_t bdev_sectors(struct block_device *bdev)
{
return bdev->bd_inode->i_size >> 9;
diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
index 2714ed3991d1..22cbff551628 100644
--- a/drivers/md/bcache/writeback.c
+++ b/drivers/md/bcache/writeback.c
@@ -9,6 +9,9 @@
#include "bcache.h"
#include "btree.h"
#include "debug.h"
+#include "writeback.h"
+
+#include <trace/events/bcache.h>
static struct workqueue_struct *dirty_wq;
@@ -36,7 +39,7 @@ static void __update_writeback_rate(struct cached_dev *dc)
int change = 0;
int64_t error;
- int64_t dirty = atomic_long_read(&dc->disk.sectors_dirty);
+ int64_t dirty = bcache_dev_sectors_dirty(&dc->disk);
int64_t derivative = dirty - dc->disk.sectors_dirty_last;
dc->disk.sectors_dirty_last = dirty;
@@ -105,6 +108,31 @@ static bool dirty_pred(struct keybuf *buf, struct bkey *k)
return KEY_DIRTY(k);
}
+static bool dirty_full_stripe_pred(struct keybuf *buf, struct bkey *k)
+{
+ uint64_t stripe;
+ unsigned nr_sectors = KEY_SIZE(k);
+ struct cached_dev *dc = container_of(buf, struct cached_dev,
+ writeback_keys);
+ unsigned stripe_size = 1 << dc->disk.stripe_size_bits;
+
+ if (!KEY_DIRTY(k))
+ return false;
+
+ stripe = KEY_START(k) >> dc->disk.stripe_size_bits;
+ while (1) {
+ if (atomic_read(dc->disk.stripe_sectors_dirty + stripe) !=
+ stripe_size)
+ return false;
+
+ if (nr_sectors <= stripe_size)
+ return true;
+
+ nr_sectors -= stripe_size;
+ stripe++;
+ }
+}
+
static void dirty_init(struct keybuf_key *w)
{
struct dirty_io *io = w->private;
@@ -149,7 +177,22 @@ static void refill_dirty(struct closure *cl)
searched_from_start = true;
}
- bch_refill_keybuf(dc->disk.c, buf, &end);
+ if (dc->partial_stripes_expensive) {
+ uint64_t i;
+
+ for (i = 0; i < dc->disk.nr_stripes; i++)
+ if (atomic_read(dc->disk.stripe_sectors_dirty + i) ==
+ 1 << dc->disk.stripe_size_bits)
+ goto full_stripes;
+
+ goto normal_refill;
+full_stripes:
+ bch_refill_keybuf(dc->disk.c, buf, &end,
+ dirty_full_stripe_pred);
+ } else {
+normal_refill:
+ bch_refill_keybuf(dc->disk.c, buf, &end, dirty_pred);
+ }
if (bkey_cmp(&buf->last_scanned, &end) >= 0 && searched_from_start) {
/* Searched the entire btree - delay awhile */
@@ -181,10 +224,8 @@ void bch_writeback_queue(struct cached_dev *dc)
}
}
-void bch_writeback_add(struct cached_dev *dc, unsigned sectors)
+void bch_writeback_add(struct cached_dev *dc)
{
- atomic_long_add(sectors, &dc->disk.sectors_dirty);
-
if (!atomic_read(&dc->has_dirty) &&
!atomic_xchg(&dc->has_dirty, 1)) {
atomic_inc(&dc->count);
@@ -203,6 +244,34 @@ void bch_writeback_add(struct cached_dev *dc, unsigned sectors)
}
}
+void bcache_dev_sectors_dirty_add(struct cache_set *c, unsigned inode,
+ uint64_t offset, int nr_sectors)
+{
+ struct bcache_device *d = c->devices[inode];
+ unsigned stripe_size, stripe_offset;
+ uint64_t stripe;
+
+ if (!d)
+ return;
+
+ stripe_size = 1 << d->stripe_size_bits;
+ stripe = offset >> d->stripe_size_bits;
+ stripe_offset = offset & (stripe_size - 1);
+
+ while (nr_sectors) {
+ int s = min_t(unsigned, abs(nr_sectors),
+ stripe_size - stripe_offset);
+
+ if (nr_sectors < 0)
+ s = -s;
+
+ atomic_add(s, d->stripe_sectors_dirty + stripe);
+ nr_sectors -= s;
+ stripe_offset = 0;
+ stripe++;
+ }
+}
+
/* Background writeback - IO loop */
static void dirty_io_destructor(struct closure *cl)
@@ -216,9 +285,10 @@ static void write_dirty_finish(struct closure *cl)
struct dirty_io *io = container_of(cl, struct dirty_io, cl);
struct keybuf_key *w = io->bio.bi_private;
struct cached_dev *dc = io->dc;
- struct bio_vec *bv = bio_iovec_idx(&io->bio, io->bio.bi_vcnt);
+ struct bio_vec *bv;
+ int i;
- while (bv-- != io->bio.bi_io_vec)
+ bio_for_each_segment_all(bv, &io->bio, i)
__free_page(bv->bv_page);
/* This is kind of a dumb way of signalling errors. */
@@ -236,10 +306,12 @@ static void write_dirty_finish(struct closure *cl)
for (i = 0; i < KEY_PTRS(&w->key); i++)
atomic_inc(&PTR_BUCKET(dc->disk.c, &w->key, i)->pin);
- pr_debug("clearing %s", pkey(&w->key));
bch_btree_insert(&op, dc->disk.c);
closure_sync(&op.cl);
+ if (op.insert_collision)
+ trace_bcache_writeback_collision(&w->key);
+
atomic_long_inc(op.insert_collision
? &dc->disk.c->writeback_keys_failed
: &dc->disk.c->writeback_keys_done);
@@ -275,7 +347,6 @@ static void write_dirty(struct closure *cl)
io->bio.bi_bdev = io->dc->bdev;
io->bio.bi_end_io = dirty_endio;
- trace_bcache_write_dirty(&io->bio);
closure_bio_submit(&io->bio, cl, &io->dc->disk);
continue_at(cl, write_dirty_finish, dirty_wq);
@@ -296,7 +367,6 @@ static void read_dirty_submit(struct closure *cl)
{
struct dirty_io *io = container_of(cl, struct dirty_io, cl);
- trace_bcache_read_dirty(&io->bio);
closure_bio_submit(&io->bio, cl, &io->dc->disk);
continue_at(cl, write_dirty, dirty_wq);
@@ -349,10 +419,10 @@ static void read_dirty(struct closure *cl)
io->bio.bi_rw = READ;
io->bio.bi_end_io = read_dirty_endio;
- if (bch_bio_alloc_pages(&io->bio, GFP_KERNEL))
+ if (bio_alloc_pages(&io->bio, GFP_KERNEL))
goto err_free;
- pr_debug("%s", pkey(&w->key));
+ trace_bcache_writeback(&w->key);
closure_call(&io->cl, read_dirty_submit, NULL, &dc->disk.cl);
@@ -375,12 +445,49 @@ err:
refill_dirty(cl);
}
+/* Init */
+
+static int bch_btree_sectors_dirty_init(struct btree *b, struct btree_op *op,
+ struct cached_dev *dc)
+{
+ struct bkey *k;
+ struct btree_iter iter;
+
+ bch_btree_iter_init(b, &iter, &KEY(dc->disk.id, 0, 0));
+ while ((k = bch_btree_iter_next_filter(&iter, b, bch_ptr_bad)))
+ if (!b->level) {
+ if (KEY_INODE(k) > dc->disk.id)
+ break;
+
+ if (KEY_DIRTY(k))
+ bcache_dev_sectors_dirty_add(b->c, dc->disk.id,
+ KEY_START(k),
+ KEY_SIZE(k));
+ } else {
+ btree(sectors_dirty_init, k, b, op, dc);
+ if (KEY_INODE(k) > dc->disk.id)
+ break;
+
+ cond_resched();
+ }
+
+ return 0;
+}
+
+void bch_sectors_dirty_init(struct cached_dev *dc)
+{
+ struct btree_op op;
+
+ bch_btree_op_init_stack(&op);
+ btree_root(sectors_dirty_init, dc->disk.c, &op, dc);
+}
+
void bch_cached_dev_writeback_init(struct cached_dev *dc)
{
closure_init_unlocked(&dc->writeback);
init_rwsem(&dc->writeback_lock);
- bch_keybuf_init(&dc->writeback_keys, dirty_pred);
+ bch_keybuf_init(&dc->writeback_keys);
dc->writeback_metadata = true;
dc->writeback_running = true;
diff --git a/drivers/md/bcache/writeback.h b/drivers/md/bcache/writeback.h
new file mode 100644
index 000000000000..c91f61bb95b6
--- /dev/null
+++ b/drivers/md/bcache/writeback.h
@@ -0,0 +1,64 @@
+#ifndef _BCACHE_WRITEBACK_H
+#define _BCACHE_WRITEBACK_H
+
+#define CUTOFF_WRITEBACK 40
+#define CUTOFF_WRITEBACK_SYNC 70
+
+static inline uint64_t bcache_dev_sectors_dirty(struct bcache_device *d)
+{
+ uint64_t i, ret = 0;
+
+ for (i = 0; i < d->nr_stripes; i++)
+ ret += atomic_read(d->stripe_sectors_dirty + i);
+
+ return ret;
+}
+
+static inline bool bcache_dev_stripe_dirty(struct bcache_device *d,
+ uint64_t offset,
+ unsigned nr_sectors)
+{
+ uint64_t stripe = offset >> d->stripe_size_bits;
+
+ while (1) {
+ if (atomic_read(d->stripe_sectors_dirty + stripe))
+ return true;
+
+ if (nr_sectors <= 1 << d->stripe_size_bits)
+ return false;
+
+ nr_sectors -= 1 << d->stripe_size_bits;
+ stripe++;
+ }
+}
+
+static inline bool should_writeback(struct cached_dev *dc, struct bio *bio,
+ unsigned cache_mode, bool would_skip)
+{
+ unsigned in_use = dc->disk.c->gc_stats.in_use;
+
+ if (cache_mode != CACHE_MODE_WRITEBACK ||
+ atomic_read(&dc->disk.detaching) ||
+ in_use > CUTOFF_WRITEBACK_SYNC)
+ return false;
+
+ if (dc->partial_stripes_expensive &&
+ bcache_dev_stripe_dirty(&dc->disk, bio->bi_sector,
+ bio_sectors(bio)))
+ return true;
+
+ if (would_skip)
+ return false;
+
+ return bio->bi_rw & REQ_SYNC ||
+ in_use <= CUTOFF_WRITEBACK;
+}
+
+void bcache_dev_sectors_dirty_add(struct cache_set *, unsigned, uint64_t, int);
+void bch_writeback_queue(struct cached_dev *);
+void bch_writeback_add(struct cached_dev *);
+
+void bch_sectors_dirty_init(struct cached_dev *dc);
+void bch_cached_dev_writeback_init(struct cached_dev *);
+
+#endif
diff --git a/drivers/md/md.c b/drivers/md/md.c
index dddc87bcf64a..9f13e13506ef 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -7716,20 +7716,6 @@ static int remove_and_add_spares(struct mddev *mddev,
continue;
rdev->recovery_offset = 0;
- if (rdev->saved_raid_disk >= 0 && mddev->in_sync) {
- spin_lock_irq(&mddev->write_lock);
- if (mddev->in_sync)
- /* OK, this device, which is in_sync,
- * will definitely be noticed before
- * the next write, so recovery isn't
- * needed.
- */
- rdev->recovery_offset = mddev->recovery_cp;
- spin_unlock_irq(&mddev->write_lock);
- }
- if (mddev->ro && rdev->recovery_offset != MaxSector)
- /* not safe to add this disk now */
- continue;
if (mddev->pers->
hot_add_disk(mddev, rdev) == 0) {
if (sysfs_link_rdev(mddev, rdev))
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index ec734588a1c6..d60412c7f995 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -1849,6 +1849,36 @@ static int process_checks(struct r1bio *r1_bio)
int i;
int vcnt;
+ /* Fix variable parts of all bios */
+ vcnt = (r1_bio->sectors + PAGE_SIZE / 512 - 1) >> (PAGE_SHIFT - 9);
+ for (i = 0; i < conf->raid_disks * 2; i++) {
+ int j;
+ int size;
+ struct bio *b = r1_bio->bios[i];
+ if (b->bi_end_io != end_sync_read)
+ continue;
+ /* fixup the bio for reuse */
+ bio_reset(b);
+ b->bi_vcnt = vcnt;
+ b->bi_size = r1_bio->sectors << 9;
+ b->bi_sector = r1_bio->sector +
+ conf->mirrors[i].rdev->data_offset;
+ b->bi_bdev = conf->mirrors[i].rdev->bdev;
+ b->bi_end_io = end_sync_read;
+ b->bi_private = r1_bio;
+
+ size = b->bi_size;
+ for (j = 0; j < vcnt ; j++) {
+ struct bio_vec *bi;
+ bi = &b->bi_io_vec[j];
+ bi->bv_offset = 0;
+ if (size > PAGE_SIZE)
+ bi->bv_len = PAGE_SIZE;
+ else
+ bi->bv_len = size;
+ size -= PAGE_SIZE;
+ }
+ }
for (primary = 0; primary < conf->raid_disks * 2; primary++)
if (r1_bio->bios[primary]->bi_end_io == end_sync_read &&
test_bit(BIO_UPTODATE, &r1_bio->bios[primary]->bi_flags)) {
@@ -1857,12 +1887,10 @@ static int process_checks(struct r1bio *r1_bio)
break;
}
r1_bio->read_disk = primary;
- vcnt = (r1_bio->sectors + PAGE_SIZE / 512 - 1) >> (PAGE_SHIFT - 9);
for (i = 0; i < conf->raid_disks * 2; i++) {
int j;
struct bio *pbio = r1_bio->bios[primary];
struct bio *sbio = r1_bio->bios[i];
- int size;
if (sbio->bi_end_io != end_sync_read)
continue;
@@ -1888,27 +1916,6 @@ static int process_checks(struct r1bio *r1_bio)
rdev_dec_pending(conf->mirrors[i].rdev, mddev);
continue;
}
- /* fixup the bio for reuse */
- bio_reset(sbio);
- sbio->bi_vcnt = vcnt;
- sbio->bi_size = r1_bio->sectors << 9;
- sbio->bi_sector = r1_bio->sector +
- conf->mirrors[i].rdev->data_offset;
- sbio->bi_bdev = conf->mirrors[i].rdev->bdev;
- sbio->bi_end_io = end_sync_read;
- sbio->bi_private = r1_bio;
-
- size = sbio->bi_size;
- for (j = 0; j < vcnt ; j++) {
- struct bio_vec *bi;
- bi = &sbio->bi_io_vec[j];
- bi->bv_offset = 0;
- if (size > PAGE_SIZE)
- bi->bv_len = PAGE_SIZE;
- else
- bi->bv_len = size;
- size -= PAGE_SIZE;
- }
bio_copy_data(sbio, pbio);
}
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index cd066b63bdaf..df7b0a06b0ea 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -2097,11 +2097,17 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
* both 'first' and 'i', so we just compare them.
* All vec entries are PAGE_SIZE;
*/
- for (j = 0; j < vcnt; j++)
+ int sectors = r10_bio->sectors;
+ for (j = 0; j < vcnt; j++) {
+ int len = PAGE_SIZE;
+ if (sectors < (len / 512))
+ len = sectors * 512;
if (memcmp(page_address(fbio->bi_io_vec[j].bv_page),
page_address(tbio->bi_io_vec[j].bv_page),
- fbio->bi_io_vec[j].bv_len))
+ len))
break;
+ sectors -= len/512;
+ }
if (j == vcnt)
continue;
atomic64_add(r10_bio->sectors, &mddev->resync_mismatches);
@@ -2284,12 +2290,18 @@ static void recovery_request_write(struct mddev *mddev, struct r10bio *r10_bio)
d = r10_bio->devs[1].devnum;
wbio = r10_bio->devs[1].bio;
wbio2 = r10_bio->devs[1].repl_bio;
+ /* Need to test wbio2->bi_end_io before we call
+ * generic_make_request as if the former is NULL,
+ * the latter is free to free wbio2.
+ */
+ if (wbio2 && !wbio2->bi_end_io)
+ wbio2 = NULL;
if (wbio->bi_end_io) {
atomic_inc(&conf->mirrors[d].rdev->nr_pending);
md_sync_acct(conf->mirrors[d].rdev->bdev, bio_sectors(wbio));
generic_make_request(wbio);
}
- if (wbio2 && wbio2->bi_end_io) {
+ if (wbio2) {
atomic_inc(&conf->mirrors[d].replacement->nr_pending);
md_sync_acct(conf->mirrors[d].replacement->bdev,
bio_sectors(wbio2));
@@ -3407,6 +3419,7 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr,
if (bio->bi_end_io == end_sync_read) {
md_sync_acct(bio->bi_bdev, nr_sectors);
+ set_bit(BIO_UPTODATE, &bio->bi_flags);
generic_make_request(bio);
}
}
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 2bf094a587cb..78ea44336e75 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -3462,6 +3462,7 @@ static void handle_stripe(struct stripe_head *sh)
test_and_clear_bit(STRIPE_SYNC_REQUESTED, &sh->state)) {
set_bit(STRIPE_SYNCING, &sh->state);
clear_bit(STRIPE_INSYNC, &sh->state);
+ clear_bit(STRIPE_REPLACED, &sh->state);
}
spin_unlock(&sh->stripe_lock);
}
@@ -3607,19 +3608,23 @@ static void handle_stripe(struct stripe_head *sh)
handle_parity_checks5(conf, sh, &s, disks);
}
- if (s.replacing && s.locked == 0
- && !test_bit(STRIPE_INSYNC, &sh->state)) {
+ if ((s.replacing || s.syncing) && s.locked == 0
+ && !test_bit(STRIPE_COMPUTE_RUN, &sh->state)
+ && !test_bit(STRIPE_REPLACED, &sh->state)) {
/* Write out to replacement devices where possible */
for (i = 0; i < conf->raid_disks; i++)
- if (test_bit(R5_UPTODATE, &sh->dev[i].flags) &&
- test_bit(R5_NeedReplace, &sh->dev[i].flags)) {
+ if (test_bit(R5_NeedReplace, &sh->dev[i].flags)) {
+ WARN_ON(!test_bit(R5_UPTODATE, &sh->dev[i].flags));
set_bit(R5_WantReplace, &sh->dev[i].flags);
set_bit(R5_LOCKED, &sh->dev[i].flags);
s.locked++;
}
- set_bit(STRIPE_INSYNC, &sh->state);
+ if (s.replacing)
+ set_bit(STRIPE_INSYNC, &sh->state);
+ set_bit(STRIPE_REPLACED, &sh->state);
}
if ((s.syncing || s.replacing) && s.locked == 0 &&
+ !test_bit(STRIPE_COMPUTE_RUN, &sh->state) &&
test_bit(STRIPE_INSYNC, &sh->state)) {
md_done_sync(conf->mddev, STRIPE_SECTORS, 1);
clear_bit(STRIPE_SYNCING, &sh->state);
diff --git a/drivers/md/raid5.h b/drivers/md/raid5.h
index b0b663b119a8..70c49329ca9a 100644
--- a/drivers/md/raid5.h
+++ b/drivers/md/raid5.h
@@ -306,6 +306,7 @@ enum {
STRIPE_SYNC_REQUESTED,
STRIPE_SYNCING,
STRIPE_INSYNC,
+ STRIPE_REPLACED,
STRIPE_PREREAD_ACTIVE,
STRIPE_DELAYED,
STRIPE_DEGRADED,
diff --git a/drivers/media/pci/saa7134/saa7134-alsa.c b/drivers/media/pci/saa7134/saa7134-alsa.c
index 10460fd3ce39..dbcdfbf8aed0 100644
--- a/drivers/media/pci/saa7134/saa7134-alsa.c
+++ b/drivers/media/pci/saa7134/saa7134-alsa.c
@@ -172,7 +172,9 @@ static void saa7134_irq_alsa_done(struct saa7134_dev *dev,
dprintk("irq: overrun [full=%d/%d] - Blocks in %d\n",dev->dmasound.read_count,
dev->dmasound.bufsize, dev->dmasound.blocks);
spin_unlock(&dev->slock);
+ snd_pcm_stream_lock(dev->dmasound.substream);
snd_pcm_stop(dev->dmasound.substream,SNDRV_PCM_STATE_XRUN);
+ snd_pcm_stream_unlock(dev->dmasound.substream);
return;
}
diff --git a/drivers/misc/atmel-ssc.c b/drivers/misc/atmel-ssc.c
index f7b90661e321..e068a76a5f6f 100644
--- a/drivers/misc/atmel-ssc.c
+++ b/drivers/misc/atmel-ssc.c
@@ -66,14 +66,19 @@ EXPORT_SYMBOL(ssc_request);
void ssc_free(struct ssc_device *ssc)
{
+ bool disable_clk = true;
+
spin_lock(&user_lock);
- if (ssc->user) {
+ if (ssc->user)
ssc->user--;
- clk_disable_unprepare(ssc->clk);
- } else {
+ else {
+ disable_clk = false;
dev_dbg(&ssc->pdev->dev, "device already free\n");
}
spin_unlock(&user_lock);
+
+ if (disable_clk)
+ clk_disable_unprepare(ssc->clk);
}
EXPORT_SYMBOL(ssc_free);
diff --git a/drivers/misc/mei/hbm.c b/drivers/misc/mei/hbm.c
index f9296abcf02a..6127ab64bb39 100644
--- a/drivers/misc/mei/hbm.c
+++ b/drivers/misc/mei/hbm.c
@@ -167,7 +167,7 @@ int mei_hbm_start_req(struct mei_device *dev)
dev->hbm_state = MEI_HBM_IDLE;
if (mei_write_message(dev, mei_hdr, dev->wr_msg.data)) {
- dev_err(&dev->pdev->dev, "version message writet failed\n");
+ dev_err(&dev->pdev->dev, "version message write failed\n");
dev->dev_state = MEI_DEV_RESETTING;
mei_reset(dev, 1);
return -ENODEV;
diff --git a/drivers/misc/mei/hw-me.c b/drivers/misc/mei/hw-me.c
index e4f8dec4dc3c..b22c7e247225 100644
--- a/drivers/misc/mei/hw-me.c
+++ b/drivers/misc/mei/hw-me.c
@@ -239,14 +239,18 @@ static int mei_me_hw_ready_wait(struct mei_device *dev)
if (mei_me_hw_is_ready(dev))
return 0;
+ dev->recvd_hw_ready = false;
mutex_unlock(&dev->device_lock);
err = wait_event_interruptible_timeout(dev->wait_hw_ready,
- dev->recvd_hw_ready, MEI_INTEROP_TIMEOUT);
+ dev->recvd_hw_ready,
+ mei_secs_to_jiffies(MEI_INTEROP_TIMEOUT));
mutex_lock(&dev->device_lock);
if (!err && !dev->recvd_hw_ready) {
+ if (!err)
+ err = -ETIMEDOUT;
dev_err(&dev->pdev->dev,
- "wait hw ready failed. status = 0x%x\n", err);
- return -ETIMEDOUT;
+ "wait hw ready failed. status = %d\n", err);
+ return err;
}
dev->recvd_hw_ready = false;
@@ -483,7 +487,9 @@ irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
/* check if ME wants a reset */
if (!mei_hw_is_ready(dev) &&
dev->dev_state != MEI_DEV_RESETTING &&
- dev->dev_state != MEI_DEV_INITIALIZING) {
+ dev->dev_state != MEI_DEV_INITIALIZING &&
+ dev->dev_state != MEI_DEV_POWER_DOWN &&
+ dev->dev_state != MEI_DEV_POWER_UP) {
dev_dbg(&dev->pdev->dev, "FW not ready.\n");
mei_reset(dev, 1);
mutex_unlock(&dev->device_lock);
diff --git a/drivers/misc/mei/init.c b/drivers/misc/mei/init.c
index ed1d75203af6..e6f16f83ecde 100644
--- a/drivers/misc/mei/init.c
+++ b/drivers/misc/mei/init.c
@@ -148,7 +148,8 @@ void mei_reset(struct mei_device *dev, int interrupts_enabled)
dev->hbm_state = MEI_HBM_IDLE;
- if (dev->dev_state != MEI_DEV_INITIALIZING) {
+ if (dev->dev_state != MEI_DEV_INITIALIZING &&
+ dev->dev_state != MEI_DEV_POWER_UP) {
if (dev->dev_state != MEI_DEV_DISABLED &&
dev->dev_state != MEI_DEV_POWER_DOWN)
dev->dev_state = MEI_DEV_RESETTING;
diff --git a/drivers/mmc/host/pxamci.c b/drivers/mmc/host/pxamci.c
index 847b1996ce8e..2c5a91bb8ec3 100644
--- a/drivers/mmc/host/pxamci.c
+++ b/drivers/mmc/host/pxamci.c
@@ -128,7 +128,7 @@ static inline int pxamci_set_power(struct pxamci_host *host,
!!on ^ host->pdata->gpio_power_invert);
}
if (!host->vcc && host->pdata && host->pdata->setpower)
- host->pdata->setpower(mmc_dev(host->mmc), vdd);
+ return host->pdata->setpower(mmc_dev(host->mmc), vdd);
return 0;
}
diff --git a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
index 6d1a62a84c9d..1966444590f6 100644
--- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
+++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
@@ -1678,6 +1678,7 @@ static int atl1e_tx_map(struct atl1e_adapter *adapter,
u16 f;
int segment;
int ring_start = adapter->tx_ring.next_to_use;
+ int ring_end;
nr_frags = skb_shinfo(skb)->nr_frags;
segment = (tpd->word3 >> TPD_SEGMENT_EN_SHIFT) & TPD_SEGMENT_EN_MASK;
@@ -1721,6 +1722,15 @@ static int atl1e_tx_map(struct atl1e_adapter *adapter,
map_len, PCI_DMA_TODEVICE);
if (dma_mapping_error(&adapter->pdev->dev, tx_buffer->dma)) {
+ /* We need to unwind the mappings we've done */
+ ring_end = adapter->tx_ring.next_to_use;
+ adapter->tx_ring.next_to_use = ring_start;
+ while (adapter->tx_ring.next_to_use != ring_end) {
+ tpd = atl1e_get_tpd(adapter);
+ tx_buffer = atl1e_get_tx_buffer(adapter, tpd);
+ pci_unmap_single(adapter->pdev, tx_buffer->dma,
+ tx_buffer->length, PCI_DMA_TODEVICE);
+ }
/* Reset the tx rings next pointer */
adapter->tx_ring.next_to_use = ring_start;
return -ENOSPC;
@@ -1763,6 +1773,16 @@ static int atl1e_tx_map(struct atl1e_adapter *adapter,
DMA_TO_DEVICE);
if (dma_mapping_error(&adapter->pdev->dev, tx_buffer->dma)) {
+ /* We need to unwind the mappings we've done */
+ ring_end = adapter->tx_ring.next_to_use;
+ adapter->tx_ring.next_to_use = ring_start;
+ while (adapter->tx_ring.next_to_use != ring_end) {
+ tpd = atl1e_get_tpd(adapter);
+ tx_buffer = atl1e_get_tx_buffer(adapter, tpd);
+ dma_unmap_page(&adapter->pdev->dev, tx_buffer->dma,
+ tx_buffer->length, DMA_TO_DEVICE);
+ }
+
/* Reset the ring next to use pointer */
adapter->tx_ring.next_to_use = ring_start;
return -ENOSPC;
@@ -1853,8 +1873,10 @@ static netdev_tx_t atl1e_xmit_frame(struct sk_buff *skb,
return NETDEV_TX_OK;
}
- if (atl1e_tx_map(adapter, skb, tpd))
+ if (atl1e_tx_map(adapter, skb, tpd)) {
+ dev_kfree_skb_any(skb);
goto out;
+ }
atl1e_tx_queue(adapter, tpd_req, tpd);
diff --git a/drivers/net/ethernet/broadcom/Kconfig b/drivers/net/ethernet/broadcom/Kconfig
index 1d680baf43d6..52c96036dcc4 100644
--- a/drivers/net/ethernet/broadcom/Kconfig
+++ b/drivers/net/ethernet/broadcom/Kconfig
@@ -131,6 +131,7 @@ config BNX2X_SRIOV
config BGMAC
tristate "BCMA bus GBit core support"
depends on BCMA_HOST_SOC && HAS_DMA
+ select PHYLIB
---help---
This driver supports GBit MAC and BCM4706 GBit MAC cores on BCMA bus.
They can be found on BCM47xx SoCs and provide gigabit ethernet.
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 2df48bb0f1ca..181edb522450 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -782,16 +782,22 @@ static struct sk_buff *be_insert_vlan_in_pkt(struct be_adapter *adapter,
if (vlan_tx_tag_present(skb))
vlan_tag = be_get_tx_vlan_tag(adapter, skb);
- else if (qnq_async_evt_rcvd(adapter) && adapter->pvid)
- vlan_tag = adapter->pvid;
+
+ if (qnq_async_evt_rcvd(adapter) && adapter->pvid) {
+ if (!vlan_tag)
+ vlan_tag = adapter->pvid;
+ /* f/w workaround to set skip_hw_vlan = 1, informs the F/W to
+ * skip VLAN insertion
+ */
+ if (skip_hw_vlan)
+ *skip_hw_vlan = true;
+ }
if (vlan_tag) {
skb = __vlan_put_tag(skb, htons(ETH_P_8021Q), vlan_tag);
if (unlikely(!skb))
return skb;
skb->vlan_tci = 0;
- if (skip_hw_vlan)
- *skip_hw_vlan = true;
}
/* Insert the outer VLAN, if any */
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/debugfs.c b/drivers/net/ethernet/mellanox/mlx5/core/debugfs.c
index 4273c06e2e96..9c7194b26ee2 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/debugfs.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/debugfs.c
@@ -156,7 +156,7 @@ static ssize_t average_read(struct file *filp, char __user *buf, size_t count,
stats = filp->private_data;
spin_lock(&stats->lock);
if (stats->n)
- field = stats->sum / stats->n;
+ field = div64_u64(stats->sum, stats->n);
spin_unlock(&stats->lock);
ret = snprintf(tbuf, sizeof(tbuf), "%llu\n", field);
if (ret > 0) {
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 4dccead586be..23a0fff0df52 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -431,8 +431,8 @@ static int netvsc_probe(struct hv_device *dev,
net->netdev_ops = &device_ops;
/* TODO: Add GSO and Checksum offload */
- net->hw_features = NETIF_F_SG;
- net->features = NETIF_F_SG | NETIF_F_HW_VLAN_CTAG_TX;
+ net->hw_features = 0;
+ net->features = NETIF_F_HW_VLAN_CTAG_TX;
SET_ETHTOOL_OPS(net, &ethtool_ops);
SET_NETDEV_DEV(net, &dev->device);
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
index 876c72246ae9..a98fb0ed6aef 100644
--- a/drivers/net/macvtap.c
+++ b/drivers/net/macvtap.c
@@ -698,6 +698,28 @@ static int macvtap_skb_to_vnet_hdr(const struct sk_buff *skb,
return 0;
}
+static unsigned long iov_pages(const struct iovec *iv, int offset,
+ unsigned long nr_segs)
+{
+ unsigned long seg, base;
+ int pages = 0, len, size;
+
+ while (nr_segs && (offset >= iv->iov_len)) {
+ offset -= iv->iov_len;
+ ++iv;
+ --nr_segs;
+ }
+
+ for (seg = 0; seg < nr_segs; seg++) {
+ base = (unsigned long)iv[seg].iov_base + offset;
+ len = iv[seg].iov_len - offset;
+ size = ((base & ~PAGE_MASK) + len + ~PAGE_MASK) >> PAGE_SHIFT;
+ pages += size;
+ offset = 0;
+ }
+
+ return pages;
+}
/* Get packet from user space buffer */
static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
@@ -744,31 +766,15 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
if (unlikely(count > UIO_MAXIOV))
goto err;
- if (m && m->msg_control && sock_flag(&q->sk, SOCK_ZEROCOPY))
- zerocopy = true;
-
- if (zerocopy) {
- /* Userspace may produce vectors with count greater than
- * MAX_SKB_FRAGS, so we need to linearize parts of the skb
- * to let the rest of data to be fit in the frags.
- */
- if (count > MAX_SKB_FRAGS) {
- copylen = iov_length(iv, count - MAX_SKB_FRAGS);
- if (copylen < vnet_hdr_len)
- copylen = 0;
- else
- copylen -= vnet_hdr_len;
- }
- /* There are 256 bytes to be copied in skb, so there is enough
- * room for skb expand head in case it is used.
- * The rest buffer is mapped from userspace.
- */
- if (copylen < vnet_hdr.hdr_len)
- copylen = vnet_hdr.hdr_len;
- if (!copylen)
- copylen = GOODCOPY_LEN;
+ if (m && m->msg_control && sock_flag(&q->sk, SOCK_ZEROCOPY)) {
+ copylen = vnet_hdr.hdr_len ? vnet_hdr.hdr_len : GOODCOPY_LEN;
linear = copylen;
- } else {
+ if (iov_pages(iv, vnet_hdr_len + copylen, count)
+ <= MAX_SKB_FRAGS)
+ zerocopy = true;
+ }
+
+ if (!zerocopy) {
copylen = len;
linear = vnet_hdr.hdr_len;
}
@@ -780,9 +786,15 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
if (zerocopy)
err = zerocopy_sg_from_iovec(skb, iv, vnet_hdr_len, count);
- else
+ else {
err = skb_copy_datagram_from_iovec(skb, 0, iv, vnet_hdr_len,
len);
+ if (!err && m && m->msg_control) {
+ struct ubuf_info *uarg = m->msg_control;
+ uarg->callback(uarg, false);
+ }
+ }
+
if (err)
goto err_kfree;
@@ -873,7 +885,7 @@ static ssize_t macvtap_put_user(struct macvtap_queue *q,
__be16 h_vlan_proto;
__be16 h_vlan_TCI;
} veth;
- veth.h_vlan_proto = htons(ETH_P_8021Q);
+ veth.h_vlan_proto = skb->vlan_proto;
veth.h_vlan_TCI = htons(vlan_tx_tag_get(skb));
vlan_offset = offsetof(struct vlan_ethhdr, h_vlan_proto);
@@ -1107,6 +1119,7 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd,
rtnl_lock();
ret = macvtap_ioctl_set_queue(file, u);
rtnl_unlock();
+ return ret;
case TUNGETFEATURES:
if (put_user(IFF_TAP | IFF_NO_PI | IFF_VNET_HDR |
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index 5cdcf92eb310..db690a372260 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1035,6 +1035,29 @@ static int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *from,
return 0;
}
+static unsigned long iov_pages(const struct iovec *iv, int offset,
+ unsigned long nr_segs)
+{
+ unsigned long seg, base;
+ int pages = 0, len, size;
+
+ while (nr_segs && (offset >= iv->iov_len)) {
+ offset -= iv->iov_len;
+ ++iv;
+ --nr_segs;
+ }
+
+ for (seg = 0; seg < nr_segs; seg++) {
+ base = (unsigned long)iv[seg].iov_base + offset;
+ len = iv[seg].iov_len - offset;
+ size = ((base & ~PAGE_MASK) + len + ~PAGE_MASK) >> PAGE_SHIFT;
+ pages += size;
+ offset = 0;
+ }
+
+ return pages;
+}
+
/* Get packet from user space buffer */
static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
void *msg_control, const struct iovec *iv,
@@ -1082,32 +1105,18 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
return -EINVAL;
}
- if (msg_control)
- zerocopy = true;
-
- if (zerocopy) {
- /* Userspace may produce vectors with count greater than
- * MAX_SKB_FRAGS, so we need to linearize parts of the skb
- * to let the rest of data to be fit in the frags.
- */
- if (count > MAX_SKB_FRAGS) {
- copylen = iov_length(iv, count - MAX_SKB_FRAGS);
- if (copylen < offset)
- copylen = 0;
- else
- copylen -= offset;
- } else
- copylen = 0;
- /* There are 256 bytes to be copied in skb, so there is enough
- * room for skb expand head in case it is used.
+ if (msg_control) {
+ /* There are 256 bytes to be copied in skb, so there is
+ * enough room for skb expand head in case it is used.
* The rest of the buffer is mapped from userspace.
*/
- if (copylen < gso.hdr_len)
- copylen = gso.hdr_len;
- if (!copylen)
- copylen = GOODCOPY_LEN;
+ copylen = gso.hdr_len ? gso.hdr_len : GOODCOPY_LEN;
linear = copylen;
- } else {
+ if (iov_pages(iv, offset + copylen, count) <= MAX_SKB_FRAGS)
+ zerocopy = true;
+ }
+
+ if (!zerocopy) {
copylen = len;
linear = gso.hdr_len;
}
@@ -1121,8 +1130,13 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
if (zerocopy)
err = zerocopy_sg_from_iovec(skb, iv, offset, count);
- else
+ else {
err = skb_copy_datagram_from_iovec(skb, 0, iv, offset, len);
+ if (!err && msg_control) {
+ struct ubuf_info *uarg = msg_control;
+ uarg->callback(uarg, false);
+ }
+ }
if (err) {
tun->dev->stats.rx_dropped++;
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 0ba1e7edbb1b..a5ba8dd7e6be 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -1767,9 +1767,15 @@ static int vxlan_newlink(struct net *net, struct net_device *dev,
static void vxlan_dellink(struct net_device *dev, struct list_head *head)
{
+ struct vxlan_net *vn = net_generic(dev_net(dev), vxlan_net_id);
struct vxlan_dev *vxlan = netdev_priv(dev);
+ flush_workqueue(vxlan_wq);
+
+ spin_lock(&vn->sock_lock);
hlist_del_rcu(&vxlan->hlist);
+ spin_unlock(&vn->sock_lock);
+
list_del(&vxlan->next);
unregister_netdevice_queue(dev, head);
}
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index ff7f111fffee..36808bf25677 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -286,8 +286,7 @@ no_skb:
break;
}
- __skb_fill_page_desc(skb, 0, page, 0, 0);
- skb_shinfo(skb)->nr_frags = 1;
+ skb_add_rx_frag(skb, 0, page, 0, 0, PAGE_SIZE);
__skb_queue_tail(&np->rx_batch, skb);
}
@@ -831,7 +830,6 @@ static RING_IDX xennet_fill_frags(struct netfront_info *np,
struct sk_buff_head *list)
{
struct skb_shared_info *shinfo = skb_shinfo(skb);
- int nr_frags = shinfo->nr_frags;
RING_IDX cons = np->rx.rsp_cons;
struct sk_buff *nskb;
@@ -840,19 +838,21 @@ static RING_IDX xennet_fill_frags(struct netfront_info *np,
RING_GET_RESPONSE(&np->rx, ++cons);
skb_frag_t *nfrag = &skb_shinfo(nskb)->frags[0];
- __skb_fill_page_desc(skb, nr_frags,
- skb_frag_page(nfrag),
- rx->offset, rx->status);
+ if (shinfo->nr_frags == MAX_SKB_FRAGS) {
+ unsigned int pull_to = NETFRONT_SKB_CB(skb)->pull_to;
- skb->data_len += rx->status;
+ BUG_ON(pull_to <= skb_headlen(skb));
+ __pskb_pull_tail(skb, pull_to - skb_headlen(skb));
+ }
+ BUG_ON(shinfo->nr_frags >= MAX_SKB_FRAGS);
+
+ skb_add_rx_frag(skb, shinfo->nr_frags, skb_frag_page(nfrag),
+ rx->offset, rx->status, PAGE_SIZE);
skb_shinfo(nskb)->nr_frags = 0;
kfree_skb(nskb);
-
- nr_frags++;
}
- shinfo->nr_frags = nr_frags;
return cons;
}
@@ -933,7 +933,8 @@ static int handle_incoming_queue(struct net_device *dev,
while ((skb = __skb_dequeue(rxq)) != NULL) {
int pull_to = NETFRONT_SKB_CB(skb)->pull_to;
- __pskb_pull_tail(skb, pull_to - skb_headlen(skb));
+ if (pull_to > skb_headlen(skb))
+ __pskb_pull_tail(skb, pull_to - skb_headlen(skb));
/* Ethernet work: Delayed to here as it peeks the header. */
skb->protocol = eth_type_trans(skb, dev);
@@ -1019,16 +1020,10 @@ err:
skb_shinfo(skb)->frags[0].page_offset = rx->offset;
skb_frag_size_set(&skb_shinfo(skb)->frags[0], rx->status);
skb->data_len = rx->status;
+ skb->len += rx->status;
i = xennet_fill_frags(np, skb, &tmpq);
- /*
- * Truesize is the actual allocation size, even if the
- * allocation is only partially used.
- */
- skb->truesize += PAGE_SIZE * skb_shinfo(skb)->nr_frags;
- skb->len += skb->data_len;
-
if (rx->flags & XEN_NETRXF_csum_blank)
skb->ip_summed = CHECKSUM_PARTIAL;
else if (rx->flags & XEN_NETRXF_data_validated)
diff --git a/drivers/of/irq.c b/drivers/of/irq.c
index a3c1c5aae6a9..1264923ade0f 100644
--- a/drivers/of/irq.c
+++ b/drivers/of/irq.c
@@ -345,6 +345,7 @@ int of_irq_to_resource(struct device_node *dev, int index, struct resource *r)
if (r && irq) {
const char *name = NULL;
+ memset(r, 0, sizeof(*r));
/*
* Get optional "interrupts-names" property to add a name
* to the resource.
@@ -482,8 +483,9 @@ void __init of_irq_init(const struct of_device_id *matches)
}
/* Get the next pending parent that might have children */
- desc = list_first_entry(&intc_parent_list, typeof(*desc), list);
- if (list_empty(&intc_parent_list) || !desc) {
+ desc = list_first_entry_or_null(&intc_parent_list,
+ typeof(*desc), list);
+ if (!desc) {
pr_err("of_irq_init: children remain, but no parents\n");
break;
}
diff --git a/drivers/oprofile/timer_int.c b/drivers/oprofile/timer_int.c
index 93404f72dfa8..61be1d9c16c8 100644
--- a/drivers/oprofile/timer_int.c
+++ b/drivers/oprofile/timer_int.c
@@ -74,8 +74,8 @@ static void oprofile_hrtimer_stop(void)
put_online_cpus();
}
-static int __cpuinit oprofile_cpu_notify(struct notifier_block *self,
- unsigned long action, void *hcpu)
+static int oprofile_cpu_notify(struct notifier_block *self,
+ unsigned long action, void *hcpu)
{
long cpu = (long) hcpu;
diff --git a/drivers/pci/hotplug/rpadlpar_core.c b/drivers/pci/hotplug/rpadlpar_core.c
index b29e20b7862f..bb7af78e4eed 100644
--- a/drivers/pci/hotplug/rpadlpar_core.c
+++ b/drivers/pci/hotplug/rpadlpar_core.c
@@ -388,7 +388,6 @@ int dlpar_remove_pci_slot(char *drc_name, struct device_node *dn)
/* Remove the EADS bridge device itself */
BUG_ON(!bus->self);
pr_debug("PCI: Now removing bridge device %s\n", pci_name(bus->self));
- eeh_remove_bus_device(bus->self, true);
pci_stop_and_remove_bus_device(bus->self);
return 0;
diff --git a/drivers/pnp/pnpacpi/rsparser.c b/drivers/pnp/pnpacpi/rsparser.c
index 9847ab163829..167f3d00c916 100644
--- a/drivers/pnp/pnpacpi/rsparser.c
+++ b/drivers/pnp/pnpacpi/rsparser.c
@@ -180,7 +180,7 @@ static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
struct pnp_dev *dev = data;
struct acpi_resource_dma *dma;
struct acpi_resource_vendor_typed *vendor_typed;
- struct resource r;
+ struct resource r = {0};
int i, flags;
if (acpi_dev_resource_memory(res, &r)
diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c
index 3e6db1c1dc29..d95e101ffb43 100644
--- a/drivers/pnp/resource.c
+++ b/drivers/pnp/resource.c
@@ -515,6 +515,7 @@ struct pnp_resource *pnp_add_resource(struct pnp_dev *dev,
}
pnp_res->res = *res;
+ pnp_res->res.name = dev->name;
dev_dbg(&dev->dev, "%pR\n", res);
return pnp_res;
}
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
index fb1c1e0483ed..8ed52aa49122 100644
--- a/drivers/s390/cio/qdio_main.c
+++ b/drivers/s390/cio/qdio_main.c
@@ -1497,7 +1497,7 @@ static inline int buf_in_between(int bufnr, int start, int count)
static int handle_inbound(struct qdio_q *q, unsigned int callflags,
int bufnr, int count)
{
- int used, diff;
+ int diff;
qperf_inc(q, inbound_call);
@@ -1530,7 +1530,7 @@ static int handle_inbound(struct qdio_q *q, unsigned int callflags,
set:
count = set_buf_states(q, bufnr, SLSB_CU_INPUT_EMPTY, count);
- used = atomic_add_return(count, &q->nr_buf_used) - count;
+ atomic_add(count, &q->nr_buf_used);
if (need_siga_in(q))
return qdio_siga_input(q);
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c
index f446a7705c3b..d4174b82a1a9 100644
--- a/drivers/s390/crypto/ap_bus.c
+++ b/drivers/s390/crypto/ap_bus.c
@@ -71,6 +71,7 @@ MODULE_AUTHOR("IBM Corporation");
MODULE_DESCRIPTION("Adjunct Processor Bus driver, " \
"Copyright IBM Corp. 2006, 2012");
MODULE_LICENSE("GPL");
+MODULE_ALIAS("z90crypt");
/*
* Module parameter
diff --git a/drivers/scsi/isci/request.c b/drivers/scsi/isci/request.c
index 7b082157eb79..99d2930b18c8 100644
--- a/drivers/scsi/isci/request.c
+++ b/drivers/scsi/isci/request.c
@@ -185,7 +185,7 @@ static void sci_io_request_build_ssp_command_iu(struct isci_request *ireq)
cmd_iu->_r_c = 0;
sci_swab32_cpy(&cmd_iu->cdb, task->ssp_task.cmd->cmnd,
- task->ssp_task.cmd->cmd_len / sizeof(u32));
+ (task->ssp_task.cmd->cmd_len+3) / sizeof(u32));
}
static void sci_task_request_build_ssp_task_iu(struct isci_request *ireq)
diff --git a/drivers/scsi/isci/task.c b/drivers/scsi/isci/task.c
index 9bb020ac089c..0d30ca849e8f 100644
--- a/drivers/scsi/isci/task.c
+++ b/drivers/scsi/isci/task.c
@@ -491,6 +491,7 @@ int isci_task_abort_task(struct sas_task *task)
struct isci_tmf tmf;
int ret = TMF_RESP_FUNC_FAILED;
unsigned long flags;
+ int target_done_already = 0;
/* Get the isci_request reference from the task. Note that
* this check does not depend on the pending request list
@@ -505,9 +506,11 @@ int isci_task_abort_task(struct sas_task *task)
/* If task is already done, the request isn't valid */
if (!(task->task_state_flags & SAS_TASK_STATE_DONE) &&
(task->task_state_flags & SAS_TASK_AT_INITIATOR) &&
- old_request)
+ old_request) {
idev = isci_get_device(task->dev->lldd_dev);
-
+ target_done_already = test_bit(IREQ_COMPLETE_IN_TARGET,
+ &old_request->flags);
+ }
spin_unlock(&task->task_state_lock);
spin_unlock_irqrestore(&ihost->scic_lock, flags);
@@ -561,7 +564,7 @@ int isci_task_abort_task(struct sas_task *task)
if (task->task_proto == SAS_PROTOCOL_SMP ||
sas_protocol_ata(task->task_proto) ||
- test_bit(IREQ_COMPLETE_IN_TARGET, &old_request->flags) ||
+ target_done_already ||
test_bit(IDEV_GONE, &idev->flags)) {
spin_unlock_irqrestore(&ihost->scic_lock, flags);
diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c
index f14665a6293d..6b1b4e91e53f 100644
--- a/drivers/scsi/mvsas/mv_sas.c
+++ b/drivers/scsi/mvsas/mv_sas.c
@@ -1857,11 +1857,16 @@ int mvs_slot_complete(struct mvs_info *mvi, u32 rx_desc, u32 flags)
goto out;
}
- /* error info record present */
- if (unlikely((rx_desc & RXQ_ERR) && (*(u64 *) slot->response))) {
+ /*
+ * error info record present; slot->response is 32 bit aligned but may
+ * not be 64 bit aligned, so check for zero in two 32 bit reads
+ */
+ if (unlikely((rx_desc & RXQ_ERR)
+ && (*((u32 *)slot->response)
+ || *(((u32 *)slot->response) + 1)))) {
mv_dprintk("port %d slot %d rx_desc %X has error info"
"%016llX.\n", slot->port->sas_port.id, slot_idx,
- rx_desc, (u64)(*(u64 *)slot->response));
+ rx_desc, get_unaligned_le64(slot->response));
tstat->stat = mvs_slot_err(mvi, task, slot_idx);
tstat->resp = SAS_TASK_COMPLETE;
goto out;
diff --git a/drivers/scsi/mvsas/mv_sas.h b/drivers/scsi/mvsas/mv_sas.h
index 60e2fb7f2dca..d6b19dc80bee 100644
--- a/drivers/scsi/mvsas/mv_sas.h
+++ b/drivers/scsi/mvsas/mv_sas.h
@@ -39,6 +39,7 @@
#include <linux/irq.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
+#include <asm/unaligned.h>
#include <scsi/libsas.h>
#include <scsi/scsi.h>
#include <scsi/scsi_tcq.h>
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
index 42ef481db942..ef0a5481b9dd 100644
--- a/drivers/scsi/qla2xxx/qla_iocb.c
+++ b/drivers/scsi/qla2xxx/qla_iocb.c
@@ -419,6 +419,8 @@ qla2x00_start_scsi(srb_t *sp)
__constant_cpu_to_le16(CF_SIMPLE_TAG);
break;
}
+ } else {
+ cmd_pkt->control_flags = __constant_cpu_to_le16(CF_SIMPLE_TAG);
}
/* Load SCSI command packet. */
@@ -1307,11 +1309,11 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt,
fcp_cmnd->task_attribute = TSK_ORDERED;
break;
default:
- fcp_cmnd->task_attribute = 0;
+ fcp_cmnd->task_attribute = TSK_SIMPLE;
break;
}
} else {
- fcp_cmnd->task_attribute = 0;
+ fcp_cmnd->task_attribute = TSK_SIMPLE;
}
cmd_pkt->fcp_rsp_dseg_len = 0; /* Let response come in status iocb */
@@ -1525,7 +1527,12 @@ qla24xx_start_scsi(srb_t *sp)
case ORDERED_QUEUE_TAG:
cmd_pkt->task = TSK_ORDERED;
break;
+ default:
+ cmd_pkt->task = TSK_SIMPLE;
+ break;
}
+ } else {
+ cmd_pkt->task = TSK_SIMPLE;
}
/* Load SCSI command packet. */
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 80f39b8b0223..86fcf2c313ad 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -838,10 +838,17 @@ static int scsi_setup_flush_cmnd(struct scsi_device *sdp, struct request *rq)
static void sd_unprep_fn(struct request_queue *q, struct request *rq)
{
+ struct scsi_cmnd *SCpnt = rq->special;
+
if (rq->cmd_flags & REQ_DISCARD) {
free_page((unsigned long)rq->buffer);
rq->buffer = NULL;
}
+ if (SCpnt->cmnd != rq->cmd) {
+ mempool_free(SCpnt->cmnd, sd_cdb_pool);
+ SCpnt->cmnd = NULL;
+ SCpnt->cmd_len = 0;
+ }
}
/**
@@ -1720,21 +1727,6 @@ static int sd_done(struct scsi_cmnd *SCpnt)
if (rq_data_dir(SCpnt->request) == READ && scsi_prot_sg_count(SCpnt))
sd_dif_complete(SCpnt, good_bytes);
- if (scsi_host_dif_capable(sdkp->device->host, sdkp->protection_type)
- == SD_DIF_TYPE2_PROTECTION && SCpnt->cmnd != SCpnt->request->cmd) {
-
- /* We have to print a failed command here as the
- * extended CDB gets freed before scsi_io_completion()
- * is called.
- */
- if (result)
- scsi_print_command(SCpnt);
-
- mempool_free(SCpnt->cmnd, sd_cdb_pool);
- SCpnt->cmnd = NULL;
- SCpnt->cmd_len = 0;
- }
-
return good_bytes;
}
diff --git a/drivers/spi/spi-altera.c b/drivers/spi/spi-altera.c
index 8a6bb37910da..81b9adb6e766 100644
--- a/drivers/spi/spi-altera.c
+++ b/drivers/spi/spi-altera.c
@@ -103,6 +103,16 @@ static void altera_spi_chipsel(struct spi_device *spi, int value)
}
}
+static int altera_spi_setupxfer(struct spi_device *spi, struct spi_transfer *t)
+{
+ return 0;
+}
+
+static int altera_spi_setup(struct spi_device *spi)
+{
+ return 0;
+}
+
static inline unsigned int hw_txbyte(struct altera_spi *hw, int count)
{
if (hw->tx) {
@@ -221,6 +231,7 @@ static int altera_spi_probe(struct platform_device *pdev)
master->bus_num = pdev->id;
master->num_chipselect = 16;
master->mode_bits = SPI_CS_HIGH;
+ master->setup = altera_spi_setup;
hw = spi_master_get_devdata(master);
platform_set_drvdata(pdev, hw);
@@ -229,6 +240,7 @@ static int altera_spi_probe(struct platform_device *pdev)
hw->bitbang.master = spi_master_get(master);
if (!hw->bitbang.master)
return err;
+ hw->bitbang.setup_transfer = altera_spi_setupxfer;
hw->bitbang.chipselect = altera_spi_chipsel;
hw->bitbang.txrx_bufs = altera_spi_txrx;
diff --git a/drivers/spi/spi-nuc900.c b/drivers/spi/spi-nuc900.c
index 2ad3d74ac021..150d85453c27 100644
--- a/drivers/spi/spi-nuc900.c
+++ b/drivers/spi/spi-nuc900.c
@@ -174,6 +174,17 @@ static void nuc900_spi_gobusy(struct nuc900_spi *hw)
spin_unlock_irqrestore(&hw->lock, flags);
}
+static int nuc900_spi_setupxfer(struct spi_device *spi,
+ struct spi_transfer *t)
+{
+ return 0;
+}
+
+static int nuc900_spi_setup(struct spi_device *spi)
+{
+ return 0;
+}
+
static inline unsigned int hw_txbyte(struct nuc900_spi *hw, int count)
{
return hw->tx ? hw->tx[count] : 0;
@@ -366,8 +377,10 @@ static int nuc900_spi_probe(struct platform_device *pdev)
master->num_chipselect = hw->pdata->num_cs;
master->bus_num = hw->pdata->bus_num;
hw->bitbang.master = hw->master;
+ hw->bitbang.setup_transfer = nuc900_spi_setupxfer;
hw->bitbang.chipselect = nuc900_spi_chipsel;
hw->bitbang.txrx_bufs = nuc900_spi_txrx;
+ hw->bitbang.master->setup = nuc900_spi_setup;
hw->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (hw->res == NULL) {
diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c
index eb53df27e7ea..63e2070c6c14 100644
--- a/drivers/spi/spi-s3c64xx.c
+++ b/drivers/spi/spi-s3c64xx.c
@@ -434,6 +434,9 @@ static int s3c64xx_spi_prepare_transfer(struct spi_master *spi)
dma_cap_mask_t mask;
int ret;
+ if (is_polling(sdd))
+ return 0;
+
dma_cap_zero(mask);
dma_cap_set(DMA_SLAVE, mask);
diff --git a/drivers/spi/spi-xilinx.c b/drivers/spi/spi-xilinx.c
index fb56fcfdf65e..09a942852593 100644
--- a/drivers/spi/spi-xilinx.c
+++ b/drivers/spi/spi-xilinx.c
@@ -233,6 +233,21 @@ static int xilinx_spi_setup_transfer(struct spi_device *spi,
return 0;
}
+static int xilinx_spi_setup(struct spi_device *spi)
+{
+ /* always return 0, we can not check the number of bits.
+ * There are cases when SPI setup is called before any driver is
+ * there, in that case the SPI core defaults to 8 bits, which we
+ * do not support in some cases. But if we return an error, the
+ * SPI device would not be registered and no driver can get hold of it
+ * When the driver is there, it will call SPI setup again with the
+ * correct number of bits per transfer.
+ * If a driver setups with the wrong bit number, it will fail when
+ * it tries to do a transfer
+ */
+ return 0;
+}
+
static void xilinx_spi_fill_tx_fifo(struct xilinx_spi *xspi)
{
u8 sr;
@@ -360,6 +375,7 @@ struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem,
xspi->bitbang.chipselect = xilinx_spi_chipselect;
xspi->bitbang.setup_transfer = xilinx_spi_setup_transfer;
xspi->bitbang.txrx_bufs = xilinx_spi_txrx_bufs;
+ xspi->bitbang.master->setup = xilinx_spi_setup;
init_completion(&xspi->done);
if (!request_mem_region(mem->start, resource_size(mem),
diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
index 3227ebeae3f1..57d8b3444600 100644
--- a/drivers/staging/Kconfig
+++ b/drivers/staging/Kconfig
@@ -118,8 +118,6 @@ source "drivers/staging/ozwpan/Kconfig"
source "drivers/staging/gdm72xx/Kconfig"
-source "drivers/staging/csr/Kconfig"
-
source "drivers/staging/silicom/Kconfig"
source "drivers/staging/ced1401/Kconfig"
diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
index 4d79ebe2de06..429321f15105 100644
--- a/drivers/staging/Makefile
+++ b/drivers/staging/Makefile
@@ -52,7 +52,6 @@ obj-$(CONFIG_MFD_NVEC) += nvec/
obj-$(CONFIG_ANDROID) += android/
obj-$(CONFIG_USB_WPAN_HCD) += ozwpan/
obj-$(CONFIG_WIMAX_GDM72XX) += gdm72xx/
-obj-$(CONFIG_CSR_WIFI) += csr/
obj-$(CONFIG_NET_VENDOR_SILICOM) += silicom/
obj-$(CONFIG_CED1401) += ced1401/
obj-$(CONFIG_DRM_IMX) += imx-drm/
diff --git a/drivers/staging/android/logger.c b/drivers/staging/android/logger.c
index 080abf2faf97..a8c344422a77 100644
--- a/drivers/staging/android/logger.c
+++ b/drivers/staging/android/logger.c
@@ -469,7 +469,7 @@ static ssize_t logger_aio_write(struct kiocb *iocb, const struct iovec *iov,
unsigned long nr_segs, loff_t ppos)
{
struct logger_log *log = file_get_log(iocb->ki_filp);
- size_t orig = log->w_off;
+ size_t orig;
struct logger_entry header;
struct timespec now;
ssize_t ret = 0;
@@ -490,6 +490,8 @@ static ssize_t logger_aio_write(struct kiocb *iocb, const struct iovec *iov,
mutex_lock(&log->mutex);
+ orig = log->w_off;
+
/*
* Fix up any readers, pulling them forward to the first readable
* entry after (what will be) the new write offset. We do this now
diff --git a/drivers/staging/comedi/TODO b/drivers/staging/comedi/TODO
index b10f739b7e3e..fa8da9aada30 100644
--- a/drivers/staging/comedi/TODO
+++ b/drivers/staging/comedi/TODO
@@ -9,4 +9,4 @@ TODO:
Please send patches to Greg Kroah-Hartman <greg@kroah.com> and
copy:
Ian Abbott <abbotti@mev.co.uk>
- Frank Mori Hess <fmhess@users.sourceforge.net>
+ H Hartley Sweeten <hsweeten@visionengravers.com>
diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
index 8647518259f6..f4a197b2d1fd 100644
--- a/drivers/staging/comedi/comedi_fops.c
+++ b/drivers/staging/comedi/comedi_fops.c
@@ -1413,22 +1413,19 @@ static int do_cmd_ioctl(struct comedi_device *dev,
DPRINTK("subdevice busy\n");
return -EBUSY;
}
- s->busy = file;
/* make sure channel/gain list isn't too long */
if (cmd.chanlist_len > s->len_chanlist) {
DPRINTK("channel/gain list too long %u > %d\n",
cmd.chanlist_len, s->len_chanlist);
- ret = -EINVAL;
- goto cleanup;
+ return -EINVAL;
}
/* make sure channel/gain list isn't too short */
if (cmd.chanlist_len < 1) {
DPRINTK("channel/gain list too short %u < 1\n",
cmd.chanlist_len);
- ret = -EINVAL;
- goto cleanup;
+ return -EINVAL;
}
async->cmd = cmd;
@@ -1438,8 +1435,7 @@ static int do_cmd_ioctl(struct comedi_device *dev,
kmalloc(async->cmd.chanlist_len * sizeof(int), GFP_KERNEL);
if (!async->cmd.chanlist) {
DPRINTK("allocation failed\n");
- ret = -ENOMEM;
- goto cleanup;
+ return -ENOMEM;
}
if (copy_from_user(async->cmd.chanlist, user_chanlist,
@@ -1491,6 +1487,9 @@ static int do_cmd_ioctl(struct comedi_device *dev,
comedi_set_subdevice_runflags(s, ~0, SRF_USER | SRF_RUNNING);
+ /* set s->busy _after_ setting SRF_RUNNING flag to avoid race with
+ * comedi_read() or comedi_write() */
+ s->busy = file;
ret = s->do_cmd(dev, s);
if (ret == 0)
return 0;
@@ -1705,6 +1704,7 @@ static int do_cancel_ioctl(struct comedi_device *dev, unsigned int arg,
void *file)
{
struct comedi_subdevice *s;
+ int ret;
if (arg >= dev->n_subdevices)
return -EINVAL;
@@ -1721,7 +1721,11 @@ static int do_cancel_ioctl(struct comedi_device *dev, unsigned int arg,
if (s->busy != file)
return -EBUSY;
- return do_cancel(dev, s);
+ ret = do_cancel(dev, s);
+ if (comedi_get_subdevice_runflags(s) & SRF_USER)
+ wake_up_interruptible(&s->async->wait_head);
+
+ return ret;
}
/*
@@ -2053,11 +2057,13 @@ static ssize_t comedi_write(struct file *file, const char __user *buf,
if (!comedi_is_subdevice_running(s)) {
if (count == 0) {
+ mutex_lock(&dev->mutex);
if (comedi_is_subdevice_in_error(s))
retval = -EPIPE;
else
retval = 0;
do_become_nonbusy(dev, s);
+ mutex_unlock(&dev->mutex);
}
break;
}
@@ -2156,11 +2162,13 @@ static ssize_t comedi_read(struct file *file, char __user *buf, size_t nbytes,
if (n == 0) {
if (!comedi_is_subdevice_running(s)) {
+ mutex_lock(&dev->mutex);
do_become_nonbusy(dev, s);
if (comedi_is_subdevice_in_error(s))
retval = -EPIPE;
else
retval = 0;
+ mutex_unlock(&dev->mutex);
break;
}
if (file->f_flags & O_NONBLOCK) {
@@ -2198,9 +2206,11 @@ static ssize_t comedi_read(struct file *file, char __user *buf, size_t nbytes,
buf += n;
break; /* makes device work like a pipe */
}
- if (comedi_is_subdevice_idle(s) &&
- async->buf_read_count - async->buf_write_count == 0) {
- do_become_nonbusy(dev, s);
+ if (comedi_is_subdevice_idle(s)) {
+ mutex_lock(&dev->mutex);
+ if (async->buf_read_count - async->buf_write_count == 0)
+ do_become_nonbusy(dev, s);
+ mutex_unlock(&dev->mutex);
}
set_current_state(TASK_RUNNING);
remove_wait_queue(&async->wait_head, &wait);
diff --git a/drivers/staging/csr/Kconfig b/drivers/staging/csr/Kconfig
deleted file mode 100644
index ad2a1096e920..000000000000
--- a/drivers/staging/csr/Kconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-config CSR_WIFI
- tristate "CSR wireless driver"
- depends on MMC && CFG80211_WEXT && INET
- select WIRELESS_EXT
- select WEXT_PRIV
- help
- Driver for the CSR wireless SDIO device.
-
- If unsure, select N.
diff --git a/drivers/staging/csr/LICENSE.txt b/drivers/staging/csr/LICENSE.txt
deleted file mode 100644
index 364853e5fedc..000000000000
--- a/drivers/staging/csr/LICENSE.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-Except as contained in this notice, the names of above-listed
-copyright holders and the names of any contributors shall not be used
-in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
-CONTRIBUTORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
-OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-Alternatively, this software may be distributed under the terms of the
-GNU General Public License ("GPL") version 2 as published
-by the Free Software Foundation.
-
-As a special exception, if other files instantiate templates or use
-macros or inline functions from this file, or you compile this file
-and link it with other works to produce a work based on this file,
-this file does not by itself cause the resulting work to be covered by
-the GNU General Public License. However the source code for this file
-must still be made available in accordance with section (3) of the GNU
-General Public License.
-
-This exception does not invalidate any other reasons why a work based
-on this file might be covered by the GNU General Public License.
diff --git a/drivers/staging/csr/Makefile b/drivers/staging/csr/Makefile
deleted file mode 100644
index dbd135a8b177..000000000000
--- a/drivers/staging/csr/Makefile
+++ /dev/null
@@ -1,73 +0,0 @@
-ccflags-y := -DCSR_SME_USERSPACE -DCSR_SUPPORT_SME -DREMOTE_SYS_SAP -DCSR_WIFI_SECURITY_WAPI_ENABLE -DENABLE_SHUTDOWN -DUNIFI_DEBUG
-ccflags-y += -DSDIO_EXPORTS_STRUCT_DEVICE -DCSR_WIFI_SUPPORT_MMC_DRIVER -DCSR_WIFI_SINGLE_FUNCTION -DCSR_WIFI_SPLIT_PATCH
-ccflags-y += -DCSR_SUPPORT_WEXT -DREMOTE_SYS_SAP -DREMOTE_MGT_SAP -DCSR_WIFI_SECURITY_WAPI_ENABLE -DCSR_WIFI_SECURITY_WAPI_QOSCTRL_MIC_WORKAROUND -DENABLE_SHUTDOWN -DCSR_WIFI_NME_ENABLE -DCSR_WIFI_AP_ENABLE -DCSR_SUPPORT_WEXT_AP -DCSR_WIFI_REQUEUE_PACKET_TO_HAL
-
-obj-$(CONFIG_CSR_WIFI) += csr_wifi.o
-obj-$(CONFIG_CSR_WIFI) += csr_helper.o
-
-csr_wifi-y := bh.o \
- data_tx.o \
- drv.o \
- firmware.o \
- inet.o \
- init_hw.o \
- io.o \
- monitor.o \
- netdev.o \
- os.o \
- putest.o \
- sdio_events.o \
- sdio_mmc.o \
- sdio_stubs.o \
- sme_blocking.o \
- ul_int.o \
- unifi_dbg.o \
- unifi_event.o \
- unifi_pdu_processing.o \
- unifi_sme.o \
- csr_wifi_hip_card_sdio.o \
- csr_wifi_hip_card_sdio_intr.o \
- csr_wifi_hip_card_sdio_mem.o \
- csr_wifi_hip_chiphelper.o \
- csr_wifi_hip_download.o \
- csr_wifi_hip_dump.o \
- csr_wifi_hip_packing.o \
- csr_wifi_hip_send.o \
- csr_wifi_hip_signals.o \
- csr_wifi_hip_ta_sampling.o \
- csr_wifi_hip_udi.o \
- csr_wifi_hip_unifi_signal_names.o \
- csr_wifi_hip_xbv.o \
- csr_wifi_nme_ap_converter_init.o \
- csr_wifi_nme_ap_free_downstream_contents.o \
- csr_wifi_nme_ap_free_upstream_contents.o \
- csr_wifi_nme_ap_serialize.o \
- csr_wifi_nme_ap_sef.o \
- csr_wifi_router_ctrl_sef.o \
- csr_wifi_router_sef.o \
- csr_wifi_router_transport.o \
- csr_wifi_sme_sef.o \
- csr_wifi_sme_converter_init.o \
- csr_wifi_sme_free_downstream_contents.o \
- csr_wifi_sme_free_upstream_contents.o \
- csr_wifi_sme_serialize.o \
- csr_wifi_router_ctrl_converter_init.o \
- csr_wifi_router_ctrl_free_downstream_contents.o \
- csr_wifi_router_ctrl_free_upstream_contents.o \
- csr_wifi_router_ctrl_serialize.o \
- csr_wifi_router_converter_init.o \
- csr_wifi_router_free_downstream_contents.o \
- csr_wifi_router_free_upstream_contents.o \
- csr_wifi_router_serialize.o \
- sme_mgt.o \
- sme_sys.o \
- sme_userspace.o \
- sme_wext.o \
- wext_events.o
-
-csr_helper-y := csr_time.o \
- csr_util.o \
- csr_framework_ext.o \
- csr_wifi_serialize_primitive_types.o \
- csr_serialize_primitive_types.o \
- csr_msgconv.o
diff --git a/drivers/staging/csr/bh.c b/drivers/staging/csr/bh.c
deleted file mode 100644
index d795852ccb1c..000000000000
--- a/drivers/staging/csr/bh.c
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: bh.c
- *
- * PURPOSE:
- * Provides an implementation for the driver bottom-half.
- * It is part of the porting exercise in Linux.
- *
- * Copyright (C) 2005-2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-#include "csr_wifi_hip_unifi.h"
-#include "unifi_priv.h"
-#include <linux/sched/rt.h>
-
-/*
- * ---------------------------------------------------------------------------
- * uf_start_thread
- *
- * Helper function to start a new thread.
- *
- * Arguments:
- * priv Pointer to OS driver structure for the device.
- * thread Pointer to the thread object
- * func The thread function
- *
- * Returns:
- * 0 on success or else a Linux error code.
- * ---------------------------------------------------------------------------
- */
-int uf_start_thread(unifi_priv_t *priv,
- struct uf_thread *thread, int (*func)(void *))
-{
- if (thread->thread_task != NULL) {
- unifi_error(priv, "%s thread already started\n", thread->name);
- return 0;
- }
-
- /* Start the kernel thread that handles all h/w accesses. */
- thread->thread_task = kthread_run(func, priv, "%s", thread->name);
- if (IS_ERR(thread->thread_task))
- return PTR_ERR(thread->thread_task);
-
- /* Module parameter overides the thread priority */
- if (bh_priority != -1) {
- if (bh_priority >= 0 && bh_priority <= MAX_RT_PRIO) {
- struct sched_param param;
- priv->bh_thread.prio = bh_priority;
- unifi_trace(priv, UDBG1,
- "%s thread (RT) priority = %d\n",
- thread->name, bh_priority);
- param.sched_priority = bh_priority;
- sched_setscheduler(thread->thread_task,
- SCHED_FIFO, &param);
- } else if (bh_priority > MAX_RT_PRIO &&
- bh_priority <= MAX_PRIO) {
- priv->bh_thread.prio = bh_priority;
- unifi_trace(priv, UDBG1, "%s thread priority = %d\n",
- thread->name,
- PRIO_TO_NICE(bh_priority));
- set_user_nice(thread->thread_task,
- PRIO_TO_NICE(bh_priority));
- } else {
- priv->bh_thread.prio = DEFAULT_PRIO;
- unifi_warning(priv,
- "%s thread unsupported (%d) priority\n",
- thread->name, bh_priority);
- }
- } else
- priv->bh_thread.prio = DEFAULT_PRIO;
- unifi_trace(priv, UDBG2, "Started %s thread\n", thread->name);
-
- return 0;
-} /* uf_start_thread() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_stop_thread
- *
- * Helper function to stop a thread.
- *
- * Arguments:
- * priv Pointer to OS driver structure for the device.
- * thread Pointer to the thread object
- *
- * Returns:
- *
- * ---------------------------------------------------------------------------
- */
-void uf_stop_thread(unifi_priv_t *priv, struct uf_thread *thread)
-{
- if (!thread->thread_task) {
- unifi_notice(priv, "%s thread is already stopped\n",
- thread->name);
- return;
- }
-
- unifi_trace(priv, UDBG2, "Stopping %s thread\n", thread->name);
-
- kthread_stop(thread->thread_task);
- thread->thread_task = NULL;
-
-} /* uf_stop_thread() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_wait_for_thread_to_stop
- *
- * Helper function to wait until a thread is stopped.
- *
- * Arguments:
- * priv Pointer to OS driver structure for the device.
- *
- * Returns:
- *
- * ---------------------------------------------------------------------------
- */
-void
-uf_wait_for_thread_to_stop(unifi_priv_t *priv, struct uf_thread *thread)
-{
- /*
- * kthread_stop() cannot handle the thread exiting while
- * kthread_should_stop() is false, so sleep until kthread_stop()
- * wakes us up
- */
- unifi_trace(priv, UDBG2, "%s waiting for the stop signal.\n",
- thread->name);
- set_current_state(TASK_INTERRUPTIBLE);
- if (!kthread_should_stop()) {
- unifi_trace(priv, UDBG2, "%s schedule....\n", thread->name);
- schedule();
- }
-
- thread->thread_task = NULL;
- unifi_trace(priv, UDBG2, "%s exiting....\n", thread->name);
-} /* uf_wait_for_thread_to_stop() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * handle_bh_error
- *
- * This function reports an error returned from the HIP core bottom-half.
- * Normally, implemented during the porting exercise, passing the error
- * to the SME using unifi_sys_wifi_off_ind().
- * The SME will try to reset the device and go through
- * the initialisation of the UniFi.
- *
- * Arguments:
- * priv Pointer to OS driver structure for the device.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static void
-handle_bh_error(unifi_priv_t *priv)
-{
- netInterface_priv_t *interfacePriv;
- u8 conf_param = CONFIG_IND_ERROR;
- u8 interfaceTag;
-
-
- /* Block unifi_run_bh() until the error has been handled. */
- priv->bh_thread.block_thread = 1;
-
- /* Consider UniFi to be uninitialised */
- priv->init_progress = UNIFI_INIT_NONE;
-
- /* Stop the network traffic */
- for (interfaceTag = 0;
- interfaceTag < CSR_WIFI_NUM_INTERFACES; interfaceTag++) {
- interfacePriv = priv->interfacePriv[interfaceTag];
- if (interfacePriv->netdev_registered)
- netif_carrier_off(priv->netdev[interfaceTag]);
- }
-
-#ifdef CSR_NATIVE_LINUX
- /* Force any client waiting on an mlme_wait_for_reply() to abort. */
- uf_abort_mlme(priv);
-
- /* Cancel any pending workqueue tasks */
- flush_workqueue(priv->unifi_workqueue);
-
-#endif /* CSR_NATIVE_LINUX */
-
- unifi_error(priv,
- "handle_bh_error: fatal error is reported to the SME.\n");
- /* Notify the clients (SME or unifi_manager) for the error. */
- ul_log_config_ind(priv, &conf_param, sizeof(u8));
-
-} /* handle_bh_error() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * bh_thread_function
- *
- * All hardware access happens in this thread.
- * This means there is no need for locks on the hardware and we don't need
- * to worry about reentrancy with the SDIO library.
- * Provides and example implementation on how to call unifi_bh(), which
- * is part of the HIP core API.
- *
- * It processes the events generated by unifi_run_bh() to serialise calls
- * to unifi_bh(). It also demonstrates how the timeout parameter passed in
- * and returned from unifi_bh() needs to be handled.
- *
- * Arguments:
- * arg Pointer to OS driver structure for the device.
- *
- * Returns:
- * None.
- *
- * Notes:
- * When the bottom half of the driver needs to process signals, events,
- * or simply the host status (i.e sleep mode), it invokes unifi_run_bh().
- * Since we need all SDIO transaction to be in a single thread, the
- * unifi_run_bh() will wake up this thread to process it.
- *
- * ---------------------------------------------------------------------------
- */
-static int bh_thread_function(void *arg)
-{
- unifi_priv_t *priv = (unifi_priv_t *)arg;
- CsrResult csrResult;
- long ret;
- u32 timeout, t;
- struct uf_thread *this_thread;
-
- unifi_trace(priv, UDBG2, "bh_thread_function starting\n");
-
- this_thread = &priv->bh_thread;
-
- t = timeout = 0;
- while (!kthread_should_stop()) {
- /*
- * wait until an error occurs,
- * or we need to process something.
- */
- unifi_trace(priv, UDBG3, "bh_thread goes to sleep.\n");
-
- if (timeout > 0) {
- /* Convert t in ms to jiffies */
- t = msecs_to_jiffies(timeout);
- ret = wait_event_interruptible_timeout(
- this_thread->wakeup_q,
- (this_thread->wakeup_flag && !this_thread->block_thread) ||
- kthread_should_stop(),
- t);
- timeout = (ret > 0) ? jiffies_to_msecs(ret) : 0;
- } else {
- ret = wait_event_interruptible(this_thread->wakeup_q,
- (this_thread->wakeup_flag && !this_thread->block_thread) ||
- kthread_should_stop());
- }
-
- if (kthread_should_stop()) {
- unifi_trace(priv, UDBG2,
- "bh_thread: signalled to exit\n");
- break;
- }
-
- if (ret < 0) {
- unifi_notice(priv,
- "bh_thread: wait_event returned %d, thread will exit\n",
- ret);
- uf_wait_for_thread_to_stop(priv, this_thread);
- break;
- }
-
- this_thread->wakeup_flag = 0;
-
- unifi_trace(priv, UDBG3, "bh_thread calls unifi_bh().\n");
-
- CsrSdioClaim(priv->sdio);
- csrResult = unifi_bh(priv->card, &timeout);
- if (csrResult != CSR_RESULT_SUCCESS) {
- if (csrResult == CSR_WIFI_HIP_RESULT_NO_DEVICE) {
- CsrSdioRelease(priv->sdio);
- uf_wait_for_thread_to_stop(priv, this_thread);
- break;
- }
- /* Errors must be delivered to the error task */
- handle_bh_error(priv);
- }
- CsrSdioRelease(priv->sdio);
- }
-
- /*
- * I would normally try to call csr_sdio_remove_irq() here to make sure
- * that we do not get any interrupts while this thread is not running.
- * However, the MMC/SDIO driver tries to kill its' interrupt thread.
- * The kernel threads implementation does not allow to kill threads
- * from a signalled to stop thread.
- * So, instead call csr_sdio_linux_remove_irq() always after calling
- * uf_stop_thread() to kill this thread.
- */
-
- unifi_trace(priv, UDBG2, "bh_thread exiting....\n");
- return 0;
-} /* bh_thread_function() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_init_bh
- *
- * Helper function to start the bottom half of the driver.
- * All we need to do here is start the I/O bh thread.
- *
- * Arguments:
- * priv Pointer to OS driver structure for the device.
- *
- * Returns:
- * 0 on success or else a Linux error code.
- * ---------------------------------------------------------------------------
- */
-int
-uf_init_bh(unifi_priv_t *priv)
-{
- int r;
-
- /* Enable mlme interface. */
- priv->io_aborted = 0;
-
-
- /* Start the BH thread */
- r = uf_start_thread(priv, &priv->bh_thread, bh_thread_function);
- if (r) {
- unifi_error(priv,
- "uf_init_bh: failed to start the BH thread.\n");
- return r;
- }
-
- /* Allow interrupts */
- r = csr_sdio_linux_install_irq(priv->sdio);
- if (r) {
- unifi_error(priv,
- "uf_init_bh: failed to install the IRQ.\n");
-
- uf_stop_thread(priv, &priv->bh_thread);
- }
-
- return r;
-} /* uf_init_bh() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_run_bh
- *
- * Part of the HIP core lib API, implemented in the porting exercise.
- * The bottom half of the driver calls this function when
- * it wants to process anything that requires access to unifi.
- * We need to call unifi_bh() which in this implementation is done
- * by waking up the I/O thread.
- *
- * Arguments:
- * ospriv Pointer to OS driver structure for the device.
- *
- * Returns:
- * 0 on success or else a Linux error code.
- *
- * Notes:
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_run_bh(void *ospriv)
-{
- unifi_priv_t *priv = ospriv;
-
- /*
- * If an error has occurred, we discard silently all messages from the bh
- * until the error has been processed and the unifi has been
- * reinitialised.
- */
- if (priv->bh_thread.block_thread == 1) {
- unifi_trace(priv, UDBG3, "unifi_run_bh: discard message.\n");
- /*
- * Do not try to acknowledge a pending interrupt here.
- * This function is called by unifi_send_signal()
- * which in turn can be running in an atomic or 'disabled irq'
- * level if a signal is sent from a workqueue task
- * (i.e multicass addresses set). We can not hold the SDIO lock
- * because it might sleep.
- */
- return CSR_RESULT_FAILURE;
- }
-
- priv->bh_thread.wakeup_flag = 1;
- /* wake up I/O thread */
- wake_up_interruptible(&priv->bh_thread.wakeup_q);
-
- return CSR_RESULT_SUCCESS;
-} /* unifi_run_bh() */
-
diff --git a/drivers/staging/csr/csr_framework_ext.c b/drivers/staging/csr/csr_framework_ext.c
deleted file mode 100644
index 98122bce1427..000000000000
--- a/drivers/staging/csr/csr_framework_ext.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#include <linux/kernel.h>
-#include <linux/kthread.h>
-#include <linux/module.h>
-#include <linux/freezer.h>
-#include <linux/semaphore.h>
-#include <linux/slab.h>
-#include <linux/bitops.h>
-
-#include "csr_framework_ext.h"
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrThreadSleep
- *
- * DESCRIPTION
- * Sleep for a given period.
- *
- * RETURNS
- * void
- *
- *----------------------------------------------------------------------------*/
-void CsrThreadSleep(u16 sleepTimeInMs)
-{
- unsigned long t;
-
- /* Convert t in ms to jiffies and round up */
- t = ((sleepTimeInMs * HZ) + 999) / 1000;
- schedule_timeout_uninterruptible(t);
-}
-EXPORT_SYMBOL_GPL(CsrThreadSleep);
diff --git a/drivers/staging/csr/csr_framework_ext.h b/drivers/staging/csr/csr_framework_ext.h
deleted file mode 100644
index 6d26ac6173b0..000000000000
--- a/drivers/staging/csr/csr_framework_ext.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef CSR_FRAMEWORK_EXT_H__
-#define CSR_FRAMEWORK_EXT_H__
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#include "csr_result.h"
-#include "csr_framework_ext_types.h"
-
-/* Result codes */
-#define CSR_FE_RESULT_NO_MORE_EVENTS ((CsrResult) 0x0001)
-#define CSR_FE_RESULT_INVALID_POINTER ((CsrResult) 0x0002)
-#define CSR_FE_RESULT_INVALID_HANDLE ((CsrResult) 0x0003)
-#define CSR_FE_RESULT_NO_MORE_MUTEXES ((CsrResult) 0x0004)
-#define CSR_FE_RESULT_TIMEOUT ((CsrResult) 0x0005)
-#define CSR_FE_RESULT_NO_MORE_THREADS ((CsrResult) 0x0006)
-
-/* Thread priorities */
-#define CSR_THREAD_PRIORITY_HIGHEST ((u16) 0)
-#define CSR_THREAD_PRIORITY_HIGH ((u16) 1)
-#define CSR_THREAD_PRIORITY_NORMAL ((u16) 2)
-#define CSR_THREAD_PRIORITY_LOW ((u16) 3)
-#define CSR_THREAD_PRIORITY_LOWEST ((u16) 4)
-
-#define CSR_EVENT_WAIT_INFINITE ((u16) 0xFFFF)
-
-void CsrThreadSleep(u16 sleepTimeInMs);
-
-#endif
diff --git a/drivers/staging/csr/csr_framework_ext_types.h b/drivers/staging/csr/csr_framework_ext_types.h
deleted file mode 100644
index 575598cf69b2..000000000000
--- a/drivers/staging/csr/csr_framework_ext_types.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef CSR_FRAMEWORK_EXT_TYPES_H__
-#define CSR_FRAMEWORK_EXT_TYPES_H__
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#ifdef __KERNEL__
-#include <linux/kthread.h>
-#include <linux/semaphore.h>
-#else
-#include <pthread.h>
-#endif
-
-#ifdef __KERNEL__
-
-typedef struct semaphore CsrMutexHandle;
-
-#else /* __KERNEL __ */
-
-typedef pthread_mutex_t CsrMutexHandle;
-
-#endif /* __KERNEL__ */
-
-#endif
diff --git a/drivers/staging/csr/csr_log.h b/drivers/staging/csr/csr_log.h
deleted file mode 100644
index 982941043ddc..000000000000
--- a/drivers/staging/csr/csr_log.h
+++ /dev/null
@@ -1,223 +0,0 @@
-#ifndef CSR_LOG_H__
-#define CSR_LOG_H__
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#include "csr_sched.h"
-#include "csr_prim_defs.h"
-#include "csr_msgconv.h"
-
-/*
- * Log filtering
- */
-
-/*----------------------------------------------------*/
-/* Filtering on environment specific log levels */
-/*----------------------------------------------------*/
-typedef u32 CsrLogLevelEnvironment;
-#define CSR_LOG_LEVEL_ENVIRONMENT_OFF ((CsrLogLevelEnvironment) 0x00000000) /* No environment data/events are logged */
-#define CSR_LOG_LEVEL_ENVIRONMENT_BCI_ACL ((CsrLogLevelEnvironment) 0x00000001) /* BlueCore Channel Interface HCI Acl data are logged */
-#define CSR_LOG_LEVEL_ENVIRONMENT_BCI_HCI ((CsrLogLevelEnvironment) 0x00000002) /* BlueCore Channel Interface HCI Cmd/Evt data are logged */
-#define CSR_LOG_LEVEL_ENVIRONMENT_BCI_SCO ((CsrLogLevelEnvironment) 0x00000004) /* BlueCore Channel Interface HCI Sco data are logged */
-#define CSR_LOG_LEVEL_ENVIRONMENT_BCI_VENDOR ((CsrLogLevelEnvironment) 0x00000008) /* BlueCore Channel Interface HCI Vendor specific data are logged (This includes BCCMD, HQ, VM etc) */
-#define CSR_LOG_LEVEL_ENVIRONMENT_TRANSPORTS ((CsrLogLevelEnvironment) 0x00000010) /* Transport protocol data is logged (This includes transport protocols like BCSP, H4 etc.) */
-#define CSR_LOG_LEVEL_ENVIRONMENT_BGINT_REG ((CsrLogLevelEnvironment) 0x00000020) /* Background Interrupt registration events are logged */
-#define CSR_LOG_LEVEL_ENVIRONMENT_BGINT_UNREG ((CsrLogLevelEnvironment) 0x00000040) /* Background Interrupt unregistration events are logged */
-#define CSR_LOG_LEVEL_ENVIRONMENT_BGINT_SET ((CsrLogLevelEnvironment) 0x00000080) /* Background Interrupt set events are logged */
-#define CSR_LOG_LEVEL_ENVIRONMENT_BGINT_START ((CsrLogLevelEnvironment) 0x00000100) /* Background Interrupt start events are logged */
-#define CSR_LOG_LEVEL_ENVIRONMENT_BGINT_DONE ((CsrLogLevelEnvironment) 0x00000200) /* Background Interrupt done events are logged */
-#define CSR_LOG_LEVEL_ENVIRONMENT_PROTO ((CsrLogLevelEnvironment) 0x00000400) /* Transport protocol events are logged */
-#define CSR_LOG_LEVEL_ENVIRONMENT_PROTO_LOC ((CsrLogLevelEnvironment) 0x00000800) /* The Location where the transport protocol event occurred are logged NB: This is a supplement to CSR_LOG_LEVEL_ENVIRONMENT_PROTO, it has no effect without it */
-/* The bit masks between here are reserved for future usage */
-#define CSR_LOG_LEVEL_ENVIRONMENT_ALL ((CsrLogLevelEnvironment) 0xFFFFFFFF) /* All possible environment data/events are logged WARNING: By using this define the application also accepts future possible environment data/events in the logs */
-
-/*----------------------------------------------------*/
-/* Filtering on task specific log levels */
-/*----------------------------------------------------*/
-typedef u32 CsrLogLevelTask;
-#define CSR_LOG_LEVEL_TASK_OFF ((CsrLogLevelTask) 0x00000000) /* No events are logged for this task */
-#define CSR_LOG_LEVEL_TASK_TEXT ((CsrLogLevelTask) 0x00000001) /* Text strings printed by a task are logged NB: This bit does not affect the CSR_LOG_TEXT_LEVEL interface. This has to be configured separately */
-#define CSR_LOG_LEVEL_TASK_TEXT_LOC ((CsrLogLevelTask) 0x00000002) /* The locaction where the text string call occurred are logged. NB: This is a supplement to CSR_LOG_LEVEL_TASK_TEXT, it has no effect without it */
-#define CSR_LOG_LEVEL_TASK_STATE ((CsrLogLevelTask) 0x00000004) /* FSM state transitions in a task are logged */
-#define CSR_LOG_LEVEL_TASK_STATE_NAME ((CsrLogLevelTask) 0x00000008) /* The name of each state in a FSM state transition are logged. NB: This is a supplement to CSR_LOG_LEVEL_TASK_STATE, it has no effect without it */
-#define CSR_LOG_LEVEL_TASK_STATE_LOC ((CsrLogLevelTask) 0x00000010) /* The location where the FSM state transition occurred are logged. NB: This is a supplement to CSR_LOG_LEVEL_TASK_STATE, it has no effect without it */
-#define CSR_LOG_LEVEL_TASK_TASK_SWITCH ((CsrLogLevelTask) 0x00000020) /* Activation and deactiation of a task are logged */
-#define CSR_LOG_LEVEL_TASK_MESSAGE_PUT ((CsrLogLevelTask) 0x00000080) /* Message put operations are logged */
-#define CSR_LOG_LEVEL_TASK_MESSAGE_PUT_LOC ((CsrLogLevelTask) 0x00000100) /* The location where a message was sent are logged. NB: This is a supplement to CSR_LOG_LEVEL_TASK_MESSAGE_PUT, it has no effect without it */
-#define CSR_LOG_LEVEL_TASK_MESSAGE_GET ((CsrLogLevelTask) 0x00000200) /* Message get operations are logged */
-#define CSR_LOG_LEVEL_TASK_MESSAGE_QUEUE_PUSH ((CsrLogLevelTask) 0x00000400) /* Message push operations are logged */
-#define CSR_LOG_LEVEL_TASK_MESSAGE_QUEUE_POP ((CsrLogLevelTask) 0x00000800) /* Message pop operations are logged */
-#define CSR_LOG_LEVEL_TASK_PRIM_ONLY_TYPE ((CsrLogLevelTask) 0x00001000) /* Only the type of primitives in messages are logged. By default the entire primitive is serialized and logged */
-#define CSR_LOG_LEVEL_TASK_PRIM_APPLY_LIMIT ((CsrLogLevelTask) 0x00002000) /* An upper limit (defined by CSR_LOG_PRIM_SIZE_UPPER_LIMIT) is applied to how much of a primitive in a message are logged. NB: This limit is only applied if CSR_LOG_LEVEL_TASK_PRIM_ONLY_TYPE is _not_ defined */
-#define CSR_LOG_LEVEL_TASK_TIMER_IN ((CsrLogLevelTask) 0x00004000) /* TimedEventIn events are logged */
-#define CSR_LOG_LEVEL_TASK_TIMER_IN_LOC ((CsrLogLevelTask) 0x00008000) /* The location where a timer was started are logged. NB: This is a supplement to CSR_LOG_LEVEL_TASK_TIMER_IN, it has no effect without it */
-#define CSR_LOG_LEVEL_TASK_TIMER_CANCEL ((CsrLogLevelTask) 0x00010000) /* TimedEventCancel events are logged */
-#define CSR_LOG_LEVEL_TASK_TIMER_CANCEL_LOC ((CsrLogLevelTask) 0x00020000) /* The location where a timer was cancelled are logged. NB: This is a supplement to CSR_LOG_LEVEL_TASK_TIMER_CANCEL, it has no effect without it */
-#define CSR_LOG_LEVEL_TASK_TIMER_FIRE ((CsrLogLevelTask) 0x00040000) /* TimedEventFire events are logged */
-#define CSR_LOG_LEVEL_TASK_TIMER_DONE ((CsrLogLevelTask) 0x00080000) /* TimedEventDone events are logged */
-/* The bit masks between here are reserved for future usage */
-#define CSR_LOG_LEVEL_TASK_ALL ((CsrLogLevelTask) 0xFFFFFFFF & ~(CSR_LOG_LEVEL_TASK_PRIM_ONLY_TYPE | CSR_LOG_LEVEL_TASK_PRIM_APPLY_LIMIT)) /* All info possible to log for a task are logged. WARNING: By using this define the application also accepts future possible task data/events in the logs */
-
-u8 CsrLogEnvironmentIsFiltered(CsrLogLevelEnvironment level);
-CsrLogLevelTask CsrLogTaskFilterGet(CsrSchedQid taskId);
-u8 CsrLogTaskIsFiltered(CsrSchedQid taskId, CsrLogLevelTask level);
-
-/*
- * Logging stuff
- */
-#define CSR_LOG_STRINGIFY_REAL(a) (#a)
-#define CSR_LOG_STRINGIFY(a) CSR_LOG_STRINGIFY_REAL(a)
-
-typedef struct {
- u16 primitiveType;
- const char *primitiveName;
- CsrMsgConvMsgEntry *messageConv; /* Private - do not use */
-} CsrLogPrimitiveInformation;
-
-typedef struct {
- const char *techVer;
- u32 primitiveInfoCount;
- CsrLogPrimitiveInformation *primitiveInfo;
-} CsrLogTechInformation;
-
-/*---------------------------------*/
-/* Tech logging */
-/*---------------------------------*/
-typedef u8 bitmask8_t;
-typedef u16 bitmask16_t;
-typedef u32 bitmask32_t;
-
-#ifdef CSR_LOG_ENABLE
-#ifdef CSR_LOG_INCLUDE_FILE_NAME_AND_LINE_NUMBER
-/* DEPRECATED - replaced by csr_log_text.h */
-#define CSR_LOG_TEXT(text) \
- do { \
- if (!CsrLogTaskIsFiltered(CsrSchedTaskQueueGet(), CSR_LOG_LEVEL_TASK_TEXT)) { \
- CsrLogTaskText(text, __LINE__, __FILE__); \
- } \
- } while (0)
-#else
-/* DEPRECATED - replaced by csr_log_text.h */
-#define CSR_LOG_TEXT(text) \
- do { \
- if (!CsrLogTaskIsFiltered(CsrSchedTaskQueueGet(), CSR_LOG_LEVEL_TASK_TEXT)) { \
- CsrLogTaskText(text, 0, NULL); \
- } \
- } while (0)
-#endif
-#else
-#define CSR_LOG_TEXT(text)
-#endif
-
-/* DEPRECATED - replaced by csr_log_text.h */
-void CsrLogTaskText(const char *text,
- u32 line,
- const char *file);
-
-#define CSR_LOG_STATE_TRANSITION_MASK_FSM_NAME (0x001)
-#define CSR_LOG_STATE_TRANSITION_MASK_NEXT_STATE (0x002)
-#define CSR_LOG_STATE_TRANSITION_MASK_NEXT_STATE_STR (0x004)
-#define CSR_LOG_STATE_TRANSITION_MASK_PREV_STATE (0x008)
-#define CSR_LOG_STATE_TRANSITION_MASK_PREV_STATE_STR (0x010)
-#define CSR_LOG_STATE_TRANSITION_MASK_EVENT (0x020)
-#define CSR_LOG_STATE_TRANSITION_MASK_EVENT_STR (0x040)
-
-/* DEPRECATED - replaced by csr_log_text.h */
-void CsrLogStateTransition(bitmask16_t mask,
- u32 identifier,
- const char *fsm_name,
- u32 prev_state,
- const char *prev_state_str,
- u32 in_event,
- const char *in_event_str,
- u32 next_state,
- const char *next_state_str,
- u32 line,
- const char *file);
-
-/*---------------------------------*/
-/* BSP logging */
-/*---------------------------------*/
-void CsrLogSchedInit(u8 thread_id);
-void CsrLogSchedDeinit(u8 thread_id);
-
-void CsrLogSchedStart(u8 thread_id);
-void CsrLogSchedStop(u8 thread_id);
-
-void CsrLogInitTask(u8 thread_id, CsrSchedQid tskid, const char *tskName);
-void CsrLogDeinitTask(u16 task_id);
-
-void CsrLogActivate(CsrSchedQid tskid);
-void CsrLogDeactivate(CsrSchedQid tskid);
-
-#define SYNERGY_SERIALIZER_TYPE_DUMP (0x000)
-#define SYNERGY_SERIALIZER_TYPE_SER (0x001)
-
-void CsrLogMessagePut(u32 line,
- const char *file,
- CsrSchedQid src_task_id,
- CsrSchedQid dst_taskid,
- CsrSchedMsgId msg_id,
- u16 prim_type,
- const void *msg);
-
-void CsrLogMessageGet(CsrSchedQid src_task_id,
- CsrSchedQid dst_taskid,
- u8 get_res,
- CsrSchedMsgId msg_id,
- u16 prim_type,
- const void *msg);
-
-void CsrLogTimedEventIn(u32 line,
- const char *file,
- CsrSchedQid task_id,
- CsrSchedTid tid,
- u32 requested_delay,
- u16 fniarg,
- const void *fnvarg);
-
-void CsrLogTimedEventFire(CsrSchedQid task_id,
- CsrSchedTid tid);
-
-void CsrLogTimedEventDone(CsrSchedQid task_id,
- CsrSchedTid tid);
-
-void CsrLogTimedEventCancel(u32 line,
- const char *file,
- CsrSchedQid task_id,
- CsrSchedTid tid,
- u8 cancel_res);
-
-void CsrLogBgintRegister(u8 thread_id,
- CsrSchedBgint irq,
- const char *callback,
- const void *ptr);
-void CsrLogBgintUnregister(CsrSchedBgint irq);
-void CsrLogBgintSet(CsrSchedBgint irq);
-void CsrLogBgintServiceStart(CsrSchedBgint irq);
-void CsrLogBgintServiceDone(CsrSchedBgint irq);
-
-void CsrLogExceptionStateEvent(u16 prim_type,
- CsrPrim msg_type,
- u16 state,
- u32 line,
- const char *file);
-void CsrLogExceptionGeneral(u16 prim_type,
- u16 state,
- const char *text,
- u32 line,
- const char *file);
-void CsrLogExceptionWarning(u16 prim_type,
- u16 state,
- const char *text,
- u32 line,
- const char *file);
-
-#endif
diff --git a/drivers/staging/csr/csr_log_configure.h b/drivers/staging/csr/csr_log_configure.h
deleted file mode 100644
index 283647cf9702..000000000000
--- a/drivers/staging/csr/csr_log_configure.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef CSR_LOG_CONFIGURE_H__
-#define CSR_LOG_CONFIGURE_H__
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
- *****************************************************************************/
-
-#include "csr_log.h"
-
-/*--------------------------------------------*/
-/* Filtering on log text warning levels */
-/*--------------------------------------------*/
-typedef u32 CsrLogLevelText;
-#define CSR_LOG_LEVEL_TEXT_OFF ((CsrLogLevelText) 0x0000)
-
-#define CSR_LOG_LEVEL_TEXT_CRITICAL ((CsrLogLevelText) 0x0001)
-#define CSR_LOG_LEVEL_TEXT_ERROR ((CsrLogLevelText) 0x0002)
-#define CSR_LOG_LEVEL_TEXT_WARNING ((CsrLogLevelText) 0x0004)
-#define CSR_LOG_LEVEL_TEXT_INFO ((CsrLogLevelText) 0x0008)
-#define CSR_LOG_LEVEL_TEXT_DEBUG ((CsrLogLevelText) 0x0010)
-
-#define CSR_LOG_LEVEL_TEXT_ALL ((CsrLogLevelText) 0xFFFF)
-
-/* The log text interface is used by both scheduler tasks and components outside the scheduler context.
- * Therefore a CsrLogTextTaskId is introduced. It is effectively considered as two u16's. The lower
- * 16 bits corresponds one2one with the scheduler queueId's (CsrSchedQid) and as such these bits can not be used
- * by components outside scheduler tasks. The upper 16 bits are allocated for use of components outside the
- * scheduler like drivers etc. Components in this range is defined independently by each technology. To avoid
- * clashes the technologies are only allowed to assign values within the same restrictive range as allies to
- * primitive identifiers. eg. for the framework components outside the scheduler is only allowed to assign
- * taskId's in the range 0x0600xxxx to 0x06FFxxxx. And so on for other technologies. */
-typedef u32 CsrLogTextTaskId;
-
-#endif
diff --git a/drivers/staging/csr/csr_log_text.h b/drivers/staging/csr/csr_log_text.h
deleted file mode 100644
index cfcf64aa6225..000000000000
--- a/drivers/staging/csr/csr_log_text.h
+++ /dev/null
@@ -1,124 +0,0 @@
-#ifndef CSR_LOG_TEXT_H__
-#define CSR_LOG_TEXT_H__
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#include "csr_log_configure.h"
-
-typedef struct CsrLogSubOrigin
-{
- u16 subOriginNumber; /* Id of the given SubOrigin */
- const char *subOriginName; /* Prefix Text for this SubOrigin */
-} CsrLogSubOrigin;
-
-/* Register a task which is going to use the CSR_LOG_TEXT_XXX interface */
-#ifdef CSR_LOG_ENABLE
-void CsrLogTextRegister(CsrLogTextTaskId taskId, const char *taskName, u16 subOriginsLength, const CsrLogSubOrigin *subOrigins);
-#else
-#define CsrLogTextRegister(taskId, taskName, subOriginsLength, subOrigins)
-#endif
-
-/* CRITICAL: Conditions that are threatening to the integrity/stability of the
- system as a whole. */
-#if defined(CSR_LOG_ENABLE) && !defined(CSR_LOG_LEVEL_TEXT_CRITICAL_DISABLE)
-void CsrLogTextCritical(CsrLogTextTaskId taskId, u16 subOrigin, const char *formatString, ...);
-void CsrLogTextBufferCritical(CsrLogTextTaskId taskId, u16 subOrigin, size_t bufferLength, const void *buffer, const char *formatString, ...);
-#define CSR_LOG_TEXT_CRITICAL(taskId_subOrigin_formatString_varargs) CsrLogTextCritical taskId_subOrigin_formatString_varargs
-#define CSR_LOG_TEXT_CONDITIONAL_CRITICAL(condition, logtextargs) {if (condition) {CSR_LOG_TEXT_CRITICAL(logtextargs);}}
-#define CSR_LOG_TEXT_BUFFER_CRITICAL(taskId_subOrigin_length_buffer_formatString_varargs) CsrLogTextBufferCritical taskId_subOrigin_length_buffer_formatString_varargs
-#define CSR_LOG_TEXT_BUFFER_CONDITIONAL_CRITICAL(condition, logtextbufferargs) {if (condition) {CSR_LOG_TEXT_BUFFER_CRITICAL(logtextbufferargs);}}
-#else
-#define CSR_LOG_TEXT_CRITICAL(taskId_subOrigin_formatString_varargs)
-#define CSR_LOG_TEXT_CONDITIONAL_CRITICAL(condition, logtextargs)
-#define CSR_LOG_TEXT_BUFFER_CRITICAL(taskId_subOrigin_length_buffer_formatString_varargs)
-#define CSR_LOG_TEXT_BUFFER_CONDITIONAL_CRITICAL(condition, logtextbufferargs)
-#endif
-
-/* ERROR: Malfunction of a component rendering it unable to operate correctly,
- causing lack of functionality but not loss of system integrity/stability. */
-#if defined(CSR_LOG_ENABLE) && !defined(CSR_LOG_LEVEL_TEXT_ERROR_DISABLE)
-void CsrLogTextError(CsrLogTextTaskId taskId, u16 subOrigin, const char *formatString, ...);
-void CsrLogTextBufferError(CsrLogTextTaskId taskId, u16 subOrigin, size_t bufferLength, const void *buffer, const char *formatString, ...);
-#define CSR_LOG_TEXT_ERROR(taskId_subOrigin_formatString_varargs) CsrLogTextError taskId_subOrigin_formatString_varargs
-#define CSR_LOG_TEXT_CONDITIONAL_ERROR(condition, logtextargs) {if (condition) {CSR_LOG_TEXT_ERROR(logtextargs);}}
-#define CSR_LOG_TEXT_BUFFER_ERROR(taskId_subOrigin_length_buffer_formatString_varargs) CsrLogTextBufferError taskId_subOrigin_length_buffer_formatString_varargs
-#define CSR_LOG_TEXT_BUFFER_CONDITIONAL_ERROR(condition, logtextbufferargs) {if (condition) {CSR_LOG_TEXT_BUFFER_ERROR(logtextbufferargs);}}
-#else
-#define CSR_LOG_TEXT_ERROR(taskId_subOrigin_formatString_varargs)
-#define CSR_LOG_TEXT_CONDITIONAL_ERROR(condition, logtextargs)
-#define CSR_LOG_TEXT_BUFFER_ERROR(taskId_subOrigin_length_buffer_formatString_varargs)
-#define CSR_LOG_TEXT_BUFFER_CONDITIONAL_ERROR(condition, logtextbufferargs)
-#endif
-
-/* WARNING: Conditions that are unexpected and indicative of possible problems
- or violations of specifications, where the result of such deviations does not
- lead to malfunction of the component. */
-#if defined(CSR_LOG_ENABLE) && !defined(CSR_LOG_LEVEL_TEXT_WARNING_DISABLE)
-void CsrLogTextWarning(CsrLogTextTaskId taskId, u16 subOrigin, const char *formatString, ...);
-void CsrLogTextBufferWarning(CsrLogTextTaskId taskId, u16 subOrigin, size_t bufferLength, const void *buffer, const char *formatString, ...);
-#define CSR_LOG_TEXT_WARNING(taskId_subOrigin_formatString_varargs) CsrLogTextWarning taskId_subOrigin_formatString_varargs
-#define CSR_LOG_TEXT_CONDITIONAL_WARNING(condition, logtextargs) {if (condition) {CSR_LOG_TEXT_WARNING(logtextargs);}}
-#define CSR_LOG_TEXT_BUFFER_WARNING(taskId_subOrigin_length_buffer_formatString_varargs) CsrLogTextBufferWarning taskId_subOrigin_length_buffer_formatString_varargs
-#define CSR_LOG_TEXT_BUFFER_CONDITIONAL_WARNING(condition, logtextbufferargs) {if (condition) {CSR_LOG_TEXT_BUFFER_WARNING(logtextbufferargs);}}
-#else
-#define CSR_LOG_TEXT_WARNING(taskId_subOrigin_formatString_varargs)
-#define CSR_LOG_TEXT_CONDITIONAL_WARNING(condition, logtextargs)
-#define CSR_LOG_TEXT_BUFFER_WARNING(taskId_subOrigin_length_buffer_formatString_varargs)
-#define CSR_LOG_TEXT_BUFFER_CONDITIONAL_WARNING(condition, logtextbufferargs)
-#endif
-
-/* INFO: Important events that may aid in determining the conditions under which
- the more severe conditions are encountered. */
-#if defined(CSR_LOG_ENABLE) && !defined(CSR_LOG_LEVEL_TEXT_INFO_DISABLE)
-void CsrLogTextInfo(CsrLogTextTaskId taskId, u16 subOrigin, const char *formatString, ...);
-void CsrLogTextBufferInfo(CsrLogTextTaskId taskId, u16 subOrigin, size_t bufferLength, const void *buffer, const char *formatString, ...);
-#define CSR_LOG_TEXT_INFO(taskId_subOrigin_formatString_varargs) CsrLogTextInfo taskId_subOrigin_formatString_varargs
-#define CSR_LOG_TEXT_CONDITIONAL_INFO(condition, logtextargs) {if (condition) {CSR_LOG_TEXT_INFO(logtextargs);}}
-#define CSR_LOG_TEXT_BUFFER_INFO(taskId_subOrigin_length_buffer_formatString_varargs) CsrLogTextBufferInfo taskId_subOrigin_length_buffer_formatString_varargs
-#define CSR_LOG_TEXT_BUFFER_CONDITIONAL_INFO(condition, logtextbufferargs) {if (condition) {CSR_LOG_TEXT_BUFFER_INFO(logtextbufferargs);}}
-#else
-#define CSR_LOG_TEXT_INFO(taskId_subOrigin_formatString_varargs)
-#define CSR_LOG_TEXT_CONDITIONAL_INFO(condition, logtextargs)
-#define CSR_LOG_TEXT_BUFFER_INFO(taskId_subOrigin_length_buffer_formatString_varargs)
-#define CSR_LOG_TEXT_BUFFER_CONDITIONAL_INFO(condition, logtextbufferargs)
-#endif
-
-/* DEBUG: Similar to INFO, but dedicated to events that occur more frequently. */
-#if defined(CSR_LOG_ENABLE) && !defined(CSR_LOG_LEVEL_TEXT_DEBUG_DISABLE)
-void CsrLogTextDebug(CsrLogTextTaskId taskId, u16 subOrigin, const char *formatString, ...);
-void CsrLogTextBufferDebug(CsrLogTextTaskId taskId, u16 subOrigin, size_t bufferLength, const void *buffer, const char *formatString, ...);
-#define CSR_LOG_TEXT_DEBUG(taskId_subOrigin_formatString_varargs) CsrLogTextDebug taskId_subOrigin_formatString_varargs
-#define CSR_LOG_TEXT_CONDITIONAL_DEBUG(condition, logtextargs) {if (condition) {CSR_LOG_TEXT_DEBUG(logtextargs);}}
-#define CSR_LOG_TEXT_BUFFER_DEBUG(taskId_subOrigin_length_buffer_formatString_varargs) CsrLogTextBufferDebug taskId_subOrigin_length_buffer_formatString_varargs
-#define CSR_LOG_TEXT_BUFFER_CONDITIONAL_DEBUG(condition, logtextbufferargs) {if (condition) {CSR_LOG_TEXT_BUFFER_DEBUG(logtextbufferargs);}}
-#else
-#define CSR_LOG_TEXT_DEBUG(taskId_subOrigin_formatString_varargs)
-#define CSR_LOG_TEXT_CONDITIONAL_DEBUG(condition, logtextargs)
-#define CSR_LOG_TEXT_BUFFER_DEBUG(taskId_subOrigin_length_buffer_formatString_varargs)
-#define CSR_LOG_TEXT_BUFFER_CONDITIONAL_DEBUG(condition, logtextbufferargs)
-#endif
-
-/* CSR_LOG_TEXT_ASSERT (CRITICAL) */
-#ifdef CSR_LOG_ENABLE
-#define CSR_LOG_TEXT_ASSERT(origin, suborigin, condition) \
- {if (!(condition)) {CSR_LOG_TEXT_CRITICAL((origin, suborigin, "Assertion \"%s\" failed at %s:%u", #condition, __FILE__, __LINE__));}}
-#else
-#define CSR_LOG_TEXT_ASSERT(origin, suborigin, condition)
-#endif
-
-/* CSR_LOG_TEXT_UNHANDLED_PRIM (CRITICAL) */
-#ifdef CSR_LOG_ENABLE
-#define CSR_LOG_TEXT_UNHANDLED_PRIMITIVE(origin, suborigin, primClass, primType) \
- CSR_LOG_TEXT_CRITICAL((origin, suborigin, "Unhandled primitive 0x%04X:0x%04X at %s:%u", primClass, primType, __FILE__, __LINE__))
-#else
-#define CSR_LOG_TEXT_UNHANDLED_PRIMITIVE(origin, suborigin, primClass, primType)
-#endif
-
-#endif
diff --git a/drivers/staging/csr/csr_macro.h b/drivers/staging/csr/csr_macro.h
deleted file mode 100644
index c47f1d91b6fa..000000000000
--- a/drivers/staging/csr/csr_macro.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef CSR_MACRO_H__
-#define CSR_MACRO_H__
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#include <linux/types.h>
-
-#define FALSE (0)
-#define TRUE (1)
-
-/*------------------------------------------------------------------*/
-/* Endian conversion */
-/*------------------------------------------------------------------*/
-#define CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr) (((u16) ((u8 *) (ptr))[0]) | ((u16) ((u8 *) (ptr))[1]) << 8)
-#define CSR_GET_UINT32_FROM_LITTLE_ENDIAN(ptr) (((u32) ((u8 *) (ptr))[0]) | ((u32) ((u8 *) (ptr))[1]) << 8 | \
- ((u32) ((u8 *) (ptr))[2]) << 16 | ((u32) ((u8 *) (ptr))[3]) << 24)
-#define CSR_COPY_UINT16_TO_LITTLE_ENDIAN(uint, ptr) ((u8 *) (ptr))[0] = ((u8) ((uint) & 0x00FF)); \
- ((u8 *) (ptr))[1] = ((u8) ((uint) >> 8))
-#define CSR_COPY_UINT32_TO_LITTLE_ENDIAN(uint, ptr) ((u8 *) (ptr))[0] = ((u8) ((uint) & 0x000000FF)); \
- ((u8 *) (ptr))[1] = ((u8) (((uint) >> 8) & 0x000000FF)); \
- ((u8 *) (ptr))[2] = ((u8) (((uint) >> 16) & 0x000000FF)); \
- ((u8 *) (ptr))[3] = ((u8) (((uint) >> 24) & 0x000000FF))
-
-/*------------------------------------------------------------------*/
-/* Misc */
-/*------------------------------------------------------------------*/
-/* Use this macro on unused local variables that cannot be removed (such as
- unused function parameters). This will quell warnings from certain compilers
- and static code analysis tools like Lint and Valgrind. */
-#define CSR_UNUSED(x) ((void) (x))
-
-#endif
diff --git a/drivers/staging/csr/csr_msg_transport.h b/drivers/staging/csr/csr_msg_transport.h
deleted file mode 100644
index 8d88e7836567..000000000000
--- a/drivers/staging/csr/csr_msg_transport.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef CSR_MSG_TRANSPORT_H__
-#define CSR_MSG_TRANSPORT_H__
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#ifndef CsrMsgTransport
-#define CsrMsgTransport CsrSchedMessagePut
-#endif
-
-#endif /* CSR_MSG_TRANSPORT */
diff --git a/drivers/staging/csr/csr_msgconv.c b/drivers/staging/csr/csr_msgconv.c
deleted file mode 100644
index db5e845e60f5..000000000000
--- a/drivers/staging/csr/csr_msgconv.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#include <linux/module.h>
-#include <linux/types.h>
-#include <linux/slab.h>
-#include "csr_sched.h"
-#include "csr_msgconv.h"
-#include "csr_macro.h"
-
-static CsrMsgConvEntry *converter;
-
-CsrMsgConvPrimEntry *CsrMsgConvFind(u16 primType)
-{
- CsrMsgConvPrimEntry *ptr = NULL;
-
- if (converter)
- {
- ptr = converter->profile_converters;
- while (ptr)
- {
- if (ptr->primType == primType)
- {
- break;
- }
- else
- {
- ptr = ptr->next;
- }
- }
- }
-
- return ptr;
-}
-
-static const CsrMsgConvMsgEntry *find_msg_converter(CsrMsgConvPrimEntry *ptr, u16 msgType)
-{
- const CsrMsgConvMsgEntry *cv = ptr->conv;
- if (ptr->lookupFunc)
- {
- return (const CsrMsgConvMsgEntry *) ptr->lookupFunc((CsrMsgConvMsgEntry *) cv, msgType);
- }
-
- while (cv)
- {
- if (cv->serFunc == NULL)
- {
- /* We've reached the end of the chain */
- cv = NULL;
- break;
- }
-
- if (cv->msgType == msgType)
- {
- break;
- }
- else
- {
- cv++;
- }
- }
-
- return cv;
-}
-
-static void *deserialize_data(u16 primType,
- size_t length,
- u8 *data)
-{
- CsrMsgConvPrimEntry *ptr;
- u8 *ret;
-
- ptr = CsrMsgConvFind(primType);
-
- if (ptr)
- {
- const CsrMsgConvMsgEntry *cv;
- u16 msgId = 0;
- size_t offset = 0;
- CsrUint16Des(&msgId, data, &offset);
-
- cv = find_msg_converter(ptr, msgId);
- if (cv)
- {
- ret = cv->deserFunc(data, length);
- }
- else
- {
- ret = NULL;
- }
- }
- else
- {
- ret = NULL;
- }
-
- return ret;
-}
-
-static size_t sizeof_message(u16 primType, void *msg)
-{
- CsrMsgConvPrimEntry *ptr = CsrMsgConvFind(primType);
- size_t ret;
-
- if (ptr)
- {
- const CsrMsgConvMsgEntry *cv;
- u16 msgId = *(u16 *) msg;
-
- cv = find_msg_converter(ptr, msgId);
- if (cv)
- {
- ret = cv->sizeofFunc(msg);
- }
- else
- {
- ret = 0;
- }
- }
- else
- {
- ret = 0;
- }
-
- return ret;
-}
-
-static u8 free_message(u16 primType, u8 *data)
-{
- CsrMsgConvPrimEntry *ptr;
- u8 ret;
-
- ptr = CsrMsgConvFind(primType);
-
- if (ptr)
- {
- const CsrMsgConvMsgEntry *cv;
- u16 msgId = *(u16 *) data;
-
- cv = find_msg_converter(ptr, msgId);
- if (cv)
- {
- cv->freeFunc(data);
- ret = TRUE;
- }
- else
- {
- ret = FALSE;
- }
- }
- else
- {
- ret = FALSE;
- }
-
- return ret;
-}
-
-static u8 *serialize_message(u16 primType,
- void *msg,
- size_t *length,
- u8 *buffer)
-{
- CsrMsgConvPrimEntry *ptr;
- u8 *ret;
-
- ptr = CsrMsgConvFind(primType);
-
- *length = 0;
-
- if (ptr)
- {
- const CsrMsgConvMsgEntry *cv;
-
- cv = find_msg_converter(ptr, *(u16 *) msg);
- if (cv)
- {
- ret = cv->serFunc(buffer, length, msg);
- }
- else
- {
- ret = NULL;
- }
- }
- else
- {
- ret = NULL;
- }
-
- return ret;
-}
-
-size_t CsrMsgConvSizeof(u16 primType, void *msg)
-{
- return sizeof_message(primType, msg);
-}
-
-u8 *CsrMsgConvSerialize(u8 *buffer, size_t maxBufferOffset, size_t *offset, u16 primType, void *msg)
-{
- if (converter)
- {
- size_t serializedLength;
- u8 *bufSerialized;
- u8 *bufOffset = &buffer[*offset];
- bufSerialized = converter->serialize_message(primType, msg, &serializedLength, bufOffset);
- *offset += serializedLength;
- return bufSerialized;
- }
- else
- {
- return NULL;
- }
-}
-
-/* Insert profile converter at head of converter list. */
-void CsrMsgConvInsert(u16 primType, const CsrMsgConvMsgEntry *ce)
-{
- CsrMsgConvPrimEntry *pc;
- pc = CsrMsgConvFind(primType);
-
- if (pc)
- {
- /* Already registered. Do nothing */
- }
- else
- {
- pc = kmalloc(sizeof(*pc), GFP_KERNEL);
- pc->primType = primType;
- pc->conv = ce;
- pc->lookupFunc = NULL;
- pc->next = converter->profile_converters;
- converter->profile_converters = pc;
- }
-}
-EXPORT_SYMBOL_GPL(CsrMsgConvInsert);
-
-CsrMsgConvMsgEntry *CsrMsgConvFindEntry(u16 primType, u16 msgType)
-{
- CsrMsgConvPrimEntry *ptr = CsrMsgConvFind(primType);
- if (ptr)
- {
- return (CsrMsgConvMsgEntry *) find_msg_converter(ptr, msgType);
- }
- return NULL;
-}
-EXPORT_SYMBOL_GPL(CsrMsgConvFindEntry);
-
-CsrMsgConvMsgEntry *CsrMsgConvFindEntryByMsg(u16 primType, const void *msg)
-{
- CsrMsgConvPrimEntry *ptr = CsrMsgConvFind(primType);
- if (ptr && msg)
- {
- u16 msgType = *((u16 *) msg);
- return (CsrMsgConvMsgEntry *) find_msg_converter(ptr, msgType);
- }
- return NULL;
-}
-
-void CsrMsgConvCustomLookupRegister(u16 primType, CsrMsgCustomLookupFunc *lookupFunc)
-{
- CsrMsgConvPrimEntry *ptr = CsrMsgConvFind(primType);
- if (ptr)
- {
- ptr->lookupFunc = lookupFunc;
- }
-}
-EXPORT_SYMBOL_GPL(CsrMsgConvCustomLookupRegister);
-
-CsrMsgConvEntry *CsrMsgConvInit(void)
-{
- if (!converter)
- {
- converter = kmalloc(sizeof(CsrMsgConvEntry), GFP_KERNEL);
-
- converter->profile_converters = NULL;
- converter->free_message = free_message;
- converter->sizeof_message = sizeof_message;
- converter->serialize_message = serialize_message;
- converter->deserialize_data = deserialize_data;
- }
-
- return converter;
-}
-EXPORT_SYMBOL_GPL(CsrMsgConvInit);
diff --git a/drivers/staging/csr/csr_msgconv.h b/drivers/staging/csr/csr_msgconv.h
deleted file mode 100644
index 7e4dd388ae37..000000000000
--- a/drivers/staging/csr/csr_msgconv.h
+++ /dev/null
@@ -1,78 +0,0 @@
-#ifndef CSR_MSGCONV_H__
-#define CSR_MSGCONV_H__
-
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#include <linux/types.h>
-#include "csr_prim_defs.h"
-#include "csr_sched.h"
-
-typedef size_t (CsrMsgSizeofFunc)(void *msg);
-typedef u8 *(CsrMsgSerializeFunc)(u8 *buffer, size_t *length, void *msg);
-typedef void (CsrMsgFreeFunc)(void *msg);
-typedef void *(CsrMsgDeserializeFunc)(u8 *buffer, size_t length);
-
-/* Converter entry for one message type */
-typedef struct CsrMsgConvMsgEntry
-{
- u16 msgType;
- CsrMsgSizeofFunc *sizeofFunc;
- CsrMsgSerializeFunc *serFunc;
- CsrMsgDeserializeFunc *deserFunc;
- CsrMsgFreeFunc *freeFunc;
-} CsrMsgConvMsgEntry;
-
-/* Optional lookup function */
-typedef CsrMsgConvMsgEntry *(CsrMsgCustomLookupFunc)(CsrMsgConvMsgEntry *ce, u16 msgType);
-
-/* All converter entries for one specific primitive */
-typedef struct CsrMsgConvPrimEntry
-{
- u16 primType;
- const CsrMsgConvMsgEntry *conv;
- CsrMsgCustomLookupFunc *lookupFunc;
- struct CsrMsgConvPrimEntry *next;
-} CsrMsgConvPrimEntry;
-
-typedef struct
-{
- CsrMsgConvPrimEntry *profile_converters;
- void *(*deserialize_data)(u16 primType, size_t length, u8 * data);
- u8 (*free_message)(u16 primType, u8 *data);
- size_t (*sizeof_message)(u16 primType, void *msg);
- u8 *(*serialize_message)(u16 primType, void *msg,
- size_t * length,
- u8 * buffer);
-} CsrMsgConvEntry;
-
-size_t CsrMsgConvSizeof(u16 primType, void *msg);
-u8 *CsrMsgConvSerialize(u8 *buffer, size_t maxBufferOffset, size_t *offset, u16 primType, void *msg);
-void CsrMsgConvCustomLookupRegister(u16 primType, CsrMsgCustomLookupFunc *lookupFunc);
-void CsrMsgConvInsert(u16 primType, const CsrMsgConvMsgEntry *ce);
-CsrMsgConvPrimEntry *CsrMsgConvFind(u16 primType);
-CsrMsgConvMsgEntry *CsrMsgConvFindEntry(u16 primType, u16 msgType);
-CsrMsgConvMsgEntry *CsrMsgConvFindEntryByMsg(u16 primType, const void *msg);
-CsrMsgConvEntry *CsrMsgConvInit(void);
-
-/* Prototypes for primitive type serializers */
-void CsrUint8Ser(u8 *buffer, size_t *offset, u8 value);
-void CsrUint16Ser(u8 *buffer, size_t *offset, u16 value);
-void CsrUint32Ser(u8 *buffer, size_t *offset, u32 value);
-void CsrMemCpySer(u8 *buffer, size_t *offset, const void *value, size_t length);
-void CsrCharStringSer(u8 *buffer, size_t *offset, const char *value);
-
-void CsrUint8Des(u8 *value, u8 *buffer, size_t *offset);
-void CsrUint16Des(u16 *value, u8 *buffer, size_t *offset);
-void CsrUint32Des(u32 *value, u8 *buffer, size_t *offset);
-void CsrMemCpyDes(void *value, u8 *buffer, size_t *offset, size_t length);
-void CsrCharStringDes(char **value, u8 *buffer, size_t *offset);
-
-#endif
diff --git a/drivers/staging/csr/csr_prim_defs.h b/drivers/staging/csr/csr_prim_defs.h
deleted file mode 100644
index 81a1eaac30d9..000000000000
--- a/drivers/staging/csr/csr_prim_defs.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef CSR_PRIM_DEFS_H__
-#define CSR_PRIM_DEFS_H__
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/************************************************************************************
- * Segmentation of primitives in upstream and downstream segment
- ************************************************************************************/
-typedef u16 CsrPrim;
-#define CSR_PRIM_UPSTREAM ((CsrPrim) (0x8000))
-
-/************************************************************************************
- * Primitive definitions for Synergy framework
- ************************************************************************************/
-#define CSR_SYNERGY_EVENT_CLASS_BASE ((u16) (0x0600))
-
-#define CSR_HCI_PRIM ((u16) (0x0000 | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_BCCMD_PRIM ((u16) (0x0001 | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_HQ_PRIM ((u16) (0x0002 | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_VM_PRIM ((u16) (0x0003 | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_TM_BLUECORE_PRIM ((u16) (0x0004 | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_FP_PRIM ((u16) (0x0005 | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_IP_SOCKET_PRIM ((u16) (0x0006 | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_IP_ETHER_PRIM ((u16) (0x0007 | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_IP_IFCONFIG_PRIM ((u16) (0x0008 | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_IP_INTERNAL_PRIM ((u16) (0x0009 | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_FSAL_PRIM ((u16) (0x000A | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_DATA_STORE_PRIM ((u16) (0x000B | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_AM_PRIM ((u16) (0x000C | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_TLS_PRIM ((u16) (0x000D | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_DHCP_SERVER_PRIM ((u16) (0x000E | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_TFTP_PRIM ((u16) (0x000F | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_DSPM_PRIM ((u16) (0x0010 | CSR_SYNERGY_EVENT_CLASS_BASE))
-#define CSR_TLS_INTERNAL_PRIM ((u16) (0x0011 | CSR_SYNERGY_EVENT_CLASS_BASE))
-
-#define NUMBER_OF_CSR_FW_EVENTS (CSR_DSPM_PRIM - CSR_SYNERGY_EVENT_CLASS_BASE + 1)
-
-#define CSR_SYNERGY_EVENT_CLASS_MISC_BASE ((u16) (0x06A0))
-
-#define CSR_UI_PRIM ((u16) (0x0000 | CSR_SYNERGY_EVENT_CLASS_MISC_BASE))
-#define CSR_APP_PRIM ((u16) (0x0001 | CSR_SYNERGY_EVENT_CLASS_MISC_BASE))
-#define CSR_SDIO_PROBE_PRIM ((u16) (0x0002 | CSR_SYNERGY_EVENT_CLASS_MISC_BASE))
-
-#define NUMBER_OF_CSR_FW_MISC_EVENTS (CSR_SDIO_PROBE_PRIM - CSR_SYNERGY_EVENT_CLASS_MISC_BASE + 1)
-
-#define CSR_ENV_PRIM ((u16) (0x00FF | CSR_SYNERGY_EVENT_CLASS_MISC_BASE))
-
-#endif /* CSR_PRIM_DEFS_H__ */
diff --git a/drivers/staging/csr/csr_result.h b/drivers/staging/csr/csr_result.h
deleted file mode 100644
index cbb607d943c7..000000000000
--- a/drivers/staging/csr/csr_result.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef CSR_RESULT_H__
-#define CSR_RESULT_H__
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-typedef u16 CsrResult;
-#define CSR_RESULT_SUCCESS ((CsrResult) 0x0000)
-#define CSR_RESULT_FAILURE ((CsrResult) 0xFFFF)
-
-#endif
diff --git a/drivers/staging/csr/csr_sched.h b/drivers/staging/csr/csr_sched.h
deleted file mode 100644
index c7d672c59f5b..000000000000
--- a/drivers/staging/csr/csr_sched.h
+++ /dev/null
@@ -1,85 +0,0 @@
-#ifndef CSR_SCHED_H__
-#define CSR_SCHED_H__
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-#include <linux/types.h>
-#include "csr_time.h"
-
-/* An identifier issued by the scheduler. */
-typedef u32 CsrSchedIdentifier;
-
-/* A task identifier */
-typedef u16 CsrSchedTaskId;
-
-/* A queue identifier */
-typedef u16 CsrSchedQid;
-
-/* A message identifier */
-typedef CsrSchedIdentifier CsrSchedMsgId;
-
-/* A timer event identifier */
-typedef CsrSchedIdentifier CsrSchedTid;
-#define CSR_SCHED_TID_INVALID ((CsrSchedTid) 0)
-
-/* Time constants. */
-#define CSR_SCHED_TIME_MAX (0xFFFFFFFF)
-#define CSR_SCHED_MILLISECOND (1000)
-#define CSR_SCHED_SECOND (1000 * CSR_SCHED_MILLISECOND)
-#define CSR_SCHED_MINUTE (60 * CSR_SCHED_SECOND)
-
-/* Queue and primitive that identifies the environment */
-#define CSR_SCHED_TASK_ID 0xFFFF
-#define CSR_SCHED_PRIM (CSR_SCHED_TASK_ID)
-#define CSR_SCHED_EXCLUDED_MODULE_QUEUE 0xFFFF
-
-/*
- * Background interrupt definitions
- */
-typedef u16 CsrSchedBgint;
-#define CSR_SCHED_BGINT_INVALID ((CsrSchedBgint) 0xFFFF)
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSchedMessagePut
- *
- * DESCRIPTION
- * Sends a message consisting of the integer "mi" and the void * pointer
- * "mv" to the message queue "q".
- *
- * "mi" and "mv" are neither inspected nor changed by the scheduler - the
- * task that owns "q" is expected to make sense of the values. "mv" may
- * be null.
- *
- * NOTE
- * If "mv" is not null then it will typically be a chunk of kmalloc()ed
- * memory, though there is no need for it to be so. Tasks should normally
- * obey the convention that when a message built with kmalloc()ed memory
- * is given to CsrSchedMessagePut() then ownership of the memory is ceded to the
- * scheduler - and eventually to the recipient task. I.e., the receiver of
- * the message will be expected to kfree() the message storage.
- *
- * RETURNS
- * void.
- *
- *----------------------------------------------------------------------------*/
-#if defined(CSR_LOG_ENABLE) && defined(CSR_LOG_INCLUDE_FILE_NAME_AND_LINE_NUMBER)
-void CsrSchedMessagePutStringLog(CsrSchedQid q,
- u16 mi,
- void *mv,
- u32 line,
- const char *file);
-#define CsrSchedMessagePut(q, mi, mv) CsrSchedMessagePutStringLog((q), (mi), (mv), __LINE__, __FILE__)
-#else
-void CsrSchedMessagePut(CsrSchedQid q,
- u16 mi,
- void *mv);
-#endif
-
-#endif
diff --git a/drivers/staging/csr/csr_sdio.h b/drivers/staging/csr/csr_sdio.h
deleted file mode 100644
index 0971d135abf6..000000000000
--- a/drivers/staging/csr/csr_sdio.h
+++ /dev/null
@@ -1,723 +0,0 @@
-#ifndef CSR_SDIO_H__
-#define CSR_SDIO_H__
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#include "csr_result.h"
-
-/* Result Codes */
-#define CSR_SDIO_RESULT_INVALID_VALUE ((CsrResult) 1) /* Invalid argument value */
-#define CSR_SDIO_RESULT_NO_DEVICE ((CsrResult) 2) /* The specified device is no longer present */
-#define CSR_SDIO_RESULT_CRC_ERROR ((CsrResult) 3) /* The transmitted/received data or command response contained a CRC error */
-#define CSR_SDIO_RESULT_TIMEOUT ((CsrResult) 4) /* No command response or data received from device, or function enable/disable did not succeed within timeout period */
-#define CSR_SDIO_RESULT_NOT_RESET ((CsrResult) 5) /* The device was not reset */
-
-/* Features (for use in features member of CsrSdioFunction) */
-#define CSR_SDIO_FEATURE_BYTE_MODE 0x00000001 /* Transfer sizes do not have to be a multiple of block size */
-#define CSR_SDIO_FEATURE_DMA_CAPABLE_MEM_REQUIRED 0x00000002 /* Bulk operations require DMA friendly memory */
-
-/* CsrSdioFunctionId wildcards (for use in CsrSdioFunctionId members) */
-#define CSR_SDIO_ANY_MANF_ID 0xFFFF
-#define CSR_SDIO_ANY_CARD_ID 0xFFFF
-#define CSR_SDIO_ANY_SDIO_FUNCTION 0xFF
-#define CSR_SDIO_ANY_SDIO_INTERFACE 0xFF
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioFunctionId
- *
- * DESCRIPTION
- * This structure describes one or more functions of a device, based on
- * four qualitative measures. The CsrSdioFunctionId wildcard defines can be
- * used for making the CsrSdioFunctionId match more than one function.
- *
- * MEMBERS
- * manfId - Vendor ID (or CSR_SDIO_ANY_MANF_ID).
- * cardId - Device ID (or CSR_SDIO_ANY_CARD_ID).
- * sdioFunction - SDIO Function number (or CSR_SDIO_ANY_SDIO_FUNCTION).
- * sdioInterface - SDIO Standard Interface Code (or CSR_SDIO_ANY_SDIO_INTERFACE)
- *
- *----------------------------------------------------------------------------*/
-typedef struct
-{
- u16 manfId; /* Vendor ID to match or CSR_SDIO_ANY_MANF_ID */
- u16 cardId; /* Device ID to match or CSR_SDIO_ANY_CARD_ID */
- u8 sdioFunction; /* SDIO Function number to match or CSR_SDIO_ANY_SDIO_FUNCTION */
- u8 sdioInterface; /* SDIO Standard Interface Code to match or CSR_SDIO_ANY_SDIO_INTERFACE */
-} CsrSdioFunctionId;
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioFunction
- *
- * DESCRIPTION
- * This structure represents a single function on a device.
- *
- * MEMBERS
- * sdioId - A CsrSdioFunctionId describing this particular function. The
- * subfield shall not contain any CsrSdioFunctionId wildcards. The
- * subfields shall describe the specific single function
- * represented by this structure.
- * blockSize - Actual configured block size, or 0 if unconfigured.
- * features - Bit mask with any of CSR_SDIO_FEATURE_* set.
- * device - Handle of device containing the function. If two functions have
- * the same device handle, they reside on the same device.
- * driverData - For use by the Function Driver. The SDIO Driver shall not
- * attempt to dereference the pointer.
- * priv - For use by the SDIO Driver. The Function Driver shall not attempt
- * to dereference the pointer.
- *
- *
- *----------------------------------------------------------------------------*/
-typedef struct
-{
- CsrSdioFunctionId sdioId;
- u16 blockSize; /* Actual configured block size, or 0 if unconfigured */
- u32 features; /* Bit mask with any of CSR_SDIO_FEATURE_* set */
- void *device; /* Handle of device containing the function */
- void *driverData; /* For use by the Function Driver */
- void *priv; /* For use by the SDIO Driver */
-} CsrSdioFunction;
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioInsertedCallback, CsrSdioRemovedCallback
- *
- * DESCRIPTION
- * CsrSdioInsertedCallback is called when a function becomes available to
- * a registered Function Driver that supports the function.
- * CsrSdioRemovedCallback is called when a function is no longer available
- * to a Function Driver, either because the device has been removed, or the
- * Function Driver has been unregistered.
- *
- * NOTE: These functions are implemented by the Function Driver, and are
- * passed as function pointers in the CsrSdioFunctionDriver struct.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function.
- *
- *----------------------------------------------------------------------------*/
-typedef void (*CsrSdioInsertedCallback)(CsrSdioFunction *function);
-typedef void (*CsrSdioRemovedCallback)(CsrSdioFunction *function);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioInterruptDsrCallback, CsrSdioInterruptCallback
- *
- * DESCRIPTION
- * CsrSdioInterruptCallback is called when an interrupt occurs on the
- * the device associated with the specified function.
- *
- * NOTE: These functions are implemented by the Function Driver, and are
- * passed as function pointers in the CsrSdioFunctionDriver struct.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function.
- *
- * RETURNS (only CsrSdioInterruptCallback)
- * A pointer to a CsrSdioInterruptDsrCallback function.
- *
- *----------------------------------------------------------------------------*/
-typedef void (*CsrSdioInterruptDsrCallback)(CsrSdioFunction *function);
-typedef CsrSdioInterruptDsrCallback (*CsrSdioInterruptCallback)(CsrSdioFunction *function);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioSuspendCallback, CsrSdioResumeCallback
- *
- * DESCRIPTION
- * CsrSdioSuspendCallback is called when the system is preparing to go
- * into a suspended state. CsrSdioResumeCallback is called when the system
- * has entered an active state again.
- *
- * NOTE: These functions are implemented by the Function Driver, and are
- * passed as function pointers in the CsrSdioFunctionDriver struct.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function.
- *
- *----------------------------------------------------------------------------*/
-typedef void (*CsrSdioSuspendCallback)(CsrSdioFunction *function);
-typedef void (*CsrSdioResumeCallback)(CsrSdioFunction *function);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioAsyncCallback, CsrSdioAsyncDsrCallback
- *
- * DESCRIPTION
- * CsrSdioAsyncCallback is called when an asynchronous operation completes.
- *
- * NOTE: These functions are implemented by the Function Driver, and are
- * passed as function pointers in the function calls that initiate
- * the operation.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function.
- * result - The result of the operation that completed. See the description
- * of the initiating function for possible result values.
- *
- * RETURNS (only CsrSdioAsyncCallback)
- * A pointer to a CsrSdioAsyncDsrCallback function.
- *
- *----------------------------------------------------------------------------*/
-typedef void (*CsrSdioAsyncDsrCallback)(CsrSdioFunction *function, CsrResult result);
-typedef CsrSdioAsyncDsrCallback (*CsrSdioAsyncCallback)(CsrSdioFunction *function, CsrResult result);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioFunctionDriver
- *
- * DESCRIPTION
- * Structure representing a Function Driver.
- *
- * MEMBERS
- * inserted - Callback, see description of CsrSdioInsertedCallback.
- * removed - Callback, see description of CsrSdioRemovedCallback.
- * intr - Callback, see description of CsrSdioInterruptCallback.
- * suspend - Callback, see description of CsrSdioSuspendCallback.
- * resume - Callback, see description of CsrSdioResumeCallback.
- * ids - Array of CsrSdioFunctionId describing one or more functions that
- * are supported by the Function Driver.
- * idsCount - Length of the ids array.
- * priv - For use by the SDIO Driver. The Function Driver may initialise
- * it to NULL, but shall otherwise not access the pointer or attempt
- * to dereference it.
- *
- *----------------------------------------------------------------------------*/
-typedef struct
-{
- CsrSdioInsertedCallback inserted;
- CsrSdioRemovedCallback removed;
- CsrSdioInterruptCallback intr;
- CsrSdioSuspendCallback suspend;
- CsrSdioResumeCallback resume;
- CsrSdioFunctionId *ids;
- u8 idsCount;
- void *priv; /* For use by the SDIO Driver */
-} CsrSdioFunctionDriver;
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioFunctionDriverRegister
- *
- * DESCRIPTION
- * Register a Function Driver.
- *
- * PARAMETERS
- * functionDriver - Pointer to struct describing the Function Driver.
- *
- * RETURNS
- * CSR_RESULT_SUCCESS - The Function Driver was successfully
- * registered.
- * CSR_RESULT_FAILURE - Unable to register the function driver,
- * because of an unspecified/unknown error. The
- * Function Driver has not been registered.
- * CSR_SDIO_RESULT_INVALID_VALUE - The specified Function Driver pointer
- * does not point at a valid Function
- * Driver structure, or some of the members
- * contain invalid entries.
- *
- *----------------------------------------------------------------------------*/
-CsrResult CsrSdioFunctionDriverRegister(CsrSdioFunctionDriver *functionDriver);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioFunctionDriverUnregister
- *
- * DESCRIPTION
- * Unregister a previously registered Function Driver.
- *
- * PARAMETERS
- * functionDriver - pointer to struct describing the Function Driver.
- *
- *----------------------------------------------------------------------------*/
-void CsrSdioFunctionDriverUnregister(CsrSdioFunctionDriver *functionDriver);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioFunctionEnable, CsrSdioFunctionDisable
- *
- * DESCRIPTION
- * Enable/disable the specified function by setting/clearing the
- * corresponding bit in the I/O Enable register in function 0, and then
- * periodically reading the related bit in the I/O Ready register until it
- * is set/clear, limited by an implementation defined timeout.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function.
- *
- * RETURNS
- * CSR_RESULT_SUCCESS - The specified function was enabled/disabled.
- * CSR_RESULT_FAILURE - Unspecified/unknown error.
- * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore.
- * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occurred. The state of the
- * related bit in the I/O Enable register is
- * undefined.
- * CSR_SDIO_RESULT_TIMEOUT - No response from the device, or the related
- * bit in the I/O ready register was not
- * set/cleared within the timeout period.
- *
- * NOTE: If the SDIO R5 response is available, and either of the
- * FUNCTION_NUMBER or OUT_OF_RANGE bits are set,
- * CSR_SDIO_RESULT_INVALID_VALUE shall be returned. If the ERROR bit
- * is set (but none of FUNCTION_NUMBER or OUT_OF_RANGE),
- * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and
- * COM_CRC_ERROR bits shall be ignored.
- *
- * If the CSPI response is available, and any of the
- * FUNCTION_DISABLED or CLOCK_DISABLED bits are set,
- * CSR_SDIO_RESULT_INVALID_VALUE will be returned.
- *
- *----------------------------------------------------------------------------*/
-CsrResult CsrSdioFunctionEnable(CsrSdioFunction *function);
-CsrResult CsrSdioFunctionDisable(CsrSdioFunction *function);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioInterruptEnable, CsrSdioInterruptDisable
- *
- * DESCRIPTION
- * Enable/disable the interrupt for the specified function by
- * setting/clearing the corresponding bit in the INT Enable register in
- * function 0.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function.
- *
- * RETURNS
- * CSR_RESULT_SUCCESS - The specified function was enabled/disabled.
- * CSR_RESULT_FAILURE - Unspecified/unknown error.
- * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore.
- * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occurred. The state of the
- * related bit in the INT Enable register is
- * unchanged.
- * CSR_SDIO_RESULT_INVALID_VALUE - The specified function cannot be
- * enabled/disabled, because it either
- * does not exist or it is not possible to
- * individually enable/disable functions.
- * CSR_SDIO_RESULT_TIMEOUT - No response from the device.
- *
- * NOTE: If the SDIO R5 response is available, and either of the
- * FUNCTION_NUMBER or OUT_OF_RANGE bits are set,
- * CSR_SDIO_RESULT_INVALID_VALUE shall be returned. If the ERROR bit
- * is set (but none of FUNCTION_NUMBER or OUT_OF_RANGE),
- * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and
- * COM_CRC_ERROR bits shall be ignored.
- *
- * If the CSPI response is available, and any of the
- * FUNCTION_DISABLED or CLOCK_DISABLED bits are set,
- * CSR_SDIO_RESULT_INVALID_VALUE will be returned.
- *
- *----------------------------------------------------------------------------*/
-CsrResult CsrSdioInterruptEnable(CsrSdioFunction *function);
-CsrResult CsrSdioInterruptDisable(CsrSdioFunction *function);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioInterruptAcknowledge
- *
- * DESCRIPTION
- * Acknowledge that a signalled interrupt has been handled. Shall only
- * be called once, and exactly once for each signalled interrupt to the
- * corresponding function.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function to which the
- * event was signalled.
- *
- *----------------------------------------------------------------------------*/
-void CsrSdioInterruptAcknowledge(CsrSdioFunction *function);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioInsertedAcknowledge, CsrSdioRemovedAcknowledge
- *
- * DESCRIPTION
- * Acknowledge that a signalled inserted/removed event has been handled.
- * Shall only be called once, and exactly once for each signalled event to
- * the corresponding function.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function to which the
- * inserted was signalled.
- * result (CsrSdioInsertedAcknowledge only)
- * CSR_RESULT_SUCCESS - The Function Driver has accepted the
- * function, and the function is attached to
- * the Function Driver until the
- * CsrSdioRemovedCallback is called and
- * acknowledged.
- * CSR_RESULT_FAILURE - Unable to accept the function. The
- * function is not attached to the Function
- * Driver, and it may be passed to another
- * Function Driver which supports the
- * function.
- *
- *----------------------------------------------------------------------------*/
-void CsrSdioInsertedAcknowledge(CsrSdioFunction *function, CsrResult result);
-void CsrSdioRemovedAcknowledge(CsrSdioFunction *function);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioSuspendAcknowledge, CsrSdioResumeAcknowledge
- *
- * DESCRIPTION
- * Acknowledge that a signalled suspend event has been handled. Shall only
- * be called once, and exactly once for each signalled event to the
- * corresponding function.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function to which the
- * event was signalled.
- * result
- * CSR_RESULT_SUCCESS - Successfully suspended/resumed.
- * CSR_RESULT_FAILURE - Unspecified/unknown error.
- *
- *----------------------------------------------------------------------------*/
-void CsrSdioSuspendAcknowledge(CsrSdioFunction *function, CsrResult result);
-void CsrSdioResumeAcknowledge(CsrSdioFunction *function, CsrResult result);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioBlockSizeSet
- *
- * DESCRIPTION
- * Set the block size to use for the function. The actual configured block
- * size shall be the minimum of:
- * 1) Maximum block size supported by the function.
- * 2) Maximum block size supported by the host controller.
- * 3) The block size specified by the blockSize argument.
- *
- * When this function returns, the actual configured block size is
- * available in the blockSize member of the function struct.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function.
- * blockSize - Block size to use for the function. Valid range is 1 to
- * 2048.
- *
- * RETURNS
- * CSR_RESULT_SUCCESS - The block size register on the chip
- * was updated.
- * CSR_RESULT_FAILURE - Unspecified/unknown error.
- * CSR_SDIO_RESULT_INVALID_VALUE - One or more arguments were invalid.
- * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore.
- * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occurred. The configured block
- * size is undefined.
- * CSR_SDIO_RESULT_TIMEOUT - No response from the device.
- *
- * NOTE: If the SDIO R5 response is available, and the FUNCTION_NUMBER
- * bits is set, CSR_SDIO_RESULT_INVALID_VALUE shall be returned.
- * If the ERROR bit is set (but not FUNCTION_NUMBER),
- * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and
- * COM_CRC_ERROR bits shall be ignored.
- *
- * If the CSPI response is available, and any of the
- * FUNCTION_DISABLED or CLOCK_DISABLED bits are set,
- * CSR_SDIO_RESULT_INVALID_VALUE will be returned.
- *
- * NOTE: Setting the block size requires two individual operations. The
- * implementation shall ignore the OUT_OF_RANGE bit of the SDIO R5
- * response for the first operation, as the partially configured
- * block size may be out of range, even if the final block size
- * (after the second operation) is in the valid range.
- *
- *----------------------------------------------------------------------------*/
-CsrResult CsrSdioBlockSizeSet(CsrSdioFunction *function, u16 blockSize);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioMaxBusClockFrequencySet
- *
- * DESCRIPTION
- * Set the maximum clock frequency to use for the device associated with
- * the specified function. The actual configured clock frequency for the
- * device shall be the minimum of:
- * 1) Maximum clock frequency supported by the device.
- * 2) Maximum clock frequency supported by the host controller.
- * 3) Maximum clock frequency specified for any function on the same
- * device.
- *
- * If the clock frequency exceeds 25MHz, it is the responsibility of the
- * SDIO driver to enable high speed mode on the device, using the standard
- * defined procedure, before increasing the frequency beyond the limit.
- *
- * Note that the clock frequency configured affects all functions on the
- * same device.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function.
- * maxFrequency - The maximum clock frequency for the function in Hertz.
- *
- * RETURNS
- * CSR_RESULT_SUCCESS - The maximum clock frequency was successfully
- * set for the function.
- * CSR_RESULT_FAILURE - Unspecified/unknown error.
- * CSR_SDIO_RESULT_INVALID_VALUE - One or more arguments were invalid.
- * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore.
- *
- * NOTE: If the SDIO R5 response is available, and the FUNCTION_NUMBER
- * bits is set, CSR_SDIO_RESULT_INVALID_VALUE shall be returned.
- * If the ERROR bit is set (but not FUNCTION_NUMBER),
- * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and
- * COM_CRC_ERROR bits shall be ignored.
- *
- * If the CSPI response is available, and any of the
- * FUNCTION_DISABLED or CLOCK_DISABLED bits are set,
- * CSR_SDIO_RESULT_INVALID_VALUE will be returned.
- *
- *
- *----------------------------------------------------------------------------*/
-CsrResult CsrSdioMaxBusClockFrequencySet(CsrSdioFunction *function, u32 maxFrequency);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioRead8, CsrSdioWrite8, CsrSdioRead8Async, CsrSdioWrite8Async
- *
- * DESCRIPTION
- * Read/write an 8bit value from/to the specified register address.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function.
- * address - Register address within the function.
- * data - The data to read/write.
- * callback - The function to call on operation completion.
- *
- * RETURNS
- * CSR_RESULT_SUCCESS - The data was successfully read/written.
- * CSR_RESULT_FAILURE - Unspecified/unknown error.
- * CSR_SDIO_RESULT_INVALID_VALUE - One or more arguments were invalid.
- * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore.
- * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occurred. No data read/written.
- * CSR_SDIO_RESULT_TIMEOUT - No response from the device.
- *
- * NOTE: If the SDIO R5 response is available, and either of the
- * FUNCTION_NUMBER or OUT_OF_RANGE bits are set,
- * CSR_SDIO_RESULT_INVALID_VALUE shall be returned. If the ERROR bit
- * is set (but none of FUNCTION_NUMBER or OUT_OF_RANGE),
- * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and
- * COM_CRC_ERROR bits shall be ignored.
- *
- * If the CSPI response is available, and any of the
- * FUNCTION_DISABLED or CLOCK_DISABLED bits are set,
- * CSR_SDIO_RESULT_INVALID_VALUE will be returned.
- *
- * NOTE: The CsrSdioRead8Async and CsrSdioWrite8Async functions return
- * immediately, and the supplied callback function is called when the
- * operation is complete. The result value is given as an argument to
- * the callback function.
- *
- *----------------------------------------------------------------------------*/
-CsrResult CsrSdioRead8(CsrSdioFunction *function, u32 address, u8 *data);
-CsrResult CsrSdioWrite8(CsrSdioFunction *function, u32 address, u8 data);
-void CsrSdioRead8Async(CsrSdioFunction *function, u32 address, u8 *data, CsrSdioAsyncCallback callback);
-void CsrSdioWrite8Async(CsrSdioFunction *function, u32 address, u8 data, CsrSdioAsyncCallback callback);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioRead16, CsrSdioWrite16, CsrSdioRead16Async, CsrSdioWrite16Async
- *
- * DESCRIPTION
- * Read/write a 16bit value from/to the specified register address.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function.
- * address - Register address within the function.
- * data - The data to read/write.
- * callback - The function to call on operation completion.
- *
- * RETURNS
- * CSR_RESULT_SUCCESS - The data was successfully read/written.
- * CSR_RESULT_FAILURE - Unspecified/unknown error.
- * CSR_SDIO_RESULT_INVALID_VALUE - One or more arguments were invalid.
- * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore.
- * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occurred. Data may have been
- * partially read/written.
- * CSR_SDIO_RESULT_TIMEOUT - No response from the device.
- *
- * NOTE: If the SDIO R5 response is available, and either of the
- * FUNCTION_NUMBER or OUT_OF_RANGE bits are set,
- * CSR_SDIO_RESULT_INVALID_VALUE shall be returned. If the ERROR bit
- * is set (but none of FUNCTION_NUMBER or OUT_OF_RANGE),
- * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and
- * COM_CRC_ERROR bits shall be ignored.
- *
- * If the CSPI response is available, and any of the
- * FUNCTION_DISABLED or CLOCK_DISABLED bits are set,
- * CSR_SDIO_RESULT_INVALID_VALUE will be returned.
- *
- * NOTE: The CsrSdioRead16Async and CsrSdioWrite16Async functions return
- * immediately, and the supplied callback function is called when the
- * operation is complete. The result value is given as an argument to
- * the callback function.
- *
- *----------------------------------------------------------------------------*/
-CsrResult CsrSdioRead16(CsrSdioFunction *function, u32 address, u16 *data);
-CsrResult CsrSdioWrite16(CsrSdioFunction *function, u32 address, u16 data);
-void CsrSdioRead16Async(CsrSdioFunction *function, u32 address, u16 *data, CsrSdioAsyncCallback callback);
-void CsrSdioWrite16Async(CsrSdioFunction *function, u32 address, u16 data, CsrSdioAsyncCallback callback);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioF0Read8, CsrSdioF0Write8, CsrSdioF0Read8Async,
- * CsrSdioF0Write8Async
- *
- * DESCRIPTION
- * Read/write an 8bit value from/to the specified register address in
- * function 0.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function.
- * address - Register address within the function.
- * data - The data to read/write.
- * callback - The function to call on operation completion.
- *
- * RETURNS
- * CSR_RESULT_SUCCESS - The data was successfully read/written.
- * CSR_RESULT_FAILURE - Unspecified/unknown error.
- * CSR_SDIO_RESULT_INVALID_VALUE - One or more arguments were invalid.
- * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore.
- * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occurred. No data read/written.
- * CSR_SDIO_RESULT_TIMEOUT - No response from the device.
- *
- * NOTE: If the SDIO R5 response is available, and either of the
- * FUNCTION_NUMBER or OUT_OF_RANGE bits are set,
- * CSR_SDIO_RESULT_INVALID_VALUE shall be returned. If the ERROR bit
- * is set (but none of FUNCTION_NUMBER or OUT_OF_RANGE),
- * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and
- * COM_CRC_ERROR bits shall be ignored.
- *
- * If the CSPI response is available, and any of the
- * FUNCTION_DISABLED or CLOCK_DISABLED bits are set,
- * CSR_SDIO_RESULT_INVALID_VALUE will be returned.
- *
- * NOTE: The CsrSdioF0Read8Async and CsrSdioF0Write8Async functions return
- * immediately, and the supplied callback function is called when the
- * operation is complete. The result value is given as an argument to
- * the callback function.
- *
- *----------------------------------------------------------------------------*/
-CsrResult CsrSdioF0Read8(CsrSdioFunction *function, u32 address, u8 *data);
-CsrResult CsrSdioF0Write8(CsrSdioFunction *function, u32 address, u8 data);
-void CsrSdioF0Read8Async(CsrSdioFunction *function, u32 address, u8 *data, CsrSdioAsyncCallback callback);
-void CsrSdioF0Write8Async(CsrSdioFunction *function, u32 address, u8 data, CsrSdioAsyncCallback callback);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioRead, CsrSdioWrite, CsrSdioReadAsync, CsrSdioWriteAsync
- *
- * DESCRIPTION
- * Read/write a specified number of bytes from/to the specified register
- * address.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function.
- * address - Register address within the function.
- * data - The data to read/write.
- * length - Number of byte to read/write.
- * callback - The function to call on operation completion.
- *
- * RETURNS
- * CSR_RESULT_SUCCESS - The data was successfully read/written.
- * CSR_RESULT_FAILURE - Unspecified/unknown error.
- * CSR_SDIO_RESULT_INVALID_VALUE - One or more arguments were invalid.
- * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore.
- * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occurred. Data may have been
- * partially read/written.
- * CSR_SDIO_RESULT_TIMEOUT - No response from the device.
- *
- * NOTE: If the SDIO R5 response is available, and either of the
- * FUNCTION_NUMBER or OUT_OF_RANGE bits are set,
- * CSR_SDIO_RESULT_INVALID_VALUE shall be returned. If the ERROR bit
- * is set (but none of FUNCTION_NUMBER or OUT_OF_RANGE),
- * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and
- * COM_CRC_ERROR bits shall be ignored.
- *
- * If the CSPI response is available, and any of the
- * FUNCTION_DISABLED or CLOCK_DISABLED bits are set,
- * CSR_SDIO_RESULT_INVALID_VALUE will be returned.
- *
- * NOTE: The CsrSdioF0Read8Async and CsrSdioF0Write8Async functions return
- * immediately, and the supplied callback function is called when the
- * operation is complete. The result value is given as an argument to
- * the callback function.
- *
- *----------------------------------------------------------------------------*/
-CsrResult CsrSdioRead(CsrSdioFunction *function, u32 address, void *data, u32 length);
-CsrResult CsrSdioWrite(CsrSdioFunction *function, u32 address, const void *data, u32 length);
-void CsrSdioReadAsync(CsrSdioFunction *function, u32 address, void *data, u32 length, CsrSdioAsyncCallback callback);
-void CsrSdioWriteAsync(CsrSdioFunction *function, u32 address, const void *data, u32 length, CsrSdioAsyncCallback callback);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioPowerOn, CsrSdioPowerOff
- *
- * DESCRIPTION
- * Power on/off the device.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function that resides on
- * the device to power on/off.
- *
- * RETURNS (only CsrSdioPowerOn)
- * CSR_RESULT_SUCCESS - Power was successfully reapplied and the device
- * has been reinitialised.
- * CSR_RESULT_FAILURE - Unspecified/unknown error.
- * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore.
- * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occurred during reinitialisation.
- * CSR_SDIO_RESULT_TIMEOUT - No response from the device during
- * reinitialisation.
- * CSR_SDIO_RESULT_NOT_RESET - The power was not removed by the
- * CsrSdioPowerOff call. The state of the
- * device is unchanged.
- *
- *----------------------------------------------------------------------------*/
-CsrResult CsrSdioPowerOn(CsrSdioFunction *function);
-void CsrSdioPowerOff(CsrSdioFunction *function);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioHardReset
- *
- * DESCRIPTION
- * Perform a hardware reset of the device.
- *
- * PARAMETERS
- * function - Pointer to struct representing the function that resides on
- * the device to hard reset.
- *
- * RETURNS
- * CSR_RESULT_SUCCESS - Reset was successfully performed and the device
- * has been reinitialised.
- * CSR_RESULT_FAILURE - Unspecified/unknown error.
- * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore.
- * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occurred during reinitialisation.
- * CSR_SDIO_RESULT_TIMEOUT - No response from the device during
- * reinitialisation.
- * CSR_SDIO_RESULT_NOT_RESET - The reset was not applied because it is not
- * supported. The state of the device is
- * unchanged.
- *
- *----------------------------------------------------------------------------*/
-CsrResult CsrSdioHardReset(CsrSdioFunction *function);
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrSdioFunctionActive, CsrSdioFunctionIdle
- *
- * DESCRIPTION
- *
- * PARAMETERS
- * function - Pointer to struct representing the function.
- *
- *----------------------------------------------------------------------------*/
-void CsrSdioFunctionActive(CsrSdioFunction *function);
-void CsrSdioFunctionIdle(CsrSdioFunction *function);
-
-#endif
diff --git a/drivers/staging/csr/csr_serialize_primitive_types.c b/drivers/staging/csr/csr_serialize_primitive_types.c
deleted file mode 100644
index 9713b9afef64..000000000000
--- a/drivers/staging/csr/csr_serialize_primitive_types.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#include <linux/module.h>
-#include <linux/slab.h>
-#include "csr_prim_defs.h"
-#include "csr_msgconv.h"
-#include "csr_macro.h"
-
-void CsrUint8Des(u8 *value, u8 *buffer, size_t *offset)
-{
- *value = buffer[*offset];
- *offset += sizeof(*value);
-}
-EXPORT_SYMBOL_GPL(CsrUint8Des);
-
-void CsrUint16Des(u16 *value, u8 *buffer, size_t *offset)
-{
- *value = (buffer[*offset + 0] << 0) |
- (buffer[*offset + 1] << 8);
- *offset += sizeof(*value);
-}
-EXPORT_SYMBOL_GPL(CsrUint16Des);
-
-void CsrUint32Des(u32 *value, u8 *buffer, size_t *offset)
-{
- *value = (buffer[*offset + 0] << 0) |
- (buffer[*offset + 1] << 8) |
- (buffer[*offset + 2] << 16) |
- (buffer[*offset + 3] << 24);
- *offset += sizeof(*value);
-}
-EXPORT_SYMBOL_GPL(CsrUint32Des);
-
-void CsrMemCpyDes(void *value, u8 *buffer, size_t *offset, size_t length)
-{
- memcpy(value, &buffer[*offset], length);
- *offset += length;
-}
-EXPORT_SYMBOL_GPL(CsrMemCpyDes);
-
-void CsrCharStringDes(char **value, u8 *buffer, size_t *offset)
-{
- *value = kstrdup((char *) &buffer[*offset], GFP_KERNEL);
- *offset += strlen(*value) + 1;
-}
-EXPORT_SYMBOL_GPL(CsrCharStringDes);
-
-void CsrUint8Ser(u8 *buffer, size_t *offset, u8 value)
-{
- buffer[*offset] = value;
- *offset += sizeof(value);
-}
-EXPORT_SYMBOL_GPL(CsrUint8Ser);
-
-void CsrUint16Ser(u8 *buffer, size_t *offset, u16 value)
-{
- buffer[*offset + 0] = (u8) ((value >> 0) & 0xFF);
- buffer[*offset + 1] = (u8) ((value >> 8) & 0xFF);
- *offset += sizeof(value);
-}
-EXPORT_SYMBOL_GPL(CsrUint16Ser);
-
-void CsrUint32Ser(u8 *buffer, size_t *offset, u32 value)
-{
- buffer[*offset + 0] = (u8) ((value >> 0) & 0xFF);
- buffer[*offset + 1] = (u8) ((value >> 8) & 0xFF);
- buffer[*offset + 2] = (u8) ((value >> 16) & 0xFF);
- buffer[*offset + 3] = (u8) ((value >> 24) & 0xFF);
- *offset += sizeof(value);
-}
-EXPORT_SYMBOL_GPL(CsrUint32Ser);
-
-void CsrMemCpySer(u8 *buffer, size_t *offset, const void *value, size_t length)
-{
- memcpy(&buffer[*offset], value, length);
- *offset += length;
-}
-EXPORT_SYMBOL_GPL(CsrMemCpySer);
-
-void CsrCharStringSer(u8 *buffer, size_t *offset, const char *value)
-{
- if (value)
- {
- strcpy(((char *) &buffer[*offset]), value);
- *offset += strlen(value) + 1;
- }
- else
- {
- CsrUint8Ser(buffer, offset, 0);
- }
-}
-EXPORT_SYMBOL_GPL(CsrCharStringSer);
diff --git a/drivers/staging/csr/csr_time.c b/drivers/staging/csr/csr_time.c
deleted file mode 100644
index 01179e46f47d..000000000000
--- a/drivers/staging/csr/csr_time.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#include <linux/kernel.h>
-#include <linux/time.h>
-#include <linux/module.h>
-
-#include "csr_time.h"
-
-u32 CsrTimeGet(u32 *high)
-{
- struct timespec ts;
- u64 time;
- u32 low;
-
- ts = current_kernel_time();
- time = (u64) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
-
- if (high != NULL)
- *high = (u32) ((time >> 32) & 0xFFFFFFFF);
-
- low = (u32) (time & 0xFFFFFFFF);
-
- return low;
-}
-EXPORT_SYMBOL_GPL(CsrTimeGet);
diff --git a/drivers/staging/csr/csr_time.h b/drivers/staging/csr/csr_time.h
deleted file mode 100644
index fc29e8e5e478..000000000000
--- a/drivers/staging/csr/csr_time.h
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifndef CSR_TIME_H__
-#define CSR_TIME_H__
-/*****************************************************************************
-
-(c) Cambridge Silicon Radio Limited 2010
-All rights reserved and confidential information of CSR
-
-Refer to LICENSE.txt included with this source for details
-on the license terms.
-
-*****************************************************************************/
-
-#include <linux/types.h>
-
-/*******************************************************************************
-
-NAME
- CsrTimeGet
-
-DESCRIPTION
- Returns the current system time in a low and a high part. The low part
- is expressed in microseconds. The high part is incremented when the low
- part wraps to provide an extended range.
-
- The caller may provide a NULL pointer as the high parameter.
- In this case the function just returns the low part and ignores the
- high parameter.
-
- Although the time is expressed in microseconds the actual resolution is
- platform dependent and can be less. It is recommended that the
- resolution is at least 10 milliseconds.
-
-PARAMETERS
- high - Pointer to variable that will receive the high part of the
- current system time. Passing NULL is valid.
-
-RETURNS
- Low part of current system time in microseconds.
-
-*******************************************************************************/
-u32 CsrTimeGet(u32 *high);
-
-
-/*------------------------------------------------------------------*/
-/* CsrTime Macros */
-/*------------------------------------------------------------------*/
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrTimeAdd
- *
- * DESCRIPTION
- * Add two time values. Adding the numbers can overflow the range of a
- * CsrTime, so the user must be cautious.
- *
- * RETURNS
- * CsrTime - the sum of "t1" and "t2".
- *
- *----------------------------------------------------------------------------*/
-#define CsrTimeAdd(t1, t2) ((t1) + (t2))
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrTimeSub
- *
- * DESCRIPTION
- * Subtract two time values. Subtracting the numbers can provoke an
- * underflow, so the user must be cautious.
- *
- * RETURNS
- * CsrTime - "t1" - "t2".
- *
- *----------------------------------------------------------------------------*/
-#define CsrTimeSub(t1, t2) ((s32) (t1) - (s32) (t2))
-
-#endif
diff --git a/drivers/staging/csr/csr_util.c b/drivers/staging/csr/csr_util.c
deleted file mode 100644
index c3aa9d509e5c..000000000000
--- a/drivers/staging/csr/csr_util.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#include <linux/module.h>
-
-MODULE_DESCRIPTION("CSR Operating System Kernel Abstraction");
-MODULE_AUTHOR("Cambridge Silicon Radio Ltd.");
-MODULE_LICENSE("GPL and additional rights");
diff --git a/drivers/staging/csr/csr_wifi_common.h b/drivers/staging/csr/csr_wifi_common.h
deleted file mode 100644
index efc43a525a3d..000000000000
--- a/drivers/staging/csr/csr_wifi_common.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#ifndef CSR_WIFI_COMMON_H__
-#define CSR_WIFI_COMMON_H__
-
-#include <linux/types.h>
-#include "csr_result.h"
-
-/* MAC address */
-typedef struct
-{
- u8 a[6];
-} CsrWifiMacAddress;
-
-/* IPv4 address */
-typedef struct
-{
- u8 a[4];
-} CsrWifiIp4Address;
-
-/* IPv6 address */
-typedef struct
-{
- u8 a[16];
-} CsrWifiIp6Address;
-
-typedef struct
-{
- u8 ssid[32];
- u8 length;
-} CsrWifiSsid;
-
-/*******************************************************************************
-
- DESCRIPTION
- Result values used on the Wifi Interfaces
-
- VALUES
- CSR_RESULT_SUCCESS
- - The request/procedure succeeded
- CSR_RESULT_FAILURE
- - The request/procedure did not succeed because of an error
- CSR_WIFI_RESULT_NOT_FOUND
- - The request did not succeed because some resource was not
- found.
- CSR_WIFI_RESULT_TIMED_OUT
- - The request/procedure did not succeed because of a time out
- CSR_WIFI_RESULT_CANCELLED
- - The request was canceled due to another conflicting
- request that was issued before this one was completed
- CSR_WIFI_RESULT_INVALID_PARAMETER
- - The request/procedure did not succeed because it had an
- invalid parameter
- CSR_WIFI_RESULT_NO_ROOM
- - The request did not succeed due to a lack of resources,
- e.g. out of memory problem.
- CSR_WIFI_RESULT_UNSUPPORTED
- - The request/procedure did not succeed because the feature
- is not supported yet
- CSR_WIFI_RESULT_UNAVAILABLE
- - The request cannot be processed at this time
- CSR_WIFI_RESULT_WIFI_OFF
- - The requested action is not available because Wi-Fi is
- currently off
- CSR_WIFI_RESULT_SECURITY_ERROR
- - The request/procedure did not succeed because of a security
- error
- CSR_WIFI_RESULT_MIB_SET_FAILURE
- - MIB Set Failure: either the MIB OID to be written to does
- not exist or the MIB Value is invalid.
- CSR_WIFI_RESULT_INVALID_INTERFACE_TAG
- - The supplied Interface Tag is not valid.
- CSR_WIFI_RESULT_P2P_NOA_CONFIG_CONFLICT
- - The new NOA configuration conflicts with the existing NOA configuration
- hence not accepted"
-*******************************************************************************/
-#define CSR_WIFI_RESULT_NOT_FOUND ((CsrResult) 0x0001)
-#define CSR_WIFI_RESULT_TIMED_OUT ((CsrResult) 0x0002)
-#define CSR_WIFI_RESULT_CANCELLED ((CsrResult) 0x0003)
-#define CSR_WIFI_RESULT_INVALID_PARAMETER ((CsrResult) 0x0004)
-#define CSR_WIFI_RESULT_NO_ROOM ((CsrResult) 0x0005)
-#define CSR_WIFI_RESULT_UNSUPPORTED ((CsrResult) 0x0006)
-#define CSR_WIFI_RESULT_UNAVAILABLE ((CsrResult) 0x0007)
-#define CSR_WIFI_RESULT_WIFI_OFF ((CsrResult) 0x0008)
-#define CSR_WIFI_RESULT_SECURITY_ERROR ((CsrResult) 0x0009)
-#define CSR_WIFI_RESULT_MIB_SET_FAILURE ((CsrResult) 0x000A)
-#define CSR_WIFI_RESULT_INVALID_INTERFACE_TAG ((CsrResult) 0x000B)
-#define CSR_WIFI_RESULT_P2P_NOA_CONFIG_CONFLICT ((CsrResult) 0x000C)
-
-#define CSR_WIFI_VERSION "5.1.0.0"
-
-#endif
-
diff --git a/drivers/staging/csr/csr_wifi_fsm.h b/drivers/staging/csr/csr_wifi_fsm.h
deleted file mode 100644
index fc5c5aa6a3c4..000000000000
--- a/drivers/staging/csr/csr_wifi_fsm.h
+++ /dev/null
@@ -1,240 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#ifndef CSR_WIFI_FSM_H
-#define CSR_WIFI_FSM_H
-
-#include "csr_prim_defs.h"
-#include "csr_log_text.h"
-#include "csr_wifi_fsm_event.h"
-
-/* including this file for CsrWifiInterfaceMode*/
-#include "csr_wifi_common.h"
-
-#define CSR_WIFI_FSM_ENV (0xFFFF)
-
-/**
- * @brief
- * Toplevel FSM context data
- *
- * @par Description
- * Holds ALL FSM static and dynamic data for a FSM
- */
-typedef struct CsrWifiFsmContext CsrWifiFsmContext;
-
-/**
- * @brief
- * FSM External Wakeup CallbackFunction Pointer
- *
- * @par Description
- * Defines the external wakeup function for the FSM
- * to call when an external event is injected into the systen
- *
- * @param[in] context : External context
- *
- * @return
- * void
- */
-typedef void (*CsrWifiFsmExternalWakupCallbackPtr)(void *context);
-
-/**
- * @brief
- * Initialises a top level FSM context
- *
- * @par Description
- * Initialises the FSM Context to an initial state and allocates
- * space for "maxProcesses" number of instances
- *
- * @param[in] osaContext : OSA context
- * @param[in] applicationContext : Internal fsm application context
- * @param[in] externalContext : External context
- * @param[in] maxProcesses : Max processes to allocate room for
- *
- * @return
- * CsrWifiFsmContext* fsm context
- */
-extern CsrWifiFsmContext* CsrWifiFsmInit(void *applicationContext, void *externalContext, u16 maxProcesses, CsrLogTextTaskId loggingTaskId);
-
-/**
- * @brief
- * Resets the FSM's back to first conditions
- *
- * @par Description
- * This function is used to free any dynamic resources allocated for the
- * given context by CsrWifiFsmInit().
- * The FSM's reset function is called to cleanup any fsm specific memory
- * The reset function does NOT need to free the fsm data pointer as
- * CsrWifiFsmShutdown() will do it.
- * the FSM's init function is call again to reinitialise the FSM context.
- * CsrWifiFsmReset() should NEVER be called when CsrWifiFsmExecute() is running.
- *
- * @param[in] context : FSM context
- *
- * @return
- * void
- */
-extern void CsrWifiFsmReset(CsrWifiFsmContext *context);
-
-/**
- * @brief
- * Frees resources allocated by CsrWifiFsmInit
- *
- * @par Description
- * This function is used to free any dynamic resources allocated for the
- * given context by CsrWifiFsmInit(), prior to complete termination of
- * the program.
- * The FSM's reset function is called to cleanup any fsm specific memory.
- * The reset function does NOT need to free the fsm data pointer as
- * CsrWifiFsmShutdown() will do it.
- * CsrWifiFsmShutdown() should NEVER be called when CsrWifiFsmExecute() is running.
- *
- * @param[in] context : FSM context
- *
- * @return
- * void
- */
-extern void CsrWifiFsmShutdown(CsrWifiFsmContext *context);
-
-/**
- * @brief
- * Executes the fsm context
- *
- * @par Description
- * Executes the FSM context and runs until ALL events in the context are processed.
- * When no more events are left to process then CsrWifiFsmExecute() returns to a time
- * specifying when to next call the CsrWifiFsmExecute()
- * Scheduling, threading, blocking and external event notification are outside
- * the scope of the FSM and CsrWifiFsmExecute().
- *
- * @param[in] context : FSM context
- *
- * @return
- * u32 Time in ms until next timeout or 0xFFFFFFFF for no timer set
- */
-extern u32 CsrWifiFsmExecute(CsrWifiFsmContext *context);
-
-/**
- * @brief
- * Adds an event to the FSM context's external event queue for processing
- *
- * @par Description
- * Adds an event to the contexts external queue
- * This is thread safe and adds an event to the fsm's external event queue.
- *
- * @param[in] context : FSM context
- * @param[in] event : event to add to the event queue
- * @param[in] source : source of the event (this can be a synergy task queue or an fsm instance id)
- * @param[in] destination : destination of the event (This can be a fsm instance id or CSR_WIFI_FSM_ENV)
- * @param[in] id : event id
- *
- * @return
- * void
- */
-extern void CsrWifiFsmSendEventExternal(CsrWifiFsmContext *context, CsrWifiFsmEvent *event, u16 source, u16 destination, CsrPrim primtype, u16 id);
-
-/**
- * @brief
- * Adds an Alien event to the FSM context's external event queue for processing
- *
- * @par Description
- * Adds an event to the contexts external queue
- * This is thread safe and adds an event to the fsm's external event queue.
- *
- * @param[in] context : FSM context
- * @param[in] event : event to add to the event queue
- * @param[in] source : source of the event (this can be a synergy task queue or an fsm instance id)
- * @param[in] destination : destination of the event (This can be a fsm instance id or CSR_WIFI_FSM_ENV)
- * @param[in] id : event id
- */
-#define CsrWifiFsmSendAlienEventExternal(_context, _alienEvent, _source, _destination, _primtype, _id) \
- { \
- CsrWifiFsmAlienEvent *_evt = kmalloc(sizeof(CsrWifiFsmAlienEvent), GFP_KERNEL); \
- _evt->alienEvent = _alienEvent; \
- CsrWifiFsmSendEventExternal(_context, (CsrWifiFsmEvent *)_evt, _source, _destination, _primtype, _id); \
- }
-
-
-/**
- * @brief
- * Current time of day in ms
- *
- * @param[in] context : FSM context
- *
- * @return
- * u32 32 bit ms tick
- */
-extern u32 CsrWifiFsmGetTimeOfDayMs(CsrWifiFsmContext *context);
-
-/**
- * @brief
- * Gets the time until the next FSM timer expiry
- *
- * @par Description
- * Returns the next timeout time or 0 if no timers are set.
- *
- * @param[in] context : FSM context
- *
- * @return
- * u32 Time in ms until next timeout or 0xFFFFFFFF for no timer set
- */
-extern u32 CsrWifiFsmGetNextTimeout(CsrWifiFsmContext *context);
-
-/**
- * @brief
- * Fast forwards the fsm timers by ms Milliseconds
- *
- * @param[in] context : FSM context
- * @param[in] ms : Milliseconds to fast forward by
- *
- * @return
- * void
- */
-extern void CsrWifiFsmFastForward(CsrWifiFsmContext *context, u16 ms);
-
-/**
- * @brief
- * shift the current time of day by ms amount
- *
- * @par Description
- * useful to speed up tests where time needs to pass
- *
- * @param[in] context : FSM context
- * @param[in] ms : ms to adjust time by
- *
- * @return
- * void
- */
-extern void CsrWifiFsmTestAdvanceTime(CsrWifiFsmContext *context, u32 ms);
-
-/**
- * @brief
- * Check if the fsm has events to process
- *
- * @param[in] context : FSM context
- *
- * @return
- * u8 returns TRUE if there are events for the FSM to process
- */
-extern u8 CsrWifiFsmHasEvents(CsrWifiFsmContext *context);
-
-/**
- * @brief
- * function that installs the contexts wakeup function
- *
- * @param[in] context : FSM context
- * @param[in] callback : Callback function pointer
- *
- * @return
- * void
- */
-extern void CsrWifiFsmInstallWakeupCallback(CsrWifiFsmContext *context, CsrWifiFsmExternalWakupCallbackPtr callback);
-
-#endif /* CSR_WIFI_FSM_H */
-
diff --git a/drivers/staging/csr/csr_wifi_fsm_event.h b/drivers/staging/csr/csr_wifi_fsm_event.h
deleted file mode 100644
index 0690ca955ef5..000000000000
--- a/drivers/staging/csr/csr_wifi_fsm_event.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#ifndef CSR_WIFI_FSM_EVENT_H
-#define CSR_WIFI_FSM_EVENT_H
-
-#include "csr_prim_defs.h"
-#include "csr_sched.h"
-
-/**
- * @brief
- * FSM event header.
- *
- * @par Description
- * All events MUST have this struct as the FIRST member.
- * The next member is used internally for linked lists
- */
-typedef struct CsrWifiFsmEvent
-{
- CsrPrim type;
- u16 primtype;
- CsrSchedQid destination;
- CsrSchedQid source;
-
- /* Private pointer to allow an optimal Event list */
- /* NOTE: Ignore this pointer.
- * Do not waste code initializing OR freeing it.
- * The pointer is used internally in the CsrWifiFsm code
- * to avoid a second malloc when queuing events.
- */
- struct CsrWifiFsmEvent *next;
-} CsrWifiFsmEvent;
-
-#endif /* CSR_WIFI_FSM_EVENT_H */
-
diff --git a/drivers/staging/csr/csr_wifi_fsm_types.h b/drivers/staging/csr/csr_wifi_fsm_types.h
deleted file mode 100644
index d21c60a81fcf..000000000000
--- a/drivers/staging/csr/csr_wifi_fsm_types.h
+++ /dev/null
@@ -1,430 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#ifndef CSR_WIFI_FSM_TYPES_H
-#define CSR_WIFI_FSM_TYPES_H
-
-#include <linux/types.h>
-#include "csr_macro.h"
-#include "csr_sched.h"
-
-#ifdef CSR_WIFI_FSM_MUTEX_ENABLE
-#include "csr_framework_ext.h"
-#endif
-
-#include "csr_wifi_fsm.h"
-
-#define CSR_WIFI_FSM_MAX_TRANSITION_HISTORY 10
-
-/**
- * @brief
- * FSM event list header.
- *
- * @par Description
- * Singly linked list of events.
- */
-typedef struct CsrWifiFsmEventList
-{
- CsrWifiFsmEvent *first;
- CsrWifiFsmEvent *last;
-} CsrWifiFsmEventList;
-
-
-/**
- * @brief
- * FSM timer id.
- *
- * @par Description
- * Composite Id made up of the type, dest and a unique id so
- * CsrWifiFsmRemoveTimer knows where to look when removing the timer
- */
-typedef struct CsrWifiFsmTimerId
-{
- CsrPrim type;
- u16 primtype;
- CsrSchedQid destination;
- u16 uniqueid;
-} CsrWifiFsmTimerId;
-
-/**
- * @brief
- * FSM timer header.
- *
- * @par Description
- * All timer MUST have this struct as the FIRST member.
- * The first members of the structure MUST remain compatable
- * with the CsrWifiFsmEvent so that timers are just specialised events
- */
-typedef struct CsrWifiFsmTimer
-{
- CsrPrim type;
- u16 primtype;
- CsrSchedQid destination;
- CsrSchedQid source;
-
- /* Private pointer to allow an optimal Event list */
- struct CsrWifiFsmTimer *next;
-
- CsrWifiFsmTimerId timerid;
- u32 timeoutTimeMs;
-} CsrWifiFsmTimer;
-
-
-/**
- * @brief
- * Fsm Alien Event
- *
- * @par Description
- * Allows the wrapping of alien events that do not use CsrWifiFsmEvent
- * as the first member of the Event struct
- */
-typedef struct
-{
- CsrWifiFsmEvent event;
- void *alienEvent;
-} CsrWifiFsmAlienEvent;
-
-
-/**
- * @brief
- * FSM timer list header.
- *
- * @par Description
- * Singly linked list of timers.
- */
-typedef struct CsrWifiFsmTimerList
-{
- CsrWifiFsmTimer *first;
- CsrWifiFsmTimer *last;
- u16 nexttimerid;
-} CsrWifiFsmTimerList;
-
-/**
- * @brief
- * Process Entry Function Pointer
- *
- * @par Description
- * Defines the entry function for a processes.
- * Called at process initialisation.
- *
- * @param[in] context : FSM context
- *
- * @return
- * void
- */
-typedef void (*CsrWifiFsmProcEntryFnPtr)(CsrWifiFsmContext *context);
-
-/**
- * @brief
- * Process Transition Function Pointer
- *
- * @par Description
- * Defines a transition function for a processes.
- * Called when an event causes a transition on a process
- *
- * @param[in] CsrWifiFsmContext* : FSM context
- * @param[in] void* : FSM data (can be NULL)
- * @param[in] const CsrWifiFsmEvent* : event to process
- *
- * @return
- * void
- */
-typedef void (*CsrWifiFsmTransitionFnPtr)(CsrWifiFsmContext *context, void *fsmData, const CsrWifiFsmEvent *event);
-
-/**
- * @brief
- * Process reset/shutdown Function Pointer
- *
- * @par Description
- * Defines the reset/shutdown function for a processes.
- * Called to reset or shutdown an fsm.
- *
- * @param[in] context : FSM context
- *
- * @return
- * void
- */
-typedef void (*CsrWifiFsmProcResetFnPtr)(CsrWifiFsmContext *context);
-
-/**
- * @brief
- * FSM Default Destination CallbackFunction Pointer
- *
- * @par Description
- * Defines the default destination function for the FSM
- * to call when an event does not have a valid destination.
- * This
- *
- * @param[in] context : External context
- *
- * @return
- * u16 a valid destination OR CSR_WIFI_FSM_ENV
- */
-typedef u16 (*CsrWifiFsmDestLookupCallbackPtr)(void *context, const CsrWifiFsmEvent *event);
-
-
-#ifdef CSR_WIFI_FSM_DUMP_ENABLE
-/**
- * @brief
- * Trace Dump Function Pointer
- *
- * @par Description
- * Called when we want to trace the FSM
- *
- * @param[in] context : FSM context
- * @param[in] id : fsm id
- *
- * @return
- * void
- */
-typedef void (*CsrWifiFsmDumpFnPtr)(CsrWifiFsmContext *context, void *fsmData);
-#endif
-
-/**
- * @brief
- * Event ID to transition function entry
- *
- * @par Description
- * Event ID to Transition Entry in a state table.
- */
-typedef struct
-{
- u32 eventid;
- CsrWifiFsmTransitionFnPtr transition;
-#ifdef CSR_LOG_ENABLE
- const char *transitionName;
-#endif
-} CsrWifiFsmEventEntry;
-
-/**
- * @brief
- * Single State's Transition Table
- *
- * @par Description
- * Stores Data for a single State's event to
- * transition functions mapping
- */
-typedef struct
-{
- const u8 numEntries;
- const u8 saveAll;
- const CsrWifiFsmEventEntry *eventEntryArray; /* array of transition function pointers for state */
-#ifdef CSR_LOG_ENABLE
- u16 stateNumber;
- const char *stateName;
-#endif
-} CsrWifiFsmTableEntry;
-
-/**
- * @brief
- * Process State Transtion table
- *
- * @par Description
- * Stores Data for a processes State to transition table
- */
-typedef struct
-{
- u16 numStates; /* number of states */
- const CsrWifiFsmTableEntry *aStateEventMatrix; /* state event matrix */
-} CsrWifiFsmTransitionFunctionTable;
-
-/**
- * @brief
- * Const Process definition
- *
- * @par Description
- * Constant process specification.
- * This is ALL the non dynamic data that defines
- * a process.
- */
-typedef struct
-{
- const char *processName;
- const u32 processId;
- const CsrWifiFsmTransitionFunctionTable transitionTable;
- const CsrWifiFsmTableEntry unhandledTransitions;
- const CsrWifiFsmTableEntry ignoreFunctions;
- const CsrWifiFsmProcEntryFnPtr entryFn;
- const CsrWifiFsmProcResetFnPtr resetFn;
-#ifdef CSR_WIFI_FSM_DUMP_ENABLE
- const CsrWifiFsmDumpFnPtr dumpFn; /* Called to dump fsm specific trace if not NULL */
-#endif
-} CsrWifiFsmProcessStateMachine;
-
-#ifdef CSR_WIFI_FSM_DUMP_ENABLE
-/**
- * @brief
- * Storage for state transition info
- */
-typedef struct
-{
- u16 transitionNumber;
- CsrWifiFsmEvent event;
- u16 fromState;
- u16 toState;
- CsrWifiFsmTransitionFnPtr transitionFn;
- u16 transitionCount; /* number consecutive of times this transition was seen */
-#ifdef CSR_LOG_ENABLE
- const char *transitionName;
-#endif
-} CsrWifiFsmTransitionRecord;
-
-/**
- * @brief
- * Storage for the last state X transitions
- */
-typedef struct
-{
- u16 numTransitions;
- CsrWifiFsmTransitionRecord records[CSR_WIFI_FSM_MAX_TRANSITION_HISTORY];
-} CsrWifiFsmTransitionRecords;
-#endif
-
-/**
- * @brief
- * Dynamic Process data
- *
- * @par Description
- * Dynamic process data that is used to keep track of the
- * state and data for a process instance
- */
-typedef struct
-{
- const CsrWifiFsmProcessStateMachine *fsmInfo; /* state machine info that is constant regardless of context */
- u16 instanceId; /* Runtime process id */
- u16 state; /* Current state */
- void *params; /* Instance user data */
- CsrWifiFsmEventList savedEventQueue; /* The saved event queue */
- struct CsrWifiFsmInstanceEntry *subFsm; /* Sub Fsm instance data */
- struct CsrWifiFsmInstanceEntry *subFsmCaller; /* The Fsm instance that created the SubFsm and should be used for callbacks*/
-#ifdef CSR_WIFI_FSM_DUMP_ENABLE
- CsrWifiFsmTransitionRecords transitionRecords; /* Last X transitions in the FSM */
-#endif
-} CsrWifiFsmInstanceEntry;
-
-/**
- * @brief
- * OnCreate Callback Function Pointer
- *
- * @par Description
- * Called when an fsm is created.
- *
- * @param[in] extContext : External context
- * @param[in] instance : FSM instance
- *
- * @return
- * void
- */
-typedef void (*CsrWifiFsmOnCreateFnPtr)(void *extContext, const CsrWifiFsmInstanceEntry *instance);
-
-/**
- * @brief
- * OnTransition Callback Function Pointer
- *
- * @par Description
- * Called when an event is processed by a fsm
- *
- * @param[in] extContext : External context
- * @param[in] eventEntryArray : Entry data
- * @param[in] event : Event
- *
- * @return
- * void
- */
-typedef void (*CsrWifiFsmOnTransitionFnPtr)(void *extContext, const CsrWifiFsmEventEntry *eventEntryArray, const CsrWifiFsmEvent *event);
-
-/**
- * @brief
- * OnStateChange Callback Function Pointer
- *
- * @par Description
- * Called when CsrWifiFsmNextState is called
- *
- * @param[in] extContext : External context
- *
- * @return
- * void
- */
-typedef void (*CsrWifiFsmOnStateChangeFnPtr)(void *extContext, u16 nextstate);
-
-/**
- * @brief
- * OnIgnore,OnError or OnInvalid Callback Function Pointer
- *
- * @par Description
- * Called when an event is processed by a fsm
- *
- * @param[in] extContext : External context
- * @param[in] event : Event
- *
- * @return
- * void
- */
-typedef void (*CsrWifiFsmOnEventFnPtr)(void *extContext, const CsrWifiFsmEvent *event);
-
-/**
- * @brief
- * Toplevel FSM context data
- *
- * @par Description
- * Holds ALL FSM static and dynamic data for a FSM
- */
-struct CsrWifiFsmContext
-{
- CsrWifiFsmEventList eventQueue; /* The internal event queue */
- CsrWifiFsmEventList externalEventQueue; /* The external event queue */
-#ifdef CSR_WIFI_FSM_MUTEX_ENABLE
- CsrMutexHandle externalEventQueueLock; /* The external event queue mutex */
-#endif
- u32 timeOffset; /* Amount to adjust the TimeOfDayMs by */
- CsrWifiFsmTimerList timerQueue; /* The internal timer queue */
- u8 useTempSaveList; /* Should the temp save list be used */
- CsrWifiFsmEventList tempSaveList; /* The temp save event queue */
- CsrWifiFsmEvent *eventForwardedOrSaved; /* The event that was forwarded or Saved */
- u16 maxProcesses; /* Size of instanceArray */
- u16 numProcesses; /* Current number allocated in instanceArray */
- CsrWifiFsmInstanceEntry *instanceArray; /* Array of processes for this component */
- CsrWifiFsmInstanceEntry *ownerInstance; /* The Process that owns currentInstance (SubFsm support) */
- CsrWifiFsmInstanceEntry *currentInstance; /* Current Process that is executing */
- CsrWifiFsmExternalWakupCallbackPtr externalEventFn; /* External event Callback */
- CsrWifiFsmOnEventFnPtr appIgnoreCallback; /* Application Ignore event Callback */
- CsrWifiFsmDestLookupCallbackPtr appEvtDstCallback; /* Application Lookup event Destination Function*/
-
- void *applicationContext; /* Internal fsm application context */
- void *externalContext; /* External context (set by the user of the fsm)*/
- CsrLogTextTaskId loggingTaskId; /* Task Id to use in any logging output */
-
-#ifndef CSR_WIFI_FSM_SCHEDULER_DISABLED
- CsrSchedTid schedTimerId; /* Scheduler TimerId for use in Scheduler Tasks */
- u32 schedTimerNexttimeoutMs; /* Next timeout time for the current timer */
-#endif
-
-#ifdef CSR_WIFI_FSM_MUTEX_ENABLE
-#ifdef CSR_WIFI_FSM_TRANSITION_LOCK
- CsrMutexHandle transitionLock; /* Lock when calling transition functions */
-#endif
-#endif
-
-#ifdef CSR_LOG_ENABLE
- CsrWifiFsmOnCreateFnPtr onCreate; /* Debug Transition Callback */
- CsrWifiFsmOnTransitionFnPtr onTransition; /* Debug Transition Callback */
- CsrWifiFsmOnTransitionFnPtr onUnhandedCallback; /* Unhanded event Callback */
- CsrWifiFsmOnStateChangeFnPtr onStateChange; /* Debug State Change Callback */
- CsrWifiFsmOnEventFnPtr onIgnoreCallback; /* Ignore event Callback */
- CsrWifiFsmOnEventFnPtr onSaveCallback; /* Save event Callback */
- CsrWifiFsmOnEventFnPtr onErrorCallback; /* Error event Callback */
- CsrWifiFsmOnEventFnPtr onInvalidCallback; /* Invalid event Callback */
-#endif
-#ifdef CSR_WIFI_FSM_DUMP_ENABLE
- u16 masterTransitionNumber; /* Increments on every transition */
-#endif
-};
-
-#endif /* CSR_WIFI_FSM_TYPES_H */
diff --git a/drivers/staging/csr/csr_wifi_hip_card.h b/drivers/staging/csr/csr_wifi_hip_card.h
deleted file mode 100644
index bd47f606e0de..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_card.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- ******************************************************************************
- * FILE : csr_wifi_hip_card.h
- *
- * PURPOSE : Defines abstract interface for hardware specific functions.
- * Note, this is a different file from one of the same name in the
- * Windows driver.
- *
- *****************************************************************************
- */
-#ifndef __CARD_H__
-#define __CARD_H__
-
-#include "csr_wifi_hip_card_sdio.h"
-#include "csr_wifi_hip_signals.h"
-#include "csr_wifi_hip_unifi_udi.h"
-
-
-/*****************************************************************************
- * CardEnableInt -
- */
-CsrResult CardEnableInt(card_t *card);
-
-/*****************************************************************************
- * CardGenInt -
- */
-CsrResult CardGenInt(card_t *card);
-
-/*****************************************************************************
- * CardPendingInt -
- */
-CsrResult CardPendingInt(card_t *card, u8 *pintr);
-
-/*****************************************************************************
- * CardDisableInt -
- */
-CsrResult CardDisableInt(card_t *card);
-
-/*****************************************************************************
- * CardClearInt -
- */
-CsrResult CardClearInt(card_t *card);
-
-/*****************************************************************************
- * CardDisable -
- */
-void CardDisable(card_t *card);
-
-/*****************************************************************************
- * CardIntEnabled -
- */
-CsrResult CardIntEnabled(card_t *card, u8 *enabled);
-
-/*****************************************************************************
- * CardGetDataSlotSize
- */
-u16 CardGetDataSlotSize(card_t *card);
-
-/*****************************************************************************
- * CardWriteBulkData -
- */
-CsrResult CardWriteBulkData(card_t *card, card_signal_t *csptr, unifi_TrafficQueue queue);
-
-
-/*****************************************************************************
- * CardClearFromHostDataSlot -
- */
-void CardClearFromHostDataSlot(card_t *card, const s16 aSlotNum);
-
-#ifdef CSR_WIFI_REQUEUE_PACKET_TO_HAL
-/*****************************************************************************
- * CardClearFromHostDataSlotWithoutFreeingBulkData - Clear the data stot
- * without freeing the bulk data
- */
-
-void CardClearFromHostDataSlotWithoutFreeingBulkData(card_t *card, const s16 aSlotNum);
-#endif
-
-/*****************************************************************************
- * CardGetFreeFromHostDataSlots -
- */
-u16 CardGetFreeFromHostDataSlots(card_t *card);
-
-u16 CardAreAllFromHostDataSlotsEmpty(card_t *card);
-
-CsrResult card_start_processor(card_t *card, enum unifi_dbg_processors_select which);
-
-CsrResult card_wait_for_firmware_to_start(card_t *card, u32 *paddr);
-
-CsrResult unifi_dl_firmware(card_t *card, void *arg);
-CsrResult unifi_dl_patch(card_t *card, void *arg, u32 boot_ctrl);
-CsrResult unifi_do_loader_op(card_t *card, u32 op_addr, u8 opcode);
-void* unifi_dl_fw_read_start(card_t *card, s8 is_fw);
-
-CsrResult unifi_coredump_handle_request(card_t *card);
-
-CsrResult ConvertCsrSdioToCsrHipResult(card_t *card, CsrResult csrResult);
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-void unifi_debug_log_to_buf(const char *fmt, ...);
-void unifi_debug_string_to_buf(const char *str);
-void unifi_debug_hex_to_buf(const char *buff, u16 length);
-#endif
-
-#endif /* __CARD_H__ */
diff --git a/drivers/staging/csr/csr_wifi_hip_card_sdio.c b/drivers/staging/csr/csr_wifi_hip_card_sdio.c
deleted file mode 100644
index d5425325894c..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_card_sdio.c
+++ /dev/null
@@ -1,4001 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- * FILE: csr_wifi_hip_card_sdio.c
- *
- * PURPOSE: Implementation of the Card API for SDIO.
- *
- * NOTES:
- * CardInit() is called from the SDIO probe callback when a card is
- * inserted. This performs the basic SDIO initialisation, enabling i/o
- * etc.
- *
- * ---------------------------------------------------------------------------
- */
-#include <linux/slab.h>
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_conversions.h"
-#include "csr_wifi_hip_unifiversion.h"
-#include "csr_wifi_hip_card.h"
-#include "csr_wifi_hip_card_sdio.h"
-#include "csr_wifi_hip_chiphelper.h"
-
-
-/* Time to wait between attempts to read MAILBOX0 */
-#define MAILBOX1_TIMEOUT 10 /* in millisecs */
-#define MAILBOX1_ATTEMPTS 200 /* 2 seconds */
-
-#define MAILBOX2_TIMEOUT 5 /* in millisecs */
-#define MAILBOX2_ATTEMPTS 10 /* 50ms */
-
-#define RESET_SETTLE_DELAY 25 /* in millisecs */
-
-static CsrResult card_init_slots(card_t *card);
-static CsrResult card_hw_init(card_t *card);
-static CsrResult firmware_present_in_flash(card_t *card);
-static void bootstrap_chip_hw(card_t *card);
-static CsrResult unifi_reset_hardware(card_t *card);
-static CsrResult unifi_hip_init(card_t *card);
-static CsrResult card_access_panic(card_t *card);
-static CsrResult unifi_read_chip_version(card_t *card);
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_alloc_card
- *
- * Allocate and initialise the card context structure.
- *
- * Arguments:
- * sdio Pointer to SDIO context pointer to pass to low
- * level i/o functions.
- * ospriv Pointer to O/S private struct to pass when calling
- * callbacks to the higher level system.
- *
- * Returns:
- * Pointer to card struct, which represents the driver context or
- * NULL if the allocation failed.
- * ---------------------------------------------------------------------------
- */
-card_t* unifi_alloc_card(CsrSdioFunction *sdio, void *ospriv)
-{
- card_t *card;
- u32 i;
-
-
- card = kzalloc(sizeof(card_t), GFP_KERNEL);
- if (card == NULL)
- {
- return NULL;
- }
-
- card->sdio_if = sdio;
- card->ospriv = ospriv;
-
- card->unifi_interrupt_seq = 1;
-
- /* Make these invalid. */
- card->proc_select = (u32)(-1);
- card->dmem_page = (u32)(-1);
- card->pmem_page = (u32)(-1);
-
- card->bh_reason_host = 0;
- card->bh_reason_unifi = 0;
-
- for (i = 0; i < sizeof(card->tx_q_paused_flag) / sizeof(card->tx_q_paused_flag[0]); i++)
- {
- card->tx_q_paused_flag[i] = 0;
- }
- card->memory_resources_allocated = 0;
-
- card->low_power_mode = UNIFI_LOW_POWER_DISABLED;
- card->periodic_wake_mode = UNIFI_PERIODIC_WAKE_HOST_DISABLED;
-
- card->host_state = UNIFI_HOST_STATE_AWAKE;
- card->intmode = CSR_WIFI_INTMODE_DEFAULT;
-
- /*
- * Memory resources for buffers are allocated when the chip is initialised
- * because we need configuration information from the firmware.
- */
-
- /*
- * Initialise wait queues and lists
- */
- card->fh_command_queue.q_body = card->fh_command_q_body;
- card->fh_command_queue.q_length = UNIFI_SOFT_COMMAND_Q_LENGTH;
-
- for (i = 0; i < UNIFI_NO_OF_TX_QS; i++)
- {
- card->fh_traffic_queue[i].q_body = card->fh_traffic_q_body[i];
- card->fh_traffic_queue[i].q_length = UNIFI_SOFT_TRAFFIC_Q_LENGTH;
- }
-
-
- /* Initialise mini-coredump pointers in case no coredump buffers
- * are requested by the OS layer.
- */
- card->request_coredump_on_reset = 0;
- card->dump_next_write = NULL;
- card->dump_cur_read = NULL;
- card->dump_buf = NULL;
-
-#ifdef UNIFI_DEBUG
- /* Determine offset of LSB in pointer for later alignment sanity check.
- * Synergy integer types have specific widths, which cause compiler
- * warnings when casting pointer types, e.g. on 64-bit systems.
- */
- {
- u32 val = 0x01234567;
-
- if (*((u8 *)&val) == 0x01)
- {
- card->lsb = sizeof(void *) - 1; /* BE */
- }
- else
- {
- card->lsb = 0; /* LE */
- }
- }
-#endif
- return card;
-} /* unifi_alloc_card() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_init_card
- *
- * Reset the hardware and perform HIP initialization
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * CsrResult code
- * CSR_RESULT_SUCCESS if successful
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_init_card(card_t *card, s32 led_mask)
-{
- CsrResult r;
-
-
- if (card == NULL)
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- r = unifi_init(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- r = unifi_hip_init(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to start host protocol.\n");
- return r;
- }
-
- return CSR_RESULT_SUCCESS;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_init
- *
- * Init the hardware.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * CsrResult code
- * CSR_RESULT_SUCCESS if successful
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_init(card_t *card)
-{
- CsrResult r;
- CsrResult csrResult;
-
- if (card == NULL)
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- /*
- * Disable the SDIO interrupts while initialising UniFi.
- * Re-enable them when f/w is running.
- */
- csrResult = CsrSdioInterruptDisable(card->sdio_if);
- if (csrResult == CSR_SDIO_RESULT_NO_DEVICE)
- {
- return CSR_WIFI_HIP_RESULT_NO_DEVICE;
- }
-
- /*
- * UniFi's PLL may start with a slow clock (~ 1 MHz) so initially
- * set the SDIO bus clock to a similar value or SDIO accesses may
- * fail.
- */
- csrResult = CsrSdioMaxBusClockFrequencySet(card->sdio_if, UNIFI_SDIO_CLOCK_SAFE_HZ);
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
- return r;
- }
- card->sdio_clock_speed = UNIFI_SDIO_CLOCK_SAFE_HZ;
-
- /*
- * Reset UniFi. Note, this only resets the WLAN function part of the chip,
- * the SDIO interface is not reset.
- */
- unifi_trace(card->ospriv, UDBG1, "Resetting UniFi\n");
- r = unifi_reset_hardware(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to reset UniFi\n");
- return r;
- }
-
- /* Reset the power save mode, to be active until the MLME-reset is complete */
- r = unifi_configure_low_power_mode(card,
- UNIFI_LOW_POWER_DISABLED, UNIFI_PERIODIC_WAKE_HOST_DISABLED);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to set power save mode\n");
- return r;
- }
-
- /*
- * Set initial value of page registers.
- * The page registers will be maintained by unifi_read...() and
- * unifi_write...().
- */
- card->proc_select = (u32)(-1);
- card->dmem_page = (u32)(-1);
- card->pmem_page = (u32)(-1);
- r = unifi_write_direct16(card, ChipHelper_HOST_WINDOW3_PAGE(card->helper) * 2, 0);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write SHARED_DMEM_PAGE\n");
- return r;
- }
- r = unifi_write_direct16(card, ChipHelper_HOST_WINDOW2_PAGE(card->helper) * 2, 0);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write PROG_MEM2_PAGE\n");
- return r;
- }
-
- /*
- * If the driver has reset UniFi due to previous SDIO failure, this may
- * have been due to a chip watchdog reset. In this case, the driver may
- * have requested a mini-coredump which needs to be captured now the
- * SDIO interface is alive.
- */
- (void)unifi_coredump_handle_request(card);
-
- /*
- * Probe to see if the UniFi has ROM/flash to boot from. CSR6xxx should do.
- */
- r = firmware_present_in_flash(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r == CSR_WIFI_HIP_RESULT_NOT_FOUND)
- {
- unifi_error(card->ospriv, "No firmware found\n");
- }
- else if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Probe for Flash failed\n");
- }
-
- return r;
-} /* unifi_init() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_download
- *
- * Load the firmware.
- *
- * Arguments:
- * card Pointer to card struct
- * led_mask Loader LED mask
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success
- * CsrResult error code on failure.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_download(card_t *card, s32 led_mask)
-{
- CsrResult r;
- void *dlpriv;
-
- if (card == NULL)
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- /* Set the loader led mask */
- card->loader_led_mask = led_mask;
-
- /* Get the firmware file information */
- unifi_trace(card->ospriv, UDBG1, "downloading firmware...\n");
-
- dlpriv = unifi_dl_fw_read_start(card, UNIFI_FW_STA);
- if (dlpriv == NULL)
- {
- return CSR_WIFI_HIP_RESULT_NOT_FOUND;
- }
-
- /* Download the firmware. */
- r = unifi_dl_firmware(card, dlpriv);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to download firmware\n");
- return r;
- }
-
- /* Free the firmware file information. */
- unifi_fw_read_stop(card->ospriv, dlpriv);
-
- return CSR_RESULT_SUCCESS;
-} /* unifi_download() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_hip_init
- *
- * This function performs the f/w initialisation sequence as described
- * in the Unifi Host Interface Protocol Specification.
- * It allocates memory for host-side slot data and signal queues.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success or else a CSR error code
- *
- * Notes:
- * The firmware must have been downloaded.
- * ---------------------------------------------------------------------------
- */
-static CsrResult unifi_hip_init(card_t *card)
-{
- CsrResult r;
- CsrResult csrResult;
-
- r = card_hw_init(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to establish communication with UniFi\n");
- return r;
- }
-#ifdef CSR_PRE_ALLOC_NET_DATA
- /* if there is any preallocated netdata left from the prev session free it now */
- prealloc_netdata_free(card);
-#endif
- /*
- * Allocate memory for host-side slot data and signal queues.
- * We need the config info read from the firmware to know how much
- * memory to allocate.
- */
- r = card_init_slots(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Init slots failed: %d\n", r);
- return r;
- }
-
- unifi_trace(card->ospriv, UDBG2, "Sending first UniFi interrupt\n");
-
- r = unifi_set_host_state(card, UNIFI_HOST_STATE_AWAKE);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- /* Enable the SDIO interrupts now that the f/w is running. */
- csrResult = CsrSdioInterruptEnable(card->sdio_if);
- if (csrResult == CSR_SDIO_RESULT_NO_DEVICE)
- {
- return CSR_WIFI_HIP_RESULT_NO_DEVICE;
- }
-
- /* Signal the UniFi to start handling messages */
- r = CardGenInt(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* unifi_hip_init() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * _build_sdio_config_data
- *
- * Unpack the SDIO configuration information from a buffer read from
- * UniFi into a host structure.
- * The data is byte-swapped for a big-endian host if necessary by the
- * UNPACK... macros.
- *
- * Arguments:
- * card Pointer to card struct
- * cfg_data Destination structure to unpack into.
- * cfg_data_buf Source buffer to read from. This should be the raw
- * data read from UniFi.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static void _build_sdio_config_data(sdio_config_data_t *cfg_data,
- const u8 *cfg_data_buf)
-{
- s16 offset = 0;
-
- cfg_data->version = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(cfg_data_buf + offset);
- offset += SIZEOF_UINT16;
-
- cfg_data->sdio_ctrl_offset = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(cfg_data_buf + offset);
- offset += SIZEOF_UINT16;
-
- cfg_data->fromhost_sigbuf_handle = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(cfg_data_buf + offset);
- offset += SIZEOF_UINT16;
-
- cfg_data->tohost_sigbuf_handle = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(cfg_data_buf + offset);
- offset += SIZEOF_UINT16;
-
- cfg_data->num_fromhost_sig_frags = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(cfg_data_buf + offset);
- offset += SIZEOF_UINT16;
-
- cfg_data->num_tohost_sig_frags = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(cfg_data_buf + offset);
- offset += SIZEOF_UINT16;
-
- cfg_data->num_fromhost_data_slots = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(cfg_data_buf + offset);
- offset += SIZEOF_UINT16;
-
- cfg_data->num_tohost_data_slots = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(cfg_data_buf + offset);
- offset += SIZEOF_UINT16;
-
- cfg_data->data_slot_size = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(cfg_data_buf + offset);
- offset += SIZEOF_UINT16;
-
- cfg_data->initialised = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(cfg_data_buf + offset);
- offset += SIZEOF_UINT16;
-
- cfg_data->overlay_size = CSR_GET_UINT32_FROM_LITTLE_ENDIAN(cfg_data_buf + offset);
- offset += SIZEOF_UINT32;
-
- cfg_data->data_slot_round = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(cfg_data_buf + offset);
- offset += SIZEOF_UINT16;
-
- cfg_data->sig_frag_size = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(cfg_data_buf + offset);
- offset += SIZEOF_UINT16;
-
- cfg_data->tohost_signal_padding = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(cfg_data_buf + offset);
-} /* _build_sdio_config_data() */
-
-
-/*
- * - Function ----------------------------------------------------------------
- * card_hw_init()
- *
- * Perform the initialisation procedure described in the UniFi Host
- * Interface Protocol document (section 3.3.8) and read the run-time
- * configuration information from the UniFi. This is stuff like number
- * of bulk data slots etc.
- *
- * The card enumeration and SD initialisation has already been done by
- * the SDIO library, see card_sdio_init().
- *
- * The initialisation is done when firmware is ready, i.e. this may need
- * to be called after a f/w download operation.
- *
- * The initialisation procedure goes like this:
- * - Wait for UniFi to start-up by polling SHARED_MAILBOX1
- * - Find the symbol table and look up SLT_SDIO_SLOT_CONFIG
- * - Read the config structure
- * - Check the "SDIO initialised" flag, if not zero do a h/w reset and
- * start again
- * - Decide the number of bulk data slots to allocate, allocate them and
- * set "SDIO initialised" flag (and generate an interrupt) to say so.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * CSR_RESULT_SUCEESS on success,
- * a CSR error code on failure
- *
- * Notes:
- * All data in the f/w is stored in a little endian format, without any
- * padding bytes. Every read from this memory has to be transformed in
- * host (cpu specific) format, before it is stored in driver's parameters
- * or/and structures. Athough unifi_card_read16() and unifi_read32() do perform
- * the conversion internally, unifi_readn() does not.
- * ---------------------------------------------------------------------------
- */
-static CsrResult card_hw_init(card_t *card)
-{
- u32 slut_address;
- u16 initialised;
- u16 finger_print;
- symbol_t slut;
- sdio_config_data_t *cfg_data;
- u8 cfg_data_buf[SDIO_CONFIG_DATA_SIZE];
- CsrResult r;
- void *dlpriv;
- s16 major, minor;
- s16 search_4slut_again;
- CsrResult csrResult;
-
- /*
- * The device revision from the TPLMID_MANF and TPLMID_CARD fields
- * of the CIS are available as
- * card->sdio_if->pDevice->ManfID
- * card->sdio_if->pDevice->AppID
- */
-
- /*
- * Run in a loop so we can patch.
- */
- do
- {
- /* Reset these each time around the loop. */
- search_4slut_again = 0;
- cfg_data = NULL;
-
- r = card_wait_for_firmware_to_start(card, &slut_address);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Firmware hasn't started\n");
- return r;
- }
- unifi_trace(card->ospriv, UDBG4, "SLUT addr 0x%lX\n", slut_address);
-
- /*
- * Firmware has started, but doesn't know full clock configuration yet
- * as some of the information may be in the MIB. Therefore we set an
- * initial SDIO clock speed, faster than UNIFI_SDIO_CLOCK_SAFE_HZ, for
- * the patch download and subsequent firmware initialisation, and
- * full speed UNIFI_SDIO_CLOCK_MAX_HZ will be set once the f/w tells us
- * that it is ready.
- */
- csrResult = CsrSdioMaxBusClockFrequencySet(card->sdio_if, UNIFI_SDIO_CLOCK_INIT_HZ);
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
- return r;
- }
- card->sdio_clock_speed = UNIFI_SDIO_CLOCK_INIT_HZ;
-
- /*
- * Check the SLUT fingerprint.
- * The slut_address is a generic pointer so we must use unifi_card_read16().
- */
- unifi_trace(card->ospriv, UDBG4, "Looking for SLUT finger print\n");
- finger_print = 0;
- r = unifi_card_read16(card, slut_address, &finger_print);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read SLUT finger print\n");
- return r;
- }
-
- if (finger_print != SLUT_FINGERPRINT)
- {
- unifi_error(card->ospriv, "Failed to find Symbol lookup table fingerprint\n");
- return CSR_RESULT_FAILURE;
- }
-
- /* Symbol table starts imedately after the fingerprint */
- slut_address += 2;
-
- /* Search the table until either the end marker is found, or the
- * loading of patch firmware invalidates the current table.
- */
- while (!search_4slut_again)
- {
- u16 s;
- u32 l;
-
- r = unifi_card_read16(card, slut_address, &s);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- slut_address += 2;
-
- if (s == CSR_SLT_END)
- {
- unifi_trace(card->ospriv, UDBG3, " found CSR_SLT_END\n");
- break;
- }
-
- r = unifi_read32(card, slut_address, &l);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- slut_address += 4;
-
- slut.id = s;
- slut.obj = l;
-
- unifi_trace(card->ospriv, UDBG3, " found SLUT id %02d.%08lx\n", slut.id, slut.obj);
- switch (slut.id)
- {
- case CSR_SLT_SDIO_SLOT_CONFIG:
- cfg_data = &card->config_data;
- /*
- * unifi_card_readn reads n bytes from the card, where data is stored
- * in a little endian format, without any padding bytes. So, we
- * can not just pass the cfg_data pointer or use the
- * sizeof(sdio_config_data_t) since the structure in the host can
- * be big endian formatted or have padding bytes for alignment.
- * We use a char buffer to read the data from the card.
- */
- r = unifi_card_readn(card, slut.obj, cfg_data_buf, SDIO_CONFIG_DATA_SIZE);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read config data\n");
- return r;
- }
- /* .. and then we copy the data to the host structure */
- _build_sdio_config_data(cfg_data, cfg_data_buf);
-
- /* Make sure the from host data slots are what we expect
- we reserve 2 for commands and there should be at least
- 1 left for each access category */
- if ((cfg_data->num_fromhost_data_slots < UNIFI_RESERVED_COMMAND_SLOTS)
- || (cfg_data->num_fromhost_data_slots - UNIFI_RESERVED_COMMAND_SLOTS) / UNIFI_NO_OF_TX_QS == 0)
- {
- unifi_error(card->ospriv, "From host data slots %d\n", cfg_data->num_fromhost_data_slots);
- unifi_error(card->ospriv, "need to be (queues * x + 2) (UNIFI_RESERVED_COMMAND_SLOTS for commands)\n");
- return CSR_RESULT_FAILURE;
- }
-
- /* Configure SDIO to-block-size padding */
- if (card->sdio_io_block_pad)
- {
- /*
- * Firmware limits the maximum padding size via data_slot_round.
- * Therefore when padding to whole block sizes, the block size
- * must be configured correctly by adjusting CSR_WIFI_HIP_SDIO_BLOCK_SIZE.
- */
- if (cfg_data->data_slot_round < card->sdio_io_block_size)
- {
- unifi_error(card->ospriv,
- "Configuration error: Block size of %d exceeds f/w data_slot_round of %d\n",
- card->sdio_io_block_size, cfg_data->data_slot_round);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- /*
- * To force the To-Host signals to be rounded up to the SDIO block
- * size, we need to write the To-Host Signal Padding Fragments
- * field of the SDIO configuration in UniFi.
- */
- if ((card->sdio_io_block_size % cfg_data->sig_frag_size) != 0)
- {
- unifi_error(card->ospriv, "Configuration error: Can not pad to-host signals.\n");
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- cfg_data->tohost_signal_padding = (u16) (card->sdio_io_block_size / cfg_data->sig_frag_size);
- unifi_info(card->ospriv, "SDIO block size %d requires %d padding chunks\n",
- card->sdio_io_block_size, cfg_data->tohost_signal_padding);
- r = unifi_card_write16(card, slut.obj + SDIO_TO_HOST_SIG_PADDING_OFFSET, cfg_data->tohost_signal_padding);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write To-Host Signal Padding Fragments\n");
- return r;
- }
- }
-
- /* Reconstruct the Generic Pointer address of the
- * SDIO Control Data Struct.
- */
- card->sdio_ctrl_addr = cfg_data->sdio_ctrl_offset | (UNIFI_SH_DMEM << 24);
- card->init_flag_addr = slut.obj + SDIO_INIT_FLAG_OFFSET;
- break;
-
- case CSR_SLT_BUILD_ID_NUMBER:
- {
- u32 n;
- r = unifi_read32(card, slut.obj, &n);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read build id\n");
- return r;
- }
- card->build_id = n;
- }
- break;
-
- case CSR_SLT_BUILD_ID_STRING:
- r = unifi_readnz(card, slut.obj, card->build_id_string,
- sizeof(card->build_id_string));
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read build string\n");
- return r;
- }
- break;
-
- case CSR_SLT_PERSISTENT_STORE_DB:
- break;
-
- case CSR_SLT_BOOT_LOADER_CONTROL:
-
- /* This command copies most of the station firmware
- * image from ROM into program RAM. It also clears
- * out the zerod data and sets up the initialised
- * data. */
- r = unifi_do_loader_op(card, slut.obj + 6, UNIFI_BOOT_LOADER_LOAD_STA);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write loader load image command\n");
- return r;
- }
-
- dlpriv = unifi_dl_fw_read_start(card, UNIFI_FW_STA);
-
- /* dlpriv might be NULL, we still need to do the do_loader_op step. */
- if (dlpriv != NULL)
- {
- /* Download the firmware. */
- r = unifi_dl_patch(card, dlpriv, slut.obj);
-
- /* Free the firmware file information. */
- unifi_fw_read_stop(card->ospriv, dlpriv);
-
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to patch firmware\n");
- return r;
- }
- }
-
- /* This command starts the firmware image that we want (the
- * station by default) with any patches required applied. */
- r = unifi_do_loader_op(card, slut.obj + 6, UNIFI_BOOT_LOADER_RESTART);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write loader restart command\n");
- return r;
- }
-
- /* The now running patch f/w defines a new SLUT data structure -
- * the current one is no longer valid. We must drop out of the
- * processing loop and enumerate the new SLUT (which may appear
- * at a different offset).
- */
- search_4slut_again = 1;
- break;
-
- case CSR_SLT_PANIC_DATA_PHY:
- card->panic_data_phy_addr = slut.obj;
- break;
-
- case CSR_SLT_PANIC_DATA_MAC:
- card->panic_data_mac_addr = slut.obj;
- break;
-
- default:
- /* do nothing */
- break;
- }
- } /* while */
- } while (search_4slut_again);
-
- /* Did we find the Config Data ? */
- if (cfg_data == NULL)
- {
- unifi_error(card->ospriv, "Failed to find SDIO_SLOT_CONFIG Symbol\n");
- return CSR_RESULT_FAILURE;
- }
-
- /*
- * Has ths card already been initialised?
- * If so, return an error so we do a h/w reset and start again.
- */
- r = unifi_card_read16(card, card->init_flag_addr, &initialised);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read init flag at %08lx\n",
- card->init_flag_addr);
- return r;
- }
- if (initialised != 0)
- {
- return CSR_RESULT_FAILURE;
- }
-
-
- /*
- * Now check the UniFi firmware version
- */
- major = (cfg_data->version >> 8) & 0xFF;
- minor = cfg_data->version & 0xFF;
- unifi_info(card->ospriv, "UniFi f/w protocol version %d.%d (driver %d.%d)\n",
- major, minor,
- UNIFI_HIP_MAJOR_VERSION, UNIFI_HIP_MINOR_VERSION);
-
- unifi_info(card->ospriv, "Firmware build %u: %s\n",
- card->build_id, card->build_id_string);
-
- if (major != UNIFI_HIP_MAJOR_VERSION)
- {
- unifi_error(card->ospriv, "UniFi f/w protocol major version (%d) is different from driver (v%d.%d)\n",
- major, UNIFI_HIP_MAJOR_VERSION, UNIFI_HIP_MINOR_VERSION);
-#ifndef CSR_WIFI_DISABLE_HIP_VERSION_CHECK
- return CSR_RESULT_FAILURE;
-#endif
- }
- if (minor < UNIFI_HIP_MINOR_VERSION)
- {
- unifi_error(card->ospriv, "UniFi f/w protocol version (v%d.%d) is older than minimum required by driver (v%d.%d).\n",
- major, minor,
- UNIFI_HIP_MAJOR_VERSION, UNIFI_HIP_MINOR_VERSION);
-#ifndef CSR_WIFI_DISABLE_HIP_VERSION_CHECK
- return CSR_RESULT_FAILURE;
-#endif
- }
-
- /* Read panic codes from a previous firmware panic. If the firmware has
- * not panicked since power was applied (e.g. power-off hard reset)
- * the stored panic codes will not be updated.
- */
- unifi_read_panic(card);
-
- return CSR_RESULT_SUCCESS;
-} /* card_hw_init() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * card_wait_for_unifi_to_reset
- *
- * Waits for a reset to complete by polling the WLAN function enable
- * bit (which is cleared on reset).
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, CSR error code on failure.
- * ---------------------------------------------------------------------------
- */
-static CsrResult card_wait_for_unifi_to_reset(card_t *card)
-{
- s16 i;
- CsrResult r;
- u8 io_enable;
- CsrResult csrResult;
-
- r = CSR_RESULT_SUCCESS;
- for (i = 0; i < MAILBOX2_ATTEMPTS; i++)
- {
- unifi_trace(card->ospriv, UDBG1, "waiting for reset to complete, attempt %d\n", i);
- if (card->chip_id > SDIO_CARD_ID_UNIFI_2)
- {
- /* It's quite likely that this read will timeout for the
- * first few tries - especially if we have reset via
- * DBG_RESET.
- */
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- unifi_debug_log_to_buf("m0@%02X=", SDIO_IO_READY);
-#endif
- csrResult = CsrSdioF0Read8(card->sdio_if, SDIO_IO_READY, &io_enable);
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_debug_log_to_buf("error=%X\n", csrResult);
- }
- else
- {
- unifi_debug_log_to_buf("%X\n", io_enable);
- }
-#endif
- if (csrResult == CSR_SDIO_RESULT_NO_DEVICE)
- {
- return CSR_WIFI_HIP_RESULT_NO_DEVICE;
- }
- r = CSR_RESULT_SUCCESS;
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
- }
- }
- else
- {
- r = sdio_read_f0(card, SDIO_IO_ENABLE, &io_enable);
- }
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r == CSR_RESULT_SUCCESS)
- {
- u16 mbox2;
- s16 enabled = io_enable & (1 << card->function);
-
- if (!enabled)
- {
- unifi_trace(card->ospriv, UDBG1,
- "Reset complete (function %d is disabled) in ~ %u msecs\n",
- card->function, i * MAILBOX2_TIMEOUT);
-
- /* Enable WLAN function and verify MAILBOX2 is zero'd */
- csrResult = CsrSdioFunctionEnable(card->sdio_if);
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
- unifi_error(card->ospriv, "CsrSdioFunctionEnable failed %d\n", r);
- break;
- }
- }
-
- r = unifi_read_direct16(card, ChipHelper_SDIO_HIP_HANDSHAKE(card->helper) * 2, &mbox2);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "read HIP_HANDSHAKE failed %d\n", r);
- break;
- }
- if (mbox2 != 0)
- {
- unifi_error(card->ospriv, "MAILBOX2 non-zero after reset (mbox2 = %04x)\n", mbox2);
- r = CSR_RESULT_FAILURE;
- }
- break;
- }
- else
- {
- if (card->chip_id > SDIO_CARD_ID_UNIFI_2)
- {
- /* We ignore read failures for the first few reads,
- * they are probably benign. */
- if (i > MAILBOX2_ATTEMPTS / 4)
- {
- unifi_trace(card->ospriv, UDBG1, "Failed to read CCCR IO Ready register while polling for reset\n");
- }
- }
- else
- {
- unifi_trace(card->ospriv, UDBG1, "Failed to read CCCR IO Enable register while polling for reset\n");
- }
- }
- CsrThreadSleep(MAILBOX2_TIMEOUT);
- }
-
- if (r == CSR_RESULT_SUCCESS && i == MAILBOX2_ATTEMPTS)
- {
- unifi_trace(card->ospriv, UDBG1, "Timeout waiting for UniFi to complete reset\n");
- r = CSR_RESULT_FAILURE;
- }
-
- return r;
-} /* card_wait_for_unifi_to_reset() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * card_wait_for_unifi_to_disable
- *
- * Waits for the function to become disabled by polling the
- * IO_READY bit.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, CSR error code on failure.
- *
- * Notes: This function can only be used with
- * card->chip_id > SDIO_CARD_ID_UNIFI_2
- * ---------------------------------------------------------------------------
- */
-static CsrResult card_wait_for_unifi_to_disable(card_t *card)
-{
- s16 i;
- CsrResult r;
- u8 io_enable;
- CsrResult csrResult;
-
- if (card->chip_id <= SDIO_CARD_ID_UNIFI_2)
- {
- unifi_error(card->ospriv,
- "Function reset method not supported for chip_id=%d\n",
- card->chip_id);
- return CSR_RESULT_FAILURE;
- }
-
- r = CSR_RESULT_SUCCESS;
- for (i = 0; i < MAILBOX2_ATTEMPTS; i++)
- {
- unifi_trace(card->ospriv, UDBG1, "waiting for disable to complete, attempt %d\n", i);
-
- /*
- * It's quite likely that this read will timeout for the
- * first few tries - especially if we have reset via
- * DBG_RESET.
- */
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- unifi_debug_log_to_buf("r0@%02X=", SDIO_IO_READY);
-#endif
- csrResult = CsrSdioF0Read8(card->sdio_if, SDIO_IO_READY, &io_enable);
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_debug_log_to_buf("error=%X\n", csrResult);
- }
- else
- {
- unifi_debug_log_to_buf("%X\n", io_enable);
- }
-#endif
- if (csrResult == CSR_SDIO_RESULT_NO_DEVICE)
- {
- return CSR_WIFI_HIP_RESULT_NO_DEVICE;
- }
- if (csrResult == CSR_RESULT_SUCCESS)
- {
- s16 enabled = io_enable & (1 << card->function);
- r = CSR_RESULT_SUCCESS;
- if (!enabled)
- {
- unifi_trace(card->ospriv, UDBG1,
- "Disable complete (function %d is disabled) in ~ %u msecs\n",
- card->function, i * MAILBOX2_TIMEOUT);
-
- break;
- }
- }
- else
- {
- /*
- * We ignore read failures for the first few reads,
- * they are probably benign.
- */
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
- if (i > (MAILBOX2_ATTEMPTS / 4))
- {
- unifi_trace(card->ospriv, UDBG1,
- "Failed to read CCCR IO Ready register while polling for disable\n");
- }
- }
- CsrThreadSleep(MAILBOX2_TIMEOUT);
- }
-
- if ((r == CSR_RESULT_SUCCESS) && (i == MAILBOX2_ATTEMPTS))
- {
- unifi_trace(card->ospriv, UDBG1, "Timeout waiting for UniFi to complete disable\n");
- r = CSR_RESULT_FAILURE;
- }
-
- return r;
-} /* card_wait_for_unifi_to_reset() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * card_wait_for_firmware_to_start
- *
- * Polls the MAILBOX1 register for a non-zero value.
- * Then reads MAILBOX0 and forms the two values into a 32-bit address
- * which is returned to the caller.
- *
- * Arguments:
- * card Pointer to card struct
- * paddr Pointer to receive the UniFi address formed
- * by concatenating MAILBOX1 and MAILBOX0.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, CSR error code on failure.
- * ---------------------------------------------------------------------------
- */
-CsrResult card_wait_for_firmware_to_start(card_t *card, u32 *paddr)
-{
- s32 i;
- u16 mbox0, mbox1;
- CsrResult r;
-
- /*
- * Wait for UniFi to initialise its data structures by polling
- * the SHARED_MAILBOX1 register.
- * Experience shows this is typically 120ms.
- */
- CsrThreadSleep(MAILBOX1_TIMEOUT);
-
- mbox1 = 0;
- unifi_trace(card->ospriv, UDBG1, "waiting for MAILBOX1 to be non-zero...\n");
- for (i = 0; i < MAILBOX1_ATTEMPTS; i++)
- {
- r = unifi_read_direct16(card, ChipHelper_MAILBOX1(card->helper) * 2, &mbox1);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- /* These reads can fail if UniFi isn't up yet, so try again */
- unifi_warning(card->ospriv, "Failed to read UniFi Mailbox1 register\n");
- }
-
- if ((r == CSR_RESULT_SUCCESS) && (mbox1 != 0))
- {
- unifi_trace(card->ospriv, UDBG1, "MAILBOX1 ready (0x%04X) in %u millisecs\n",
- mbox1, i * MAILBOX1_TIMEOUT);
-
- /* Read the MAILBOX1 again in case we caught the value as it
- * changed. */
- r = unifi_read_direct16(card, ChipHelper_MAILBOX1(card->helper) * 2, &mbox1);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read UniFi Mailbox1 register for second time\n");
- return r;
- }
- unifi_trace(card->ospriv, UDBG1, "MAILBOX1 value=0x%04X\n", mbox1);
-
- break;
- }
-
- CsrThreadSleep(MAILBOX1_TIMEOUT);
- if ((i % 100) == 99)
- {
- unifi_trace(card->ospriv, UDBG2, "MAILBOX1 not ready (0x%X), still trying...\n", mbox1);
- }
- }
-
- if ((r == CSR_RESULT_SUCCESS) && (mbox1 == 0))
- {
- unifi_trace(card->ospriv, UDBG1, "Timeout waiting for firmware to start, Mailbox1 still 0 after %d ms\n",
- MAILBOX1_ATTEMPTS * MAILBOX1_TIMEOUT);
- return CSR_RESULT_FAILURE;
- }
-
-
- /*
- * Complete the reset handshake by setting MAILBOX2 to 0xFFFF
- */
- r = unifi_write_direct16(card, ChipHelper_SDIO_HIP_HANDSHAKE(card->helper) * 2, 0xFFFF);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write f/w startup handshake to MAILBOX2\n");
- return r;
- }
-
-
- /*
- * Read the Symbol Look Up Table (SLUT) offset.
- * Top 16 bits are in mbox1, read the lower 16 bits from mbox0.
- */
- mbox0 = 0;
- r = unifi_read_direct16(card, ChipHelper_MAILBOX0(card->helper) * 2, &mbox0);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read UniFi Mailbox0 register\n");
- return r;
- }
-
- *paddr = (((u32)mbox1 << 16) | mbox0);
-
- return CSR_RESULT_SUCCESS;
-} /* card_wait_for_firmware_to_start() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_capture_panic
- *
- * Attempt to capture panic codes from the firmware. This may involve
- * warm reset of the chip to regain access following a watchdog reset.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * CSR_RESULT_SUCCESS if panic codes were captured, or none available
- * CSR_RESULT_FAILURE if the driver could not access function 1
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_capture_panic(card_t *card)
-{
-
- /* The firmware must have previously initialised to read the panic addresses
- * from the SLUT
- */
- if (!card->panic_data_phy_addr || !card->panic_data_mac_addr)
- {
- return CSR_RESULT_SUCCESS;
- }
-
- /* Ensure we can access function 1 following a panic/watchdog reset */
- if (card_access_panic(card) == CSR_RESULT_SUCCESS)
- {
- /* Read the panic codes */
- unifi_read_panic(card);
- }
- else
- {
- unifi_info(card->ospriv, "Unable to read panic codes");
- }
-
- return CSR_RESULT_SUCCESS;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * card_access_panic
- * Attempt to read the WLAN SDIO function in order to read panic codes
- * and perform various reset steps to regain access if the read fails.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * CSR_RESULT_SUCCESS if panic codes can be read
- * CSR error code if panic codes can not be read
- * ---------------------------------------------------------------------------
- */
-static CsrResult card_access_panic(card_t *card)
-{
- u16 data_u16 = 0;
- s32 i;
- CsrResult r, sr;
-
- /* A chip version of zero means that the version never got successfully read
- * during reset. In this case give up because it will not be possible to
- * verify the chip version.
- */
- if (!card->chip_version)
- {
- unifi_info(card->ospriv, "Unknown chip version\n");
- return CSR_RESULT_FAILURE;
- }
-
- /* Ensure chip is awake or access to function 1 will fail */
- r = unifi_set_host_state(card, UNIFI_HOST_STATE_AWAKE);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "unifi_set_host_state() failed %d\n", r);
- return CSR_RESULT_FAILURE; /* Card is probably unpowered */
- }
- CsrThreadSleep(20);
-
- for (i = 0; i < 3; i++)
- {
- sr = CsrSdioRead16(card->sdio_if, CHIP_HELPER_UNIFI_GBL_CHIP_VERSION * 2, &data_u16);
- if (sr != CSR_RESULT_SUCCESS || data_u16 != card->chip_version)
- {
- unifi_info(card->ospriv, "Failed to read valid chip version sr=%d (0x%04x want 0x%04x) try %d\n",
- sr, data_u16, card->chip_version, i);
-
- /* Set clock speed low */
- sr = CsrSdioMaxBusClockFrequencySet(card->sdio_if, UNIFI_SDIO_CLOCK_SAFE_HZ);
- if (sr != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "CsrSdioMaxBusClockFrequencySet() failed1 %d\n", sr);
- r = ConvertCsrSdioToCsrHipResult(card, sr);
- }
- card->sdio_clock_speed = UNIFI_SDIO_CLOCK_SAFE_HZ;
-
- /* First try re-enabling function in case a f/w watchdog reset disabled it */
- if (i == 0)
- {
- unifi_info(card->ospriv, "Try function enable\n");
- sr = CsrSdioFunctionEnable(card->sdio_if);
- if (sr != CSR_RESULT_SUCCESS)
- {
- r = ConvertCsrSdioToCsrHipResult(card, sr);
- unifi_error(card->ospriv, "CsrSdioFunctionEnable failed %d (HIP %d)\n", sr, r);
- }
- continue;
- }
-
- /* Second try, set awake */
- unifi_info(card->ospriv, "Try set awake\n");
-
- /* Ensure chip is awake */
- r = unifi_set_host_state(card, UNIFI_HOST_STATE_AWAKE);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "unifi_set_host_state() failed2 %d\n", r);
- }
-
- /* Set clock speed low in case setting the host state raised it, which
- * would only happen if host state was previously TORPID
- */
- sr = CsrSdioMaxBusClockFrequencySet(card->sdio_if, UNIFI_SDIO_CLOCK_SAFE_HZ);
- if (sr != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "CsrSdioMaxBusClockFrequencySet() failed2 %d\n", sr);
- }
- card->sdio_clock_speed = UNIFI_SDIO_CLOCK_SAFE_HZ;
-
- if (i == 1)
- {
- continue;
- }
-
- /* Perform a s/w reset to preserve as much as the card state as possible,
- * (mainly the preserve RAM). The context will be lost for coredump - but as we
- * were unable to access the WLAN function for panic, the coredump would have
- * also failed without a reset.
- */
- unifi_info(card->ospriv, "Try s/w reset\n");
-
- r = unifi_card_hard_reset(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "unifi_card_hard_reset() failed %d\n", r);
- }
- }
- else
- {
- if (i > 0)
- {
- unifi_info(card->ospriv, "Read chip version 0x%x after %d retries\n", data_u16, i);
- }
- break;
- }
- }
-
- r = ConvertCsrSdioToCsrHipResult(card, sr);
- return r;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_read_panic
- * Reads, saves and prints panic codes stored by the firmware in UniFi's
- * preserve RAM by the last panic that occurred since chip was powered.
- * Nothing is saved if the panic codes are read as zero.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * ---------------------------------------------------------------------------
- */
-void unifi_read_panic(card_t *card)
-{
- CsrResult r;
- u16 p_code, p_arg;
-
- /* The firmware must have previously initialised to read the panic addresses
- * from the SLUT
- */
- if (!card->panic_data_phy_addr || !card->panic_data_mac_addr)
- {
- return;
- }
-
- /* Get the panic data from PHY */
- r = unifi_card_read16(card, card->panic_data_phy_addr, &p_code);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "capture_panic: unifi_read16 %08x failed %d\n", card->panic_data_phy_addr, r);
- p_code = 0;
- }
- if (p_code)
- {
- r = unifi_card_read16(card, card->panic_data_phy_addr + 2, &p_arg);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "capture_panic: unifi_read16 %08x failed %d\n", card->panic_data_phy_addr + 2, r);
- }
- unifi_error(card->ospriv, "Last UniFi PHY PANIC %04x arg %04x\n", p_code, p_arg);
- card->last_phy_panic_code = p_code;
- card->last_phy_panic_arg = p_arg;
- }
-
- /* Get the panic data from MAC */
- r = unifi_card_read16(card, card->panic_data_mac_addr, &p_code);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "capture_panic: unifi_read16 %08x failed %d\n", card->panic_data_mac_addr, r);
- p_code = 0;
- }
- if (p_code)
- {
- r = unifi_card_read16(card, card->panic_data_mac_addr + 2, &p_arg);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "capture_panic: unifi_read16 %08x failed %d\n", card->panic_data_mac_addr + 2, r);
- }
- unifi_error(card->ospriv, "Last UniFi MAC PANIC %04x arg %04x\n", p_code, p_arg);
- card->last_mac_panic_code = p_code;
- card->last_mac_panic_arg = p_arg;
- }
-
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * card_allocate_memory_resources
- *
- * Allocates memory for the from-host, to-host bulk data slots,
- * soft queue buffers and bulk data buffers.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, CSR error code on failure.
- * ---------------------------------------------------------------------------
- */
-static CsrResult card_allocate_memory_resources(card_t *card)
-{
- s16 n, i, k, r;
- sdio_config_data_t *cfg_data;
-
- /* Reset any state carried forward from a previous life */
- card->fh_command_queue.q_rd_ptr = 0;
- card->fh_command_queue.q_wr_ptr = 0;
- (void)scnprintf(card->fh_command_queue.name, UNIFI_QUEUE_NAME_MAX_LENGTH,
- "fh_cmd_q");
- for (i = 0; i < UNIFI_NO_OF_TX_QS; i++)
- {
- card->fh_traffic_queue[i].q_rd_ptr = 0;
- card->fh_traffic_queue[i].q_wr_ptr = 0;
- (void)scnprintf(card->fh_traffic_queue[i].name,
- UNIFI_QUEUE_NAME_MAX_LENGTH, "fh_data_q%d", i);
- }
-#ifndef CSR_WIFI_HIP_TA_DISABLE
- unifi_ta_sampling_init(card);
-#endif
- /* Convenience short-cut */
- cfg_data = &card->config_data;
-
- /*
- * Allocate memory for the from-host and to-host signal buffers.
- */
- card->fh_buffer.buf = kmalloc(UNIFI_FH_BUF_SIZE, GFP_KERNEL);
- if (card->fh_buffer.buf == NULL)
- {
- unifi_error(card->ospriv, "Failed to allocate memory for F-H signals\n");
- return CSR_WIFI_HIP_RESULT_NO_MEMORY;
- }
- card->fh_buffer.bufsize = UNIFI_FH_BUF_SIZE;
- card->fh_buffer.ptr = card->fh_buffer.buf;
- card->fh_buffer.count = 0;
-
- card->th_buffer.buf = kmalloc(UNIFI_FH_BUF_SIZE, GFP_KERNEL);
- if (card->th_buffer.buf == NULL)
- {
- unifi_error(card->ospriv, "Failed to allocate memory for T-H signals\n");
- return CSR_WIFI_HIP_RESULT_NO_MEMORY;
- }
- card->th_buffer.bufsize = UNIFI_FH_BUF_SIZE;
- card->th_buffer.ptr = card->th_buffer.buf;
- card->th_buffer.count = 0;
-
-
- /*
- * Allocate memory for the from-host and to-host bulk data slots.
- * This is done as separate kmallocs because lots of smaller
- * allocations are more likely to succeed than one huge one.
- */
-
- /* Allocate memory for the array of pointers */
- n = cfg_data->num_fromhost_data_slots;
-
- unifi_trace(card->ospriv, UDBG3, "Alloc from-host resources, %d slots.\n", n);
- card->from_host_data = kmalloc(n * sizeof(slot_desc_t), GFP_KERNEL);
- if (card->from_host_data == NULL)
- {
- unifi_error(card->ospriv, "Failed to allocate memory for F-H bulk data array\n");
- return CSR_WIFI_HIP_RESULT_NO_MEMORY;
- }
-
- /* Initialise from-host bulk data slots */
- for (i = 0; i < n; i++)
- {
- UNIFI_INIT_BULK_DATA(&card->from_host_data[i].bd);
- }
-
- /* Allocate memory for the array used for slot host tag mapping */
- card->fh_slot_host_tag_record = kmalloc(n * sizeof(u32), GFP_KERNEL);
-
- if (card->fh_slot_host_tag_record == NULL)
- {
- unifi_error(card->ospriv, "Failed to allocate memory for F-H slot host tag mapping array\n");
- return CSR_WIFI_HIP_RESULT_NO_MEMORY;
- }
-
- /* Initialise host tag entries for from-host bulk data slots */
- for (i = 0; i < n; i++)
- {
- card->fh_slot_host_tag_record[i] = CSR_WIFI_HIP_RESERVED_HOST_TAG;
- }
-
-
- /* Allocate memory for the array of pointers */
- n = cfg_data->num_tohost_data_slots;
-
- unifi_trace(card->ospriv, UDBG3, "Alloc to-host resources, %d slots.\n", n);
- card->to_host_data = kmalloc(n * sizeof(bulk_data_desc_t), GFP_KERNEL);
- if (card->to_host_data == NULL)
- {
- unifi_error(card->ospriv, "Failed to allocate memory for T-H bulk data array\n");
- return CSR_WIFI_HIP_RESULT_NO_MEMORY;
- }
-
- /* Initialise to-host bulk data slots */
- for (i = 0; i < n; i++)
- {
- UNIFI_INIT_BULK_DATA(&card->to_host_data[i]);
- }
-
- /*
- * Initialise buffers for soft Q
- */
- for (i = 0; i < UNIFI_SOFT_COMMAND_Q_LENGTH; i++)
- {
- for (r = 0; r < UNIFI_MAX_DATA_REFERENCES; r++)
- {
- UNIFI_INIT_BULK_DATA(&card->fh_command_q_body[i].bulkdata[r]);
- }
- }
-
- for (k = 0; k < UNIFI_NO_OF_TX_QS; k++)
- {
- for (i = 0; i < UNIFI_SOFT_TRAFFIC_Q_LENGTH; i++)
- {
- for (r = 0; r < UNIFI_MAX_DATA_REFERENCES; r++)
- {
- UNIFI_INIT_BULK_DATA(&card->fh_traffic_q_body[k][i].bulkdata[r]);
- }
- }
- }
-
- card->memory_resources_allocated = 1;
-
- return CSR_RESULT_SUCCESS;
-} /* card_allocate_memory_resources() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_free_bulk_data
- *
- * Free the data associated to a bulk data structure.
- *
- * Arguments:
- * card Pointer to card struct
- * bulk_data_slot Pointer to bulk data structure
- *
- * Returns:
- * None.
- *
- * ---------------------------------------------------------------------------
- */
-static void unifi_free_bulk_data(card_t *card, bulk_data_desc_t *bulk_data_slot)
-{
- if (bulk_data_slot->data_length != 0)
- {
- unifi_net_data_free(card->ospriv, bulk_data_slot);
- }
-} /* unifi_free_bulk_data() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * card_free_memory_resources
- *
- * Frees memory allocated for the from-host, to-host bulk data slots,
- * soft queue buffers and bulk data buffers.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static void card_free_memory_resources(card_t *card)
-{
-
- unifi_trace(card->ospriv, UDBG1, "Freeing card memory resources.\n");
-
- /* Clear our internal queues */
- unifi_cancel_pending_signals(card);
-
-
- kfree(card->to_host_data);
- card->to_host_data = NULL;
-
- kfree(card->from_host_data);
- card->from_host_data = NULL;
-
- /* free the memory for slot host tag mapping array */
- kfree(card->fh_slot_host_tag_record);
- card->fh_slot_host_tag_record = NULL;
-
- kfree(card->fh_buffer.buf);
- card->fh_buffer.ptr = card->fh_buffer.buf = NULL;
- card->fh_buffer.bufsize = 0;
- card->fh_buffer.count = 0;
-
- kfree(card->th_buffer.buf);
- card->th_buffer.ptr = card->th_buffer.buf = NULL;
- card->th_buffer.bufsize = 0;
- card->th_buffer.count = 0;
-
-
- card->memory_resources_allocated = 0;
-
-} /* card_free_memory_resources() */
-
-
-static void card_init_soft_queues(card_t *card)
-{
- s16 i;
-
- unifi_trace(card->ospriv, UDBG1, "Initialising internal signal queues.\n");
- /* Reset any state carried forward from a previous life */
- card->fh_command_queue.q_rd_ptr = 0;
- card->fh_command_queue.q_wr_ptr = 0;
- (void)scnprintf(card->fh_command_queue.name, UNIFI_QUEUE_NAME_MAX_LENGTH,
- "fh_cmd_q");
- for (i = 0; i < UNIFI_NO_OF_TX_QS; i++)
- {
- card->fh_traffic_queue[i].q_rd_ptr = 0;
- card->fh_traffic_queue[i].q_wr_ptr = 0;
- (void)scnprintf(card->fh_traffic_queue[i].name,
- UNIFI_QUEUE_NAME_MAX_LENGTH, "fh_data_q%d", i);
- }
-#ifndef CSR_WIFI_HIP_TA_DISABLE
- unifi_ta_sampling_init(card);
-#endif
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_cancel_pending_signals
- *
- * Free the signals and associated bulk data, pending in the core.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void unifi_cancel_pending_signals(card_t *card)
-{
- s16 i, n, r;
-
- unifi_trace(card->ospriv, UDBG1, "Canceling pending signals.\n");
-
- if (card->to_host_data)
- {
- /*
- * Free any bulk data buffers allocated for the t-h slots
- * This will clear all buffers that did not make it to
- * unifi_receive_event() before cancel was request.
- */
- n = card->config_data.num_tohost_data_slots;
- unifi_trace(card->ospriv, UDBG3, "Freeing to-host resources, %d slots.\n", n);
- for (i = 0; i < n; i++)
- {
- unifi_free_bulk_data(card, &card->to_host_data[i]);
- }
- }
-
- /*
- * If any of the from-host bulk data has reached the card->from_host_data
- * but not UniFi, we need to free the buffers here.
- */
- if (card->from_host_data)
- {
- /* Free any bulk data buffers allocated for the f-h slots */
- n = card->config_data.num_fromhost_data_slots;
- unifi_trace(card->ospriv, UDBG3, "Freeing from-host resources, %d slots.\n", n);
- for (i = 0; i < n; i++)
- {
- unifi_free_bulk_data(card, &card->from_host_data[i].bd);
- }
-
- for (i = 0; i < UNIFI_NO_OF_TX_QS; i++)
- {
- card->dynamic_slot_data.from_host_used_slots[i] = 0;
- card->dynamic_slot_data.from_host_max_slots[i] = 0;
- card->dynamic_slot_data.from_host_reserved_slots[i] = 0;
- }
- }
-
- /*
- * Free any bulk data buffers allocated in the soft queues.
- * This covers the case where a bulk data pointer has reached the soft queue
- * but not the card->from_host_data.
- */
- unifi_trace(card->ospriv, UDBG3, "Freeing cmd q resources.\n");
- for (i = 0; i < UNIFI_SOFT_COMMAND_Q_LENGTH; i++)
- {
- for (r = 0; r < UNIFI_MAX_DATA_REFERENCES; r++)
- {
- unifi_free_bulk_data(card, &card->fh_command_q_body[i].bulkdata[r]);
- }
- }
-
- unifi_trace(card->ospriv, UDBG3, "Freeing traffic q resources.\n");
- for (n = 0; n < UNIFI_NO_OF_TX_QS; n++)
- {
- for (i = 0; i < UNIFI_SOFT_TRAFFIC_Q_LENGTH; i++)
- {
- for (r = 0; r < UNIFI_MAX_DATA_REFERENCES; r++)
- {
- unifi_free_bulk_data(card, &card->fh_traffic_q_body[n][i].bulkdata[r]);
- }
- }
- }
-
- card_init_soft_queues(card);
-
-} /* unifi_cancel_pending_signals() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_free_card
- *
- * Free the memory allocated for the card structure and buffers.
- *
- * Notes:
- * The porting layer is responsible for freeing any mini-coredump buffers
- * allocated when it called unifi_coredump_init(), by calling
- * unifi_coredump_free() before calling this function.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void unifi_free_card(card_t *card)
-{
-#ifdef CSR_PRE_ALLOC_NET_DATA
- prealloc_netdata_free(card);
-#endif
- /* Free any memory allocated. */
- card_free_memory_resources(card);
-
- /* Warn if caller didn't free coredump buffers */
- if (card->dump_buf)
- {
- unifi_error(card->ospriv, "Caller should call unifi_coredump_free()\n");
- unifi_coredump_free(card); /* free anyway to prevent memory leak */
- }
-
- kfree(card);
-
-} /* unifi_free_card() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * card_init_slots
- *
- * Allocate memory for host-side slot data and signal queues.
- *
- * Arguments:
- * card Pointer to card object
- *
- * Returns:
- * CSR error code.
- * ---------------------------------------------------------------------------
- */
-static CsrResult card_init_slots(card_t *card)
-{
- CsrResult r;
- u8 i;
-
- /* Allocate the buffers we need, only once. */
- if (card->memory_resources_allocated == 1)
- {
- card_free_memory_resources(card);
- }
- else
- {
- /* Initialise our internal command and traffic queues */
- card_init_soft_queues(card);
- }
-
- r = card_allocate_memory_resources(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to allocate card memory resources.\n");
- card_free_memory_resources(card);
- return r;
- }
-
- if (card->sdio_ctrl_addr == 0)
- {
- unifi_error(card->ospriv, "Failed to find config struct!\n");
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- /*
- * Set initial counts.
- */
-
- card->from_host_data_head = 0;
-
- /* Get initial signal counts from UniFi, in case it has not been reset. */
- {
- u16 s;
-
- /* Get the from-host-signals-written count */
- r = unifi_card_read16(card, card->sdio_ctrl_addr + 0, &s);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read from-host sig written count\n");
- return r;
- }
- card->from_host_signals_w = (s16)s;
-
- /* Get the to-host-signals-written count */
- r = unifi_card_read16(card, card->sdio_ctrl_addr + 6, &s);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read to-host sig read count\n");
- return r;
- }
- card->to_host_signals_r = (s16)s;
- }
-
- /* Set Initialised flag. */
- r = unifi_card_write16(card, card->init_flag_addr, 0x0001);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write initialised flag\n");
- return r;
- }
-
- /* Dynamic queue reservation */
- memset(&card->dynamic_slot_data, 0, sizeof(card_dynamic_slot_t));
-
- for (i = 0; i < UNIFI_NO_OF_TX_QS; i++)
- {
- card->dynamic_slot_data.from_host_max_slots[i] = card->config_data.num_fromhost_data_slots -
- UNIFI_RESERVED_COMMAND_SLOTS;
- card->dynamic_slot_data.queue_stable[i] = FALSE;
- }
-
- card->dynamic_slot_data.packets_interval = UNIFI_PACKETS_INTERVAL;
-
- return CSR_RESULT_SUCCESS;
-} /* card_init_slots() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_set_udi_hook
- *
- * Registers the udi hook that reports the sent signals to the core.
- *
- * Arguments:
- * card Pointer to the card context struct
- * udi_fn Pointer to the callback function.
- *
- * Returns:
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE if the card pointer is invalid,
- * CSR_RESULT_SUCCESS on success.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_set_udi_hook(card_t *card, udi_func_t udi_fn)
-{
- if (card == NULL)
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- if (card->udi_hook == NULL)
- {
- card->udi_hook = udi_fn;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* unifi_set_udi_hook() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_remove_udi_hook
- *
- * Removes the udi hook that reports the sent signals from the core.
- *
- * Arguments:
- * card Pointer to the card context struct
- * udi_fn Pointer to the callback function.
- *
- * Returns:
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE if the card pointer is invalid,
- * CSR_RESULT_SUCCESS on success.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_remove_udi_hook(card_t *card, udi_func_t udi_fn)
-{
- if (card == NULL)
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- if (card->udi_hook == udi_fn)
- {
- card->udi_hook = NULL;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* unifi_remove_udi_hook() */
-
-
-static void CardReassignDynamicReservation(card_t *card)
-{
- u8 i;
-
- unifi_trace(card->ospriv, UDBG5, "Packets Txed %d %d %d %d\n",
- card->dynamic_slot_data.packets_txed[0],
- card->dynamic_slot_data.packets_txed[1],
- card->dynamic_slot_data.packets_txed[2],
- card->dynamic_slot_data.packets_txed[3]);
-
- /* Clear reservation and recalculate max slots */
- for (i = 0; i < UNIFI_NO_OF_TX_QS; i++)
- {
- card->dynamic_slot_data.queue_stable[i] = FALSE;
- card->dynamic_slot_data.from_host_reserved_slots[i] = 0;
- card->dynamic_slot_data.from_host_max_slots[i] = card->config_data.num_fromhost_data_slots -
- UNIFI_RESERVED_COMMAND_SLOTS;
- card->dynamic_slot_data.packets_txed[i] = 0;
-
- unifi_trace(card->ospriv, UDBG5, "CardReassignDynamicReservation: queue %d reserved %d Max %d\n", i,
- card->dynamic_slot_data.from_host_reserved_slots[i],
- card->dynamic_slot_data.from_host_max_slots[i]);
- }
-
- card->dynamic_slot_data.total_packets_txed = 0;
-}
-
-
-/* Algorithm to dynamically reserve slots. The logic is based mainly on the outstanding queue
- * length. Slots are reserved for particular queues during an interval and cleared after the interval.
- * Each queue has three associated variables.. a) used slots - the number of slots currently occupied
- * by the queue b) reserved slots - number of slots reserved specifically for the queue c) max slots - total
- * slots that this queue can actually use (may be higher than reserved slots and is dependent on reserved slots
- * for other queues).
- * This function is called when there are no slots available for a queue. It checks to see if there are enough
- * unreserved slots sufficient for this request. If available these slots are reserved for the queue.
- * If there are not enough unreserved slots, a fair share for each queue is calculated based on the total slots
- * and the number of active queues (any queue with existing reservation is considered active). Queues needing
- * less than their fair share are allowed to have the previously reserved slots. The remaining slots are
- * distributed evenly among queues that need more than the fair share
- *
- * A better scheme would take current bandwidth per AC into consideration when reserving slots. An
- * implementation scheme could consider the relative time/service period for slots in an AC. If the firmware
- * services other ACs faster than a particular AC (packets wait in the slots longer) then it is fair to reserve
- * less slots for the AC
- */
-static void CardCheckDynamicReservation(card_t *card, unifi_TrafficQueue queue)
-{
- u16 q_len, active_queues = 0, excess_queue_slots, div_extra_slots,
- queue_fair_share, reserved_slots = 0, q, excess_need_queues = 0, unmovable_slots = 0;
- s32 i;
- q_t *sigq;
- u16 num_data_slots = card->config_data.num_fromhost_data_slots - UNIFI_RESERVED_COMMAND_SLOTS;
-
- /* Calculate the pending queue length */
- sigq = &card->fh_traffic_queue[queue];
- q_len = CSR_WIFI_HIP_Q_SLOTS_USED(sigq);
-
- if (q_len <= card->dynamic_slot_data.from_host_reserved_slots[queue])
- {
- unifi_trace(card->ospriv, UDBG5, "queue %d q_len %d already has that many reserved slots, exiting\n", queue, q_len);
- return;
- }
-
- /* Upper limit */
- if (q_len > num_data_slots)
- {
- q_len = num_data_slots;
- }
-
- for (i = 0; i < UNIFI_NO_OF_TX_QS; i++)
- {
- if (i != (s32)queue)
- {
- reserved_slots += card->dynamic_slot_data.from_host_reserved_slots[i];
- }
- if ((i == (s32)queue) || (card->dynamic_slot_data.from_host_reserved_slots[i] > 0))
- {
- active_queues++;
- }
- }
-
- unifi_trace(card->ospriv, UDBG5, "CardCheckDynamicReservation: queue %d q_len %d\n", queue, q_len);
- unifi_trace(card->ospriv, UDBG5, "Active queues %d reserved slots on other queues %d\n",
- active_queues, reserved_slots);
-
- if (reserved_slots + q_len <= num_data_slots)
- {
- card->dynamic_slot_data.from_host_reserved_slots[queue] = q_len;
- if (q_len == num_data_slots)
- {
- /* This is the common case when just 1 stream is going */
- card->dynamic_slot_data.queue_stable[queue] = TRUE;
- }
- }
- else
- {
- queue_fair_share = num_data_slots / active_queues;
- unifi_trace(card->ospriv, UDBG5, "queue fair share %d\n", queue_fair_share);
-
- /* Evenly distribute slots among active queues */
- /* Find out the queues that need excess of fair share. Also find slots allocated
- * to queues less than their fair share, these slots cannot be reallocated (unmovable slots) */
-
- card->dynamic_slot_data.from_host_reserved_slots[queue] = q_len;
-
- for (i = 0; i < UNIFI_NO_OF_TX_QS; i++)
- {
- if (card->dynamic_slot_data.from_host_reserved_slots[i] > queue_fair_share)
- {
- excess_need_queues++;
- }
- else
- {
- unmovable_slots += card->dynamic_slot_data.from_host_reserved_slots[i];
- }
- }
-
- unifi_trace(card->ospriv, UDBG5, "Excess need queues %d\n", excess_need_queues);
-
- /* Now find the slots per excess demand queue */
- excess_queue_slots = (num_data_slots - unmovable_slots) / excess_need_queues;
- div_extra_slots = (num_data_slots - unmovable_slots) - excess_queue_slots * excess_need_queues;
- for (i = UNIFI_NO_OF_TX_QS - 1; i >= 0; i--)
- {
- if (card->dynamic_slot_data.from_host_reserved_slots[i] > excess_queue_slots)
- {
- card->dynamic_slot_data.from_host_reserved_slots[i] = excess_queue_slots;
- if (div_extra_slots > 0)
- {
- card->dynamic_slot_data.from_host_reserved_slots[i]++;
- div_extra_slots--;
- }
- /* No more slots will be allocated to this queue during the current interval */
- card->dynamic_slot_data.queue_stable[i] = TRUE;
- unifi_trace(card->ospriv, UDBG5, "queue stable %d\n", i);
- }
- }
- }
-
- /* Redistribute max slots */
- for (i = 0; i < UNIFI_NO_OF_TX_QS; i++)
- {
- reserved_slots = 0;
- for (q = 0; q < UNIFI_NO_OF_TX_QS; q++)
- {
- if (i != q)
- {
- reserved_slots += card->dynamic_slot_data.from_host_reserved_slots[q];
- }
- }
-
- card->dynamic_slot_data.from_host_max_slots[i] = num_data_slots - reserved_slots;
- unifi_trace(card->ospriv, UDBG5, "queue %d reserved %d Max %d\n", i,
- card->dynamic_slot_data.from_host_reserved_slots[i],
- card->dynamic_slot_data.from_host_max_slots[i]);
- }
-
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * CardClearFromHostDataSlot
- *
- * Clear a the given data slot, making it available again.
- *
- * Arguments:
- * card Pointer to Card object
- * slot Index of the signal slot to clear.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void CardClearFromHostDataSlot(card_t *card, const s16 slot)
-{
- u8 queue = card->from_host_data[slot].queue;
- const void *os_data_ptr = card->from_host_data[slot].bd.os_data_ptr;
-
- if (card->from_host_data[slot].bd.data_length == 0)
- {
- unifi_warning(card->ospriv,
- "Surprise: request to clear an already free FH data slot: %d\n",
- slot);
- return;
- }
-
- if (os_data_ptr == NULL)
- {
- unifi_warning(card->ospriv,
- "Clearing FH data slot %d: has null payload, len=%d\n",
- slot, card->from_host_data[slot].bd.data_length);
- }
-
- /* Free card->from_host_data[slot].bd.os_net_ptr here. */
- /* Mark slot as free by setting length to 0. */
- unifi_free_bulk_data(card, &card->from_host_data[slot].bd);
- if (queue < UNIFI_NO_OF_TX_QS)
- {
- if (card->dynamic_slot_data.from_host_used_slots[queue] == 0)
- {
- unifi_error(card->ospriv, "Goofed up used slots q = %d used slots = %d\n",
- queue,
- card->dynamic_slot_data.from_host_used_slots[queue]);
- }
- else
- {
- card->dynamic_slot_data.from_host_used_slots[queue]--;
- }
- card->dynamic_slot_data.packets_txed[queue]++;
- card->dynamic_slot_data.total_packets_txed++;
- if (card->dynamic_slot_data.total_packets_txed >= card->dynamic_slot_data.packets_interval)
- {
- CardReassignDynamicReservation(card);
- }
- }
-
- unifi_trace(card->ospriv, UDBG4, "CardClearFromHostDataSlot: slot %d recycled %p\n", slot, os_data_ptr);
-
-} /* CardClearFromHostDataSlot() */
-
-
-#ifdef CSR_WIFI_REQUEUE_PACKET_TO_HAL
-/*
- * ---------------------------------------------------------------------------
- * CardClearFromHostDataSlotWithoutFreeingBulkData
- *
- * Clear the given data slot with out freeing the bulk data.
- *
- * Arguments:
- * card Pointer to Card object
- * slot Index of the signal slot to clear.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void CardClearFromHostDataSlotWithoutFreeingBulkData(card_t *card, const s16 slot)
-{
- u8 queue = card->from_host_data[slot].queue;
-
- /* Initialise the from_host data slot so it can be re-used,
- * Set length field in from_host_data array to 0.
- */
- UNIFI_INIT_BULK_DATA(&card->from_host_data[slot].bd);
-
- queue = card->from_host_data[slot].queue;
-
- if (queue < UNIFI_NO_OF_TX_QS)
- {
- if (card->dynamic_slot_data.from_host_used_slots[queue] == 0)
- {
- unifi_error(card->ospriv, "Goofed up used slots q = %d used slots = %d\n",
- queue,
- card->dynamic_slot_data.from_host_used_slots[queue]);
- }
- else
- {
- card->dynamic_slot_data.from_host_used_slots[queue]--;
- }
- card->dynamic_slot_data.packets_txed[queue]++;
- card->dynamic_slot_data.total_packets_txed++;
- if (card->dynamic_slot_data.total_packets_txed >=
- card->dynamic_slot_data.packets_interval)
- {
- CardReassignDynamicReservation(card);
- }
- }
-} /* CardClearFromHostDataSlotWithoutFreeingBulkData() */
-
-
-#endif
-
-u16 CardGetDataSlotSize(card_t *card)
-{
- return card->config_data.data_slot_size;
-} /* CardGetDataSlotSize() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * CardGetFreeFromHostDataSlots
- *
- * Retrieve the number of from-host bulk data slots available.
- *
- * Arguments:
- * card Pointer to the card context struct
- *
- * Returns:
- * Number of free from-host bulk data slots.
- * ---------------------------------------------------------------------------
- */
-u16 CardGetFreeFromHostDataSlots(card_t *card)
-{
- u16 i, n = 0;
-
- /* First two slots reserved for MLME */
- for (i = 0; i < card->config_data.num_fromhost_data_slots; i++)
- {
- if (card->from_host_data[i].bd.data_length == 0)
- {
- /* Free slot */
- n++;
- }
- }
-
- return n;
-} /* CardGetFreeFromHostDataSlots() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * CardAreAllFromHostDataSlotsEmpty
- *
- * Returns the state of from-host bulk data slots.
- *
- * Arguments:
- * card Pointer to the card context struct
- *
- * Returns:
- * 1 The from-host bulk data slots are all empty (available).
- * 0 Some or all the from-host bulk data slots are in use.
- * ---------------------------------------------------------------------------
- */
-u16 CardAreAllFromHostDataSlotsEmpty(card_t *card)
-{
- u16 i;
-
- for (i = 0; i < card->config_data.num_fromhost_data_slots; i++)
- {
- if (card->from_host_data[i].bd.data_length != 0)
- {
- return 0;
- }
- }
-
- return 1;
-} /* CardGetFreeFromHostDataSlots() */
-
-
-static CsrResult unifi_identify_hw(card_t *card)
-{
-
- card->chip_id = card->sdio_if->sdioId.cardId;
- card->function = card->sdio_if->sdioId.sdioFunction;
- card->sdio_io_block_size = card->sdio_if->blockSize;
-
- /* If SDIO controller doesn't support byte mode CMD53, pad transfers to block sizes */
- card->sdio_io_block_pad = (card->sdio_if->features & CSR_SDIO_FEATURE_BYTE_MODE)?FALSE : TRUE;
-
- /*
- * Setup the chip helper so that we can access the registers (and
- * also tell what sub-type of HIP we should use).
- */
- card->helper = ChipHelper_GetVersionSdio((u8)card->chip_id);
- if (!card->helper)
- {
- unifi_error(card->ospriv, "Null ChipHelper\n");
- }
-
- unifi_info(card->ospriv, "Chip ID 0x%02X Function %u Block Size %u Name %s(%s)\n",
- card->chip_id, card->function, card->sdio_io_block_size,
- ChipHelper_MarketingName(card->helper),
- ChipHelper_FriendlyName(card->helper));
-
- return CSR_RESULT_SUCCESS;
-} /* unifi_identify_hw() */
-
-
-static CsrResult unifi_prepare_hw(card_t *card)
-{
- CsrResult r;
- CsrResult csrResult;
- enum unifi_host_state old_state = card->host_state;
-
- r = unifi_identify_hw(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to identify hw\n");
- return r;
- }
-
- unifi_trace(card->ospriv, UDBG1,
- "%s mode SDIO\n", card->sdio_io_block_pad?"Block" : "Byte");
- /*
- * Chip must be a awake or blocks that are asleep may not get
- * reset. We can only do this after we have read the chip_id.
- */
- r = unifi_set_host_state(card, UNIFI_HOST_STATE_AWAKE);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
-
- if (old_state == UNIFI_HOST_STATE_TORPID)
- {
- /* Ensure the initial clock rate is set; if a reset occurred when the chip was
- * TORPID, unifi_set_host_state() may have raised it to MAX.
- */
- csrResult = CsrSdioMaxBusClockFrequencySet(card->sdio_if, UNIFI_SDIO_CLOCK_INIT_HZ);
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
- return r;
- }
- card->sdio_clock_speed = UNIFI_SDIO_CLOCK_INIT_HZ;
- }
-
- /*
- * The WLAN function must be enabled to access MAILBOX2 and DEBUG_RST
- * registers.
- */
- csrResult = CsrSdioFunctionEnable(card->sdio_if);
- if (csrResult == CSR_SDIO_RESULT_NO_DEVICE)
- {
- return CSR_WIFI_HIP_RESULT_NO_DEVICE;
- }
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
- /* Can't enable WLAN function. Try resetting the SDIO block. */
- unifi_error(card->ospriv, "Failed to re-enable function %d.\n", card->function);
- return r;
- }
-
- /*
- * Poke some registers to make sure the PLL has started,
- * otherwise memory accesses are likely to fail.
- */
- bootstrap_chip_hw(card);
-
- /* Try to read the chip version from register. */
- r = unifi_read_chip_version(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* unifi_prepare_hw() */
-
-
-static CsrResult unifi_read_chip_version(card_t *card)
-{
- u32 gbl_chip_version;
- CsrResult r;
- u16 ver;
-
- gbl_chip_version = ChipHelper_GBL_CHIP_VERSION(card->helper);
-
- /* Try to read the chip version from register. */
- if (gbl_chip_version != 0)
- {
- r = unifi_read_direct16(card, gbl_chip_version * 2, &ver);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read GBL_CHIP_VERSION\n");
- return r;
- }
- card->chip_version = ver;
- }
- else
- {
- unifi_info(card->ospriv, "Unknown Chip ID, cannot locate GBL_CHIP_VERSION\n");
- r = CSR_RESULT_FAILURE;
- }
-
- unifi_info(card->ospriv, "Chip Version 0x%04X\n", card->chip_version);
-
- return r;
-} /* unifi_read_chip_version() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_reset_hardware
- *
- * Execute the UniFi reset sequence.
- *
- * Note: This may fail if the chip is going TORPID so retry at
- * least once.
- *
- * Arguments:
- * card - pointer to card context structure
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, CSR error otherwise.
- *
- * Notes:
- * Some platforms (e.g. Windows Vista) do not allow access to registers
- * that are necessary for a software soft reset.
- * ---------------------------------------------------------------------------
- */
-static CsrResult unifi_reset_hardware(card_t *card)
-{
- CsrResult r;
- u16 new_block_size = UNIFI_IO_BLOCK_SIZE;
- CsrResult csrResult;
-
- /* Errors returned by unifi_prepare_hw() are not critical at this point */
- r = unifi_prepare_hw(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
-
- /* First try SDIO controller reset, which may power cycle the UniFi, assert
- * its reset line, or not be implemented depending on the platform.
- */
- unifi_info(card->ospriv, "Calling CsrSdioHardReset\n");
- csrResult = CsrSdioHardReset(card->sdio_if);
- if (csrResult == CSR_RESULT_SUCCESS)
- {
- unifi_info(card->ospriv, "CsrSdioHardReset succeeded on resetting UniFi\n");
- r = unifi_prepare_hw(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "unifi_prepare_hw failed after hard reset\n");
- return r;
- }
- }
- else if (csrResult == CSR_SDIO_RESULT_NO_DEVICE)
- {
- return CSR_WIFI_HIP_RESULT_NO_DEVICE;
- }
- else
- {
- /* Falling back to software hard reset methods */
- unifi_info(card->ospriv, "Falling back to software hard reset\n");
- r = unifi_card_hard_reset(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "software hard reset failed\n");
- return r;
- }
-
- /* If we fell back to unifi_card_hard_reset() methods, chip version may
- * not have been read. (Note in the unlikely event that it is zero,
- * it will be harmlessly read again)
- */
- if (card->chip_version == 0)
- {
- r = unifi_read_chip_version(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- }
- }
-
-#ifdef CSR_WIFI_HIP_SDIO_BLOCK_SIZE
- new_block_size = CSR_WIFI_HIP_SDIO_BLOCK_SIZE;
-#endif
-
- /* After hard reset, we need to restore the SDIO block size */
- csrResult = CsrSdioBlockSizeSet(card->sdio_if, new_block_size);
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
-
- /* Warn if a different block size was achieved by the transport */
- if (card->sdio_if->blockSize != new_block_size)
- {
- unifi_info(card->ospriv,
- "Actually got block size %d\n", card->sdio_if->blockSize);
- }
-
- /* sdio_io_block_size always needs be updated from the achieved block size,
- * as it is used by the OS layer to allocate memory in unifi_net_malloc().
- * Controllers which don't support block mode (e.g. CSPI) will report a
- * block size of zero.
- */
- if (card->sdio_if->blockSize == 0)
- {
- unifi_info(card->ospriv, "Block size 0, block mode not available\n");
-
- /* Set sdio_io_block_size to 1 so that unifi_net_data_malloc() has a
- * sensible rounding value. Elsewhere padding will already be
- * disabled because the controller supports byte mode.
- */
- card->sdio_io_block_size = 1;
-
- /* Controller features must declare support for byte mode */
- if (!(card->sdio_if->features & CSR_SDIO_FEATURE_BYTE_MODE))
- {
- unifi_error(card->ospriv, "Requires byte mode\n");
- r = CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- }
- else
- {
- /* Padding will be enabled if CSR_SDIO_FEATURE_BYTE_MODE isn't set */
- card->sdio_io_block_size = card->sdio_if->blockSize;
- }
-
-
- return r;
-} /* unifi_reset_hardware() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * card_reset_method_io_enable
- *
- * Issue a hard reset to the hw writing the IO_ENABLE.
- *
- * Arguments:
- * card Pointer to Card object
- *
- * Returns:
- * 0 on success,
- * CSR_WIFI_HIP_RESULT_NO_DEVICE if the card was ejected
- * CSR_RESULT_FAILURE if an SDIO error occurred or if a response
- * was not seen in the expected time
- * ---------------------------------------------------------------------------
- */
-static CsrResult card_reset_method_io_enable(card_t *card)
-{
- CsrResult r;
- CsrResult csrResult;
-
- /*
- * This resets only function 1, so should be used in
- * preference to the method below (CSR_FUNC_EN)
- */
- unifi_trace(card->ospriv, UDBG1, "Hard reset (IO_ENABLE)\n");
-
- csrResult = CsrSdioFunctionDisable(card->sdio_if);
- if (csrResult == CSR_SDIO_RESULT_NO_DEVICE)
- {
- return CSR_WIFI_HIP_RESULT_NO_DEVICE;
- }
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
- unifi_warning(card->ospriv, "SDIO error writing IO_ENABLE: %d\n", r);
- }
- else
- {
- /* Delay here to let the reset take affect. */
- CsrThreadSleep(RESET_SETTLE_DELAY);
-
- r = card_wait_for_unifi_to_disable(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
-
- if (r == CSR_RESULT_SUCCESS)
- {
- r = card_wait_for_unifi_to_reset(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- }
- }
-
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_trace(card->ospriv, UDBG1, "Hard reset (CSR_FUNC_EN)\n");
-
- r = sdio_write_f0(card, SDIO_CSR_FUNC_EN, 0);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_warning(card->ospriv, "SDIO error writing SDIO_CSR_FUNC_EN: %d\n", r);
- return r;
- }
- else
- {
- /* Delay here to let the reset take affect. */
- CsrThreadSleep(RESET_SETTLE_DELAY);
-
- r = card_wait_for_unifi_to_reset(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- }
- }
-
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_warning(card->ospriv, "card_reset_method_io_enable failed to reset UniFi\n");
- }
-
- return r;
-} /* card_reset_method_io_enable() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * card_reset_method_dbg_reset
- *
- * Issue a hard reset to the hw writing the DBG_RESET.
- *
- * Arguments:
- * card Pointer to Card object
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success,
- * CSR_WIFI_HIP_RESULT_NO_DEVICE if the card was ejected
- * CSR_RESULT_FAILURE if an SDIO error occurred or if a response
- * was not seen in the expected time
- * ---------------------------------------------------------------------------
- */
-static CsrResult card_reset_method_dbg_reset(card_t *card)
-{
- CsrResult r;
-
- /*
- * Prepare UniFi for h/w reset
- */
- if (card->host_state == UNIFI_HOST_STATE_TORPID)
- {
- r = unifi_set_host_state(card, UNIFI_HOST_STATE_DROWSY);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to set UNIFI_HOST_STATE_DROWSY\n");
- return r;
- }
- CsrThreadSleep(5);
- }
-
- r = unifi_card_stop_processor(card, UNIFI_PROC_BOTH);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Can't stop processors\n");
- return r;
- }
-
- unifi_trace(card->ospriv, UDBG1, "Hard reset (DBG_RESET)\n");
-
- /*
- * This register write may fail. The debug reset resets
- * parts of the Function 0 sections of the chip, and
- * therefore the response cannot be sent back to the host.
- */
- r = unifi_write_direct_8_or_16(card, ChipHelper_DBG_RESET(card->helper) * 2, 1);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_warning(card->ospriv, "SDIO error writing DBG_RESET: %d\n", r);
- return r;
- }
-
- /* Delay here to let the reset take affect. */
- CsrThreadSleep(RESET_SETTLE_DELAY);
-
- r = card_wait_for_unifi_to_reset(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_warning(card->ospriv, "card_reset_method_dbg_reset failed to reset UniFi\n");
- }
-
- return r;
-} /* card_reset_method_dbg_reset() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_card_hard_reset
- *
- * Issue reset to hardware, by writing to registers on the card.
- * Power to the card is preserved.
- *
- * Arguments:
- * card Pointer to Card object
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success,
- * CSR_WIFI_HIP_RESULT_NO_DEVICE if the card was ejected
- * CSR_RESULT_FAILURE if an SDIO error occurred or if a response
- * was not seen in the expected time
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_card_hard_reset(card_t *card)
-{
- CsrResult r;
- const struct chip_helper_reset_values *init_data;
- u32 chunks;
-
- /* Clear cache of page registers */
- card->proc_select = (u32)(-1);
- card->dmem_page = (u32)(-1);
- card->pmem_page = (u32)(-1);
-
- /*
- * We need to have a valid card->helper before we use software hard reset.
- * If unifi_identify_hw() fails to get the card ID, it probably means
- * that there is no way to talk to the h/w.
- */
- r = unifi_identify_hw(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "unifi_card_hard_reset failed to identify h/w\n");
- return r;
- }
-
- /* Search for some reset code. */
- chunks = ChipHelper_HostResetSequence(card->helper, &init_data);
- if (chunks != 0)
- {
- unifi_error(card->ospriv,
- "Hard reset (Code download) is unsupported\n");
-
- return CSR_RESULT_FAILURE;
- }
-
- if (card->chip_id > SDIO_CARD_ID_UNIFI_2)
- {
- /* The HIP spec considers this a bus-specific reset.
- * This resets only function 1, so should be used in
- * preference to the method below (CSR_FUNC_EN)
- * If this method fails, it means that the f/w is probably
- * not running. In this case, try the DBG_RESET method.
- */
- r = card_reset_method_io_enable(card);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r == CSR_RESULT_SUCCESS)
- {
- return r;
- }
- }
-
- /* Software hard reset */
- r = card_reset_method_dbg_reset(card);
-
- return r;
-} /* unifi_card_hard_reset() */
-
-
-/*
- * ---------------------------------------------------------------------------
- *
- * CardGenInt
- *
- * Prod the card.
- * This function causes an internal interrupt to be raised in the
- * UniFi chip. It is used to signal the firmware that some action has
- * been completed.
- * The UniFi Host Interface asks that the value used increments for
- * debugging purposes.
- *
- * Arguments:
- * card Pointer to Card object
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success,
- * CSR_WIFI_HIP_RESULT_NO_DEVICE if the card was ejected
- * CSR_RESULT_FAILURE if an SDIO error occurred or if a response
- * was not seen in the expected time
- * ---------------------------------------------------------------------------
- */
-CsrResult CardGenInt(card_t *card)
-{
- CsrResult r;
-
- if (card->chip_id > SDIO_CARD_ID_UNIFI_2)
- {
- r = sdio_write_f0(card, SDIO_CSR_FROM_HOST_SCRATCH0,
- (u8)card->unifi_interrupt_seq);
- }
- else
- {
- r = unifi_write_direct_8_or_16(card,
- ChipHelper_SHARED_IO_INTERRUPT(card->helper) * 2,
- (u8)card->unifi_interrupt_seq);
- }
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "SDIO error writing UNIFI_SHARED_IO_INTERRUPT: %d\n", r);
- return r;
- }
-
- card->unifi_interrupt_seq++;
-
- return CSR_RESULT_SUCCESS;
-} /* CardGenInt() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * CardEnableInt
- *
- * Enable the outgoing SDIO interrupt from UniFi to the host.
- *
- * Arguments:
- * card Pointer to Card object
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success,
- * CSR_WIFI_HIP_RESULT_NO_DEVICE if the card was ejected
- * CSR_RESULT_FAILURE if an SDIO error occurred,
- * ---------------------------------------------------------------------------
- */
-CsrResult CardEnableInt(card_t *card)
-{
- CsrResult r;
- u8 int_enable;
-
- r = sdio_read_f0(card, SDIO_INT_ENABLE, &int_enable);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "SDIO error reading SDIO_INT_ENABLE\n");
- return r;
- }
-
- int_enable |= (1 << card->function) | UNIFI_SD_INT_ENABLE_IENM;
-
- r = sdio_write_f0(card, SDIO_INT_ENABLE, int_enable);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "SDIO error writing SDIO_INT_ENABLE\n");
- return r;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* CardEnableInt() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * CardDisableInt
- *
- * Disable the outgoing SDIO interrupt from UniFi to the host.
- *
- * Arguments:
- * card Pointer to Card object
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success,
- * CSR_WIFI_HIP_RESULT_NO_DEVICE if the card was ejected
- * CSR_RESULT_FAILURE if an SDIO error occurred,
- * ---------------------------------------------------------------------------
- */
-CsrResult CardDisableInt(card_t *card)
-{
- CsrResult r;
- u8 int_enable;
-
- r = sdio_read_f0(card, SDIO_INT_ENABLE, &int_enable);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "SDIO error reading SDIO_INT_ENABLE\n");
- return r;
- }
-
- int_enable &= ~(1 << card->function);
-
- r = sdio_write_f0(card, SDIO_INT_ENABLE, int_enable);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "SDIO error writing SDIO_INT_ENABLE\n");
- return r;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* CardDisableInt() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * CardPendingInt
- *
- * Determine whether UniFi is currently asserting the SDIO interrupt
- * request.
- *
- * Arguments:
- * card Pointer to Card object
- * pintr Pointer to location to write interrupt status,
- * TRUE if interrupt pending,
- * FALSE if no interrupt pending.
- * Returns:
- * CSR_RESULT_SUCCESS interrupt status read successfully
- * CSR_WIFI_HIP_RESULT_NO_DEVICE if the card was ejected
- * CSR_RESULT_FAILURE if an SDIO error occurred,
- * ---------------------------------------------------------------------------
- */
-CsrResult CardPendingInt(card_t *card, u8 *pintr)
-{
- CsrResult r;
- u8 pending;
-
- *pintr = FALSE;
-
- r = sdio_read_f0(card, SDIO_INT_PENDING, &pending);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "SDIO error reading SDIO_INT_PENDING\n");
- return r;
- }
-
- *pintr = (pending & (1 << card->function))?TRUE : FALSE;
-
- return CSR_RESULT_SUCCESS;
-} /* CardPendingInt() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * CardClearInt
- *
- * Clear the UniFi SDIO interrupt request.
- *
- * Arguments:
- * card Pointer to Card object
- *
- * Returns:
- * CSR_RESULT_SUCCESS if pending interrupt was cleared, or no pending interrupt.
- * CSR_WIFI_HIP_RESULT_NO_DEVICE if the card was ejected
- * CSR_RESULT_FAILURE if an SDIO error occurred,
- * ---------------------------------------------------------------------------
- */
-CsrResult CardClearInt(card_t *card)
-{
- CsrResult r;
- u8 intr;
-
- if (card->chip_id > SDIO_CARD_ID_UNIFI_2)
- {
- /* CardPendingInt() sets intr, if there is a pending interrupt */
- r = CardPendingInt(card, &intr);
- if (intr == FALSE)
- {
- return r;
- }
-
- r = sdio_write_f0(card, SDIO_CSR_HOST_INT_CLEAR, 1);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "SDIO error writing SDIO_CSR_HOST_INT_CLEAR\n");
- }
- }
- else
- {
- r = unifi_write_direct_8_or_16(card,
- ChipHelper_SDIO_HOST_INT(card->helper) * 2,
- 0);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "SDIO error writing UNIFI_SDIO_HOST_INT\n");
- }
- }
-
- return r;
-} /* CardClearInt() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * CardIntEnabled
- *
- * Determine whether UniFi is currently asserting the SDIO interrupt
- * request.
- *
- * Arguments:
- * card Pointer to Card object
- * enabled Pointer to location to write interrupt enable status,
- * TRUE if interrupts enabled,
- * FALSE if interupts disabled.
- *
- * Returns:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE if the card was ejected
- * CSR_RESULT_FAILURE if an SDIO error occurred,
- * ---------------------------------------------------------------------------
- */
-CsrResult CardIntEnabled(card_t *card, u8 *enabled)
-{
- CsrResult r;
- u8 int_enable;
-
- r = sdio_read_f0(card, SDIO_INT_ENABLE, &int_enable);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "SDIO error reading SDIO_INT_ENABLE\n");
- return r;
- }
-
- *enabled = (int_enable & (1 << card->function))?TRUE : FALSE;
-
- return CSR_RESULT_SUCCESS;
-} /* CardIntEnabled() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * CardWriteBulkData
- * Allocate slot in the pending bulkdata arrays and assign it to a signal's
- * bulkdata reference. The slot is then ready for UniFi's bulkdata commands
- * to transfer the data to/from the host.
- *
- * Arguments:
- * card Pointer to Card object
- * csptr Pending signal pointer, including bulkdata ref
- * queue Traffic queue that this signal is using
- *
- * Returns:
- * CSR_RESULT_SUCCESS if a free slot was assigned
- * CSR_RESULT_FAILURE if no slot was available
- * ---------------------------------------------------------------------------
- */
-CsrResult CardWriteBulkData(card_t *card, card_signal_t *csptr, unifi_TrafficQueue queue)
-{
- u16 i, slots[UNIFI_MAX_DATA_REFERENCES], j = 0;
- u8 *packed_sigptr, num_slots_required = 0;
- bulk_data_desc_t *bulkdata = csptr->bulkdata;
- s16 h, nslots;
-
- /* Count the number of slots required */
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++)
- {
- if (bulkdata[i].data_length != 0)
- {
- num_slots_required++;
- }
- }
-
- /* Get the slot numbers */
- if (num_slots_required != 0)
- {
- /* Last 2 slots for MLME */
- if (queue == UNIFI_TRAFFIC_Q_MLME)
- {
- h = card->config_data.num_fromhost_data_slots - UNIFI_RESERVED_COMMAND_SLOTS;
- for (i = 0; i < card->config_data.num_fromhost_data_slots; i++)
- {
- if (card->from_host_data[h].bd.data_length == 0)
- {
- /* Free data slot, claim it */
- slots[j++] = h;
- if (j == num_slots_required)
- {
- break;
- }
- }
-
- if (++h >= card->config_data.num_fromhost_data_slots)
- {
- h = 0;
- }
- }
- }
- else
- {
- if (card->dynamic_slot_data.from_host_used_slots[queue]
- < card->dynamic_slot_data.from_host_max_slots[queue])
- {
- /* Data commands get a free slot only after a few checks */
- nslots = card->config_data.num_fromhost_data_slots - UNIFI_RESERVED_COMMAND_SLOTS;
-
- h = card->from_host_data_head;
-
- for (i = 0; i < nslots; i++)
- {
- if (card->from_host_data[h].bd.data_length == 0)
- {
- /* Free data slot, claim it */
- slots[j++] = h;
- if (j == num_slots_required)
- {
- break;
- }
- }
-
- if (++h >= nslots)
- {
- h = 0;
- }
- }
- card->from_host_data_head = h;
- }
- }
-
- /* Required number of slots are not available, bail out */
- if (j != num_slots_required)
- {
- unifi_trace(card->ospriv, UDBG5, "CardWriteBulkData: didn't find free slot/s\n");
-
- /* If we haven't already reached the stable state we can ask for reservation */
- if ((queue != UNIFI_TRAFFIC_Q_MLME) && (card->dynamic_slot_data.queue_stable[queue] == FALSE))
- {
- CardCheckDynamicReservation(card, queue);
- }
-
- for (i = 0; i < card->config_data.num_fromhost_data_slots; i++)
- {
- unifi_trace(card->ospriv, UDBG5, "fh data slot %d: %d\n", i, card->from_host_data[i].bd.data_length);
- }
- return CSR_RESULT_FAILURE;
- }
- }
-
- packed_sigptr = csptr->sigbuf;
-
- /* Fill in the slots with data */
- j = 0;
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++)
- {
- if (bulkdata[i].data_length == 0)
- {
- /* Zero-out the DATAREF in the signal */
- SET_PACKED_DATAREF_SLOT(packed_sigptr, i, 0);
- SET_PACKED_DATAREF_LEN(packed_sigptr, i, 0);
- }
- else
- {
- /*
- * Fill in the slot number in the SIGNAL structure but
- * preserve the offset already in there
- */
- SET_PACKED_DATAREF_SLOT(packed_sigptr, i, slots[j] | (((u16)packed_sigptr[SIZEOF_SIGNAL_HEADER + (i * SIZEOF_DATAREF) + 1]) << 8));
- SET_PACKED_DATAREF_LEN(packed_sigptr, i, bulkdata[i].data_length);
-
- /* Do not copy the data, just store the information to them */
- card->from_host_data[slots[j]].bd.os_data_ptr = bulkdata[i].os_data_ptr;
- card->from_host_data[slots[j]].bd.os_net_buf_ptr = bulkdata[i].os_net_buf_ptr;
- card->from_host_data[slots[j]].bd.data_length = bulkdata[i].data_length;
- card->from_host_data[slots[j]].bd.net_buf_length = bulkdata[i].net_buf_length;
- card->from_host_data[slots[j]].queue = queue;
-
- unifi_trace(card->ospriv, UDBG4, "CardWriteBulkData sig=0x%x, fh slot %d = %p\n",
- GET_SIGNAL_ID(packed_sigptr), i, bulkdata[i].os_data_ptr);
-
- /* Sanity-check that the bulk data desc being assigned to the slot
- * actually has a payload.
- */
- if (!bulkdata[i].os_data_ptr)
- {
- unifi_error(card->ospriv, "Assign null os_data_ptr (len=%d) fh slot %d, i=%d, q=%d, sig=0x%x",
- bulkdata[i].data_length, slots[j], i, queue, GET_SIGNAL_ID(packed_sigptr));
- }
-
- j++;
- if (queue < UNIFI_NO_OF_TX_QS)
- {
- card->dynamic_slot_data.from_host_used_slots[queue]++;
- }
- }
- }
-
- return CSR_RESULT_SUCCESS;
-} /* CardWriteBulkData() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * card_find_data_slot
- *
- * Dereference references to bulk data slots into pointers to real data.
- *
- * Arguments:
- * card Pointer to the card struct.
- * slot Slot number from a signal structure
- *
- * Returns:
- * Pointer to entry in bulk_data_slot array.
- * ---------------------------------------------------------------------------
- */
-bulk_data_desc_t* card_find_data_slot(card_t *card, s16 slot)
-{
- s16 sn;
- bulk_data_desc_t *bd;
-
- sn = slot & 0x7FFF;
-
- /* ?? check sanity of slot number ?? */
-
- if (slot & SLOT_DIR_TO_HOST)
- {
- bd = &card->to_host_data[sn];
- }
- else
- {
- bd = &card->from_host_data[sn].bd;
- }
-
- return bd;
-} /* card_find_data_slot() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * firmware_present_in_flash
- *
- * Probe for external Flash that looks like it might contain firmware.
- *
- * If Flash is not present, reads always return 0x0008.
- * If Flash is present, but empty, reads return 0xFFFF.
- * Anything else is considered to be firmware.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * CSR_RESULT_SUCCESS firmware is present in ROM or flash
- * CSR_WIFI_HIP_RESULT_NOT_FOUND firmware is not present in ROM or flash
- * CSR_WIFI_HIP_RESULT_NO_DEVICE if the card was ejected
- * CSR_RESULT_FAILURE if an SDIO error occurred
- * ---------------------------------------------------------------------------
- */
-static CsrResult firmware_present_in_flash(card_t *card)
-{
- CsrResult r;
- u16 m1, m5;
-
- if (ChipHelper_HasRom(card->helper))
- {
- return CSR_RESULT_SUCCESS;
- }
- if (!ChipHelper_HasFlash(card->helper))
- {
- return CSR_WIFI_HIP_RESULT_NOT_FOUND;
- }
-
- /*
- * Examine the Flash locations that are the power-on default reset
- * vectors of the XAP processors.
- * These are words 1 and 5 in Flash.
- */
- r = unifi_card_read16(card, UNIFI_MAKE_GP(EXT_FLASH, 2), &m1);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- r = unifi_card_read16(card, UNIFI_MAKE_GP(EXT_FLASH, 10), &m5);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- /* Check for uninitialised/missing flash */
- if ((m1 == 0x0008) || (m1 == 0xFFFF) ||
- (m1 == 0x0004) || (m5 == 0x0004) ||
- (m5 == 0x0008) || (m5 == 0xFFFF))
- {
- return CSR_WIFI_HIP_RESULT_NOT_FOUND;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* firmware_present_in_flash() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * bootstrap_chip_hw
- *
- * Perform chip specific magic to "Get It Working" TM. This will
- * increase speed of PLLs in analogue and maybe enable some
- * on-chip regulators.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static void bootstrap_chip_hw(card_t *card)
-{
- const struct chip_helper_init_values *vals;
- u32 i, len;
- void *sdio = card->sdio_if;
- CsrResult csrResult;
-
- len = ChipHelper_ClockStartupSequence(card->helper, &vals);
- if (len != 0)
- {
- for (i = 0; i < len; i++)
- {
- csrResult = CsrSdioWrite16(sdio, vals[i].addr * 2, vals[i].value);
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_warning(card->ospriv, "Failed to write bootstrap value %d\n", i);
- /* Might not be fatal */
- }
-
- CsrThreadSleep(1);
- }
- }
-} /* bootstrap_chip_hw() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_card_stop_processor
- *
- * Stop the UniFi XAP processors.
- *
- * Arguments:
- * card Pointer to card struct
- * which One of UNIFI_PROC_MAC, UNIFI_PROC_PHY, UNIFI_PROC_BOTH
- *
- * Returns:
- * CSR_RESULT_SUCCESS if successful, or CSR error code
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_card_stop_processor(card_t *card, enum unifi_dbg_processors_select which)
-{
- CsrResult r = CSR_RESULT_SUCCESS;
- u8 status;
- s16 retry = 100;
-
- while (retry--)
- {
- /* Select both XAPs */
- r = unifi_set_proc_select(card, which);
- if (r != CSR_RESULT_SUCCESS)
- {
- break;
- }
-
- /* Stop processors */
- r = unifi_write_direct16(card, ChipHelper_DBG_EMU_CMD(card->helper) * 2, 2);
- if (r != CSR_RESULT_SUCCESS)
- {
- break;
- }
-
- /* Read status */
- r = unifi_read_direct_8_or_16(card,
- ChipHelper_DBG_HOST_STOP_STATUS(card->helper) * 2,
- &status);
- if (r != CSR_RESULT_SUCCESS)
- {
- break;
- }
-
- if ((status & 1) == 1)
- {
- /* Success! */
- return CSR_RESULT_SUCCESS;
- }
-
- /* Processors didn't stop, try again */
- }
-
- if (r != CSR_RESULT_SUCCESS)
- {
- /* An SDIO error occurred */
- unifi_error(card->ospriv, "Failed to stop processors: SDIO error\n");
- }
- else
- {
- /* If we reach here, we didn't the status in time. */
- unifi_error(card->ospriv, "Failed to stop processors: timeout waiting for stopped status\n");
- r = CSR_RESULT_FAILURE;
- }
-
- return r;
-} /* unifi_card_stop_processor() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * card_start_processor
- *
- * Start the UniFi XAP processors.
- *
- * Arguments:
- * card Pointer to card struct
- * which One of UNIFI_PROC_MAC, UNIFI_PROC_PHY, UNIFI_PROC_BOTH
- *
- * Returns:
- * CSR_RESULT_SUCCESS or CSR error code
- * ---------------------------------------------------------------------------
- */
-CsrResult card_start_processor(card_t *card, enum unifi_dbg_processors_select which)
-{
- CsrResult r;
-
- /* Select both XAPs */
- r = unifi_set_proc_select(card, which);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "unifi_set_proc_select failed: %d.\n", r);
- return r;
- }
-
-
- r = unifi_write_direct_8_or_16(card,
- ChipHelper_DBG_EMU_CMD(card->helper) * 2, 8);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- r = unifi_write_direct_8_or_16(card,
- ChipHelper_DBG_EMU_CMD(card->helper) * 2, 0);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* card_start_processor() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_set_interrupt_mode
- *
- * Configure the interrupt processing mode used by the HIP
- *
- * Arguments:
- * card Pointer to card struct
- * mode Interrupt mode to apply
- *
- * Returns:
- * None
- * ---------------------------------------------------------------------------
- */
-void unifi_set_interrupt_mode(card_t *card, u32 mode)
-{
- if (mode == CSR_WIFI_INTMODE_RUN_BH_ONCE)
- {
- unifi_info(card->ospriv, "Scheduled interrupt mode");
- }
- card->intmode = mode;
-} /* unifi_set_interrupt_mode() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_start_processors
- *
- * Start all UniFi XAP processors.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, CSR error code on error
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_start_processors(card_t *card)
-{
- return card_start_processor(card, UNIFI_PROC_BOTH);
-} /* unifi_start_processors() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_request_max_sdio_clock
- *
- * Requests that the maximum SDIO clock rate is set at the next suitable
- * opportunity (e.g. when the BH next runs, so as not to interfere with
- * any current operation).
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * None
- * ---------------------------------------------------------------------------
- */
-void unifi_request_max_sdio_clock(card_t *card)
-{
- card->request_max_clock = 1;
-} /* unifi_request_max_sdio_clock() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_set_host_state
- *
- * Set the host deep-sleep state.
- *
- * If transitioning to TORPID, the SDIO driver will be notified
- * that the SD bus will be unused (idle) and conversely, when
- * transitioning from TORPID that the bus will be used (active).
- *
- * Arguments:
- * card Pointer to card struct
- * state New deep-sleep state.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success
- * CSR_WIFI_HIP_RESULT_NO_DEVICE if the card was ejected
- * CSR_RESULT_FAILURE if an SDIO error occurred
- *
- * Notes:
- * We need to reduce the SDIO clock speed before trying to wake up the
- * chip. Actually, in the implementation below we reduce the clock speed
- * not just before we try to wake up the chip, but when we put the chip to
- * deep sleep. This means that if the f/w wakes up on its' own, we waste
- * a reduce/increace cycle. However, trying to eliminate this overhead is
- * proved difficult, as the current state machine in the HIP lib does at
- * least a CMD52 to disable the interrupts before we configure the host
- * state.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_set_host_state(card_t *card, enum unifi_host_state state)
-{
- CsrResult r = CSR_RESULT_SUCCESS;
- CsrResult csrResult;
- static const char *const states[] = {
- "AWAKE", "DROWSY", "TORPID"
- };
- static const u8 state_csr_host_wakeup[] = {
- 1, 3, 0
- };
- static const u8 state_io_abort[] = {
- 0, 2, 3
- };
-
- unifi_trace(card->ospriv, UDBG4, "State %s to %s\n",
- states[card->host_state], states[state]);
-
- if (card->host_state == UNIFI_HOST_STATE_TORPID)
- {
- CsrSdioFunctionActive(card->sdio_if);
- }
-
- /* Write the new state to UniFi. */
- if (card->chip_id > SDIO_CARD_ID_UNIFI_2)
- {
- r = sdio_write_f0(card, SDIO_CSR_HOST_WAKEUP,
- (u8)((card->function << 4) | state_csr_host_wakeup[state]));
- }
- else
- {
- r = sdio_write_f0(card, SDIO_IO_ABORT, state_io_abort[state]);
- }
-
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write UniFi deep sleep state\n");
- }
- else
- {
- /*
- * If the chip was in state TORPID then we can now increase
- * the maximum bus clock speed.
- */
- if (card->host_state == UNIFI_HOST_STATE_TORPID)
- {
- csrResult = CsrSdioMaxBusClockFrequencySet(card->sdio_if,
- UNIFI_SDIO_CLOCK_MAX_HZ);
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
- /* Non-fatal error */
- if (r != CSR_RESULT_SUCCESS && r != CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- unifi_warning(card->ospriv,
- "Failed to increase the SDIO clock speed\n");
- }
- else
- {
- card->sdio_clock_speed = UNIFI_SDIO_CLOCK_MAX_HZ;
- }
- }
-
- /*
- * Cache the current state in the card structure to avoid
- * unnecessary SDIO reads.
- */
- card->host_state = state;
-
- if (state == UNIFI_HOST_STATE_TORPID)
- {
- /*
- * If the chip is now in state TORPID then we must now decrease
- * the maximum bus clock speed.
- */
- csrResult = CsrSdioMaxBusClockFrequencySet(card->sdio_if,
- UNIFI_SDIO_CLOCK_SAFE_HZ);
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
- if (r != CSR_RESULT_SUCCESS && r != CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- unifi_warning(card->ospriv,
- "Failed to decrease the SDIO clock speed\n");
- }
- else
- {
- card->sdio_clock_speed = UNIFI_SDIO_CLOCK_SAFE_HZ;
- }
- CsrSdioFunctionIdle(card->sdio_if);
- }
- }
-
- return r;
-} /* unifi_set_host_state() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_card_info
- *
- * Update the card information data structure
- *
- * Arguments:
- * card Pointer to card struct
- * card_info Pointer to info structure to update
- *
- * Returns:
- * None
- * ---------------------------------------------------------------------------
- */
-void unifi_card_info(card_t *card, card_info_t *card_info)
-{
- card_info->chip_id = card->chip_id;
- card_info->chip_version = card->chip_version;
- card_info->fw_build = card->build_id;
- card_info->fw_hip_version = card->config_data.version;
- card_info->sdio_block_size = card->sdio_io_block_size;
-} /* unifi_card_info() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_check_io_status
- *
- * Check UniFi for spontaneous reset and pending interrupt.
- *
- * Arguments:
- * card Pointer to card struct
- * status Pointer to location to write chip status:
- * 0 if UniFi is running, and no interrupt pending
- * 1 if UniFi has spontaneously reset
- * 2 if there is a pending interrupt
- * Returns:
- * CSR_RESULT_SUCCESS if OK, or CSR error
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_check_io_status(card_t *card, s32 *status)
-{
- u8 io_en;
- CsrResult r;
- u8 pending;
-
- *status = 0;
-
- r = sdio_read_f0(card, SDIO_IO_ENABLE, &io_en);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read SDIO_IO_ENABLE to check for spontaneous reset\n");
- return r;
- }
-
- if ((io_en & (1 << card->function)) == 0)
- {
- s32 fw_count;
- *status = 1;
- unifi_error(card->ospriv, "UniFi has spontaneously reset.\n");
-
- /*
- * These reads are very likely to fail. We want to know if the function is really
- * disabled or the SDIO driver just returns rubbish.
- */
- fw_count = unifi_read_shared_count(card, card->sdio_ctrl_addr + 4);
- if (fw_count < 0)
- {
- unifi_error(card->ospriv, "Failed to read to-host sig written count\n");
- }
- else
- {
- unifi_error(card->ospriv, "thsw: %u (driver thinks is %u)\n",
- fw_count, card->to_host_signals_w);
- }
- fw_count = unifi_read_shared_count(card, card->sdio_ctrl_addr + 2);
- if (fw_count < 0)
- {
- unifi_error(card->ospriv, "Failed to read from-host sig read count\n");
- }
- else
- {
- unifi_error(card->ospriv, "fhsr: %u (driver thinks is %u)\n",
- fw_count, card->from_host_signals_r);
- }
-
- return r;
- }
-
- unifi_info(card->ospriv, "UniFi function %d is enabled.\n", card->function);
-
- /* See if we missed an SDIO interrupt */
- r = CardPendingInt(card, &pending);
- if (pending)
- {
- unifi_error(card->ospriv, "There is an unhandled pending interrupt.\n");
- *status = 2;
- return r;
- }
-
- return r;
-} /* unifi_check_io_status() */
-
-
-void unifi_get_hip_qos_info(card_t *card, unifi_HipQosInfo *hipqosinfo)
-{
- s32 count_fhr;
- s16 t;
- u32 occupied_fh;
-
- q_t *sigq;
- u16 nslots, i;
-
- memset(hipqosinfo, 0, sizeof(unifi_HipQosInfo));
-
- nslots = card->config_data.num_fromhost_data_slots;
-
- for (i = 0; i < nslots; i++)
- {
- if (card->from_host_data[i].bd.data_length == 0)
- {
- hipqosinfo->free_fh_bulkdata_slots++;
- }
- }
-
- for (i = 0; i < UNIFI_NO_OF_TX_QS; i++)
- {
- sigq = &card->fh_traffic_queue[i];
- t = sigq->q_wr_ptr - sigq->q_rd_ptr;
- if (t < 0)
- {
- t += sigq->q_length;
- }
- hipqosinfo->free_fh_sig_queue_slots[i] = (sigq->q_length - t) - 1;
- }
-
- count_fhr = unifi_read_shared_count(card, card->sdio_ctrl_addr + 2);
- if (count_fhr < 0)
- {
- unifi_error(card->ospriv, "Failed to read from-host sig read count - %d\n", count_fhr);
- hipqosinfo->free_fh_fw_slots = 0xfa;
- return;
- }
-
- occupied_fh = (card->from_host_signals_w - count_fhr) % 128;
-
- hipqosinfo->free_fh_fw_slots = (u16)(card->config_data.num_fromhost_sig_frags - occupied_fh);
-}
-
-
-
-CsrResult ConvertCsrSdioToCsrHipResult(card_t *card, CsrResult csrResult)
-{
- CsrResult r = CSR_RESULT_FAILURE;
-
- switch (csrResult)
- {
- case CSR_RESULT_SUCCESS:
- r = CSR_RESULT_SUCCESS;
- break;
- /* Timeout errors */
- case CSR_SDIO_RESULT_TIMEOUT:
- /* Integrity errors */
- case CSR_SDIO_RESULT_CRC_ERROR:
- r = CSR_RESULT_FAILURE;
- break;
- case CSR_SDIO_RESULT_NO_DEVICE:
- r = CSR_WIFI_HIP_RESULT_NO_DEVICE;
- break;
- case CSR_SDIO_RESULT_INVALID_VALUE:
- r = CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- break;
- case CSR_RESULT_FAILURE:
- r = CSR_RESULT_FAILURE;
- break;
- default:
- unifi_warning(card->ospriv, "Unrecognised csrResult error code: %d\n", csrResult);
- break;
- }
-
- return r;
-} /* ConvertCsrSdioToCsrHipResult() */
-
-
diff --git a/drivers/staging/csr/csr_wifi_hip_card_sdio.h b/drivers/staging/csr/csr_wifi_hip_card_sdio.h
deleted file mode 100644
index a9b9ec427320..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_card_sdio.h
+++ /dev/null
@@ -1,694 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- *
- * FILE: csr_wifi_hip_card_sdio.h
- *
- * PURPOSE:
- * Internal header for Card API for SDIO.
- * ---------------------------------------------------------------------------
- */
-#ifndef __CARD_SDIO_H__
-#define __CARD_SDIO_H__
-
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_unifi_udi.h"
-#include "csr_wifi_hip_unifihw.h"
-#include "csr_wifi_hip_unifiversion.h"
-#ifndef CSR_WIFI_HIP_TA_DISABLE
-#include "csr_wifi_hip_ta_sampling.h"
-#endif
-#include "csr_wifi_hip_xbv.h"
-#include "csr_wifi_hip_chiphelper.h"
-
-
-/*
- *
- * Configuration items.
- * Which of these should go in a platform unifi_config.h file?
- *
- */
-
-/*
- * When the traffic queues contain more signals than there is space for on
- * UniFi, a limiting algorithm comes into play.
- * If a traffic queue has enough slots free to buffer more traffic from the
- * network stack, then the following check is applied. The number of free
- * slots is RESUME_XMIT_THRESHOLD.
- */
-#define RESUME_XMIT_THRESHOLD 4
-
-
-/*
- * When reading signals from UniFi, the host processes pending all signals
- * and then acknowledges them together in a single write to update the
- * to-host-chunks-read location.
- * When there is more than one bulk data transfer (e.g. one received data
- * packet and a request for the payload data of a transmitted packet), the
- * update can be delayed significantly. This ties up resources on chip.
- *
- * To remedy this problem, to-host-chunks-read is updated after processing
- * a signal if TO_HOST_FLUSH_THRESHOLD bytes of bulk data have been
- * transferred since the last update.
- */
-#define TO_HOST_FLUSH_THRESHOLD (500 * 5)
-
-
-/* SDIO Card Common Control Registers */
-#define SDIO_CCCR_SDIO_REVISION (0x00)
-#define SDIO_SD_SPEC_REVISION (0x01)
-#define SDIO_IO_ENABLE (0x02)
-#define SDIO_IO_READY (0x03)
-#define SDIO_INT_ENABLE (0x04)
-#define SDIO_INT_PENDING (0x05)
-#define SDIO_IO_ABORT (0x06)
-#define SDIO_BUS_IFACE_CONTROL (0x07)
-#define SDIO_CARD_CAPABILOTY (0x08)
-#define SDIO_COMMON_CIS_POINTER (0x09)
-#define SDIO_BUS_SUSPEND (0x0C)
-#define SDIO_FUNCTION_SELECT (0x0D)
-#define SDIO_EXEC_FLAGS (0x0E)
-#define SDIO_READY_FLAGS (0x0F)
-#define SDIO_FN0_BLOCK_SIZE (0x10)
-#define SDIO_POWER_CONTROL (0x12)
-#define SDIO_VENDOR_START (0xF0)
-
-#define SDIO_CSR_HOST_WAKEUP (0xf0)
-#define SDIO_CSR_HOST_INT_CLEAR (0xf1)
-#define SDIO_CSR_FROM_HOST_SCRATCH0 (0xf2)
-#define SDIO_CSR_FROM_HOST_SCRATCH1 (0xf3)
-#define SDIO_CSR_TO_HOST_SCRATCH0 (0xf4)
-#define SDIO_CSR_TO_HOST_SCRATCH1 (0xf5)
-#define SDIO_CSR_FUNC_EN (0xf6)
-#define SDIO_CSR_CSPI_MODE (0xf7)
-#define SDIO_CSR_CSPI_STATUS (0xf8)
-#define SDIO_CSR_CSPI_PADDING (0xf9)
-
-
-#define UNIFI_SD_INT_ENABLE_IENM 0x0001 /* Master INT Enable */
-
-#ifdef CSR_PRE_ALLOC_NET_DATA
-#define BULK_DATA_PRE_ALLOC_NUM 16
-#endif
-
-/*
- * Structure to hold configuration information read from UniFi.
- */
-typedef struct
-{
- /*
- * The version of the SDIO signal queues and bulk data pools
- * configuration structure. The MSB is the major version number, used to
- * indicate incompatible changes. The LSB gives the minor revision number,
- * used to indicate changes that maintain backwards compatibility.
- */
- u16 version;
-
- /*
- * offset from the start of the shared data memory to the SD IO
- * control structure.
- */
- u16 sdio_ctrl_offset;
-
- /* Buffer handle of the from-host signal queue */
- u16 fromhost_sigbuf_handle;
-
- /* Buffer handle of the to-host signal queue */
- u16 tohost_sigbuf_handle;
-
- /*
- * Maximum number of signal primitive or bulk data command fragments that may be
- * pending in the to-hw signal queue.
- */
- u16 num_fromhost_sig_frags;
-
- /*
- * Number of signal primitive or bulk data command fragments that must be pending
- * in the to-host signal queue before the host will generate an interrupt
- * to indicate that it has read a signal. This will usually be the total
- * capacity of the to-host signal buffer less the size of the largest signal
- * primitive divided by the signal primitive fragment size, but may be set
- * to 1 to request interrupts every time that the host read a signal.
- * Note that the hw may place more signals in the to-host signal queue
- * than indicated by this field.
- */
- u16 num_tohost_sig_frags;
-
- /*
- * Number of to-hw bulk data slots. Slots are numbered from 0 (zero) to
- * one less than the value in this field
- */
- u16 num_fromhost_data_slots;
-
- /*
- * Number of frm-hw bulk data slots. Slots are numbered from 0 (zero) to
- * one less than the value in this field
- */
- u16 num_tohost_data_slots;
-
- /*
- * Size of the bulk data slots (2 octets)
- * The size of the bulk data slots in octets. This will usually be
- * the size of the largest MSDU. The value should always be even.
- */
- u16 data_slot_size;
-
- /*
- * Indicates that the host has finished the initialisation sequence.
- * Initialised to 0x0000 by the firmware, and set to 0x0001 by us.
- */
- u16 initialised;
-
- /* Added by protocol version 0x0001 */
- u32 overlay_size;
-
- /* Added by protocol version 0x0300 */
- u16 data_slot_round;
- u16 sig_frag_size;
-
- /* Added by protocol version 0x0500 */
- u16 tohost_signal_padding;
-} sdio_config_data_t;
-
-/*
- * These values may change with versions of the Host Interface Protocol.
- */
-/*
- * Size of config info block pointed to by the CSR_SLT_SDIO_SLOT_CONFIG
- * entry in the f/w symbol table
- */
-#define SDIO_CONFIG_DATA_SIZE 30
-
-/* Offset of the INIT flag in the config info block. */
-#define SDIO_INIT_FLAG_OFFSET 0x12
-#define SDIO_TO_HOST_SIG_PADDING_OFFSET 0x1C
-
-
-/* Structure for a bulk data transfer command */
-typedef struct
-{
- u16 cmd_and_len; /* bits 12-15 cmd, bits 0-11 len */
- u16 data_slot; /* slot number, perhaps OR'd with SLOT_DIR_TO_HOST */
- u16 offset;
- u16 buffer_handle;
-} bulk_data_cmd_t;
-
-
-/* Bulk Data signal command values */
-#define SDIO_CMD_SIGNAL 0x00
-#define SDIO_CMD_TO_HOST_TRANSFER 0x01
-#define SDIO_CMD_TO_HOST_TRANSFER_ACK 0x02 /*deprecated*/
-#define SDIO_CMD_FROM_HOST_TRANSFER 0x03
-#define SDIO_CMD_FROM_HOST_TRANSFER_ACK 0x04 /*deprecated*/
-#define SDIO_CMD_CLEAR_SLOT 0x05
-#define SDIO_CMD_OVERLAY_TRANSFER 0x06
-#define SDIO_CMD_OVERLAY_TRANSFER_ACK 0x07 /*deprecated*/
-#define SDIO_CMD_FROM_HOST_AND_CLEAR 0x08
-#define SDIO_CMD_PADDING 0x0f
-
-#define SLOT_DIR_TO_HOST 0x8000
-
-
-/* Initialise bulkdata slot
- * params:
- * bulk_data_desc_t *bulk_data_slot
- */
-#define UNIFI_INIT_BULK_DATA(bulk_data_slot) \
- { \
- (bulk_data_slot)->os_data_ptr = NULL; \
- (bulk_data_slot)->data_length = 0; \
- (bulk_data_slot)->os_net_buf_ptr = NULL; \
- (bulk_data_slot)->net_buf_length = 0; \
- }
-
-/*
- * Structure to contain a SIGNAL datagram.
- * This is used to build signal queues between the main driver and the
- * i/o thread.
- * The fields are:
- * sigbuf Contains the HIP signal is wire-format (i.e. packed,
- * little-endian)
- * bulkdata Contains a copy of any associated bulk data
- * signal_length The size of the signal in the sigbuf
- */
-typedef struct card_signal
-{
- u8 sigbuf[UNIFI_PACKED_SIGBUF_SIZE];
-
- /* Length of the SIGNAL inside sigbuf */
- u16 signal_length;
-
- bulk_data_desc_t bulkdata[UNIFI_MAX_DATA_REFERENCES];
-} card_signal_t;
-
-
-/*
- * Control structure for a generic ring buffer.
- */
-#define UNIFI_QUEUE_NAME_MAX_LENGTH 16
-typedef struct
-{
- card_signal_t *q_body;
-
- /* Num elements in queue (capacity is one less than this!) */
- u16 q_length;
-
- u16 q_wr_ptr;
- u16 q_rd_ptr;
-
- char name[UNIFI_QUEUE_NAME_MAX_LENGTH];
-} q_t;
-
-
-#define UNIFI_RESERVED_COMMAND_SLOTS 2
-
-/* Considering approx 500 us per packet giving 0.5 secs */
-#define UNIFI_PACKETS_INTERVAL 1000
-
-/*
- * Dynamic slot reservation for QoS
- */
-typedef struct
-{
- u16 from_host_used_slots[UNIFI_NO_OF_TX_QS];
- u16 from_host_max_slots[UNIFI_NO_OF_TX_QS];
- u16 from_host_reserved_slots[UNIFI_NO_OF_TX_QS];
-
- /* Parameters to determine if a queue was active.
- If number of packets sent is greater than the threshold
- for the queue, the queue is considered active and no
- re reservation is done, it is important not to keep this
- value too low */
- /* Packets sent during this interval */
- u16 packets_txed[UNIFI_NO_OF_TX_QS];
- u16 total_packets_txed;
-
- /* Number of packets to see if slots need to be reassigned */
- u16 packets_interval;
-
- /* Once a queue reaches a stable state, avoid processing */
- u8 queue_stable[UNIFI_NO_OF_TX_QS];
-} card_dynamic_slot_t;
-
-
-/* These are type-safe and don't write incorrect values to the
- * structure. */
-
-/* Return queue slots used count
- * params:
- * const q_t *q
- * returns:
- * u16
- */
-#define CSR_WIFI_HIP_Q_SLOTS_USED(q) \
- (((q)->q_wr_ptr - (q)->q_rd_ptr < 0)? \
- ((q)->q_wr_ptr - (q)->q_rd_ptr + (q)->q_length) : ((q)->q_wr_ptr - (q)->q_rd_ptr))
-
-/* Return queue slots free count
- * params:
- * const q_t *q
- * returns:
- * u16
- */
-#define CSR_WIFI_HIP_Q_SLOTS_FREE(q) \
- ((q)->q_length - CSR_WIFI_HIP_Q_SLOTS_USED((q)) - 1)
-
-/* Return slot signal data pointer
- * params:
- * const q_t *q
- * u16 slot
- * returns:
- * card_signal_t *
- */
-#define CSR_WIFI_HIP_Q_SLOT_DATA(q, slot) \
- ((q)->q_body + slot)
-
-/* Return queue next read slot
- * params:
- * const q_t *q
- * returns:
- * u16 slot offset
- */
-#define CSR_WIFI_HIP_Q_NEXT_R_SLOT(q) \
- ((q)->q_rd_ptr)
-
-/* Return queue next write slot
- * params:
- * const q_t *q
- * returns:
- * u16 slot offset
- */
-#define CSR_WIFI_HIP_Q_NEXT_W_SLOT(q) \
- ((q)->q_wr_ptr)
-
-/* Return updated queue pointer wrapped around its length
- * params:
- * const q_t *q
- * u16 x amount to add to queue pointer
- * returns:
- * u16 wrapped queue pointer
- */
-#define CSR_WIFI_HIP_Q_WRAP(q, x) \
- ((((x) >= (q)->q_length)?((x) % (q)->q_length) : (x)))
-
-/* Advance queue read pointer
- * params:
- * const q_t *q
- */
-#define CSR_WIFI_HIP_Q_INC_R(q) \
- ((q)->q_rd_ptr = CSR_WIFI_HIP_Q_WRAP((q), (q)->q_rd_ptr + 1))
-
-/* Advance queue write pointer
- * params:
- * const q_t *q
- */
-#define CSR_WIFI_HIP_Q_INC_W(q) \
- ((q)->q_wr_ptr = CSR_WIFI_HIP_Q_WRAP((q), (q)->q_wr_ptr + 1))
-
-enum unifi_host_state
-{
- UNIFI_HOST_STATE_AWAKE = 0,
- UNIFI_HOST_STATE_DROWSY = 1,
- UNIFI_HOST_STATE_TORPID = 2
-};
-
-typedef struct
-{
- bulk_data_desc_t bd;
- unifi_TrafficQueue queue; /* Used for dynamic slot reservation */
-} slot_desc_t;
-
-/*
- * Structure describing a UniFi SDIO card.
- */
-struct card
-{
- /*
- * Back pointer for the higher level OS code. This is passed as
- * an argument to callbacks (e.g. for received data and indications).
- */
- void *ospriv;
-
- /*
- * mapping of HIP slot to MA-PACKET.req host tag, the
- * array is indexed by slot numbers and each index stores
- * information of the last host tag it was used for
- */
- u32 *fh_slot_host_tag_record;
-
-
- /* Info read from Symbol Table during probe */
- u32 build_id;
- char build_id_string[128];
-
- /* Retrieve from SDIO driver. */
- u16 chip_id;
-
- /* Read from GBL_CHIP_VERSION. */
- u16 chip_version;
-
- /* From the SDIO driver (probably 1) */
- u8 function;
-
- /* This is sused to get the register addresses and things. */
- ChipDescript *helper;
-
- /*
- * Bit mask of PIOs for the loader to waggle during download.
- * We assume these are connected to LEDs. The main firmware gets
- * the mask from a MIB entry.
- */
- s32 loader_led_mask;
-
- /*
- * Support for flow control. When the from-host queue of signals
- * is full, we ask the host upper layer to stop sending packets. When
- * the queue drains we tell it that it can send packets again.
- * We use this flag to remember the current state.
- */
-#define card_is_tx_q_paused(card, q) (card->tx_q_paused_flag[q])
-#define card_tx_q_unpause(card, q) (card->tx_q_paused_flag[q] = 0)
-#define card_tx_q_pause(card, q) (card->tx_q_paused_flag[q] = 1)
-
- u16 tx_q_paused_flag[UNIFI_TRAFFIC_Q_MAX + 1 + UNIFI_NO_OF_TX_QS]; /* defensive more than big enough */
-
- /* UDI callback for logging UniFi interactions */
- udi_func_t udi_hook;
-
- u8 bh_reason_host;
- u8 bh_reason_unifi;
-
- /* SDIO clock speed request from OS layer */
- u8 request_max_clock;
-
- /* Last SDIO clock frequency set */
- u32 sdio_clock_speed;
-
- /*
- * Current host state (copy of value in IOABORT register and
- * spinlock to protect it.
- */
- enum unifi_host_state host_state;
-
- enum unifi_low_power_mode low_power_mode;
- enum unifi_periodic_wake_mode periodic_wake_mode;
-
- /*
- * Ring buffer of signal structs for a queue of data packets from
- * the host.
- * The queue is empty when fh_data_q_num_rd == fh_data_q_num_wr.
- * To add a packet to the queue, copy it to index given by
- * (fh_data_q_num_wr%UNIFI_SOFT_Q_LENGTH) and advance fh_data_q_num_wr.
- * To take a packet from the queue, copy data from index given by
- * (fh_data_q_num_rd%UNIFI_SOFT_Q_LENGTH) and advance fh_data_q_num_rd.
- * fh_data_q_num_rd and fh_data_q_num_rd are both modulo 256.
- */
- card_signal_t fh_command_q_body[UNIFI_SOFT_COMMAND_Q_LENGTH];
- q_t fh_command_queue;
-
- card_signal_t fh_traffic_q_body[UNIFI_NO_OF_TX_QS][UNIFI_SOFT_TRAFFIC_Q_LENGTH];
- q_t fh_traffic_queue[UNIFI_NO_OF_TX_QS];
-
- /*
- * Signal counts from UniFi SDIO Control Data Structure.
- * These are cached and synchronised with the UniFi before and after
- * a batch of operations.
- *
- * These are the modulo-256 count of signals written to or read from UniFi
- * The value is incremented for every signal.
- */
- s32 from_host_signals_w;
- s32 from_host_signals_r;
- s32 to_host_signals_r;
- s32 to_host_signals_w;
-
-
- /* Should specify buffer size as a number of signals */
- /*
- * Enough for 10 th and 10 fh data slots:
- * 1 * 10 * 8 = 80
- * 2 * 10 * 8 = 160
- */
-#define UNIFI_FH_BUF_SIZE 1024
- struct sigbuf
- {
- u8 *buf; /* buffer area */
- u8 *ptr; /* current pos */
- u16 count; /* signal count */
- u16 bufsize;
- } fh_buffer;
- struct sigbuf th_buffer;
-
-
- /*
- * Field to use for the incrementing value to write to the UniFi
- * SHARED_IO_INTERRUPT register.
- * Flag to say we need to generate an interrupt at end of processing.
- */
- u32 unifi_interrupt_seq;
- u8 generate_interrupt;
-
-
- /* Pointers to the bulk data slots */
- slot_desc_t *from_host_data;
- bulk_data_desc_t *to_host_data;
-
-
- /*
- * Index of the next (hopefully) free data slot.
- * This is an optimisation that starts searching at a more likely point
- * than the beginning.
- */
- s16 from_host_data_head;
-
- /* Dynamic slot allocation for queues */
- card_dynamic_slot_t dynamic_slot_data;
-
- /*
- * SDIO specific fields
- */
-
- /* Interface pointer for the SDIO library */
- CsrSdioFunction *sdio_if;
-
- /* Copy of config_data struct from the card */
- sdio_config_data_t config_data;
-
- /* SDIO address of the Initialised flag and Control Data struct */
- u32 init_flag_addr;
- u32 sdio_ctrl_addr;
-
- /* The last value written to the Shared Data Memory Page register */
- u32 proc_select;
- u32 dmem_page;
- u32 pmem_page;
-
- /* SDIO traffic counters limited to 32 bits for Synergy compatibility */
- u32 sdio_bytes_read;
- u32 sdio_bytes_written;
-
- u8 memory_resources_allocated;
-
- /* UniFi SDIO I/O Block size. */
- u16 sdio_io_block_size;
-
- /* Pad transfer sizes to SDIO block boundaries */
- u8 sdio_io_block_pad;
-
- /* Read from the XBV */
- struct FWOV fwov;
-
-#ifndef CSR_WIFI_HIP_TA_DISABLE
- /* TA sampling */
- ta_data_t ta_sampling;
-#endif
-
- /* Auto-coredump */
- s16 request_coredump_on_reset; /* request coredump on next reset */
- struct coredump_buf *dump_buf; /* root node */
- struct coredump_buf *dump_next_write; /* node to fill at next dump */
- struct coredump_buf *dump_cur_read; /* valid node to read, or NULL */
-
-#ifdef CSR_WIFI_HIP_DATA_PLANE_PROFILE
- struct cmd_profile
- {
- u32 cmd52_count;
- u32 cmd53_count;
- u32 tx_count;
- u32 tx_cfm_count;
- u32 rx_count;
- u32 bh_count;
- u32 process_count;
- u32 protocol_count;
-
- u32 cmd52_f0_r_count;
- u32 cmd52_f0_w_count;
- u32 cmd52_r8or16_count;
- u32 cmd52_w8or16_count;
- u32 cmd52_r16_count;
- u32 cmd52_w16_count;
- u32 cmd52_r32_count;
-
- u32 sdio_cmd_signal;
- u32 sdio_cmd_clear_slot;
- u32 sdio_cmd_to_host;
- u32 sdio_cmd_from_host;
- u32 sdio_cmd_from_host_and_clear;
- } hip_prof;
- struct cmd_profile cmd_prof;
-#endif
-
- /* Interrupt processing mode flags */
- u32 intmode;
-
-#ifdef UNIFI_DEBUG
- u8 lsb;
-#endif
-
- /* Historic firmware panic codes */
- u32 panic_data_phy_addr;
- u32 panic_data_mac_addr;
- u16 last_phy_panic_code;
- u16 last_phy_panic_arg;
- u16 last_mac_panic_code;
- u16 last_mac_panic_arg;
-#ifdef CSR_PRE_ALLOC_NET_DATA
- bulk_data_desc_t bulk_data_desc_list[BULK_DATA_PRE_ALLOC_NUM];
- u16 prealloc_netdata_r;
- u16 prealloc_netdata_w;
-#endif
-}; /* struct card */
-
-
-/* Reset types */
-enum unifi_reset_type
-{
- UNIFI_COLD_RESET = 1,
- UNIFI_WARM_RESET = 2
-};
-
-/*
- * unifi_set_host_state() implements signalling for waking UniFi from
- * deep sleep. The host indicates to UniFi that it is in one of three states:
- * Torpid - host has nothing to send, UniFi can go to sleep.
- * Drowsy - host has data to send to UniFi. UniFi will respond with an
- * SDIO interrupt. When hosts responds it moves to Awake.
- * Awake - host has data to transfer, UniFi must stay awake.
- * When host has finished, it moves to Torpid.
- */
-CsrResult unifi_set_host_state(card_t *card, enum unifi_host_state state);
-
-
-CsrResult unifi_set_proc_select(card_t *card, enum unifi_dbg_processors_select select);
-s32 card_read_signal_counts(card_t *card);
-bulk_data_desc_t* card_find_data_slot(card_t *card, s16 slot);
-
-
-CsrResult unifi_read32(card_t *card, u32 unifi_addr, u32 *pdata);
-CsrResult unifi_readnz(card_t *card, u32 unifi_addr,
- void *pdata, u16 len);
-s32 unifi_read_shared_count(card_t *card, u32 addr);
-
-CsrResult unifi_writen(card_t *card, u32 unifi_addr, void *pdata, u16 len);
-
-CsrResult unifi_bulk_rw(card_t *card, u32 handle,
- void *pdata, u32 len, s16 direction);
-CsrResult unifi_bulk_rw_noretry(card_t *card, u32 handle,
- void *pdata, u32 len, s16 direction);
-#define UNIFI_SDIO_READ 0
-#define UNIFI_SDIO_WRITE 1
-
-CsrResult unifi_read_8_or_16(card_t *card, u32 unifi_addr, u8 *pdata);
-CsrResult unifi_write_8_or_16(card_t *card, u32 unifi_addr, u8 data);
-CsrResult unifi_read_direct_8_or_16(card_t *card, u32 addr, u8 *pdata);
-CsrResult unifi_write_direct_8_or_16(card_t *card, u32 addr, u8 data);
-
-CsrResult unifi_read_direct16(card_t *card, u32 addr, u16 *pdata);
-CsrResult unifi_read_direct32(card_t *card, u32 addr, u32 *pdata);
-CsrResult unifi_read_directn(card_t *card, u32 addr, void *pdata, u16 len);
-
-CsrResult unifi_write_direct16(card_t *card, u32 addr, u16 data);
-CsrResult unifi_write_directn(card_t *card, u32 addr, void *pdata, u16 len);
-
-CsrResult sdio_read_f0(card_t *card, u32 addr, u8 *pdata);
-CsrResult sdio_write_f0(card_t *card, u32 addr, u8 data);
-
-void unifi_read_panic(card_t *card);
-#ifdef CSR_PRE_ALLOC_NET_DATA
-void prealloc_netdata_free(card_t *card);
-CsrResult prealloc_netdata_alloc(card_t *card);
-#endif
-/* For diagnostic use */
-void dump(void *mem, u16 len);
-void dump16(void *mem, u16 len);
-
-#endif /* __CARD_SDIO_H__ */
diff --git a/drivers/staging/csr/csr_wifi_hip_card_sdio_intr.c b/drivers/staging/csr/csr_wifi_hip_card_sdio_intr.c
deleted file mode 100644
index cfe186e07071..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_card_sdio_intr.c
+++ /dev/null
@@ -1,2595 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- * FILE: csr_wifi_hip_card_sdio_intr.c
- *
- * PURPOSE:
- * Interrupt processing for the UniFi SDIO driver.
- *
- * We may need another signal queue of responses to UniFi to hold
- * bulk data commands generated by read_to_host_signals().
- *
- * ---------------------------------------------------------------------------
- */
-#undef CSR_WIFI_HIP_NOISY
-
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_conversions.h"
-#include "csr_wifi_hip_card.h"
-#include "csr_wifi_hip_xbv.h"
-
-
-/*
- * If the SDIO link is idle for this time (in milliseconds),
- * signal UniFi to go into Deep Sleep.
- * Valid return value of unifi_bh().
- */
-#define UNIFI_DEFAULT_HOST_IDLE_TIMEOUT 5
-/*
- * If the UniFi has not woken up for this time (in milliseconds),
- * signal the bottom half to take action.
- * Valid return value of unifi_bh().
- */
-#define UNIFI_DEFAULT_WAKE_TIMEOUT 1000
-
-
-static CsrResult process_bh(card_t *card);
-static CsrResult handle_host_protocol(card_t *card, u8 *processed_something);
-
-static CsrResult flush_fh_buffer(card_t *card);
-
-static CsrResult check_fh_sig_slots(card_t *card, u16 needed, s32 *space);
-
-static CsrResult read_to_host_signals(card_t *card, s32 *processed);
-static CsrResult process_to_host_signals(card_t *card, s32 *processed);
-
-static CsrResult process_bulk_data_command(card_t *card,
- const u8 *cmdptr,
- s16 cmd, u16 len);
-static CsrResult process_clear_slot_command(card_t *card,
- const u8 *cmdptr);
-static CsrResult process_fh_cmd_queue(card_t *card, s32 *processed);
-static CsrResult process_fh_traffic_queue(card_t *card, s32 *processed);
-static void restart_packet_flow(card_t *card);
-static CsrResult process_clock_request(card_t *card);
-
-#ifdef CSR_WIFI_HIP_NOISY
-s16 dump_fh_buf = 0;
-#endif /* CSR_WIFI_HIP_NOISY */
-
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-
-/*
- * The unifi_debug_output buffer can be used to debug the HIP behaviour offline
- * i.e. without using the tracing functions that change the timing.
- *
- * Call unifi_debug_log_to_buf() with printf arguments to store a string into
- * unifi_debug_output. When unifi_debug_buf_dump() is called, the contents of the
- * buffer are dumped with dump_str() which has to be implemented in the
- * OS layer, during the porting exercise. The offset printed, holds the
- * offset where the last character is (always a zero).
- *
- */
-
-#define UNIFI_DEBUG_GBUFFER_SIZE 8192
-static char unifi_debug_output[UNIFI_DEBUG_GBUFFER_SIZE];
-static char *unifi_dbgbuf_ptr = unifi_debug_output;
-static char *unifi_dbgbuf_start = unifi_debug_output;
-
-static void append_char(char c)
-{
- /* write char and advance pointer */
- *unifi_dbgbuf_ptr++ = c;
- /* wrap pointer at end of buffer */
- if ((unifi_dbgbuf_ptr - unifi_debug_output) >= UNIFI_DEBUG_GBUFFER_SIZE)
- {
- unifi_dbgbuf_ptr = unifi_debug_output;
- }
-} /* append_char() */
-
-
-void unifi_debug_string_to_buf(const char *str)
-{
- const char *p = str;
- while (*p)
- {
- append_char(*p);
- p++;
- }
- /* Update start-of-buffer pointer */
- unifi_dbgbuf_start = unifi_dbgbuf_ptr + 1;
- if ((unifi_dbgbuf_start - unifi_debug_output) >= UNIFI_DEBUG_GBUFFER_SIZE)
- {
- unifi_dbgbuf_start = unifi_debug_output;
- }
-}
-
-
-void unifi_debug_log_to_buf(const char *fmt, ...)
-{
-#define DEBUG_BUFFER_SIZE 80
- static char s[DEBUG_BUFFER_SIZE];
- va_list args;
-
- va_start(args, fmt);
- vsnprintf(s, DEBUG_BUFFER_SIZE, fmt, args);
- va_end(args);
-
- unifi_debug_string_to_buf(s);
-} /* unifi_debug_log_to_buf() */
-
-
-/* Convert signed 32 bit (or less) integer to string */
-static void CsrUInt16ToHex(u16 number, char *str)
-{
- u16 index;
- u16 currentValue;
-
- for (index = 0; index < 4; index++)
- {
- currentValue = (u16) (number & 0x000F);
- number >>= 4;
- str[3 - index] = (char) (currentValue > 9 ? currentValue + 55 : currentValue + '0');
- }
- str[4] = '\0';
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_debug_hex_to_buf
- *
- * puts the contents of the passed buffer into the debug buffer as a hex string
- *
- * Arguments:
- * buff buffer to print as hex
- * length number of chars to print
- *
- * Returns:
- * None.
- *
- * ---------------------------------------------------------------------------
- */
-void unifi_debug_hex_to_buf(const char *buff, u16 length)
-{
- char s[5];
- u16 i;
-
- for (i = 0; i < length; i = i + 2)
- {
- CsrUInt16ToHex(*((u16 *)(buff + i)), s);
- unifi_debug_string_to_buf(s);
- }
-}
-
-
-void unifi_debug_buf_dump(void)
-{
- s32 offset = unifi_dbgbuf_ptr - unifi_debug_output;
-
- unifi_error(NULL, "HIP debug buffer offset=%d\n", offset);
- dump_str(unifi_debug_output + offset, UNIFI_DEBUG_GBUFFER_SIZE - offset);
- dump_str(unifi_debug_output, offset);
-} /* unifi_debug_buf_dump() */
-
-
-#endif /* CSR_WIFI_HIP_DEBUG_OFFLINE */
-
-#ifdef CSR_PRE_ALLOC_NET_DATA
-#define NETDATA_PRE_ALLOC_BUF_SIZE 8000
-
-void prealloc_netdata_free(card_t *card)
-{
- unifi_warning(card->ospriv, "prealloc_netdata_free: IN: w=%d r=%d\n", card->prealloc_netdata_w, card->prealloc_netdata_r);
-
- while (card->bulk_data_desc_list[card->prealloc_netdata_r].data_length != 0)
- {
- unifi_warning(card->ospriv, "prealloc_netdata_free: r=%d\n", card->prealloc_netdata_r);
-
- unifi_net_data_free(card->ospriv, &card->bulk_data_desc_list[card->prealloc_netdata_r]);
- card->prealloc_netdata_r++;
- card->prealloc_netdata_r %= BULK_DATA_PRE_ALLOC_NUM;
- }
- card->prealloc_netdata_r = card->prealloc_netdata_w = 0;
-
- unifi_warning(card->ospriv, "prealloc_netdata_free: OUT: w=%d r=%d\n", card->prealloc_netdata_w, card->prealloc_netdata_r);
-}
-
-
-CsrResult prealloc_netdata_alloc(card_t *card)
-{
- CsrResult r;
-
- unifi_trace(card->ospriv, UDBG5, "prealloc_netdata_alloc: IN: w=%d r=%d\n", card->prealloc_netdata_w, card->prealloc_netdata_r);
-
- while (card->bulk_data_desc_list[card->prealloc_netdata_w].data_length == 0)
- {
- r = unifi_net_data_malloc(card->ospriv, &card->bulk_data_desc_list[card->prealloc_netdata_w], NETDATA_PRE_ALLOC_BUF_SIZE);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "prealloc_netdata_alloc: Failed to allocate t-h bulk data\n");
- return CSR_RESULT_FAILURE;
- }
- card->prealloc_netdata_w++;
- card->prealloc_netdata_w %= BULK_DATA_PRE_ALLOC_NUM;
- }
- unifi_trace(card->ospriv, UDBG5, "prealloc_netdata_alloc: OUT: w=%d r=%d\n", card->prealloc_netdata_w, card->prealloc_netdata_r);
-
- return CSR_RESULT_SUCCESS;
-}
-
-
-static CsrResult prealloc_netdata_get(card_t *card, bulk_data_desc_t *bulk_data_slot, u32 size)
-{
- CsrResult r;
-
- unifi_trace(card->ospriv, UDBG5, "prealloc_netdata_get: IN: w=%d r=%d\n", card->prealloc_netdata_w, card->prealloc_netdata_r);
-
- if (card->bulk_data_desc_list[card->prealloc_netdata_r].data_length == 0)
- {
- unifi_error(card->ospriv, "prealloc_netdata_get: data_length = 0\n");
- }
-
- if ((size > NETDATA_PRE_ALLOC_BUF_SIZE) || (card->bulk_data_desc_list[card->prealloc_netdata_r].data_length == 0))
- {
- unifi_warning(card->ospriv, "prealloc_netdata_get: Calling net_data_malloc\n");
-
- r = unifi_net_data_malloc(card->ospriv, bulk_data_slot, size);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "prealloc_netdata_get: Failed to allocate t-h bulk data\n");
- return CSR_RESULT_FAILURE;
- }
- return CSR_RESULT_SUCCESS;
- }
-
- *bulk_data_slot = card->bulk_data_desc_list[card->prealloc_netdata_r];
- card->bulk_data_desc_list[card->prealloc_netdata_r].os_data_ptr = NULL;
- card->bulk_data_desc_list[card->prealloc_netdata_r].os_net_buf_ptr = NULL;
- card->bulk_data_desc_list[card->prealloc_netdata_r].net_buf_length = 0;
- card->bulk_data_desc_list[card->prealloc_netdata_r].data_length = 0;
-
- card->prealloc_netdata_r++;
- card->prealloc_netdata_r %= BULK_DATA_PRE_ALLOC_NUM;
-
- unifi_trace(card->ospriv, UDBG5, "prealloc_netdata_get: OUT: w=%d r=%d\n", card->prealloc_netdata_w, card->prealloc_netdata_r);
-
- return CSR_RESULT_SUCCESS;
-}
-
-
-#endif
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_sdio_interrupt_handler
- *
- * This function should be called by the OS-dependent code to handle
- * an SDIO interrupt from the UniFi.
- *
- * Arguments:
- * card Pointer to card context structure.
- *
- * Returns:
- * None.
- *
- * Notes: This function may be called in DRS context. In this case,
- * tracing with the unifi_trace(), etc, is not allowed.
- * ---------------------------------------------------------------------------
- */
-void unifi_sdio_interrupt_handler(card_t *card)
-{
- /*
- * Set the flag to say reason for waking was SDIO interrupt.
- * Then ask the OS layer to run the unifi_bh to give attention to the UniFi.
- */
- card->bh_reason_unifi = 1;
- (void)unifi_run_bh(card->ospriv);
-} /* sdio_interrupt_handler() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_configure_low_power_mode
- *
- * This function should be called by the OS-dependent when
- * the deep sleep signaling needs to be enabled or disabled.
- *
- * Arguments:
- * card Pointer to card context structure.
- * low_power_mode Disable/Enable the deep sleep signaling
- * periodic_wake_mode UniFi wakes host periodically.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success or a CSR error code.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_configure_low_power_mode(card_t *card,
- enum unifi_low_power_mode low_power_mode,
- enum unifi_periodic_wake_mode periodic_wake_mode)
-{
- card->low_power_mode = low_power_mode;
- card->periodic_wake_mode = periodic_wake_mode;
-
- unifi_trace(card->ospriv, UDBG1,
- "unifi_configure_low_power_mode: new mode = %s, wake_host = %s\n",
- (low_power_mode == UNIFI_LOW_POWER_DISABLED)?"disabled" : "enabled",
- (periodic_wake_mode == UNIFI_PERIODIC_WAKE_HOST_DISABLED)?"FALSE" : "TRUE");
-
- (void)unifi_run_bh(card->ospriv);
- return CSR_RESULT_SUCCESS;
-} /* unifi_configure_low_power_mode() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_force_low_power_mode
- *
- * This function should be called by the OS-dependent when
- * UniFi needs to be set to the low power mode (e.g. on suspend)
- *
- * Arguments:
- * card Pointer to card context structure.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success or a CSR error code.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_force_low_power_mode(card_t *card)
-{
- if (card->low_power_mode == UNIFI_LOW_POWER_DISABLED)
- {
- unifi_error(card->ospriv, "Attempt to set mode to TORPID when lower power mode is disabled\n");
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- return unifi_set_host_state(card, UNIFI_HOST_STATE_TORPID);
-} /* unifi_force_low_power_mode() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_bh
- *
- * This function should be called by the OS-dependent code when
- * host and/or UniFi has requested an exchange of messages.
- *
- * Arguments:
- * card Pointer to card context structure.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success or a CSR error code.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_bh(card_t *card, u32 *remaining)
-{
- CsrResult r;
- CsrResult csrResult;
- u8 pending;
- s32 iostate, j;
- const enum unifi_low_power_mode low_power_mode = card->low_power_mode;
- u16 data_slots_used = 0;
-
-
- /* Process request to raise the maximum SDIO clock */
- r = process_clock_request(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Error setting maximum SDIO clock\n");
- goto exit;
- }
-
- /*
- * Why was the BH thread woken?
- * If it was an SDIO interrupt, UniFi is awake and we need to process it.
- * If it was a host process queueing data, then we need to awaken UniFi.
- *
- * Priority of flags is top down.
- *
- * ----------------------------------------------------------+
- * \state| AWAKE | DROWSY | TORPID |
- * flag\ | | | |
- * ---------+--------------+----------------+----------------|
- * | do the host | go to AWAKE and| go to AWAKE and|
- * unifi | protocol | do the host | do the host |
- * | | protocol | protocol |
- * ---------+--------------+----------------+----------------|
- * | do the host | | |
- * host | protocol | do nothing | go to DROWSY |
- * | | | |
- * ---------+--------------+----------------+----------------|
- * | | | should not |
- * timeout | go to TORPID | error, unifi | occur |
- * | | didn't wake up | do nothing |
- * ----------------------------------------------------------+
- *
- * Note that if we end up in the AWAKE state we always do the host protocol.
- */
-
- do
- {
- /*
- * When the host state is set to DROWSY, then we can not disable the
- * interrupts as UniFi can generate an interrupt even when the INT_ENABLE
- * register has the interrupts disabled. This interrupt will be lost.
- */
- if (card->host_state == UNIFI_HOST_STATE_DROWSY || card->host_state == UNIFI_HOST_STATE_TORPID)
- {
- u8 reason_unifi;
-
- /*
- * An interrupt may occur while or after we cache the reason.
- * This interrupt will cause the unifi_bh() to be scheduled again.
- * Any interrupt that has happened before the register is read
- * and is considered spurious has to acknowledged.
- */
- reason_unifi = card->bh_reason_unifi;
-
- /*
- * If an interrupt is received, check if it was a real one,
- * set the host state to AWAKE and run the BH.
- */
- r = CardPendingInt(card, &pending);
- if (r != CSR_RESULT_SUCCESS)
- {
- goto exit;
- }
-
- if (pending)
- {
- unifi_trace(card->ospriv, UDBG5,
- "UNIFI_HOST_STATE_%s: Set state to AWAKE.\n",
- (card->host_state == UNIFI_HOST_STATE_TORPID)?"TORPID" : "DROWSY");
-
- r = unifi_set_host_state(card, UNIFI_HOST_STATE_AWAKE);
- if (r == CSR_RESULT_SUCCESS)
- {
- (*remaining) = 0;
- break;
- }
- }
- else if (reason_unifi)
- {
- CsrSdioInterruptAcknowledge(card->sdio_if);
- }
-
- /*
- * If an chip is in TORPID, and the host wants to wake it up,
- * set the host state to DROWSY and wait for the wake-up interrupt.
- */
- if ((card->host_state == UNIFI_HOST_STATE_TORPID) && card->bh_reason_host)
- {
- r = unifi_set_host_state(card, UNIFI_HOST_STATE_DROWSY);
- if (r == CSR_RESULT_SUCCESS)
- {
- /*
- * set the timeout value to UNIFI_DEFAULT_WAKE_TIMEOUT
- * to capture a wake error.
- */
- card->bh_reason_host = 0;
- (*remaining) = UNIFI_DEFAULT_WAKE_TIMEOUT;
- return CSR_RESULT_SUCCESS;
- }
-
- goto exit;
- }
-
- /*
- * If the chip is in DROWSY, and the timeout expires,
- * we need to reset the chip. This should never occur.
- * (If it does, check that the calling thread set "remaining"
- * according to the time remaining when unifi_bh() was called).
- */
- if ((card->host_state == UNIFI_HOST_STATE_DROWSY) && ((*remaining) == 0))
- {
- unifi_error(card->ospriv, "UniFi did not wake up on time...\n");
-
- /*
- * Check if Function1 has gone away or
- * if we missed an SDIO interrupt.
- */
- r = unifi_check_io_status(card, &iostate);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- goto exit;
- }
- /* Need to reset and reboot */
- return CSR_RESULT_FAILURE;
- }
- }
- else
- {
- if (card->bh_reason_unifi || card->bh_reason_host)
- {
- break;
- }
-
- if (((*remaining) == 0) && (low_power_mode == UNIFI_LOW_POWER_ENABLED))
- {
- r = unifi_set_host_state(card, UNIFI_HOST_STATE_TORPID);
- if (r == CSR_RESULT_SUCCESS)
- {
- (*remaining) = 0;
- return CSR_RESULT_SUCCESS;
- }
-
- goto exit;
- }
- }
-
- /* No need to run the host protocol */
- return CSR_RESULT_SUCCESS;
- } while (0);
-
-
- /* Disable the SDIO interrupts while doing SDIO ops */
- csrResult = CsrSdioInterruptDisable(card->sdio_if);
- if (csrResult == CSR_SDIO_RESULT_NO_DEVICE)
- {
- r = CSR_WIFI_HIP_RESULT_NO_DEVICE;
- goto exit;
- }
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
- unifi_error(card->ospriv, "Failed to disable SDIO interrupts. unifi_bh queues error.\n");
- goto exit;
- }
-
- /* Now that the interrupts are disabled, ack the interrupt */
- CsrSdioInterruptAcknowledge(card->sdio_if);
-
- /* Run the HIP */
- r = process_bh(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- goto exit;
- }
-
- /*
- * If host is now idle, schedule a timer for the delay before we
- * let UniFi go into deep sleep.
- * If the timer goes off, we will move to TORPID state.
- * If UniFi raises an interrupt in the meantime, we will cancel
- * the timer and start a new one when we become idle.
- */
- for (j = 0; j < UNIFI_NO_OF_TX_QS; j++)
- {
- data_slots_used += CSR_WIFI_HIP_Q_SLOTS_USED(&card->fh_traffic_queue[j]);
- }
-
- if ((low_power_mode == UNIFI_LOW_POWER_ENABLED) && (data_slots_used == 0))
- {
-#ifndef CSR_WIFI_HIP_TA_DISABLE
- if (card->ta_sampling.traffic_type != CSR_WIFI_ROUTER_CTRL_TRAFFIC_TYPE_PERIODIC)
- {
-#endif
- /* return the UNIFI_DEFAULT_HOST_IDLE_TIMEOUT, so we can go to sleep. */
- unifi_trace(card->ospriv, UDBG5,
- "Traffic is not periodic, set timer for TORPID.\n");
- (*remaining) = UNIFI_DEFAULT_HOST_IDLE_TIMEOUT;
-#ifndef CSR_WIFI_HIP_TA_DISABLE
- }
- else
- {
- unifi_trace(card->ospriv, UDBG5,
- "Traffic is periodic, set unifi to TORPID immediately.\n");
- if (CardAreAllFromHostDataSlotsEmpty(card) == 1)
- {
- r = unifi_set_host_state(card, UNIFI_HOST_STATE_TORPID);
- if (r != CSR_RESULT_SUCCESS)
- {
- goto exit;
- }
- }
- }
-#endif
- }
-
- csrResult = CsrSdioInterruptEnable(card->sdio_if);
- if (csrResult == CSR_SDIO_RESULT_NO_DEVICE)
- {
- r = CSR_WIFI_HIP_RESULT_NO_DEVICE;
- }
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
- unifi_error(card->ospriv, "Failed to enable SDIO interrupt\n");
- }
-
-exit:
-
- unifi_trace(card->ospriv, UDBG4, "New state=%d\n", card->host_state);
-
- if (r != CSR_RESULT_SUCCESS)
- {
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- unifi_debug_buf_dump();
-#endif
- /* If an interrupt has been raised, ack it here */
- if (card->bh_reason_unifi)
- {
- CsrSdioInterruptAcknowledge(card->sdio_if);
- }
-
- unifi_error(card->ospriv,
- "unifi_bh: state=%d %c, clock=%dkHz, interrupt=%d host=%d, power_save=%s\n",
- card->host_state,
- (card->host_state == UNIFI_HOST_STATE_AWAKE)?'A' : (card->host_state == UNIFI_HOST_STATE_DROWSY)?'D' : 'T',
- card->sdio_clock_speed / 1000,
- card->bh_reason_unifi, card->bh_reason_host,
- (low_power_mode == UNIFI_LOW_POWER_DISABLED)?"disabled" : "enabled");
-
- /* Try to capture firmware panic codes */
- (void)unifi_capture_panic(card);
-
- /* Ask for a mini-coredump when the driver has reset UniFi */
- (void)unifi_coredump_request_at_next_reset(card, 1);
- }
-
- return r;
-} /* unifi_bh() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * process_clock_request
- *
- * Handle request from the OS layer to increase the SDIO clock speed.
- * The fast clock is limited until the firmware has indicated that it has
- * completed initialisation to the OS layer.
- *
- * Arguments:
- * card Pointer to card context structure.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success or CSR error code.
- * ---------------------------------------------------------------------------
- */
-static CsrResult process_clock_request(card_t *card)
-{
- CsrResult r = CSR_RESULT_SUCCESS;
- CsrResult csrResult;
-
- if (!card->request_max_clock)
- {
- return CSR_RESULT_SUCCESS; /* No pending request */
- }
-
- /*
- * The SDIO clock speed request from the OS layer is only acted upon if
- * the UniFi is awake. If it was in any other state, the clock speed will
- * transition through SAFE to MAX while the host wakes it up, and the
- * final speed reached will be UNIFI_SDIO_CLOCK_MAX_HZ.
- * This assumes that the SME never requests low power mode while the f/w
- * initialisation takes place.
- */
- if (card->host_state == UNIFI_HOST_STATE_AWAKE)
- {
- unifi_trace(card->ospriv, UDBG1, "Set SDIO max clock\n");
- csrResult = CsrSdioMaxBusClockFrequencySet(card->sdio_if, UNIFI_SDIO_CLOCK_MAX_HZ);
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
- }
- else
- {
- card->sdio_clock_speed = UNIFI_SDIO_CLOCK_MAX_HZ; /* log the new freq */
- }
- }
- else
- {
- unifi_trace(card->ospriv, UDBG1, "Will set SDIO max clock after wakeup\n");
- }
-
- /* Cancel the request now that it has been acted upon, or is about to be
- * by the wakeup mechanism
- */
- card->request_max_clock = 0;
-
- return r;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * process_bh
- *
- * Exchange messages with UniFi
- *
- * Arguments:
- * card Pointer to card context structure.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success or CSR error code.
- * ---------------------------------------------------------------------------
- */
-static CsrResult process_bh(card_t *card)
-{
- CsrResult r;
- u8 more;
- more = FALSE;
-
- /* Process the reasons (interrupt, signals) */
- do
- {
- /*
- * Run in a while loop, to save clearing the interrupts
- * every time around the outside loop.
- */
- do
- {
- /* If configured to run the HIP just once, skip first loop */
- if (card->intmode & CSR_WIFI_INTMODE_RUN_BH_ONCE)
- {
- break;
- }
-
- r = handle_host_protocol(card, &more);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- unifi_debug_log_to_buf("c52=%d c53=%d tx=%d txc=%d rx=%d s=%d t=%d fc=%d\n",
- card->cmd_prof.cmd52_count,
- card->cmd_prof.cmd53_count,
- card->cmd_prof.tx_count,
- card->cmd_prof.tx_cfm_count,
- card->cmd_prof.rx_count,
- card->cmd_prof.sdio_cmd_signal,
- card->cmd_prof.sdio_cmd_to_host,
- card->cmd_prof.sdio_cmd_from_host_and_clear
- );
-
- card->cmd_prof.cmd52_count = card->cmd_prof.cmd53_count = 0;
- card->cmd_prof.tx_count = card->cmd_prof.tx_cfm_count = card->cmd_prof.rx_count = 0;
-
- card->cmd_prof.cmd52_f0_r_count = 0;
- card->cmd_prof.cmd52_f0_w_count = 0;
- card->cmd_prof.cmd52_r8or16_count = 0;
- card->cmd_prof.cmd52_w8or16_count = 0;
- card->cmd_prof.cmd52_r16_count = 0;
- card->cmd_prof.cmd52_w16_count = 0;
- card->cmd_prof.cmd52_r32_count = 0;
-
- card->cmd_prof.sdio_cmd_signal = 0;
- card->cmd_prof.sdio_cmd_clear_slot = 0;
- card->cmd_prof.sdio_cmd_to_host = 0;
- card->cmd_prof.sdio_cmd_from_host = 0;
- card->cmd_prof.sdio_cmd_from_host_and_clear = 0;
-#endif
-
-
- } while (more || card->bh_reason_unifi || card->bh_reason_host);
-
- /* Acknowledge the h/w interrupt */
- r = CardClearInt(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to acknowledge interrupt.\n");
- return r;
- }
-
- /*
- * UniFi may have tried to generate an interrupt during the
- * CardClearInt() was running. So, we need to run the host
- * protocol again, to check if there are any pending requests.
- */
- r = handle_host_protocol(card, &more);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- unifi_debug_log_to_buf("c52=%d c53=%d tx=%d txc=%d rx=%d s=%d t=%d fc=%d\n",
- card->cmd_prof.cmd52_count,
- card->cmd_prof.cmd53_count,
- card->cmd_prof.tx_count,
- card->cmd_prof.tx_cfm_count,
- card->cmd_prof.rx_count,
- card->cmd_prof.sdio_cmd_signal,
- card->cmd_prof.sdio_cmd_to_host,
- card->cmd_prof.sdio_cmd_from_host_and_clear
- );
-
- card->cmd_prof.cmd52_count = card->cmd_prof.cmd53_count = 0;
- card->cmd_prof.tx_count = card->cmd_prof.tx_cfm_count = card->cmd_prof.rx_count = 0;
-
- card->cmd_prof.cmd52_f0_r_count = 0;
- card->cmd_prof.cmd52_f0_w_count = 0;
- card->cmd_prof.cmd52_r8or16_count = 0;
- card->cmd_prof.cmd52_w8or16_count = 0;
- card->cmd_prof.cmd52_r16_count = 0;
- card->cmd_prof.cmd52_w16_count = 0;
- card->cmd_prof.cmd52_r32_count = 0;
-
- card->cmd_prof.sdio_cmd_signal = 0;
- card->cmd_prof.sdio_cmd_clear_slot = 0;
- card->cmd_prof.sdio_cmd_to_host = 0;
- card->cmd_prof.sdio_cmd_from_host = 0;
- card->cmd_prof.sdio_cmd_from_host_and_clear = 0;
-#endif
- /* If configured to run the HIP just once, work is now done */
- if (card->intmode & CSR_WIFI_INTMODE_RUN_BH_ONCE)
- {
- break;
- }
-
- } while (more || card->bh_reason_unifi || card->bh_reason_host);
-
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- if ((card->intmode & CSR_WIFI_INTMODE_RUN_BH_ONCE) == 0)
- {
- unifi_debug_log_to_buf("proc=%d\n",
- card->cmd_prof.process_count);
- }
-#endif
-
- return CSR_RESULT_SUCCESS;
-} /* process_bh() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * handle_host_protocol
- *
- * This function implements the Host Interface Protocol (HIP) as
- * described in the Host Interface Protocol Specification.
- *
- * Arguments:
- * card Pointer to card context structure.
- * processed_something Pointer to location to update processing status:
- * TRUE when data was transferred
- * FALSE when no data was transferred (queues empty)
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success or CSR error code.
- * ---------------------------------------------------------------------------
- */
-static CsrResult handle_host_protocol(card_t *card, u8 *processed_something)
-{
- CsrResult r;
- s32 done;
-
- *processed_something = FALSE;
-
-#ifdef CSR_WIFI_HIP_NOISY
- unifi_error(card->ospriv, " ======================== \n");
-#endif /* CSR_WIFI_HIP_NOISY */
-
-#ifdef CSR_WIFI_HIP_DATA_PLANE_PROFILE
- card->cmd_prof.process_count++;
-#endif
-
- card->bh_reason_unifi = card->bh_reason_host = 0;
- card->generate_interrupt = 0;
-
-
- /*
- * (Re)fill the T-H signal buffer
- */
- r = read_to_host_signals(card, &done);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Error occurred reading to-host signals\n");
- return r;
- }
- if (done > 0)
- {
- *processed_something = TRUE;
- }
-
- /*
- * Process any to-host signals.
- * Perform any requested CMD53 transfers here, but just queue any
- * bulk data command responses.
- */
- r = process_to_host_signals(card, &done);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Error occurred processing to-host signals\n");
- return r;
- }
-
- /* Now send any signals in the F-H queues */
- /* Give precedence to the command queue */
- r = process_fh_cmd_queue(card, &done);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Error occurred processing from-host signals\n");
- return r;
- }
- if (done > 0)
- {
- *processed_something = TRUE;
- }
-
- r = process_fh_traffic_queue(card, &done);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Error occurred processing from-host data signals\n");
- return r;
- }
- if (done > 0)
- {
- *processed_something = TRUE;
- }
-
- /* Flush out the batch of signals to the UniFi. */
- r = flush_fh_buffer(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to copy from-host signals to UniFi\n");
- return r;
- }
-
-
- /*
- * Send the host interrupt to say the queues have been modified.
- */
- if (card->generate_interrupt)
- {
- r = CardGenInt(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to notify UniFi that queues have been modified.\n");
- return r;
- }
- }
-
-#ifdef CSR_WIFI_RX_PATH_SPLIT
-#ifdef CSR_WIFI_RX_PATH_SPLIT_DONT_USE_WQ
- unifi_rx_queue_flush(card->ospriv);
-#endif
-#endif
-
- /* See if we can re-enable transmission now */
- restart_packet_flow(card);
-
-#ifdef CSR_PRE_ALLOC_NET_DATA
- r = prealloc_netdata_alloc(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "prealloc_netdata failed\n");
- return r;
- }
-#endif
-
- /*
- * Don't put the thread sleep if we just interacted with the chip,
- * there might be more to do if we look again.
- */
- return r;
-} /* handle_host_protocol() */
-
-
-/*
- * Rounds the given signal length in bytes to a whole number
- * of sig_frag_size.
- */
-#define GET_CHUNKS_FOR(SIG_FRAG_SIZE, LENGTH) (((LENGTH) + ((SIG_FRAG_SIZE)-1)) / (SIG_FRAG_SIZE))
-
-
-/*
- * ---------------------------------------------------------------------------
- * read_to_host_signals
- *
- * Read everything pending in the UniFi TH signal buffer.
- * Only do it if the local buffer is empty.
- *
- * Arguments:
- * card Pointer to card context struct
- * processed Number of signals read:
- * 0 if there were no signals pending,
- * 1 if we read at least one signal
- * Returns:
- * CSR error code if an error occurred.
- * ---------------------------------------------------------------------------
- */
-static CsrResult read_to_host_signals(card_t *card, s32 *processed)
-{
- s32 count_thw, count_thr;
- s32 unread_chunks, unread_bytes;
- CsrResult r;
-
- *processed = 0;
-
- /* Read any pending signals or bulk data commands */
- count_thw = unifi_read_shared_count(card, card->sdio_ctrl_addr + 4);
- if (count_thw < 0)
- {
- unifi_error(card->ospriv, "Failed to read to-host sig written count\n");
- return CSR_RESULT_FAILURE;
- }
- card->to_host_signals_w = count_thw; /* diag */
-
- count_thr = card->to_host_signals_r;
-
- if (count_thw == count_thr)
- {
- return CSR_RESULT_SUCCESS;
- }
-
- unread_chunks =
- (((count_thw - count_thr) + 128) % 128) - card->th_buffer.count;
-
- if (unread_chunks == 0)
- {
- return CSR_RESULT_SUCCESS;
- }
-
- unread_bytes = card->config_data.sig_frag_size * unread_chunks;
-
-
- r = unifi_bulk_rw(card,
- card->config_data.tohost_sigbuf_handle,
- card->th_buffer.ptr,
- unread_bytes,
- UNIFI_SDIO_READ);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read ToHost signal\n");
- return r;
- }
-
- card->th_buffer.ptr += unread_bytes;
- card->th_buffer.count += (u16)unread_chunks;
-
- *processed = 1;
-
- return CSR_RESULT_SUCCESS;
-} /* read_to_host_signals() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * update_to_host_signals_r
- *
- * Advance the shared-memory count of chunks read from the to-host
- * signal buffer.
- * Raise a UniFi internal interrupt to tell the firmware that the
- * count has changed.
- *
- * Arguments:
- * card Pointer to card context struct
- * pending Number of chunks remaining
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success or CSR error code
- * ---------------------------------------------------------------------------
- */
-static CsrResult update_to_host_signals_r(card_t *card, s16 pending)
-{
- CsrResult r;
-
- card->to_host_signals_r =
- (card->to_host_signals_r + (card->th_buffer.count - pending)) % 128;
- card->th_buffer.count = pending;
-
- /* Update the count of signals read */
- r = unifi_write_8_or_16(card, card->sdio_ctrl_addr + 6,
- (u8)card->to_host_signals_r);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to update to-host signals read\n");
- return r;
- }
-
- r = CardGenInt(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to notify UniFi that we processed to-host signals.\n");
- return r;
- }
-
- card->generate_interrupt = 0;
-
- return CSR_RESULT_SUCCESS;
-} /* update_to_host_signals_r() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * read_unpack_cmd
- *
- * Converts a wire-formatted command to the host bulk_data_cmd_t structure.
- *
- * Arguments:
- * ptr Pointer to the command
- * bulk_data_cmd Pointer to the host structure
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static void read_unpack_cmd(const u8 *ptr, bulk_data_cmd_t *bulk_data_cmd)
-{
- s16 index = 0;
- bulk_data_cmd->cmd_and_len = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- bulk_data_cmd->data_slot = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- bulk_data_cmd->offset = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- bulk_data_cmd->buffer_handle = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
-} /* read_unpack_cmd */
-
-
-/*
- * ---------------------------------------------------------------------------
- * process_to_host_signals
- *
- * Read and dispatch signals from the UniFi
- *
- * Arguments:
- * card Pointer to card context struct
- * processed Pointer to location to write processing result:
- * 0 if there were no signals pending,
- * 1 if we read at least one signal
- *
- * Returns:
- * CSR error code if there was an error
- *
- * Notes:
- * Since bulk data transfers can take a long time, if we wait until
- * all are done before we acknowledge the signals, the UniFi runs out
- * of buffer space. Therefore we keep a count of the bytes transferred
- * in bulk data commands, and update the to-host-signals-read count
- * if we've done a large transfer.
- *
- * All data in the f/w is stored in a little endian format, without any
- * padding bytes. Every read from the memory has to be transformed in
- * host (cpu specific) format, before we can process it. Therefore we
- * use read_unpack_cmd() and read_unpack_signal() to convert the raw data
- * contained in the card->th_buffer.buf to host structures.
- * Important: UDI clients use wire-formatted structures, so we need to
- * indicate all data, as we have read it from the device.
- * ---------------------------------------------------------------------------
- */
-static CsrResult process_to_host_signals(card_t *card, s32 *processed)
-{
- s16 pending;
- s16 remaining;
- u8 *bufptr;
- bulk_data_param_t data_ptrs;
- s16 cmd;
- u16 sig_len;
- s16 i;
- u16 chunks_in_buf;
- u16 bytes_transferred = 0;
- CsrResult r = CSR_RESULT_SUCCESS;
-
- *processed = 0;
-
- pending = card->th_buffer.count;
-
- /* Are there new to-host signals? */
- unifi_trace(card->ospriv, UDBG4, "handling %d to-host chunks\n", pending);
-
- if (!pending)
- {
- return CSR_RESULT_SUCCESS;
- }
-
- /*
- * This is a pointer to the raw data we have read from the f/w.
- * Can be a signal or a command. Note that we need to convert
- * it to a host structure before we process it.
- */
- bufptr = card->th_buffer.buf;
-
- while (pending > 0)
- {
- s16 f_flush_count = 0;
-
- /*
- * Command and length are common to signal and bulk data msgs.
- * If command == 0 (i.e. a signal), len is number of bytes
- * *following* the 2-byte header.
- */
- cmd = bufptr[1] >> 4;
- sig_len = bufptr[0] + ((bufptr[1] & 0x0F) << 8);
-
-#ifdef CSR_WIFI_HIP_NOISY
- unifi_error(card->ospriv, "Received UniFi msg cmd=%d, len=%d\n",
- cmd, sig_len);
-#endif /* CSR_WIFI_HIP_NOISY */
-
- if ((sig_len == 0) &&
- ((cmd != SDIO_CMD_CLEAR_SLOT) && (cmd != SDIO_CMD_PADDING)))
- {
- unifi_error(card->ospriv, "incomplete signal or command: has size zero\n");
- return CSR_RESULT_FAILURE;
- }
- /*
- * Make sure the buffer contains a complete message.
- * Signals may occupy multiple chunks, bulk-data commands occupy
- * one chunk.
- */
- if (cmd == SDIO_CMD_SIGNAL)
- {
- chunks_in_buf = GET_CHUNKS_FOR(card->config_data.sig_frag_size, (u16)(sig_len + 2));
- }
- else
- {
- chunks_in_buf = 1;
- }
-
- if (chunks_in_buf > (u16)pending)
- {
- unifi_error(card->ospriv, "incomplete signal (0x%x?): need %d chunks, got %d\n",
- GET_SIGNAL_ID(bufptr + 2),
- chunks_in_buf, pending);
- unifi_error(card->ospriv, " thsw=%d, thsr=%d\n",
- card->to_host_signals_w,
- card->to_host_signals_r);
- return CSR_RESULT_FAILURE;
- }
-
-
- switch (cmd)
- {
- case SDIO_CMD_SIGNAL:
- /* This is a signal. Read the rest of it and then handle it. */
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- card->cmd_prof.sdio_cmd_signal++;
-#endif
-
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++)
- {
- /* Retrieve dataRefs[i].DataLength */
- u16 data_len = GET_PACKED_DATAREF_LEN(bufptr + 2, i);
-
- /*
- * The bulk data length in the signal can not be greater than
- * the maximun length allowed by the SDIO config structure.
- */
- if (data_len > card->config_data.data_slot_size)
- {
- unifi_error(card->ospriv,
- "Bulk Data length (%d) exceeds Maximum Bulk Data length (%d)\n",
- data_len, card->config_data.data_slot_size);
- return CSR_RESULT_FAILURE;
- }
-
- /*
- * Len here might not be the same as the length in the
- * bulk data slot. The slot length will always be even,
- * but len could be odd.
- */
- if (data_len != 0)
- {
- /* Retrieve dataRefs[i].SlotNumber */
- s16 slot = GET_PACKED_DATAREF_SLOT(bufptr + 2, i);
-
- if (slot >= card->config_data.num_tohost_data_slots)
- {
- unifi_error(card->ospriv, "!!!bad slot number in to-host signal: %d, sig 0x%X\n",
- slot, cmd);
- return CSR_RESULT_FAILURE;
- }
-
- data_ptrs.d[i].os_data_ptr = card->to_host_data[slot].os_data_ptr;
- data_ptrs.d[i].os_net_buf_ptr = card->to_host_data[slot].os_net_buf_ptr;
- data_ptrs.d[i].net_buf_length = card->to_host_data[slot].net_buf_length;
- data_ptrs.d[i].data_length = data_len;
- }
- else
- {
- UNIFI_INIT_BULK_DATA(&data_ptrs.d[i]);
- }
- }
-
- /*
- * Log the signal to the UDI, before call unifi_receive_event() as
- * it can modify the bulk data.
- */
- if (card->udi_hook)
- {
- (*card->udi_hook)(card->ospriv, bufptr + 2, sig_len,
- &data_ptrs, UDI_LOG_TO_HOST);
- }
-
-#ifdef CSR_WIFI_HIP_DATA_PLANE_PROFILE
- if (GET_SIGNAL_ID(bufptr + 2) == CSR_MA_PACKET_CONFIRM_ID)
- {
- card->cmd_prof.tx_cfm_count++;
- }
- else if (GET_SIGNAL_ID(bufptr + 2) == CSR_MA_PACKET_INDICATION_ID)
- {
- if (data_ptrs.d[0].os_data_ptr)
- {
- if ((*data_ptrs.d[0].os_data_ptr) & 0x08)
- {
- card->cmd_prof.rx_count++;
- }
- }
- }
-#endif
- /*
- * Check if the signal is MA-PACKET.cfm and if so check the status.
- * If the status is failure, search through the slot records to find
- * if any slots are occupied for this host tag. This can happen if
- * f/w has not downloaded the bulkdata and before that itself it has
- * signalled the confirm with failure. If it finds a slot with that
- * host tag then, it clears the corresponding slot
- */
-
- if (GET_SIGNAL_ID(bufptr + 2) == CSR_MA_PACKET_CONFIRM_ID)
- {
- /* Get host tag and transmission status */
- u32 host_tag = GET_PACKED_MA_PACKET_CONFIRM_HOST_TAG(bufptr + 2);
- u16 status = GET_PACKED_MA_PACKET_CONFIRM_TRANSMISSION_STATUS(bufptr + 2);
-
- unifi_trace(card->ospriv, UDBG4, "process_to_host_signals signal ID=%x host Tag=%x status=%x\n",
- GET_SIGNAL_ID(bufptr + 2), host_tag, status);
-
- /* If transmission status is failure then search through the slot records
- * and if for any slot records the clear slot is not done then do it now
- */
-
- if (status && (card->fh_slot_host_tag_record))
- {
- u16 num_fh_slots = card->config_data.num_fromhost_data_slots;
-
- /* search through the list of slot records and match with host tag
- * If a slot is not yet cleared then clear the slot from here
- */
- for (i = 0; i < num_fh_slots; i++)
- {
- if (card->fh_slot_host_tag_record[i] == host_tag)
- {
-#ifdef CSR_WIFI_REQUEUE_PACKET_TO_HAL
- /* Invoke the HAL module function to requeue it back to HAL Queues */
- r = unifi_reque_ma_packet_request(card->ospriv, host_tag, status, &card->from_host_data[i].bd);
- card->fh_slot_host_tag_record[i] = CSR_WIFI_HIP_RESERVED_HOST_TAG;
- if (CSR_RESULT_SUCCESS != r)
- {
- unifi_trace(card->ospriv, UDBG5, "process_to_host_signals: Failed to requeue Packet(hTag:%x) back to HAL \n", host_tag);
- CardClearFromHostDataSlot(card, i);
- }
- else
- {
- CardClearFromHostDataSlotWithoutFreeingBulkData(card, i);
- }
-
-#else
- unifi_trace(card->ospriv, UDBG4, "process_to_host_signals Clear slot=%x host tag=%x\n", i, host_tag);
- card->fh_slot_host_tag_record[i] = CSR_WIFI_HIP_RESERVED_HOST_TAG;
-
- /* Set length field in from_host_data array to 0 */
- CardClearFromHostDataSlot(card, i);
-#endif
- break;
- }
- }
- }
- }
-
- /* Pass event to OS layer */
- unifi_receive_event(card->ospriv, bufptr + 2, sig_len, &data_ptrs);
-
- /* Initialise the to_host data, so it can be re-used. */
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++)
- {
- /* The slot is only valid if the length is non-zero. */
- if (GET_PACKED_DATAREF_LEN(bufptr + 2, i) != 0)
- {
- s16 slot = GET_PACKED_DATAREF_SLOT(bufptr + 2, i);
- if (slot < card->config_data.num_tohost_data_slots)
- {
- UNIFI_INIT_BULK_DATA(&card->to_host_data[slot]);
- }
- }
- }
-
-#ifndef CSR_WIFI_DEFER_TH_FLUSH
- /*
- * If we have previously transferred a lot of data, ack
- * the signals read so far, so f/w can reclaim the buffer
- * memory sooner.
- */
- if (bytes_transferred >= TO_HOST_FLUSH_THRESHOLD)
- {
- f_flush_count = 1;
- }
-#endif
- break;
-
-
- case SDIO_CMD_CLEAR_SLOT:
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- card->cmd_prof.sdio_cmd_clear_slot++;
-#endif
- /* This is a clear slot command. */
- if (sig_len != 0)
- {
- unifi_error(card->ospriv, "process_to_host_signals: clear slot, bad data len: 0x%X at offset %d\n",
- sig_len, bufptr - card->th_buffer.buf);
- return CSR_RESULT_FAILURE;
- }
-
- r = process_clear_slot_command(card, bufptr);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to process clear slot\n");
- return r;
- }
- break;
-
- case SDIO_CMD_TO_HOST_TRANSFER:
- case SDIO_CMD_FROM_HOST_TRANSFER:
- case SDIO_CMD_FROM_HOST_AND_CLEAR:
- case SDIO_CMD_OVERLAY_TRANSFER:
- /* This is a bulk data command. */
- if (sig_len & 1)
- {
- unifi_error(card->ospriv, "process_to_host_signals: bulk data, bad data len: 0x%X at offset %d\n",
- sig_len, bufptr - card->th_buffer.buf);
- return CSR_RESULT_FAILURE;
- }
-
- r = process_bulk_data_command(card, bufptr, cmd, sig_len);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to process bulk cmd\n");
- return r;
- }
- /* Count the bytes transferred */
- bytes_transferred += sig_len;
-
- if (cmd == SDIO_CMD_FROM_HOST_AND_CLEAR)
- {
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- card->cmd_prof.sdio_cmd_from_host_and_clear++;
-#endif
-#ifndef CSR_WIFI_DEFER_TH_FLUSH
- f_flush_count = 1;
-#endif
- }
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- else if (cmd == SDIO_CMD_FROM_HOST_TRANSFER)
- {
- card->cmd_prof.sdio_cmd_from_host++;
- }
- else if (cmd == SDIO_CMD_TO_HOST_TRANSFER)
- {
- card->cmd_prof.sdio_cmd_to_host++;
- }
-#endif
- break;
-
- case SDIO_CMD_PADDING:
- break;
-
- default:
- unifi_error(card->ospriv, "Unrecognised to-host command: %d\n", cmd);
- break;
- }
-
- bufptr += chunks_in_buf * card->config_data.sig_frag_size;
- pending -= chunks_in_buf;
-
- /*
- * Write out the host signal count when a significant
- * number of bytes of bulk data have been transferred or
- * when we have performed a CopyFromHostAndClear.
- */
- if (f_flush_count)
- {
- r = update_to_host_signals_r(card, pending);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- bytes_transferred = 0;
- }
- }
-
- if (pending)
- {
- unifi_warning(card->ospriv, "proc_th_sigs: %d unprocessed\n", pending);
- }
-
- /* If we processed any signals, write the updated count to UniFi */
- if (card->th_buffer.count != pending)
- {
- r = update_to_host_signals_r(card, pending);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- }
-
- /*
- * Reset the buffer pointer, copying down any un-processed signals.
- * This can happen if we enable the optimisation in read_to_host_signals()
- * that limits the length to whole blocks.
- */
- remaining = card->th_buffer.ptr - bufptr;
- if (remaining < 0)
- {
- unifi_error(card->ospriv, "Processing TH signals overran the buffer\n");
- return CSR_RESULT_FAILURE;
- }
- if (remaining > 0)
- {
- /* Use a safe copy because source and destination may overlap */
- u8 *d = card->th_buffer.buf;
- u8 *s = bufptr;
- s32 n = remaining;
- while (n--)
- {
- *d++ = *s++;
- }
- }
- card->th_buffer.ptr = card->th_buffer.buf + remaining;
-
-
- /* If we reach here then we processed something */
- *processed = 1;
- return CSR_RESULT_SUCCESS;
-} /* process_to_host_signals() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * process_clear_slot_command
- *
- * Process a clear slot command fom the UniFi.
- *
- * Arguments:
- * card Pointer to card context struct
- * bdcmd Pointer to bulk-data command msg from UniFi
- *
- * Returns:
- * 0 on success, CSR error code on error
- * ---------------------------------------------------------------------------
- */
-static CsrResult process_clear_slot_command(card_t *card, const u8 *cmdptr)
-{
- u16 data_slot;
- s16 slot;
-
- data_slot = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(cmdptr + SIZEOF_UINT16);
-
- unifi_trace(card->ospriv, UDBG4, "Processing clear slot cmd, slot=0x%X\n",
- data_slot);
-
- slot = data_slot & 0x7FFF;
-
-#ifdef CSR_WIFI_HIP_NOISY
- unifi_error(card->ospriv, "CMD clear data slot 0x%04x\n", data_slot);
-#endif /* CSR_WIFI_HIP_NOISY */
-
- if (data_slot & SLOT_DIR_TO_HOST)
- {
- if (slot >= card->config_data.num_tohost_data_slots)
- {
- unifi_error(card->ospriv,
- "Invalid to-host data slot in SDIO_CMD_CLEAR_SLOT: %d\n",
- slot);
- return CSR_RESULT_FAILURE;
- }
- /* clear to-host data slot */
- unifi_warning(card->ospriv, "Unexpected clear to-host data slot cmd: 0x%04x\n",
- data_slot);
- }
- else
- {
- if (slot >= card->config_data.num_fromhost_data_slots)
- {
- unifi_error(card->ospriv,
- "Invalid from-host data slot in SDIO_CMD_CLEAR_SLOT: %d\n",
- slot);
- return CSR_RESULT_FAILURE;
- }
-
- /*
- * The driver is the owner to clear all slots now
- * Ref - comment in process_fh_traffic_queue
- * so it will just ignore the clear slot command from firmware
- * and return success
- */
- return CSR_RESULT_SUCCESS;
-
- /* Set length field in from_host_data array to 0 */
- /* CardClearFromHostDataSlot(card, slot); */
- }
-
- return CSR_RESULT_SUCCESS;
-} /* process_clear_slot_command() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * process_bulk_data_command
- *
- * Process a bulk data request from the UniFi.
- *
- * Arguments:
- * card Pointer to card context struct
- * bdcmd Pointer to bulk-data command msg from UniFi
- * cmd, len Decoded values of command and length from the msg header
- * Cmd will only be one of:
- * SDIO_CMD_TO_HOST_TRANSFER
- * SDIO_CMD_FROM_HOST_TRANSFER
- * SDIO_CMD_FROM_HOST_AND_CLEAR
- * SDIO_CMD_OVERLAY_TRANSFER
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, CSR error code on error
- * ---------------------------------------------------------------------------
- */
-static CsrResult process_bulk_data_command(card_t *card, const u8 *cmdptr,
- s16 cmd, u16 len)
-{
- bulk_data_desc_t *bdslot;
-#ifdef CSR_WIFI_ALIGNMENT_WORKAROUND
- u8 *host_bulk_data_slot;
-#endif
- bulk_data_cmd_t bdcmd;
- s16 offset;
- s16 slot;
- s16 dir;
- CsrResult r;
-
- read_unpack_cmd(cmdptr, &bdcmd);
-
- unifi_trace(card->ospriv, UDBG4, "Processing bulk data cmd %d %s, len=%d, slot=0x%X\n",
- cmd, lookup_bulkcmd_name(cmd), len, bdcmd.data_slot);
-
- /*
- * Round up the transfer length if required.
- * This is useful to force all transfers to be a multiple of the SDIO block
- * size, so the SDIO driver won't try to use a byte-mode CMD53. These are
- * broken on some hardware platforms.
- */
- if (card->sdio_io_block_pad)
- {
- len = (len + card->sdio_io_block_size - 1) & ~(card->sdio_io_block_size - 1);
- unifi_trace(card->ospriv, UDBG4, "Rounded bulk data length up to %d\n", len);
- }
-
- slot = bdcmd.data_slot & 0x7FFF;
-
- if (cmd == SDIO_CMD_OVERLAY_TRANSFER)
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE; /* Not used on CSR6xxx */
- }
- else
- {
- if (bdcmd.data_slot & SLOT_DIR_TO_HOST)
- {
- /* Request is for to-host bulk data */
-
- /* Check sanity of slot number */
- if (slot >= card->config_data.num_tohost_data_slots)
- {
- unifi_error(card->ospriv,
- "Invalid to-host data slot in SDIO bulk xfr req: %d\n",
- slot);
- return CSR_RESULT_FAILURE;
- }
-
- /* Allocate memory for card->to_host_data[slot] bulk data here. */
-#ifdef CSR_PRE_ALLOC_NET_DATA
- r = prealloc_netdata_get(card, &card->to_host_data[slot], len);
-#else
- r = unifi_net_data_malloc(card->ospriv, &card->to_host_data[slot], len);
-#endif
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to allocate t-h bulk data\n");
- return CSR_RESULT_FAILURE;
- }
-
- bdslot = &card->to_host_data[slot];
-
- /* Make sure that the buffer is 4-bytes aligned */
- r = unifi_net_dma_align(card->ospriv, bdslot);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to align t-h bulk data buffer for DMA\n");
- return CSR_RESULT_FAILURE;
- }
- }
- else
- {
- /* Request is for from-host bulk data */
-
- if (slot >= card->config_data.num_fromhost_data_slots)
- {
- unifi_error(card->ospriv,
- "Invalid from-host data slot in SDIO bulk xfr req: %d\n",
- slot);
- return CSR_RESULT_FAILURE;
- }
- bdslot = &card->from_host_data[slot].bd;
- }
- offset = bdcmd.offset;
- }
- /* Do the transfer */
- dir = (cmd == SDIO_CMD_TO_HOST_TRANSFER)?
- UNIFI_SDIO_READ : UNIFI_SDIO_WRITE;
-
- unifi_trace(card->ospriv, UDBG4,
- "Bulk %c %s len=%d, handle %d - slot=%d %p+(%d)\n",
- (dir == UNIFI_SDIO_READ)?'R' : 'W',
- lookup_bulkcmd_name(cmd),
- len,
- bdcmd.buffer_handle,
- slot, bdslot->os_data_ptr, offset);
-#ifdef CSR_WIFI_HIP_NOISY
- unifi_error(card->ospriv, "Bulk %s len=%d, handle %d - slot=%d %p+(%d)\n",
- lookup_bulkcmd_name(cmd),
- len,
- bdcmd.buffer_handle,
- slot, bdslot->os_data_ptr, offset);
-#endif /* CSR_WIFI_HIP_NOISY */
-
-
- if (bdslot->os_data_ptr == NULL)
- {
- unifi_error(card->ospriv, "Null os_data_ptr - Bulk %s handle %d - slot=%d o=(%d)\n",
- lookup_bulkcmd_name(cmd),
- bdcmd.buffer_handle,
- slot,
- offset);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
-#ifdef CSR_WIFI_ALIGNMENT_WORKAROUND
- /* if os_data_ptr is not 4-byte aligned, then allocate a new buffer and copy data
- to new buffer to ensure the address passed to unifi_bulk_rw is 4-byte aligned */
-
- if (len != 0 && (dir == UNIFI_SDIO_WRITE) && (((ptrdiff_t)bdslot->os_data_ptr + offset) & 3))
- {
- host_bulk_data_slot = kmalloc(len, GFP_KERNEL);
-
- if (!host_bulk_data_slot)
- {
- unifi_error(card->ospriv, " failed to allocate request_data before unifi_bulk_rw\n");
- return -1;
- }
-
- memcpy((void *)host_bulk_data_slot,
- (void *)(bdslot->os_data_ptr + offset), len);
-
- r = unifi_bulk_rw(card,
- bdcmd.buffer_handle,
- (void *)host_bulk_data_slot,
- len,
- dir);
- }
- else
-#endif
- {
- r = unifi_bulk_rw(card,
- bdcmd.buffer_handle,
- (void *)(bdslot->os_data_ptr + offset),
- len,
- dir);
- }
-
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv,
- "Failed: %s hlen=%d, slen=%d, handle %d - slot=%d %p+0x%X\n",
- lookup_bulkcmd_name(cmd),
- len, /* Header length */
- bdslot->data_length, /* Length stored in slot */
- bdcmd.buffer_handle,
- slot, bdslot->os_data_ptr, offset);
- return r;
- }
-
- bdslot->data_length = len;
-
- if (cmd == SDIO_CMD_FROM_HOST_AND_CLEAR)
- {
- if (slot >= card->config_data.num_fromhost_data_slots)
- {
- unifi_error(card->ospriv,
- "Invalid from-host data slot in SDIO_CMD_FROM_HOST_AND_CLEAR: %d\n",
- slot);
- return CSR_RESULT_FAILURE;
- }
-
-#ifdef CSR_WIFI_ALIGNMENT_WORKAROUND
- /* moving this check before we clear host data slot */
- if ((len != 0) && (dir == UNIFI_SDIO_WRITE) && (((ptrdiff_t)bdslot->os_data_ptr + offset) & 3))
- {
- kfree(host_bulk_data_slot);
- }
-#endif
-
- if (card->fh_slot_host_tag_record)
- {
- unifi_trace(card->ospriv, UDBG5, "CopyFromHostAndClearSlot Reset entry for slot=%d\n", slot);
-
- /* reset the host tag entry for the corresponding slot */
- card->fh_slot_host_tag_record[slot] = CSR_WIFI_HIP_RESERVED_HOST_TAG;
- }
-
-
- /* Set length field in from_host_data array to 0 */
- CardClearFromHostDataSlot(card, slot);
- }
-
- return CSR_RESULT_SUCCESS;
-} /* process_bulk_data_command() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * check_fh_sig_slots
- *
- * Check whether there are <n> free signal slots available on UniFi.
- * This takes into account the signals already batched since the
- * from_host_signal counts were last read.
- * If the from_host_signal counts indicate not enough space, we read
- * the latest count from UniFi to see if some more have been freed.
- *
- * Arguments:
- * None.
- *
- * Returns:
- * CSR_RESULT_SUCCESS, otherwise CSR error code on error.
- * ---------------------------------------------------------------------------
- */
-static CsrResult check_fh_sig_slots(card_t *card, u16 needed, s32 *space_fh)
-{
- u32 count_fhw;
- u32 occupied_fh, slots_fh;
- s32 count_fhr;
-
- count_fhw = card->from_host_signals_w;
- count_fhr = card->from_host_signals_r;
- slots_fh = card->config_data.num_fromhost_sig_frags;
-
- /* Only read the space in from-host queue if necessary */
- occupied_fh = (count_fhw - count_fhr) % 128;
-
- if (slots_fh < occupied_fh)
- {
- *space_fh = 0;
- }
- else
- {
- *space_fh = slots_fh - occupied_fh;
- }
-
- if ((occupied_fh != 0) && (*space_fh < needed))
- {
- count_fhr = unifi_read_shared_count(card, card->sdio_ctrl_addr + 2);
- if (count_fhr < 0)
- {
- unifi_error(card->ospriv, "Failed to read from-host sig read count\n");
- return CSR_RESULT_FAILURE;
- }
- card->from_host_signals_r = count_fhr; /* diag */
-
- occupied_fh = (count_fhw - count_fhr) % 128;
- *space_fh = slots_fh - occupied_fh;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* check_fh_sig_slots() */
-
-
-/*
-* If we are padding the From-Host signals to the SDIO block size,
-* we need to round up the needed_chunks to the SDIO block size.
-*/
-#define ROUND_UP_NEEDED_CHUNKS(_card, _needed_chunks) \
- { \
- u16 _chunks_per_block; \
- u16 _chunks_in_last_block; \
- \
- if (_card->sdio_io_block_pad) \
- { \
- _chunks_per_block = _card->sdio_io_block_size / _card->config_data.sig_frag_size; \
- _chunks_in_last_block = _needed_chunks % _chunks_per_block; \
- if (_chunks_in_last_block != 0) \
- { \
- _needed_chunks = _needed_chunks + (_chunks_per_block - _chunks_in_last_block); \
- } \
- } \
- }
-
-
-#define ROUND_UP_SPACE_CHUNKS(_card, _space_chunks) \
- { \
- u16 _chunks_per_block; \
- \
- if (_card->sdio_io_block_pad) \
- { \
- _chunks_per_block = _card->sdio_io_block_size / _card->config_data.sig_frag_size; \
- _space_chunks = ((_space_chunks / _chunks_per_block) * _chunks_per_block); \
- } \
- }
-
-
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * process_fh_cmd_queue
- *
- * Take one signal off the from-host queue and copy it to the UniFi.
- * Does nothing if the UniFi has no slots free.
- *
- * Arguments:
- * card Pointer to card context struct
- * processed Location to write:
- * 0 if there is nothing on the queue to process
- * 1 if a signal was successfully processed
- *
- * Returns:
- * CSR error code if an error occurred.
- *
- * Notes:
- * The from-host queue contains signal requests from the network driver
- * and any UDI clients interspersed. UDI clients' requests have been stored
- * in the from-host queue using the wire-format structures, as they arrive.
- * All other requests are stored in the from-host queue using the host
- * (cpu specific) structures. We use the is_packed member of the card_signal_t
- * structure that describes the queue to make the distinction.
- * ---------------------------------------------------------------------------
- */
-static CsrResult process_fh_cmd_queue(card_t *card, s32 *processed)
-{
- q_t *sigq = &card->fh_command_queue;
-
- CsrResult r;
- u16 pending_sigs;
- u16 pending_chunks;
- u16 needed_chunks;
- s32 space_chunks;
- u16 q_index;
-
- *processed = 0;
-
- /* Get the number of pending signals. */
- pending_sigs = CSR_WIFI_HIP_Q_SLOTS_USED(sigq);
- unifi_trace(card->ospriv, UDBG5, "proc_fh: %d pending\n", pending_sigs);
- if (pending_sigs == 0)
- {
- /* Nothing to do */
- return CSR_RESULT_SUCCESS;
- }
-
- /* Work out how many chunks we have waiting to send */
- for (pending_chunks = 0, q_index = CSR_WIFI_HIP_Q_NEXT_R_SLOT(sigq);
- q_index != CSR_WIFI_HIP_Q_NEXT_W_SLOT(sigq);
- q_index = CSR_WIFI_HIP_Q_WRAP(sigq, q_index + 1))
- {
- card_signal_t *csptr = CSR_WIFI_HIP_Q_SLOT_DATA(sigq, q_index);
-
- /*
- * Note that GET_CHUNKS_FOR() needs the size of the packed
- * (wire-formatted) structure
- */
- pending_chunks += GET_CHUNKS_FOR(card->config_data.sig_frag_size, (u16)(csptr->signal_length + 2));
- }
-
- /*
- * Check whether UniFi has space for all the buffered bulk-data
- * commands and signals as well.
- */
- needed_chunks = pending_chunks + card->fh_buffer.count;
-
- /* Round up to the block size if necessary */
- ROUND_UP_NEEDED_CHUNKS(card, needed_chunks);
-
- r = check_fh_sig_slots(card, needed_chunks, &space_chunks);
- if (r != CSR_RESULT_SUCCESS)
- {
- /* Error */
- unifi_error(card->ospriv, "Failed to read fh sig count\n");
- return r;
- }
-
-#ifdef CSR_WIFI_HIP_NOISY
- unifi_error(card->ospriv, "proc_fh: %d chunks free, need %d\n",
- space_chunks, needed_chunks);
-#endif /* CSR_WIFI_HIP_NOISY */
-
-
- /*
- * Coalesce as many from-host signals as possible
- * into a single block and write using a single CMD53
- */
- if (needed_chunks > (u16)space_chunks)
- {
- /* Round up to the block size if necessary */
- ROUND_UP_SPACE_CHUNKS(card, space_chunks);
-
- /*
- * If the f/w has less free chunks than those already pending
- * return immediately.
- */
- if ((u16)space_chunks <= card->fh_buffer.count)
- {
- /*
- * No room in UniFi for any signals after the buffered bulk
- * data commands have been sent.
- */
- unifi_error(card->ospriv, "not enough room to send signals, need %d chunks, %d free\n",
- card->fh_buffer.count, space_chunks);
- card->generate_interrupt = 1;
- return CSR_RESULT_SUCCESS;
- }
- pending_chunks = (u16)(space_chunks - card->fh_buffer.count);
- }
-
- while (pending_sigs-- && pending_chunks > 0)
- {
- card_signal_t *csptr;
- s16 i;
- u16 sig_chunks, total_length, free_chunks_in_fh_buffer;
- bulk_data_param_t bulkdata;
- u8 *packed_sigptr;
- u16 signal_length = 0;
-
- /* Retrieve the entry at the head of the queue */
- q_index = CSR_WIFI_HIP_Q_NEXT_R_SLOT(sigq);
-
- /* Get a pointer to the containing card_signal_t struct */
- csptr = CSR_WIFI_HIP_Q_SLOT_DATA(sigq, q_index);
-
- /* Get the new length of the packed signal */
- signal_length = csptr->signal_length;
-
- if ((signal_length & 1) || (signal_length > UNIFI_PACKED_SIGBUF_SIZE))
- {
- unifi_error(card->ospriv, "process_fh_queue: Bad len: %d\n", signal_length);
- return CSR_RESULT_FAILURE;
- }
-
- /* Need space for 2-byte SDIO protocol header + signal */
- sig_chunks = GET_CHUNKS_FOR(card->config_data.sig_frag_size, (u16)(signal_length + 2));
-
- free_chunks_in_fh_buffer = GET_CHUNKS_FOR(card->config_data.sig_frag_size,
- (u16)((card->fh_buffer.buf + UNIFI_FH_BUF_SIZE) - card->fh_buffer.ptr));
- if (free_chunks_in_fh_buffer < sig_chunks)
- {
- /* No more room */
- unifi_notice(card->ospriv, "proc_fh_cmd_q: no room in fh buffer for 0x%.4X, deferring\n",
- (u16)(GET_SIGNAL_ID(csptr->sigbuf)));
- break;
- }
-
- packed_sigptr = csptr->sigbuf;
-
- /* Claim and set up a from-host data slot */
- if (CSR_RESULT_FAILURE == CardWriteBulkData(card, csptr, UNIFI_TRAFFIC_Q_MLME))
- {
- unifi_notice(card->ospriv, "proc_fh_cmd_q: no fh data slots for 0x%.4X, deferring\n",
- (u16)(GET_SIGNAL_ID(csptr->sigbuf)));
- break;
- }
-
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++)
- {
- if (csptr->bulkdata[i].data_length == 0)
- {
- UNIFI_INIT_BULK_DATA(&bulkdata.d[i]);
- }
- else
- {
- bulkdata.d[i].os_data_ptr = csptr->bulkdata[i].os_data_ptr;
- bulkdata.d[i].data_length = csptr->bulkdata[i].data_length;
- }
-
- /* Pass the free responsibility to the lower layer. */
- UNIFI_INIT_BULK_DATA(&csptr->bulkdata[i]);
- }
-
- unifi_trace(card->ospriv, UDBG2, "Sending signal 0x%.4X\n",
- GET_SIGNAL_ID(packed_sigptr));
-#ifdef CSR_WIFI_HIP_NOISY
- unifi_error(card->ospriv, "Sending signal 0x%.4X\n",
- GET_SIGNAL_ID(packed_sigptr));
-#endif /* CSR_WIFI_HIP_NOISY */
-
-
- /* Append packed signal to F-H buffer */
- total_length = sig_chunks * card->config_data.sig_frag_size;
-
- card->fh_buffer.ptr[0] = (u8)(signal_length & 0xff);
- card->fh_buffer.ptr[1] =
- (u8)(((signal_length >> 8) & 0xf) | (SDIO_CMD_SIGNAL << 4));
-
- memcpy(card->fh_buffer.ptr + 2, packed_sigptr, signal_length);
- memset(card->fh_buffer.ptr + 2 + signal_length, 0,
- total_length - (2 + signal_length));
-
-#ifdef CSR_WIFI_HIP_NOISY
- unifi_error(card->ospriv, "proc_fh: fh_buffer %d bytes \n",
- signal_length + 2);
- dump(card->fh_buffer.ptr, signal_length + 2);
- unifi_trace(card->ospriv, UDBG1, " \n");
-#endif /* CSR_WIFI_HIP_NOISY */
-
- card->fh_buffer.ptr += total_length;
- card->fh_buffer.count += sig_chunks;
-
-#ifdef CSR_WIFI_HIP_NOISY
- unifi_error(card->ospriv, "Added %d to fh buf, len now %d, count %d\n",
- signal_length,
- card->fh_buffer.ptr - card->fh_buffer.buf,
- card->fh_buffer.count);
-#endif /* CSR_WIFI_HIP_NOISY */
-
- (*processed)++;
- pending_chunks -= sig_chunks;
-
- /* Log the signal to the UDI. */
- /* UDI will get the packed structure */
- /* Can not log the unpacked signal, unless we reconstruct it! */
- if (card->udi_hook)
- {
- (*card->udi_hook)(card->ospriv, packed_sigptr, signal_length,
- &bulkdata, UDI_LOG_FROM_HOST);
- }
-
- /* Remove entry from q */
- csptr->signal_length = 0;
- CSR_WIFI_HIP_Q_INC_R(sigq);
- }
-
- return CSR_RESULT_SUCCESS;
-} /* process_fh_cmd_queue() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * process_fh_traffic_queue
- *
- * Take signals off the from-host queue and copy them to the UniFi.
- * Does nothing if the UniFi has no slots free.
- *
- * Arguments:
- * card Pointer to card context struct
- * sigq Pointer to the traffic queue
- * processed Pointer to location to write:
- * 0 if there is nothing on the queue to process
- * 1 if a signal was successfully processed
- *
- * Returns:
- * CSR error code if an error occurred.
- *
- * Notes:
- * The from-host queue contains signal requests from the network driver
- * and any UDI clients interspersed.
- * ---------------------------------------------------------------------------
- */
-static CsrResult process_fh_traffic_queue(card_t *card, s32 *processed)
-{
- q_t *sigq = card->fh_traffic_queue;
-
- CsrResult r;
- s16 n = 0;
- s32 q_no;
- u16 pending_sigs = 0;
- u16 pending_chunks = 0;
- u16 needed_chunks;
- s32 space_chunks;
- u16 q_index;
- u32 host_tag = 0;
- u16 slot_num = 0;
-
- *processed = 0;
-
- /* calculate how many signals are in queues and how many chunks are needed. */
- for (n = UNIFI_NO_OF_TX_QS - 1; n >= 0; n--)
- {
- /* Get the number of pending signals. */
- pending_sigs += CSR_WIFI_HIP_Q_SLOTS_USED(&sigq[n]);
- unifi_trace(card->ospriv, UDBG5, "proc_fh%d: %d pending\n", n, pending_sigs);
-
- /* Work out how many chunks we have waiting to send */
- for (q_index = CSR_WIFI_HIP_Q_NEXT_R_SLOT(&sigq[n]);
- q_index != CSR_WIFI_HIP_Q_NEXT_W_SLOT(&sigq[n]);
- q_index = CSR_WIFI_HIP_Q_WRAP(&sigq[n], q_index + 1))
- {
- card_signal_t *csptr = CSR_WIFI_HIP_Q_SLOT_DATA(&sigq[n], q_index);
-
- /*
- * Note that GET_CHUNKS_FOR() needs the size of the packed
- * (wire-formatted) structure
- */
- pending_chunks += GET_CHUNKS_FOR(card->config_data.sig_frag_size, (u16)(csptr->signal_length + 2));
- }
- }
-
- /* If there are no pending signals, just return */
- if (pending_sigs == 0)
- {
- /* Nothing to do */
- return CSR_RESULT_SUCCESS;
- }
-
- /*
- * Check whether UniFi has space for all the buffered bulk-data
- * commands and signals as well.
- */
- needed_chunks = pending_chunks + card->fh_buffer.count;
-
- /* Round up to the block size if necessary */
- ROUND_UP_NEEDED_CHUNKS(card, needed_chunks);
-
- r = check_fh_sig_slots(card, needed_chunks, &space_chunks);
- if (r != CSR_RESULT_SUCCESS)
- {
- /* Error */
- unifi_error(card->ospriv, "Failed to read fh sig count\n");
- return r;
- }
-
-#ifdef CSR_WIFI_HIP_NOISY
- unifi_error(card->ospriv,
- "process_fh_traffic_queue: %d chunks free, need %d\n",
- space_chunks, needed_chunks);
- read_fhsr(card); /* debugging only */
-#endif /* CSR_WIFI_HIP_NOISY */
-
- /* Coalesce as many from-host signals as possible
- into a single block and write using a single CMD53 */
- if (needed_chunks > (u16)space_chunks)
- {
- /* Round up to the block size if necessary */
- ROUND_UP_SPACE_CHUNKS(card, space_chunks);
-
- if ((u16)space_chunks <= card->fh_buffer.count)
- {
- /*
- * No room in UniFi for any signals after the buffered bulk
- * data commands have been sent.
- */
- unifi_error(card->ospriv, "not enough room to send signals, need %d chunks, %d free\n",
- card->fh_buffer.count, space_chunks);
- card->generate_interrupt = 1;
- return 0;
- }
-
- pending_chunks = (u16)space_chunks - card->fh_buffer.count;
- }
-
- q_no = UNIFI_NO_OF_TX_QS - 1;
-
- /*
- * pending_sigs will be exhausted if there are is no restriction to the pending
- * signals per queue. pending_chunks may be exhausted if there is a restriction.
- * q_no check will be exhausted if there is a restriction and our round-robin
- * algorith fails to fill all chunks.
- */
- do
- {
- card_signal_t *csptr;
- u16 sig_chunks, total_length, free_chunks_in_fh_buffer;
- bulk_data_param_t bulkdata;
- u8 *packed_sigptr;
- u16 signal_length = 0;
-
- /* if this queue is empty go to next one. */
- if (CSR_WIFI_HIP_Q_SLOTS_USED(&sigq[q_no]) == 0)
- {
- q_no--;
- continue;
- }
-
- /* Retrieve the entry at the head of the queue */
- q_index = CSR_WIFI_HIP_Q_NEXT_R_SLOT(&sigq[q_no]);
-
- /* Get a pointer to the containing card_signal_t struct */
- csptr = CSR_WIFI_HIP_Q_SLOT_DATA(&sigq[q_no], q_index);
-
- /* Get the new length of the packed signal */
- signal_length = csptr->signal_length;
-
- if ((signal_length & 1) || (signal_length > UNIFI_PACKED_SIGBUF_SIZE))
- {
- unifi_error(card->ospriv, "process_fh_traffic_queue: Bad len: %d\n", signal_length);
- return CSR_RESULT_FAILURE;
- }
-
- /* Need space for 2-byte SDIO protocol header + signal */
- sig_chunks = GET_CHUNKS_FOR(card->config_data.sig_frag_size, (u16)(signal_length + 2));
- free_chunks_in_fh_buffer = GET_CHUNKS_FOR(card->config_data.sig_frag_size,
- (u16)((card->fh_buffer.buf + UNIFI_FH_BUF_SIZE) - card->fh_buffer.ptr));
- if (free_chunks_in_fh_buffer < sig_chunks)
- {
- /* No more room */
- unifi_notice(card->ospriv, "process_fh_traffic_queue: no more chunks.\n");
- break;
- }
-
- packed_sigptr = csptr->sigbuf;
- /* Claim and set up a from-host data slot */
- if (CSR_RESULT_FAILURE == CardWriteBulkData(card, csptr, (unifi_TrafficQueue)q_no))
- {
- q_no--;
- continue;
- }
-
- /* Sanity check: MA-PACKET.req must have a valid bulk data */
- if ((csptr->bulkdata[0].data_length == 0) || (csptr->bulkdata[0].os_data_ptr == NULL))
- {
- unifi_error(card->ospriv, "MA-PACKET.req with empty bulk data (%d bytes in %p)\n",
- csptr->bulkdata[0].data_length, csptr->bulkdata[0].os_data_ptr);
- dump(packed_sigptr, signal_length);
- return CSR_RESULT_FAILURE;
- }
-
- bulkdata.d[0].os_data_ptr = csptr->bulkdata[0].os_data_ptr;
- bulkdata.d[0].data_length = csptr->bulkdata[0].data_length;
- bulkdata.d[0].os_net_buf_ptr = csptr->bulkdata[0].os_net_buf_ptr;
- bulkdata.d[0].net_buf_length = csptr->bulkdata[0].net_buf_length;
-
- /* The driver owns clearing of HIP slots for following scenario
- * - driver has requested a MA-PACKET.req signal
- * - The f/w after receiving the signal decides it can't send it out due to various reasons
- * - So the f/w without downloading the bulk data decides to just send a confirmation with fail
- * - and then sends a clear slot signal to HIP
- *
- * But in some cases the clear slot signal never comes and the slot remains --NOT-- freed for ever
- *
- * To handle this, HIP will keep the record of host tag for each occupied slot
- * and then based on status of that Host tag and slot the driver will decide if the slot is
- * cleared by f/w signal or the slot has to be freed by driver
- */
-
- if (card->fh_slot_host_tag_record)
- {
- /* Update the f-h slot record for the corresponding host tag */
- host_tag = GET_PACKED_MA_PACKET_REQUEST_HOST_TAG(packed_sigptr);
- slot_num = GET_PACKED_DATAREF_SLOT(packed_sigptr, 0) & 0x00FF;
-
- unifi_trace(card->ospriv, UDBG5,
- "process_fh_traffic_queue signal ID =%x fh slot=%x Host tag =%x\n",
- GET_SIGNAL_ID(packed_sigptr), slot_num, host_tag);
- card->fh_slot_host_tag_record[slot_num] = host_tag;
- }
- UNIFI_INIT_BULK_DATA(&bulkdata.d[1]);
- UNIFI_INIT_BULK_DATA(&csptr->bulkdata[0]);
- UNIFI_INIT_BULK_DATA(&csptr->bulkdata[1]);
-
-#ifdef CSR_WIFI_HIP_DATA_PLANE_PROFILE
- if (bulkdata.d[0].os_data_ptr)
- {
- if ((*bulkdata.d[0].os_data_ptr) & 0x08)
- {
- card->cmd_prof.tx_count++;
- }
- }
-#endif
- unifi_trace(card->ospriv, UDBG3, "Sending signal 0x%.4X\n",
- GET_SIGNAL_ID(packed_sigptr));
-#ifdef CSR_WIFI_HIP_NOISY
- unifi_error(card->ospriv, "Sending signal 0x%.4X\n",
- GET_SIGNAL_ID(packed_sigptr));
-#endif /* CSR_WIFI_HIP_NOISY */
-
- /* Append packed signal to F-H buffer */
- total_length = sig_chunks * card->config_data.sig_frag_size;
-
- card->fh_buffer.ptr[0] = (u8)(signal_length & 0xff);
- card->fh_buffer.ptr[1] =
- (u8)(((signal_length >> 8) & 0xf) | (SDIO_CMD_SIGNAL << 4));
-
- memcpy(card->fh_buffer.ptr + 2, packed_sigptr, signal_length);
- memset(card->fh_buffer.ptr + 2 + signal_length, 0,
- total_length - (2 + signal_length));
-
-#ifdef CSR_WIFI_HIP_NOISY
- unifi_error(card->ospriv, "proc_fh: fh_buffer %d bytes \n",
- signal_length + 2);
- dump(card->fh_buffer.ptr, signal_length + 2);
- unifi_trace(card->ospriv, UDBG1, " \n");
-#endif /* CSR_WIFI_HIP_NOISY */
-
- card->fh_buffer.ptr += total_length;
- card->fh_buffer.count += sig_chunks;
-
-#ifdef CSR_WIFI_HIP_NOISY
- unifi_error(card->ospriv, "Added %d to fh buf, len now %d, count %d\n",
- signal_length,
- card->fh_buffer.ptr - card->fh_buffer.buf,
- card->fh_buffer.count);
-#endif /* CSR_WIFI_HIP_NOISY */
-
- (*processed)++;
- pending_sigs--;
- pending_chunks -= sig_chunks;
-
- /* Log the signal to the UDI. */
- /* UDI will get the packed structure */
- /* Can not log the unpacked signal, unless we reconstruct it! */
- if (card->udi_hook)
- {
- (*card->udi_hook)(card->ospriv, packed_sigptr, signal_length,
- &bulkdata, UDI_LOG_FROM_HOST);
- }
-
- /* Remove entry from q */
- csptr->signal_length = 0;
- /* Note that the traffic queue has only one valid bulk data buffer. */
- csptr->bulkdata[0].data_length = 0;
-
- CSR_WIFI_HIP_Q_INC_R(&sigq[q_no]);
- } while ((pending_sigs > 0) && (pending_chunks > 0) && (q_no >= 0));
-
- return CSR_RESULT_SUCCESS;
-} /* process_fh_traffic_queue() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * flush_fh_buffer
- *
- * Write out the cache from-hosts signals to the UniFi.
- *
- * Arguments:
- * card Pointer to card context struct
- *
- * Returns:
- * CSR error code if an SDIO error occurred.
- * ---------------------------------------------------------------------------
- */
-static CsrResult flush_fh_buffer(card_t *card)
-{
- CsrResult r;
- u16 len;
- u16 sig_units;
- u16 data_round;
- u16 chunks_in_last_block;
- u16 padding_chunks;
- u16 i;
-
- len = card->fh_buffer.ptr - card->fh_buffer.buf;
-
-#ifdef CSR_WIFI_HIP_NOISY
- unifi_error(card->ospriv, "fh_buffer is at %p, ptr= %p\n",
- card->fh_buffer.buf, card->fh_buffer.ptr);
-#endif /* CSR_WIFI_HIP_NOISY */
-
- if (len == 0)
- {
- return CSR_RESULT_SUCCESS;
- }
-
-#ifdef CSR_WIFI_HIP_NOISY
- if (dump_fh_buf)
- {
- dump(card->fh_buffer.buf, len);
- dump_fh_buf = 0;
- }
-#endif /* CSR_WIFI_HIP_NOISY */
-
- if (card->sdio_io_block_pad)
- {
- /* Both of these are powers of 2 */
- sig_units = card->config_data.sig_frag_size;
- data_round = card->sdio_io_block_size;
-
- if (data_round > sig_units)
- {
- chunks_in_last_block = (len % data_round) / sig_units;
-
- if (chunks_in_last_block != 0)
- {
- padding_chunks = (data_round / sig_units) - chunks_in_last_block;
-
- memset(card->fh_buffer.ptr, 0, padding_chunks * sig_units);
- for (i = 0; i < padding_chunks; i++)
- {
- card->fh_buffer.ptr[1] = SDIO_CMD_PADDING << 4;
- card->fh_buffer.ptr += sig_units;
- }
-
- card->fh_buffer.count += padding_chunks;
- len += padding_chunks * sig_units;
- }
- }
- }
-
- r = unifi_bulk_rw(card,
- card->config_data.fromhost_sigbuf_handle,
- card->fh_buffer.buf,
- len, UNIFI_SDIO_WRITE);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write fh signals: %u bytes, error %d\n", len, r);
- return r;
- }
-
- /* Update from-host-signals-written signal count */
- card->from_host_signals_w =
- (card->from_host_signals_w + card->fh_buffer.count) % 128u;
- r = unifi_write_8_or_16(card, card->sdio_ctrl_addr + 0,
- (u8)card->from_host_signals_w);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write fh signal count %u with error %d\n",
- card->from_host_signals_w, r);
- return r;
- }
- card->generate_interrupt = 1;
-
- /* Reset the fh buffer pointer */
- card->fh_buffer.ptr = card->fh_buffer.buf;
- card->fh_buffer.count = 0;
-
-#ifdef CSR_WIFI_HIP_NOISY
- unifi_error(card->ospriv, "END flush: fh len %d, count %d\n",
- card->fh_buffer.ptr - card->fh_buffer.buf,
- card->fh_buffer.count);
-#endif /* CSR_WIFI_HIP_NOISY */
-
- return CSR_RESULT_SUCCESS;
-} /* flush_fh_buffer() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * restart_packet_flow
- *
- * This function is called before the bottom-half thread sleeps.
- * It checks whether both data and signal resources are available and
- * then calls the OS-layer function to re-enable packet transmission.
- *
- * Arguments:
- * card Pointer to card context struct
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static void restart_packet_flow(card_t *card)
-{
- u8 q;
-
- /*
- * We only look at the fh_traffic_queue, because that is where packets from
- * the network stack are placed.
- */
- for (q = 0; q <= UNIFI_TRAFFIC_Q_VO; q++)
- {
- if (card_is_tx_q_paused(card, q) &&
- CSR_WIFI_HIP_Q_SLOTS_FREE(&card->fh_traffic_queue[q]) >= RESUME_XMIT_THRESHOLD)
- {
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- unifi_debug_log_to_buf("U");
-#endif
- card_tx_q_unpause(card, q);
- unifi_restart_xmit(card->ospriv, (unifi_TrafficQueue)q);
- }
- }
-} /* restart_packet_flow() */
-
-
diff --git a/drivers/staging/csr/csr_wifi_hip_card_sdio_mem.c b/drivers/staging/csr/csr_wifi_hip_card_sdio_mem.c
deleted file mode 100644
index 17867f60df16..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_card_sdio_mem.c
+++ /dev/null
@@ -1,1713 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- * FILE: csr_wifi_hip_card_sdio_mem.c
- *
- * PURPOSE: Implementation of the Card API for SDIO.
- *
- * ---------------------------------------------------------------------------
- */
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_card.h"
-
-#define SDIO_RETRIES 3
-#define CSR_WIFI_HIP_SDIO_TRACE_DATA_LENGTH 16
-
-
-#define retryable_sdio_error(_csrResult) (((_csrResult) == CSR_SDIO_RESULT_CRC_ERROR) || ((_csrResult) == CSR_SDIO_RESULT_TIMEOUT))
-
-
-/*
- * ---------------------------------------------------------------------------
- * retrying_read8
- * retrying_write8
- *
- * These functions provide the first level of retry for SDIO operations.
- * If an SDIO command fails for reason of a response timeout or CRC
- * error, it is retried immediately. If three attempts fail we report a
- * failure.
- * If the command failed for any other reason, the failure is reported
- * immediately.
- *
- * Arguments:
- * card Pointer to card structure.
- * funcnum The SDIO function to access.
- * Function 0 is the Card Configuration Register space,
- * function 1/2 is the UniFi register space.
- * addr Address to access
- * pdata Pointer in which to return the value read.
- * data Value to write.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- * ---------------------------------------------------------------------------
- */
-static CsrResult retrying_read8(card_t *card, s16 funcnum, u32 addr, u8 *pdata)
-{
- CsrSdioFunction *sdio = card->sdio_if;
- CsrResult r = CSR_RESULT_SUCCESS;
- s16 retries;
- CsrResult csrResult = CSR_RESULT_SUCCESS;
-
- retries = 0;
- while (retries++ < SDIO_RETRIES)
- {
- if (funcnum == 0)
- {
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- unifi_debug_log_to_buf("r0@%02X", addr);
-#endif
- csrResult = CsrSdioF0Read8(sdio, addr, pdata);
- }
- else
- {
-#ifdef CSR_WIFI_TRANSPORT_CSPI
- unifi_error(card->ospriv,
- "retrying_read_f0_8: F1 8-bit reads are not allowed.\n");
- return CSR_RESULT_FAILURE;
-#else
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- unifi_debug_log_to_buf("r@%02X", addr);
-#endif
- csrResult = CsrSdioRead8(sdio, addr, pdata);
-#endif
- }
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_debug_log_to_buf("error=%X\n", csrResult);
- }
- else
- {
- unifi_debug_log_to_buf("=%X\n", *pdata);
- }
-#endif
- if (csrResult == CSR_SDIO_RESULT_NO_DEVICE)
- {
- return CSR_WIFI_HIP_RESULT_NO_DEVICE;
- }
- /*
- * Try again for retryable (CRC or TIMEOUT) errors,
- * break on success or fatal error
- */
- if (!retryable_sdio_error(csrResult))
- {
-#ifdef CSR_WIFI_HIP_DATA_PLANE_PROFILE
- card->cmd_prof.cmd52_count++;
-#endif
- break;
- }
- unifi_trace(card->ospriv, UDBG2, "retryable SDIO error reading F%d 0x%lX\n", funcnum, addr);
- }
-
- if ((csrResult == CSR_RESULT_SUCCESS) && (retries > 1))
- {
- unifi_warning(card->ospriv, "Read succeeded after %d attempts\n", retries);
- }
-
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read from UniFi (addr 0x%lX) after %d tries\n",
- addr, retries - 1);
- /* Report any SDIO error as a general i/o error */
- r = CSR_RESULT_FAILURE;
- }
-
- return r;
-} /* retrying_read8() */
-
-
-static CsrResult retrying_write8(card_t *card, s16 funcnum, u32 addr, u8 data)
-{
- CsrSdioFunction *sdio = card->sdio_if;
- CsrResult r = CSR_RESULT_SUCCESS;
- s16 retries;
- CsrResult csrResult = CSR_RESULT_SUCCESS;
-
- retries = 0;
- while (retries++ < SDIO_RETRIES)
- {
- if (funcnum == 0)
- {
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- unifi_debug_log_to_buf("w0@%02X=%X", addr, data);
-#endif
- csrResult = CsrSdioF0Write8(sdio, addr, data);
- }
- else
- {
-#ifdef CSR_WIFI_TRANSPORT_CSPI
- unifi_error(card->ospriv,
- "retrying_write_f0_8: F1 8-bit writes are not allowed.\n");
- return CSR_RESULT_FAILURE;
-#else
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- unifi_debug_log_to_buf("w@%02X=%X", addr, data);
-#endif
- csrResult = CsrSdioWrite8(sdio, addr, data);
-#endif
- }
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_debug_log_to_buf(",error=%X", csrResult);
- }
- unifi_debug_string_to_buf("\n");
-#endif
- if (csrResult == CSR_SDIO_RESULT_NO_DEVICE)
- {
- return CSR_WIFI_HIP_RESULT_NO_DEVICE;
- }
- /*
- * Try again for retryable (CRC or TIMEOUT) errors,
- * break on success or fatal error
- */
- if (!retryable_sdio_error(csrResult))
- {
-#ifdef CSR_WIFI_HIP_DATA_PLANE_PROFILE
- card->cmd_prof.cmd52_count++;
-#endif
- break;
- }
- unifi_trace(card->ospriv, UDBG2, "retryable SDIO error writing %02X to F%d 0x%lX\n",
- data, funcnum, addr);
- }
-
- if ((csrResult == CSR_RESULT_SUCCESS) && (retries > 1))
- {
- unifi_warning(card->ospriv, "Write succeeded after %d attempts\n", retries);
- }
-
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write to UniFi (addr 0x%lX) after %d tries\n",
- addr, retries - 1);
- /* Report any SDIO error as a general i/o error */
- r = CSR_RESULT_FAILURE;
- }
-
- return r;
-} /* retrying_write8() */
-
-
-static CsrResult retrying_read16(card_t *card, s16 funcnum,
- u32 addr, u16 *pdata)
-{
- CsrSdioFunction *sdio = card->sdio_if;
- CsrResult r = CSR_RESULT_SUCCESS;
- s16 retries;
- CsrResult csrResult = CSR_RESULT_SUCCESS;
-
- retries = 0;
- while (retries++ < SDIO_RETRIES)
- {
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- unifi_debug_log_to_buf("r@%02X", addr);
-#endif
- csrResult = CsrSdioRead16(sdio, addr, pdata);
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_debug_log_to_buf("error=%X\n", csrResult);
- }
- else
- {
- unifi_debug_log_to_buf("=%X\n", *pdata);
- }
-#endif
- if (csrResult == CSR_SDIO_RESULT_NO_DEVICE)
- {
- return CSR_WIFI_HIP_RESULT_NO_DEVICE;
- }
-
- /*
- * Try again for retryable (CRC or TIMEOUT) errors,
- * break on success or fatal error
- */
- if (!retryable_sdio_error(csrResult))
- {
-#ifdef CSR_WIFI_HIP_DATA_PLANE_PROFILE
- card->cmd_prof.cmd52_count++;
-#endif
- break;
- }
- unifi_trace(card->ospriv, UDBG2, "retryable SDIO error reading F%d 0x%lX\n", funcnum, addr);
- }
-
- if ((csrResult == CSR_RESULT_SUCCESS) && (retries > 1))
- {
- unifi_warning(card->ospriv, "Read succeeded after %d attempts\n", retries);
- }
-
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read from UniFi (addr 0x%lX) after %d tries\n",
- addr, retries - 1);
- /* Report any SDIO error as a general i/o error */
- r = CSR_RESULT_FAILURE;
- }
-
- return r;
-} /* retrying_read16() */
-
-
-static CsrResult retrying_write16(card_t *card, s16 funcnum,
- u32 addr, u16 data)
-{
- CsrSdioFunction *sdio = card->sdio_if;
- CsrResult r = CSR_RESULT_SUCCESS;
- s16 retries;
- CsrResult csrResult = CSR_RESULT_SUCCESS;
-
- retries = 0;
- while (retries++ < SDIO_RETRIES)
- {
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- unifi_debug_log_to_buf("w@%02X=%X", addr, data);
-#endif
- csrResult = CsrSdioWrite16(sdio, addr, data);
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_debug_log_to_buf(",error=%X", csrResult);
- }
- unifi_debug_string_to_buf("\n");
-#endif
- if (csrResult == CSR_SDIO_RESULT_NO_DEVICE)
- {
- return CSR_WIFI_HIP_RESULT_NO_DEVICE;
- }
-
- /*
- * Try again for retryable (CRC or TIMEOUT) errors,
- * break on success or fatal error
- */
- if (!retryable_sdio_error(csrResult))
- {
-#ifdef CSR_WIFI_HIP_DATA_PLANE_PROFILE
- card->cmd_prof.cmd52_count++;
-#endif
- break;
- }
- unifi_trace(card->ospriv, UDBG2, "retryable SDIO error writing %02X to F%d 0x%lX\n",
- data, funcnum, addr);
- }
-
- if ((csrResult == CSR_RESULT_SUCCESS) && (retries > 1))
- {
- unifi_warning(card->ospriv, "Write succeeded after %d attempts\n", retries);
- }
-
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write to UniFi (addr 0x%lX) after %d tries\n",
- addr, retries - 1);
- /* Report any SDIO error as a general i/o error */
- r = CSR_RESULT_FAILURE;
- }
-
- return r;
-} /* retrying_write16() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * sdio_read_f0
- *
- * Reads a byte value from the CCCR (func 0) area of UniFi.
- *
- * Arguments:
- * card Pointer to card structure.
- * addr Address to read from
- * pdata Pointer in which to store the read value.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- * ---------------------------------------------------------------------------
- */
-CsrResult sdio_read_f0(card_t *card, u32 addr, u8 *pdata)
-{
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- card->cmd_prof.cmd52_f0_r_count++;
-#endif
- return retrying_read8(card, 0, addr, pdata);
-} /* sdio_read_f0() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * sdio_write_f0
- *
- * Writes a byte value to the CCCR (func 0) area of UniFi.
- *
- * Arguments:
- * card Pointer to card structure.
- * addr Address to read from
- * data Data value to write.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- * ---------------------------------------------------------------------------
- */
-CsrResult sdio_write_f0(card_t *card, u32 addr, u8 data)
-{
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- card->cmd_prof.cmd52_f0_w_count++;
-#endif
- return retrying_write8(card, 0, addr, data);
-} /* sdio_write_f0() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_read_direct_8_or_16
- *
- * Read a 8-bit value from the UniFi SDIO interface.
- *
- * Arguments:
- * card Pointer to card structure.
- * addr Address to read from
- * pdata Pointer in which to return data.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error:
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_read_direct_8_or_16(card_t *card, u32 addr, u8 *pdata)
-{
-#ifdef CSR_WIFI_TRANSPORT_CSPI
- u16 w;
- CsrResult r;
-
- r = retrying_read16(card, card->function, addr, &w);
- *pdata = (u8)(w & 0xFF);
- return r;
-#else
- return retrying_read8(card, card->function, addr, pdata);
-#endif
-} /* unifi_read_direct_8_or_16() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_write_direct_8_or_16
- *
- * Write a byte value to the UniFi SDIO interface.
- *
- * Arguments:
- * card Pointer to card structure.
- * addr Address to write to
- * data Value to write.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error
- *
- * Notes:
- * If 8-bit write is used, the even address *must* be written second.
- * This is because writes to odd bytes are cached and not committed
- * to memory until the preceding even address is written.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_write_direct_8_or_16(card_t *card, u32 addr, u8 data)
-{
- if (addr & 1)
- {
- unifi_warning(card->ospriv,
- "Warning: Byte write to an odd address (0x%lX) is dangerous\n",
- addr);
- }
-
-#ifdef CSR_WIFI_TRANSPORT_CSPI
- return retrying_write16(card, card->function, addr, (u16)data);
-#else
- return retrying_write8(card, card->function, addr, data);
-#endif
-} /* unifi_write_direct_8_or_16() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_read_direct16
- *
- * Read a 16-bit value from the UniFi SDIO interface.
- *
- * Arguments:
- * card Pointer to card structure.
- * addr Address to read from
- * pdata Pointer in which to return data.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- *
- * Notes:
- * The even address *must* be read first. This is because reads from
- * odd bytes are cached and read from memory when the preceding
- * even address is read.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_read_direct16(card_t *card, u32 addr, u16 *pdata)
-{
- return retrying_read16(card, card->function, addr, pdata);
-} /* unifi_read_direct16() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_write_direct16
- *
- * Write a 16-bit value to the UniFi SDIO interface.
- *
- * Arguments:
- * card Pointer to card structure.
- * addr Address to write to
- * data Value to write.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- *
- * Notes:
- * The even address *must* be written second. This is because writes to
- * odd bytes are cached and not committed to memory until the preceding
- * even address is written.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_write_direct16(card_t *card, u32 addr, u16 data)
-{
- return retrying_write16(card, card->function, addr, data);
-} /* unifi_write_direct16() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_read_direct32
- *
- * Read a 32-bit value from the UniFi SDIO interface.
- *
- * Arguments:
- * card Pointer to card structure.
- * addr Address to read from
- * pdata Pointer in which to return data.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_read_direct32(card_t *card, u32 addr, u32 *pdata)
-{
- CsrResult r;
- u16 w0, w1;
-
- r = retrying_read16(card, card->function, addr, &w0);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- r = retrying_read16(card, card->function, addr + 2, &w1);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- *pdata = ((u32)w1 << 16) | (u32)w0;
-
- return CSR_RESULT_SUCCESS;
-} /* unifi_read_direct32() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_read_directn_match
- *
- * Read multiple 8-bit values from the UniFi SDIO interface,
- * stopping when either we have read 'len' bytes or we have read
- * a octet equal to 'match'. If 'match' is not a valid octet
- * then this function is the same as 'unifi_read_directn'.
- *
- * Arguments:
- * card Pointer to card structure.
- * addr Start address to read from.
- * pdata Pointer to which to write data.
- * len Maximum umber of bytes to read
- * match The value to stop reading at.
- * num Pointer to buffer to write number of bytes read
- *
- * Returns:
- * number of octets read on success, negative error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- *
- * Notes:
- * The even address *must* be read first. This is because reads from
- * odd bytes are cached and read from memory when the preceding
- * even address is read.
- * ---------------------------------------------------------------------------
- */
-static CsrResult unifi_read_directn_match(card_t *card, u32 addr, void *pdata, u16 len, s8 m, u32 *num)
-{
- CsrResult r;
- u32 i;
- u8 *cptr;
- u16 w;
-
- *num = 0;
-
- cptr = (u8 *)pdata;
- for (i = 0; i < len; i += 2)
- {
- r = retrying_read16(card, card->function, addr, &w);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- *cptr++ = ((u8)w & 0xFF);
- if ((m >= 0) && (((s8)w & 0xFF) == m))
- {
- break;
- }
-
- if (i + 1 == len)
- {
- /* The len is odd. Ignore the last high byte */
- break;
- }
-
- *cptr++ = ((u8)(w >> 8) & 0xFF);
- if ((m >= 0) && (((s8)(w >> 8) & 0xFF) == m))
- {
- break;
- }
-
- addr += 2;
- }
-
- *num = (s32)(cptr - (u8 *)pdata);
- return CSR_RESULT_SUCCESS;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_read_directn
- *
- * Read multiple 8-bit values from the UniFi SDIO interface.
- *
- * Arguments:
- * card Pointer to card structure.
- * addr Start address to read from.
- * pdata Pointer to which to write data.
- * len Number of bytes to read
- *
- * Returns:
- * 0 on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- *
- * Notes:
- * The even address *must* be read first. This is because reads from
- * odd bytes are cached and read from memory when the preceding
- * even address is read.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_read_directn(card_t *card, u32 addr, void *pdata, u16 len)
-{
- u32 num;
-
- return unifi_read_directn_match(card, addr, pdata, len, -1, &num);
-} /* unifi_read_directn() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_write_directn
- *
- * Write multiple 8-bit values to the UniFi SDIO interface.
- *
- * Arguments:
- * card Pointer to card structure.
- * addr Start address to write to.
- * pdata Source data pointer.
- * len Number of bytes to write, must be even.
- *
- * Returns:
- * 0 on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- *
- * Notes:
- * The UniFi has a peculiar 16-bit bus architecture. Writes are only
- * committed to memory when an even address is accessed. Writes to
- * odd addresses are cached and only committed if the next write is
- * to the preceding address.
- * This means we must write data as pairs of bytes in reverse order.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_write_directn(card_t *card, u32 addr, void *pdata, u16 len)
-{
- CsrResult r;
- u8 *cptr;
- s16 signed_len;
-
- cptr = (u8 *)pdata;
- signed_len = (s16)len;
- while (signed_len > 0)
- {
- /* This is UniFi-1 specific code. CSPI not supported so 8-bit write allowed */
- r = retrying_write16(card, card->function, addr, *cptr);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- cptr += 2;
- addr += 2;
- signed_len -= 2;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* unifi_write_directn() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * set_dmem_page
- * set_pmem_page
- *
- * Set up the page register for the shared data memory window or program
- * memory window.
- *
- * Arguments:
- * card Pointer to card structure.
- * dmem_addr UniFi shared-data-memory address to access.
- * pmem_addr UniFi program memory address to access. This includes
- * External FLASH memory at 0x000000
- * Processor program memory at 0x200000
- * External SRAM at memory 0x400000
- * paddr Location to write an SDIO address (24-bit) for
- * use in a unifi_read_direct or unifi_write_direct call.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- * ---------------------------------------------------------------------------
- */
-static CsrResult set_dmem_page(card_t *card, u32 dmem_addr, u32 *paddr)
-{
- u16 page, addr;
- u32 len;
- CsrResult r;
-
- *paddr = 0;
-
- if (!ChipHelper_DecodeWindow(card->helper,
- CHIP_HELPER_WINDOW_3,
- CHIP_HELPER_WT_SHARED,
- dmem_addr / 2,
- &page, &addr, &len))
- {
- unifi_error(card->ospriv, "Failed to decode SHARED_DMEM_PAGE %08lx\n", dmem_addr);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- if (page != card->dmem_page)
- {
- unifi_trace(card->ospriv, UDBG6, "setting dmem page=0x%X, addr=0x%lX\n", page, addr);
-
- /* change page register */
- r = unifi_write_direct16(card, ChipHelper_HOST_WINDOW3_PAGE(card->helper) * 2, page);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write SHARED_DMEM_PAGE\n");
- return r;
- }
-
- card->dmem_page = page;
- }
-
- *paddr = ((s32)addr * 2) + (dmem_addr & 1);
-
- return CSR_RESULT_SUCCESS;
-} /* set_dmem_page() */
-
-
-static CsrResult set_pmem_page(card_t *card, u32 pmem_addr,
- enum chip_helper_window_type mem_type, u32 *paddr)
-{
- u16 page, addr;
- u32 len;
- CsrResult r;
-
- *paddr = 0;
-
- if (!ChipHelper_DecodeWindow(card->helper,
- CHIP_HELPER_WINDOW_2,
- mem_type,
- pmem_addr / 2,
- &page, &addr, &len))
- {
- unifi_error(card->ospriv, "Failed to decode PROG MEM PAGE %08lx %d\n", pmem_addr, mem_type);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- if (page != card->pmem_page)
- {
- unifi_trace(card->ospriv, UDBG6, "setting pmem page=0x%X, addr=0x%lX\n", page, addr);
-
- /* change page register */
- r = unifi_write_direct16(card, ChipHelper_HOST_WINDOW2_PAGE(card->helper) * 2, page);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write PROG MEM PAGE\n");
- return r;
- }
-
- card->pmem_page = page;
- }
-
- *paddr = ((s32)addr * 2) + (pmem_addr & 1);
-
- return CSR_RESULT_SUCCESS;
-} /* set_pmem_page() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * set_page
- *
- * Sets up the appropriate page register to access the given address.
- * Returns the sdio address at which the unifi address can be accessed.
- *
- * Arguments:
- * card Pointer to card structure.
- * generic_addr UniFi internal address to access, in Generic Pointer
- * format, i.e. top byte is space indicator.
- * paddr Location to write page address
- * SDIO address (24-bit) for use in a unifi_read_direct or
- * unifi_write_direct call
- *
- * Returns:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE the address is invalid
- * ---------------------------------------------------------------------------
- */
-static CsrResult set_page(card_t *card, u32 generic_addr, u32 *paddr)
-{
- s32 space;
- u32 addr;
- CsrResult r = CSR_RESULT_SUCCESS;
-
- if (!paddr)
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- *paddr = 0;
- space = UNIFI_GP_SPACE(generic_addr);
- addr = UNIFI_GP_OFFSET(generic_addr);
- switch (space)
- {
- case UNIFI_SH_DMEM:
- /* Shared Data Memory is accessed via the Shared Data Memory window */
- r = set_dmem_page(card, addr, paddr);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- break;
-
- case UNIFI_EXT_FLASH:
- if (!ChipHelper_HasFlash(card->helper))
- {
- unifi_error(card->ospriv, "Bad address space for chip in generic pointer 0x%08lX (helper=0x%x)\n",
- generic_addr, card->helper);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- /* External FLASH is accessed via the Program Memory window */
- r = set_pmem_page(card, addr, CHIP_HELPER_WT_FLASH, paddr);
- break;
-
- case UNIFI_EXT_SRAM:
- if (!ChipHelper_HasExtSram(card->helper))
- {
- unifi_error(card->ospriv, "Bad address space for chip in generic pointer 0x%08l (helper=0x%x)\n",
- generic_addr, card->helper);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- /* External SRAM is accessed via the Program Memory window */
- r = set_pmem_page(card, addr, CHIP_HELPER_WT_EXT_SRAM, paddr);
- break;
-
- case UNIFI_REGISTERS:
- /* Registers are accessed directly */
- *paddr = addr;
- break;
-
- case UNIFI_PHY_DMEM:
- r = unifi_set_proc_select(card, UNIFI_PROC_PHY);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- *paddr = ChipHelper_DATA_MEMORY_RAM_OFFSET(card->helper) * 2 + addr;
- break;
-
- case UNIFI_MAC_DMEM:
- r = unifi_set_proc_select(card, UNIFI_PROC_MAC);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- *paddr = ChipHelper_DATA_MEMORY_RAM_OFFSET(card->helper) * 2 + addr;
- break;
-
- case UNIFI_BT_DMEM:
- if (!ChipHelper_HasBt(card->helper))
- {
- unifi_error(card->ospriv, "Bad address space for chip in generic pointer 0x%08lX (helper=0x%x)\n",
- generic_addr, card->helper);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- r = unifi_set_proc_select(card, UNIFI_PROC_BT);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- *paddr = ChipHelper_DATA_MEMORY_RAM_OFFSET(card->helper) * 2 + addr;
- break;
-
- case UNIFI_PHY_PMEM:
- r = unifi_set_proc_select(card, UNIFI_PROC_PHY);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- r = set_pmem_page(card, addr, CHIP_HELPER_WT_CODE_RAM, paddr);
- break;
-
- case UNIFI_MAC_PMEM:
- r = unifi_set_proc_select(card, UNIFI_PROC_MAC);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- r = set_pmem_page(card, addr, CHIP_HELPER_WT_CODE_RAM, paddr);
- break;
-
- case UNIFI_BT_PMEM:
- if (!ChipHelper_HasBt(card->helper))
- {
- unifi_error(card->ospriv, "Bad address space for chip in generic pointer 0x%08lX (helper=0x%x)\n",
- generic_addr, card->helper);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- r = unifi_set_proc_select(card, UNIFI_PROC_BT);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- r = set_pmem_page(card, addr, CHIP_HELPER_WT_CODE_RAM, paddr);
- break;
-
- case UNIFI_PHY_ROM:
- if (!ChipHelper_HasRom(card->helper))
- {
- unifi_error(card->ospriv, "Bad address space for chip in generic pointer 0x%08lX (helper=0x%x)\n",
- generic_addr, card->helper);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- r = unifi_set_proc_select(card, UNIFI_PROC_PHY);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- r = set_pmem_page(card, addr, CHIP_HELPER_WT_ROM, paddr);
- break;
-
- case UNIFI_MAC_ROM:
- if (!ChipHelper_HasRom(card->helper))
- {
- unifi_error(card->ospriv, "Bad address space for chip in generic pointer 0x%08lX (helper=0x%x)\n",
- generic_addr, card->helper);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- r = unifi_set_proc_select(card, UNIFI_PROC_MAC);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- r = set_pmem_page(card, addr, CHIP_HELPER_WT_ROM, paddr);
- break;
-
- case UNIFI_BT_ROM:
- if (!ChipHelper_HasRom(card->helper) || !ChipHelper_HasBt(card->helper))
- {
- unifi_error(card->ospriv, "Bad address space for chip in generic pointer 0x%08lX (helper=0x%x)\n",
- generic_addr, card->helper);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- r = unifi_set_proc_select(card, UNIFI_PROC_BT);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- r = set_pmem_page(card, addr, CHIP_HELPER_WT_ROM, paddr);
- break;
-
- default:
- unifi_error(card->ospriv, "Bad address space %d in generic pointer 0x%08lX (helper=0x%x)\n",
- space, generic_addr, card->helper);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- return r;
-} /* set_page() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_set_proc_select
- *
- *
- * Arguments:
- * card Pointer to card structure.
- * select Which XAP core to select
- *
- * Returns:
- * 0 on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_set_proc_select(card_t *card, enum unifi_dbg_processors_select select)
-{
- CsrResult r;
-
- /* Verify the the select value is allowed. */
- switch (select)
- {
- case UNIFI_PROC_MAC:
- case UNIFI_PROC_PHY:
- case UNIFI_PROC_BOTH:
- break;
-
-
- default:
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- if (card->proc_select != (u32)select)
- {
- r = unifi_write_direct16(card,
- ChipHelper_DBG_HOST_PROC_SELECT(card->helper) * 2,
- (u8)select);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write to Proc Select register\n");
- return r;
- }
-
- card->proc_select = (u32)select;
- }
-
- return CSR_RESULT_SUCCESS;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_read_8_or_16
- *
- * Performs a byte read of the given address in shared data memory.
- * Set up the shared data memory page register as required.
- *
- * Arguments:
- * card Pointer to card structure.
- * unifi_addr UniFi shared-data-memory address to access.
- * pdata Pointer to a byte variable for the value read.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE a bad generic pointer was specified
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_read_8_or_16(card_t *card, u32 unifi_addr, u8 *pdata)
-{
- u32 sdio_addr;
- CsrResult r;
-#ifdef CSR_WIFI_TRANSPORT_CSPI
- u16 w;
-#endif
-
- r = set_page(card, unifi_addr, &sdio_addr);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- card->cmd_prof.cmd52_r8or16_count++;
-#endif
-#ifdef CSR_WIFI_TRANSPORT_CSPI
- r = retrying_read16(card, card->function, sdio_addr, &w);
- *pdata = (u8)(w & 0xFF);
- return r;
-#else
- return retrying_read8(card, card->function, sdio_addr, pdata);
-#endif
-} /* unifi_read_8_or_16() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_write_8_or_16
- *
- * Performs a byte write of the given address in shared data memory.
- * Set up the shared data memory page register as required.
- *
- * Arguments:
- * card Pointer to card context struct.
- * unifi_addr UniFi shared-data-memory address to access.
- * data Value to write.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE a bad generic pointer was specified
- *
- * Notes:
- * Beware using unifi_write8() because byte writes are not safe on UniFi.
- * Writes to odd bytes are cached, writes to even bytes perform a 16-bit
- * write with the previously cached odd byte.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_write_8_or_16(card_t *card, u32 unifi_addr, u8 data)
-{
- u32 sdio_addr;
- CsrResult r;
-#ifdef CSR_WIFI_TRANSPORT_CSPI
- u16 w;
-#endif
-
- r = set_page(card, unifi_addr, &sdio_addr);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- if (sdio_addr & 1)
- {
- unifi_warning(card->ospriv,
- "Warning: Byte write to an odd address (0x%lX) is dangerous\n",
- sdio_addr);
- }
-
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- card->cmd_prof.cmd52_w8or16_count++;
-#endif
-#ifdef CSR_WIFI_TRANSPORT_CSPI
- w = data;
- return retrying_write16(card, card->function, sdio_addr, w);
-#else
- return retrying_write8(card, card->function, sdio_addr, data);
-#endif
-} /* unifi_write_8_or_16() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_card_read16
- *
- * Performs a 16-bit read of the given address in shared data memory.
- * Set up the shared data memory page register as required.
- *
- * Arguments:
- * card Pointer to card structure.
- * unifi_addr UniFi shared-data-memory address to access.
- * pdata Pointer to a 16-bit int variable for the value read.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE a bad generic pointer was specified
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_card_read16(card_t *card, u32 unifi_addr, u16 *pdata)
-{
- u32 sdio_addr;
- CsrResult r;
-
- r = set_page(card, unifi_addr, &sdio_addr);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- card->cmd_prof.cmd52_r16_count++;
-#endif
- return unifi_read_direct16(card, sdio_addr, pdata);
-} /* unifi_card_read16() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_card_write16
- *
- * Performs a 16-bit write of the given address in shared data memory.
- * Set up the shared data memory page register as required.
- *
- * Arguments:
- * card Pointer to card structure.
- * unifi_addr UniFi shared-data-memory address to access.
- * pdata Pointer to a byte variable for the value write.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE a bad generic pointer was specified
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_card_write16(card_t *card, u32 unifi_addr, u16 data)
-{
- u32 sdio_addr;
- CsrResult r;
-
- r = set_page(card, unifi_addr, &sdio_addr);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- card->cmd_prof.cmd52_w16_count++;
-#endif
- return unifi_write_direct16(card, sdio_addr, data);
-} /* unifi_card_write16() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_read32
- *
- * Performs a 32-bit read of the given address in shared data memory.
- * Set up the shared data memory page register as required.
- *
- * Arguments:
- * card Pointer to card structure.
- * unifi_addr UniFi shared-data-memory address to access.
- * pdata Pointer to a int variable for the value read.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE a bad generic pointer was specified
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_read32(card_t *card, u32 unifi_addr, u32 *pdata)
-{
- u32 sdio_addr;
- CsrResult r;
-
- r = set_page(card, unifi_addr, &sdio_addr);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- card->cmd_prof.cmd52_r32_count++;
-#endif
- return unifi_read_direct32(card, sdio_addr, pdata);
-} /* unifi_read32() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_card_readn
- * unifi_readnz
- *
- * Read multiple 8-bit values from the UniFi SDIO interface.
- * This function interprets the address as a GenericPointer as
- * defined in the UniFi Host Interface Protocol Specification.
- * The readnz version of this function will stop when it reads a
- * zero octet.
- *
- * Arguments:
- * card Pointer to card structure.
- * unifi_addr UniFi shared-data-memory address to access.
- * pdata Pointer to which to write data.
- * len Number of bytes to read
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE a bad generic pointer was specified
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_readn_match(card_t *card, u32 unifi_addr, void *pdata, u16 len, s8 match)
-{
- u32 sdio_addr;
- CsrResult r;
- u32 num;
-
- r = set_page(card, unifi_addr, &sdio_addr);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- r = unifi_read_directn_match(card, sdio_addr, pdata, len, match, &num);
- return r;
-} /* unifi_readn_match() */
-
-
-CsrResult unifi_card_readn(card_t *card, u32 unifi_addr, void *pdata, u16 len)
-{
- return unifi_readn_match(card, unifi_addr, pdata, len, -1);
-} /* unifi_card_readn() */
-
-
-CsrResult unifi_readnz(card_t *card, u32 unifi_addr, void *pdata, u16 len)
-{
- return unifi_readn_match(card, unifi_addr, pdata, len, 0);
-} /* unifi_readnz() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_read_shared_count
- *
- * Read signal count locations, checking for an SDIO error. The
- * signal count locations only contain a valid number if the
- * highest bit isn't set.
- *
- * Arguments:
- * card Pointer to card context structure.
- * addr Shared-memory address to read.
- *
- * Returns:
- * Value read from memory (0-127) or -1 on error
- * ---------------------------------------------------------------------------
- */
-s32 unifi_read_shared_count(card_t *card, u32 addr)
-{
- u8 b;
- /* I've increased this count, because I have seen cases where
- * there were three reads in a row with the top bit set. I'm not
- * sure why this might have happened, but I can't see a problem
- * with increasing this limit. It's better to take a while to
- * recover than to fail. */
-#define SHARED_READ_RETRY_LIMIT 10
- s32 i;
-
- /*
- * Get the to-host-signals-written count.
- * The top-bit will be set if the firmware was in the process of
- * changing the value, in which case we read again.
- */
- /* Limit the number of repeats so we don't freeze */
- for (i = 0; i < SHARED_READ_RETRY_LIMIT; i++)
- {
- CsrResult r;
- r = unifi_read_8_or_16(card, addr, &b);
- if (r != CSR_RESULT_SUCCESS)
- {
- return -1;
- }
- if (!(b & 0x80))
- {
- /* There is a chance that the MSB may have contained invalid data
- * (overflow) at the time it was read. Therefore mask off the MSB.
- * This avoids a race between driver read and firmware write of the
- * word, the value we need is in the lower 8 bits anway.
- */
- return (s32)(b & 0xff);
- }
- }
-
- return -1; /* this function has changed in WMM mods */
-} /* unifi_read_shared_count() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_writen
- *
- * Write multiple 8-bit values to the UniFi SDIO interface using CMD52
- * This function interprets the address as a GenericPointer as
- * defined in the UniFi Host Interface Protocol Specification.
- *
- * Arguments:
- * card Pointer to card structure.
- * unifi_addr UniFi shared-data-memory address to access.
- * pdata Pointer to which to write data.
- * len Number of bytes to write
- *
- * Returns:
- * 0 on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE an odd length or length too big.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_writen(card_t *card, u32 unifi_addr, void *pdata, u16 len)
-{
- u32 sdio_addr;
- CsrResult r;
-
- r = set_page(card, unifi_addr, &sdio_addr);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- return unifi_write_directn(card, sdio_addr, pdata, len);
-} /* unifi_writen() */
-
-
-static CsrResult csr_sdio_block_rw(card_t *card, s16 funcnum,
- u32 addr, u8 *pdata,
- u16 count, s16 dir_is_write)
-{
- CsrResult csrResult;
-
- if (dir_is_write == UNIFI_SDIO_READ)
- {
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- unifi_debug_log_to_buf("r@%02X#%X=", addr, count);
-#endif
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- unifi_debug_log_to_buf("R");
-#endif
- csrResult = CsrSdioRead(card->sdio_if, addr, pdata, count);
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- unifi_debug_log_to_buf("<");
-#endif
- }
- else
- {
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- unifi_debug_log_to_buf("w@%02X#%X=", addr, count);
- unifi_debug_hex_to_buf(pdata, count > CSR_WIFI_HIP_SDIO_TRACE_DATA_LENGTH?CSR_WIFI_HIP_SDIO_TRACE_DATA_LENGTH : count);
-#endif
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- unifi_debug_log_to_buf("W");
-#endif
- csrResult = CsrSdioWrite(card->sdio_if, addr, pdata, count);
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- unifi_debug_log_to_buf(">");
-#endif
- }
-#ifdef CSR_WIFI_HIP_DATA_PLANE_PROFILE
- card->cmd_prof.cmd53_count++;
-#endif
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_SDIO_TRACE)
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_debug_log_to_buf("error=%X", csrResult);
- }
- else if (dir_is_write == UNIFI_SDIO_READ)
- {
- unifi_debug_hex_to_buf(pdata, count > CSR_WIFI_HIP_SDIO_TRACE_DATA_LENGTH?CSR_WIFI_HIP_SDIO_TRACE_DATA_LENGTH : count);
- }
- unifi_debug_string_to_buf("\n");
-#endif
- return csrResult; /* CSR SDIO (not HIP) error code */
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_bulk_rw
- *
- * Transfer bulk data to or from the UniFi SDIO interface.
- * This function is used to read or write signals and bulk data.
- *
- * Arguments:
- * card Pointer to card structure.
- * handle Value to put in the Register Address field of the CMD53 req.
- * data Pointer to data to write.
- * direction One of UNIFI_SDIO_READ or UNIFI_SDIO_WRITE
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- *
- * Notes:
- * This function uses SDIO CMD53, which is the block transfer mode.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_bulk_rw(card_t *card, u32 handle, void *pdata,
- u32 len, s16 direction)
-{
-#define CMD53_RETRIES 3
- /*
- * Ideally instead of sleeping, we want to busy wait.
- * Currently there is no framework API to do this. When it becomes available,
- * we can use it to busy wait using usecs
- */
-#define REWIND_RETRIES 15 /* when REWIND_DELAY==1msec, or 250 when REWIND_DELAY==50usecs */
-#define REWIND_POLLING_RETRIES 5
-#define REWIND_DELAY 1 /* msec or 50usecs */
- CsrResult csrResult; /* SDIO error code */
- CsrResult r = CSR_RESULT_SUCCESS; /* HIP error code */
- s16 retries = CMD53_RETRIES;
- s16 stat_retries;
- u8 stat;
- s16 dump_read;
-#ifdef UNIFI_DEBUG
- u8 *pdata_lsb = ((u8 *)&pdata) + card->lsb;
-#endif
-#ifdef CSR_WIFI_MAKE_FAKE_CMD53_ERRORS
- static s16 fake_error;
-#endif
-
- dump_read = 0;
-#ifdef UNIFI_DEBUG
- if (*pdata_lsb & 1)
- {
- unifi_notice(card->ospriv, "CD53 request on a unaligned buffer (addr: 0x%X) dir %s-Host\n",
- pdata, (direction == UNIFI_SDIO_READ)?"To" : "From");
- if (direction == UNIFI_SDIO_WRITE)
- {
- dump(pdata, (u16)len);
- }
- else
- {
- dump_read = 1;
- }
- }
-#endif
-
- /* Defensive checks */
- if (!pdata)
- {
- unifi_error(card->ospriv, "Null pdata for unifi_bulk_rw() len: %d\n", len);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- if ((len & 1) || (len > 0xffff))
- {
- unifi_error(card->ospriv, "Impossible CMD53 length requested: %d\n", len);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- while (1)
- {
- csrResult = csr_sdio_block_rw(card, card->function, handle,
- (u8 *)pdata, (u16)len,
- direction);
- if (csrResult == CSR_SDIO_RESULT_NO_DEVICE)
- {
- return CSR_WIFI_HIP_RESULT_NO_DEVICE;
- }
-#ifdef CSR_WIFI_MAKE_FAKE_CMD53_ERRORS
- if (++fake_error > 100)
- {
- fake_error = 90;
- unifi_warning(card->ospriv, "Faking a CMD53 error,\n");
- if (csrResult == CSR_RESULT_SUCCESS)
- {
- csrResult = CSR_RESULT_FAILURE;
- }
- }
-#endif
- if (csrResult == CSR_RESULT_SUCCESS)
- {
- if (dump_read)
- {
- dump(pdata, (u16)len);
- }
- break;
- }
-
- /*
- * At this point the SDIO driver should have written the I/O Abort
- * register to notify UniFi that the command has failed.
- * UniFi-1 and UniFi-2 (not UF6xxx) use the same register to store the
- * Deep Sleep State. This means we have to restore the Deep Sleep
- * State (AWAKE in any case since we can not perform a CD53 in any other
- * state) by rewriting the I/O Abort register to its previous value.
- */
- if (card->chip_id <= SDIO_CARD_ID_UNIFI_2)
- {
- (void)unifi_set_host_state(card, UNIFI_HOST_STATE_AWAKE);
- }
-
- /* If csr_sdio_block_rw() failed in a non-retryable way, or retries exhausted
- * then stop retrying
- */
- if (!retryable_sdio_error(csrResult))
- {
- unifi_error(card->ospriv, "Fatal error in a CMD53 transfer\n");
- break;
- }
-
- /*
- * These happen from time to time, try again
- */
- if (--retries == 0)
- {
- break;
- }
-
- unifi_trace(card->ospriv, UDBG4,
- "Error in a CMD53 transfer, retrying (h:%d,l:%u)...\n",
- (s16)handle & 0xff, len);
-
- /* The transfer failed, rewind and try again */
- r = unifi_write_8_or_16(card, card->sdio_ctrl_addr + 8,
- (u8)(handle & 0xff));
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- /*
- * If we can't even do CMD52 (register read/write) then
- * stop here.
- */
- unifi_error(card->ospriv, "Failed to write REWIND cmd\n");
- return r;
- }
-
- /* Signal the UniFi to look for the rewind request. */
- r = CardGenInt(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- /* Wait for UniFi to acknowledge the rewind */
- stat_retries = REWIND_RETRIES;
- while (1)
- {
- r = unifi_read_8_or_16(card, card->sdio_ctrl_addr + 8, &stat);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read REWIND status\n");
- return CSR_RESULT_FAILURE;
- }
-
- if (stat == 0)
- {
- break;
- }
- if (--stat_retries == 0)
- {
- unifi_error(card->ospriv, "Timeout waiting for REWIND ready\n");
- return CSR_RESULT_FAILURE;
- }
-
- /* Poll for the ack a few times */
- if (stat_retries < REWIND_RETRIES - REWIND_POLLING_RETRIES)
- {
- CsrThreadSleep(REWIND_DELAY);
- }
- }
- }
-
- /* The call to csr_sdio_block_rw() still failed after retrying */
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Block %s failed after %d retries\n",
- (direction == UNIFI_SDIO_READ)?"read" : "write",
- CMD53_RETRIES - retries);
- /* Report any SDIO error as a general i/o error */
- return CSR_RESULT_FAILURE;
- }
-
- /* Collect some stats */
- if (direction == UNIFI_SDIO_READ)
- {
- card->sdio_bytes_read += len;
- }
- else
- {
- card->sdio_bytes_written += len;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* unifi_bulk_rw() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_bulk_rw_noretry
- *
- * Transfer bulk data to or from the UniFi SDIO interface.
- * This function is used to read or write signals and bulk data.
- *
- * Arguments:
- * card Pointer to card structure.
- * handle Value to put in the Register Address field of
- * the CMD53 req.
- * data Pointer to data to write.
- * direction One of UNIFI_SDIO_READ or UNIFI_SDIO_WRITE
- *
- * Returns:
- * 0 on success, non-zero error code on error:
- * CSR_WIFI_HIP_RESULT_NO_DEVICE card was ejected
- * CSR_RESULT_FAILURE an SDIO error occurred
- *
- * Notes:
- * This function uses SDIO CMD53, which is the block transfer mode.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_bulk_rw_noretry(card_t *card, u32 handle, void *pdata,
- u32 len, s16 direction)
-{
- CsrResult csrResult;
-
- csrResult = csr_sdio_block_rw(card, card->function, handle,
- (u8 *)pdata, (u16)len, direction);
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Block %s failed\n",
- (direction == UNIFI_SDIO_READ)?"read" : "write");
- return csrResult;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* unifi_bulk_rw_noretry() */
-
-
diff --git a/drivers/staging/csr/csr_wifi_hip_chiphelper.c b/drivers/staging/csr/csr_wifi_hip_chiphelper.c
deleted file mode 100644
index 5cf5b8a5a1e1..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_chiphelper.c
+++ /dev/null
@@ -1,793 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#include "csr_macro.h"
-#include "csr_wifi_hip_chiphelper_private.h"
-
-#ifndef nelem
-#define nelem(a) (sizeof(a) / sizeof(a[0]))
-#endif
-
-#define counted(foo) { nelem(foo), foo }
-#define null_counted() { 0, NULL }
-
-/* The init values are a set of register writes that we must
- perform when we first connect to the chip to get it working.
- They swicth on the correct clocks and possibly set the host
- interface as a wkaeup source. They should not be used if
- proper HIP opperation is required, but are useful before we
- do a code download. */
-static const struct chip_helper_init_values init_vals_v1[] = {
- { 0xFDBB, 0xFFFF },
- { 0xFDB6, 0x03FF },
- { 0xFDB1, 0x01E3 },
- { 0xFDB3, 0x0FFF },
- { 0xFEE3, 0x08F0 },
- { 0xFEE7, 0x3C3F },
- { 0xFEE6, 0x0050 },
- { 0xFDBA, 0x0000 }
-};
-
-static const struct chip_helper_init_values init_vals_v2[] = {
- { 0xFDB6, 0x0FFF },
- { 0xF023, 0x3F3F },
- { 0xFDB1, 0x01E3 },
- { 0xFDB3, 0x0FFF },
- { 0xF003, 0x08F0 },
- { 0xF007, 0x3C3F },
- { 0xF006, 0x0050 }
-};
-
-
-static const struct chip_helper_init_values init_vals_v22_v23[] = {
- { 0xF81C, 0x00FF },
- /*{ 0x????, 0x???? }, */
- { 0xF80C, 0x1FFF },
- { 0xFA25, 0x001F },
- { 0xF804, 0x00FF },
- { 0xF802, 0x0FFF },
- /*{ 0x????, 0x???? },
- { 0x????, 0x???? },
- { 0x????, 0x???? }*/
-};
-
-static const u16 reset_program_a_v1_or_v2[] = {
- 0x0000
-};
-static const u16 reset_program_b_v1_or_v2[] = {
- 0x0010, 0xFE00, 0xA021, 0xFF00, 0x8111, 0x0009, 0x0CA4, 0x0114,
- 0x0280, 0x04F8, 0xFE00, 0x6F25, 0x06E0, 0x0010, 0xFC00, 0x0121,
- 0xFC00, 0x0225, 0xFE00, 0x7125, 0xFE00, 0x6D11, 0x03F0, 0xFE00,
- 0x6E25, 0x0008, 0x00E0
-};
-
-static const struct chip_helper_reset_values reset_program_v1_or_v2[] =
-{
- {
- MAKE_GP(REGISTERS, 0x000C),
- nelem(reset_program_a_v1_or_v2),
- reset_program_a_v1_or_v2
- },
- {
- MAKE_GP(MAC_PMEM, 0x000000),
- nelem(reset_program_b_v1_or_v2),
- reset_program_b_v1_or_v2
- }
-};
-
-static const struct chip_map_address_t unifi_map_address_v1_v2[] =
-{
- { 0xFE9F, 0xFE7B }, /* PM1_BANK_SELECT */
- { 0xFE9E, 0xFE78 }, /* PM2_BANK_SELECT */
- { 0xFE9D, 0xFE7E }, /* SHARED_DMEM_PAGE */
- { 0xFE91, 0xFE90 }, /* PROC_SELECT */
- { 0xFE8D, 0xFE8C }, /* STOP_STATUS */
-};
-
-static const struct chip_map_address_t unifi_map_address_v22_v23[] =
-{
- { 0xF8F9, 0xF8AC }, /* GW1_CONFIG */
- { 0xF8FA, 0xF8AD }, /* GW2_CONFIG */
- { 0xF8FB, 0xF8AE }, /* GW3_CONFIG */
- { 0xF830, 0xF81E }, /* PROC_SELECT */
- { 0xF831, 0xF81F }, /* STOP_STATUS */
- { 0xF8FC, 0xF8AF }, /* IO_LOG_ADDRESS */
-};
-
-static const struct chip_device_regs_t unifi_device_regs_null =
-{
- 0xFE81, /* GBL_CHIP_VERSION */
- 0x0000, /* GBL_MISC_ENABLES */
- 0x0000, /* DBG_EMU_CMD */
- {
- 0x0000, /* HOST.DBG_PROC_SELECT */
- 0x0000, /* HOST.DBG_STOP_STATUS */
- 0x0000, /* HOST.WINDOW1_PAGE */
- 0x0000, /* HOST.WINDOW2_PAGE */
- 0x0000, /* HOST.WINDOW3_PAGE */
- 0x0000 /* HOST.IO_LOG_ADDR */
- },
- {
- 0x0000, /* SPI.DBG_PROC_SELECT */
- 0x0000, /* SPI.DBG_STOP_STATUS */
- 0x0000, /* SPI.WINDOW1_PAGE */
- 0x0000, /* SPI.WINDOW2_PAGE */
- 0x0000, /* SPI.WINDOW3_PAGE */
- 0x0000 /* SPI.IO_LOG_ADDR */
- },
- 0x0000, /* DBG_RESET */
- 0x0000, /* > DBG_RESET_VALUE */
- 0x0000, /* DBG_RESET_WARN */
- 0x0000, /* DBG_RESET_WARN_VALUE */
- 0x0000, /* DBG_RESET_RESULT */
- 0xFFE9, /* XAP_PCH */
- 0xFFEA, /* XAP_PCL */
- 0x0000, /* PROC_PC_SNOOP */
- 0x0000, /* WATCHDOG_DISABLE */
- 0x0000, /* MAILBOX0 */
- 0x0000, /* MAILBOX1 */
- 0x0000, /* MAILBOX2 */
- 0x0000, /* MAILBOX3 */
- 0x0000, /* SDIO_HOST_INT */
- 0x0000, /* SHARED_IO_INTERRUPT */
- 0x0000, /* SDIO HIP HANDSHAKE */
- 0x0000 /* COEX_STATUS */
-};
-
-/* UF105x */
-static const struct chip_device_regs_t unifi_device_regs_v1 =
-{
- 0xFE81, /* GBL_CHIP_VERSION */
- 0xFE87, /* GBL_MISC_ENABLES */
- 0xFE9C, /* DBG_EMU_CMD */
- {
- 0xFE90, /* HOST.DBG_PROC_SELECT */
- 0xFE8C, /* HOST.DBG_STOP_STATUS */
- 0xFE7B, /* HOST.WINDOW1_PAGE */
- 0xFE78, /* HOST.WINDOW2_PAGE */
- 0xFE7E, /* HOST.WINDOW3_PAGE */
- 0x0000 /* HOST.IO_LOG_ADDR */
- },
- {
- 0xFE91, /* SPI.DBG_PROC_SELECT */
- 0xFE8D, /* SPI.DBG_STOP_STATUS */
- 0xFE9F, /* SPI.WINDOW1_PAGE */
- 0xFE9E, /* SPI.WINDOW2_PAGE */
- 0xFE9D, /* SPI.WINDOW3_PAGE */
- 0x0000 /* SPI.IO_LOG_ADDR */
- },
- 0xFE92, /* DBG_RESET */
- 0x0001, /* > DBG_RESET_VALUE */
- 0xFDA0, /* DBG_RESET_WARN (HOST_SELECT) */
- 0x0000, /* DBG_RESET_WARN_VALUE */
- 0xFE92, /* DBG_RESET_RESULT */
- 0xFFE9, /* XAP_PCH */
- 0xFFEA, /* XAP_PCL */
- 0x0051, /* PROC_PC_SNOOP */
- 0xFE70, /* WATCHDOG_DISABLE */
- 0xFE6B, /* MAILBOX0 */
- 0xFE6A, /* MAILBOX1 */
- 0xFE69, /* MAILBOX2 */
- 0xFE68, /* MAILBOX3 */
- 0xFE67, /* SDIO_HOST_INT */
- 0xFE65, /* SHARED_IO_INTERRUPT */
- 0xFDE9, /* SDIO HIP HANDSHAKE */
- 0x0000 /* COEX_STATUS */
-};
-
-/* UF2... */
-static const struct chip_device_regs_t unifi_device_regs_v2 =
-{
- 0xFE81, /* GBL_CHIP_VERSION */
- 0xFE87, /* GBL_MISC_ENABLES */
- 0xFE9C, /* DBG_EMU_CMD */
- {
- 0xFE90, /* HOST.DBG_PROC_SELECT */
- 0xFE8C, /* HOST.DBG_STOP_STATUS */
- 0xFE7B, /* HOST.WINDOW1_PAGE */
- 0xFE78, /* HOST.WINDOW2_PAGE */
- 0xFE7E, /* HOST.WINDOW3_PAGE */
- 0x0000 /* HOST.IO_LOG_ADDR */
- },
- {
- 0xFE91, /* SPI.DBG_PROC_SELECT */
- 0xFE8D, /* SPI.DBG_STOP_STATUS */
- 0xFE9F, /* SPI.WINDOW1_PAGE */
- 0xFE9E, /* SPI.WINDOW2_PAGE */
- 0xFE9D, /* SPI.WINDOW3_PAGE */
- 0x0000 /* SPI.IO_LOG_ADDR */
- },
- 0xFE92, /* DBG_RESET */
- 0x0000, /* > DBG_RESET_VALUE */
- 0xFDE9, /* DBG_RESET_WARN (TEST_FLASH_DATA - SHARED_MAILBOX2B) */
- 0xFFFF, /* DBG_RESET_WARN_VALUE */
- 0xFDE9, /* DBG_RESET_RESULT (TEST_FLASH_DATA) */
- 0xFFE9, /* XAP_PCH */
- 0xFFEA, /* XAP_PCL */
- 0x0051, /* PROC_PC_SNOOP */
- 0xFE70, /* WATCHDOG_DISABLE */
- 0xFE6B, /* MAILBOX0 */
- 0xFE6A, /* MAILBOX1 */
- 0xFE69, /* MAILBOX2 */
- 0xFE68, /* MAILBOX3 */
- 0xFE67, /* SDIO_HOST_INT */
- 0xFE65, /* SHARED_IO_INTERRUPT */
- 0xFE69, /* SDIO HIP HANDSHAKE */
- 0x0000 /* COEX_STATUS */
-};
-
-/* UF60xx */
-static const struct chip_device_regs_t unifi_device_regs_v22_v23 =
-{
- 0xFE81, /* GBL_CHIP_VERSION */
- 0xF84F, /* GBL_MISC_ENABLES */
- 0xF81D, /* DBG_EMU_CMD */
- {
- 0xF81E, /* HOST.DBG_PROC_SELECT */
- 0xF81F, /* HOST.DBG_STOP_STATUS */
- 0xF8AC, /* HOST.WINDOW1_PAGE */
- 0xF8AD, /* HOST.WINDOW2_PAGE */
- 0xF8AE, /* HOST.WINDOW3_PAGE */
- 0xF8AF /* HOST.IO_LOG_ADDR */
- },
- {
- 0xF830, /* SPI.DBG_PROC_SELECT */
- 0xF831, /* SPI.DBG_STOP_STATUS */
- 0xF8F9, /* SPI.WINDOW1_PAGE */
- 0xF8FA, /* SPI.WINDOW2_PAGE */
- 0xF8FB, /* SPI.WINDOW3_PAGE */
- 0xF8FC /* SPI.IO_LOG_ADDR */
- },
- 0xF82F, /* DBG_RESET */
- 0x0001, /* > DBG_RESET_VALUE */
- 0x0000, /* DBG_RESET_WARN */
- 0x0000, /* DBG_RESET_WARN_VALUE */
- 0xF82F, /* DBG_RESET_RESULT */
- 0xFFE9, /* XAP_PCH */
- 0xFFEA, /* XAP_PCL */
- 0x001B, /* PROC_PC_SNOOP */
- 0x0055, /* WATCHDOG_DISABLE */
- 0xF84B, /* MAILBOX0 */
- 0xF84C, /* MAILBOX1 */
- 0xF84D, /* MAILBOX2 */
- 0xF84E, /* MAILBOX3 */
- 0xF92F, /* SDIO_HOST_INT */
- 0xF92B, /* SDIO_FROMHOST_SCRTACH0 / SHARED_IO_INTERRUPT */
- 0xF84D, /* SDIO HIP HANDSHAKE (MAILBOX2) */
- 0xF9FB /* COEX_STATUS */
-};
-
-/* Program memory window on UF105x. */
-static const struct window_shift_info_t prog_window_array_unifi_v1_v2[CHIP_HELPER_WT_COUNT] =
-{
- { TRUE, 11, 0x0200 }, /* CODE RAM */
- { TRUE, 11, 0x0000 }, /* FLASH */
- { TRUE, 11, 0x0400 }, /* External SRAM */
- { FALSE, 0, 0 }, /* ROM */
- { FALSE, 0, 0 } /* SHARED */
-};
-
-/* Shared memory window on UF105x. */
-static const struct window_shift_info_t shared_window_array_unifi_v1_v2[CHIP_HELPER_WT_COUNT] =
-{
- { FALSE, 0, 0 }, /* CODE RAM */
- { FALSE, 0, 0 }, /* FLASH */
- { FALSE, 0, 0 }, /* External SRAM */
- { FALSE, 0, 0 }, /* ROM */
- { TRUE, 11, 0x0000 } /* SHARED */
-};
-
-/* One of the Generic Windows on UF60xx and later. */
-static const struct window_shift_info_t generic_window_array_unifi_v22_v23[CHIP_HELPER_WT_COUNT] =
-{
- { TRUE, 11, 0x3800 }, /* CODE RAM */
- { FALSE, 0, 0 }, /* FLASH */
- { FALSE, 0, 0 }, /* External SRAM */
- { TRUE, 11, 0x2000 }, /* ROM */
- { TRUE, 11, 0x0000 } /* SHARED */
-};
-
-/* The three windows on UF105x. */
-static const struct window_info_t prog1_window_unifi_v1_v2 = { 0x0000, 0x2000, 0x0080, prog_window_array_unifi_v1_v2 };
-static const struct window_info_t prog2_window_unifi_v1_v2 = { 0x2000, 0x2000, 0x0000, prog_window_array_unifi_v1_v2 };
-static const struct window_info_t shared_window_unifi_v1_v2 = { 0x4000, 0x2000, 0x0000, shared_window_array_unifi_v1_v2 };
-
-/* The three windows on UF60xx and later. */
-static const struct window_info_t generic1_window_unifi_v22_v23 = { 0x0000, 0x2000, 0x0080, generic_window_array_unifi_v22_v23 };
-static const struct window_info_t generic2_window_unifi_v22_v23 = { 0x2000, 0x2000, 0x0000, generic_window_array_unifi_v22_v23 };
-static const struct window_info_t generic3_window_unifi_v22_v23 = { 0x4000, 0x2000, 0x0000, generic_window_array_unifi_v22_v23 };
-
-static const struct chip_device_desc_t chip_device_desc_null =
-{
- { FALSE, 0x0000, 0x0000, 0x00 },
- "",
- "",
- null_counted(), /* init */
- null_counted(), /* reset_prog */
- &unifi_device_regs_null, /* regs */
- {
- FALSE, /* has_flash */
- FALSE, /* has_ext_sram */
- FALSE, /* has_rom */
- FALSE, /* has_bt */
- FALSE, /* has_wlan */
- },
- null_counted(),
- /* prog_offset */
- {
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000
- },
- /* data_offset */
- {
- 0x0000 /* ram */
- },
- /* windows */
- {
- NULL,
- NULL,
- NULL
- }
-};
-
-static const struct chip_device_desc_t unifi_device_desc_v1 =
-{
- { FALSE, 0xf0ff, 0x1001, 0x01 }, /* UF105x R01 */
- "UF105x",
- "UniFi-1",
- counted(init_vals_v1), /* init */
- counted(reset_program_v1_or_v2), /* reset_prog */
- &unifi_device_regs_v1, /* regs */
- {
- TRUE, /* has_flash */
- TRUE, /* has_ext_sram */
- FALSE, /* has_rom */
- FALSE, /* has_bt */
- TRUE, /* has_wlan */
- },
- counted(unifi_map_address_v1_v2), /* map */
- /* prog_offset */
- {
- 0x00100000, /* ram */
- 0x00000000, /* rom (invalid) */
- 0x00000000, /* flash */
- 0x00200000, /* ext_ram */
- },
- /* data_offset */
- {
- 0x8000 /* ram */
- },
- /* windows */
- {
- &prog1_window_unifi_v1_v2,
- &prog2_window_unifi_v1_v2,
- &shared_window_unifi_v1_v2
- }
-};
-
-static const struct chip_device_desc_t unifi_device_desc_v2 =
-{
- { FALSE, 0xf0ff, 0x2001, 0x02 }, /* UF2... R02 */
- "UF2...",
- "UniFi-2",
- counted(init_vals_v2), /* init */
- counted(reset_program_v1_or_v2), /* reset_prog */
- &unifi_device_regs_v2, /* regs */
- {
- TRUE, /* has_flash */
- TRUE, /* has_ext_sram */
- FALSE, /* has_rom */
- FALSE, /* has_bt */
- TRUE, /* has_wlan */
- },
- counted(unifi_map_address_v1_v2), /* map */
- /* prog_offset */
- {
- 0x00100000, /* ram */
- 0x00000000, /* rom (invalid) */
- 0x00000000, /* flash */
- 0x00200000, /* ext_ram */
- },
- /* data_offset */
- {
- 0x8000 /* ram */
- },
- /* windows */
- {
- &prog1_window_unifi_v1_v2,
- &prog2_window_unifi_v1_v2,
- &shared_window_unifi_v1_v2
- }
-};
-
-static const struct chip_device_desc_t unifi_device_desc_v3 =
-{
- { FALSE, 0xf0ff, 0x3001, 0x02 }, /* UF2... R03 */
- "UF2...",
- "UniFi-3",
- counted(init_vals_v2), /* init */
- counted(reset_program_v1_or_v2), /* reset_prog */
- &unifi_device_regs_v2, /* regs */
- {
- TRUE, /* has_flash */
- TRUE, /* has_ext_sram */
- FALSE, /* has_rom */
- FALSE, /* has_bt */
- TRUE, /* has_wlan */
- },
- counted(unifi_map_address_v1_v2), /* map */
- /* prog_offset */
- {
- 0x00100000, /* ram */
- 0x00000000, /* rom (invalid) */
- 0x00000000, /* flash */
- 0x00200000, /* ext_ram */
- },
- /* data_offset */
- {
- 0x8000 /* ram */
- },
- /* windows */
- {
- &prog1_window_unifi_v1_v2,
- &prog2_window_unifi_v1_v2,
- &shared_window_unifi_v1_v2
- }
-};
-
-static const struct chip_device_desc_t unifi_device_desc_v22 =
-{
- { FALSE, 0x00ff, 0x0022, 0x07 }, /* UF60xx */
- "UF60xx",
- "UniFi-4",
- counted(init_vals_v22_v23), /* init */
- null_counted(), /* reset_prog */
- &unifi_device_regs_v22_v23, /* regs */
- {
- FALSE, /* has_flash */
- FALSE, /* has_ext_sram */
- TRUE, /* has_rom */
- FALSE, /* has_bt */
- TRUE, /* has_wlan */
- },
- counted(unifi_map_address_v22_v23), /* map */
- /* prog_offset */
- {
- 0x00C00000, /* ram */
- 0x00000000, /* rom */
- 0x00000000, /* flash (invalid) */
- 0x00000000, /* ext_ram (invalid) */
- },
- /* data_offset */
- {
- 0x8000 /* ram */
- },
- /* windows */
- {
- &generic1_window_unifi_v22_v23,
- &generic2_window_unifi_v22_v23,
- &generic3_window_unifi_v22_v23
- }
-};
-
-static const struct chip_device_desc_t unifi_device_desc_v23 =
-{
- { FALSE, 0x00ff, 0x0023, 0x08 }, /* UF.... */
- "UF....",
- "UF.... (5)",
- counted(init_vals_v22_v23), /* init */
- null_counted(), /* reset_prog */
- &unifi_device_regs_v22_v23, /* regs */
- {
- FALSE, /* has_flash */
- FALSE, /* has_ext_sram */
- TRUE, /* has_rom */
- TRUE, /* has_bt */
- TRUE, /* has_wlan */
- },
- counted(unifi_map_address_v22_v23),
- /* prog_offset */
- {
- 0x00C00000, /* ram */
- 0x00000000, /* rom */
- 0x00000000, /* flash (invalid) */
- 0x00000000, /* ext_sram (invalid) */
- },
- /* data_offset */
- {
- 0x8000 /* ram */
- },
- /* windows */
- {
- &generic1_window_unifi_v22_v23,
- &generic2_window_unifi_v22_v23,
- &generic3_window_unifi_v22_v23
- }
-};
-
-static const struct chip_device_desc_t hyd_wlan_subsys_desc_v1 =
-{
- { FALSE, 0x00ff, 0x0044, 0x00 }, /* UF.... */
- "HYD...",
- "HYD... ",
- counted(init_vals_v22_v23), /* init */
- null_counted(), /* reset_prog */
- &unifi_device_regs_v22_v23, /* regs */
- {
- FALSE, /* has_flash */
- FALSE, /* has_ext_sram */
- TRUE, /* has_rom */
- FALSE, /* has_bt */
- TRUE, /* has_wlan */
- },
- counted(unifi_map_address_v22_v23),
- /* prog_offset */
- {
- 0x00C00000, /* ram */
- 0x00000000, /* rom */
- 0x00000000, /* flash (invalid) */
- 0x00000000, /* ext_sram (invalid) */
- },
- /* data_offset */
- {
- 0x8000 /* ram */
- },
- /* windows */
- {
- &generic1_window_unifi_v22_v23,
- &generic2_window_unifi_v22_v23,
- &generic3_window_unifi_v22_v23
- }
-};
-
-
-/* This is the list of all chips that we know about. I'm
- assuming that the order here will be important - we
- might have multiple entries witrh the same SDIO id for
- instance. The first one in this list will be the one
- that is returned if a search is done on only that id.
- The client will then have to call GetVersionXXX again
- but with more detailed info.
-
- I don't know if we need to signal this up to the client
- in some way?
-
- (We get the SDIO id before we know anything else about
- the chip. We might not be able to read any of the other
- registers at first, but we still need to know about the
- chip). */
-static const struct chip_device_desc_t *chip_ver_to_desc[] =
-{
- &unifi_device_desc_v1, /* UF105x R01 */
- &unifi_device_desc_v2, /* UF2... R02 */
- &unifi_device_desc_v3, /* UF2... R03 */
- &unifi_device_desc_v22, /* UF60xx */
- &unifi_device_desc_v23, /* UF.... */
- &hyd_wlan_subsys_desc_v1
-};
-
-ChipDescript* ChipHelper_GetVersionSdio(u8 sdio_ver)
-{
- u32 i;
-
- for (i = 0; i < nelem(chip_ver_to_desc); i++)
- {
- if (chip_ver_to_desc[i]->chip_version.sdio == sdio_ver)
- {
- return chip_ver_to_desc[i];
- }
- }
-
- return &chip_device_desc_null;
-}
-
-
-ChipDescript* ChipHelper_GetVersionAny(u16 from_FF9A, u16 from_FE81)
-{
- u32 i;
-
- if ((from_FF9A & 0xFF00) != 0)
- {
- for (i = 0; i < nelem(chip_ver_to_desc); i++)
- {
- if (chip_ver_to_desc[i]->chip_version.pre_bc7 &&
- ((from_FF9A & chip_ver_to_desc[i]->chip_version.mask) ==
- chip_ver_to_desc[i]->chip_version.result))
- {
- return chip_ver_to_desc[i];
- }
- }
- }
- else
- {
- for (i = 0; i < nelem(chip_ver_to_desc); i++)
- {
- if (!chip_ver_to_desc[i]->chip_version.pre_bc7 &&
- ((from_FE81 & chip_ver_to_desc[i]->chip_version.mask) ==
- chip_ver_to_desc[i]->chip_version.result))
- {
- return chip_ver_to_desc[i];
- }
- }
- }
-
- return &chip_device_desc_null;
-}
-
-
-ChipDescript* ChipHelper_GetVersionUniFi(u16 ver)
-{
- return ChipHelper_GetVersionAny(0x0000, ver);
-}
-
-
-ChipDescript *ChipHelper_Null(void)
-{
- return &chip_device_desc_null;
-}
-
-
-ChipDescript* ChipHelper_GetVersionBlueCore(enum chip_helper_bluecore_age bc_age, u16 version)
-{
- if (bc_age == chip_helper_bluecore_pre_bc7)
- {
- return ChipHelper_GetVersionAny(version, 0x0000);
- }
- else
- {
- return ChipHelper_GetVersionAny(0x0000, version);
- }
-}
-
-
-/* Expand the DEF0 functions into simple code to return the
- correct thing. The DEF1 functions expand to nothing in
- this X macro expansion. */
-#define CHIP_HELPER_DEF0_C_DEF(ret_type, name, info) \
- ret_type ChipHelper_ ## name(ChipDescript * chip_help) \
- { \
- return chip_help->info; \
- }
-#define CHIP_HELPER_DEF1_C_DEF(ret_type, name, type1, name1)
-
-CHIP_HELPER_LIST(C_DEF)
-
-/*
- * Map register addresses between HOST and SPI access.
- */
-u16 ChipHelper_MapAddress_SPI2HOST(ChipDescript *chip_help, u16 addr)
-{
- u32 i;
- for (i = 0; i < chip_help->map.len; i++)
- {
- if (chip_help->map.vals[i].spi == addr)
- {
- return chip_help->map.vals[i].host;
- }
- }
- return addr;
-}
-
-
-u16 ChipHelper_MapAddress_HOST2SPI(ChipDescript *chip_help, u16 addr)
-{
- u32 i;
- for (i = 0; i < chip_help->map.len; i++)
- {
- if (chip_help->map.vals[i].host == addr)
- {
- return chip_help->map.vals[i].spi;
- }
- }
- return addr;
-}
-
-
-/* The address returned by this function is the start of the
- window in the address space, that is where we can start
- accessing data from. If a section of the window at the
- start is unusable because something else is cluttering up
- the address map then that is taken into account and this
- function returns that address justt past that. */
-u16 ChipHelper_WINDOW_ADDRESS(ChipDescript *chip_help,
- enum chip_helper_window_index window)
-{
- if (window < CHIP_HELPER_WINDOW_COUNT &&
- chip_help->windows[window] != NULL)
- {
- return chip_help->windows[window]->address + chip_help->windows[window]->blocked;
- }
- return 0;
-}
-
-
-/* This returns the size of the window minus any blocked section */
-u16 ChipHelper_WINDOW_SIZE(ChipDescript *chip_help,
- enum chip_helper_window_index window)
-{
- if (window < CHIP_HELPER_WINDOW_COUNT &&
- chip_help->windows[window] != NULL)
- {
- return chip_help->windows[window]->size - chip_help->windows[window]->blocked;
- }
- return 0;
-}
-
-
-/* Get the register writes we should do to make sure that
- the chip is running with most clocks on. */
-u32 ChipHelper_ClockStartupSequence(ChipDescript *chip_help,
- const struct chip_helper_init_values **val)
-{
- *val = chip_help->init.vals;
- return chip_help->init.len;
-}
-
-
-/* Get the set of values tat we should write to the chip to perform a reset. */
-u32 ChipHelper_HostResetSequence(ChipDescript *chip_help,
- const struct chip_helper_reset_values **val)
-{
- *val = chip_help->reset_prog.vals;
- return chip_help->reset_prog.len;
-}
-
-
-/* Decode a windowed access to the chip. */
-s32 ChipHelper_DecodeWindow(ChipDescript *chip_help,
- enum chip_helper_window_index window,
- enum chip_helper_window_type type,
- u32 offset,
- u16 *page, u16 *addr, u32 *len)
-{
- const struct window_info_t *win;
- const struct window_shift_info_t *mode;
- u16 of, pg;
-
- if (window >= CHIP_HELPER_WINDOW_COUNT)
- {
- return FALSE;
- }
- if ((win = chip_help->windows[window]) == NULL)
- {
- return FALSE;
- }
- if (type >= CHIP_HELPER_WT_COUNT)
- {
- return FALSE;
- }
- if ((mode = &win->mode[type]) == NULL)
- {
- return FALSE;
- }
- if (!mode->allowed)
- {
- return FALSE;
- }
-
- pg = (u16)(offset >> mode->page_shift) + mode->page_offset;
- of = (u16)(offset & ((1 << mode->page_shift) - 1));
- /* If 'blocked' is zero this does nothing, else decrease
- the page register and increase the offset until we aren't
- in the blocked region of the window. */
- while (of < win->blocked)
- {
- of += 1 << mode->page_shift;
- pg--;
- }
- *page = pg;
- *addr = win->address + of;
- *len = win->size - of;
- return TRUE;
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_hip_chiphelper.h b/drivers/staging/csr/csr_wifi_hip_chiphelper.h
deleted file mode 100644
index 09b3aefcbced..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_chiphelper.h
+++ /dev/null
@@ -1,407 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#ifndef CSR_WIFI_HIP_CHIPHELPER_H__
-#define CSR_WIFI_HIP_CHIPHELPER_H__
-
-
-#include <linux/types.h>
-
-/* The age of the BlueCore chip. This is probably not useful, if
- you know the age then you can probably work out the version directly. */
-enum chip_helper_bluecore_age
-{
- chip_helper_bluecore_pre_bc7,
- chip_helper_bluecore_bc7_or_later
-};
-
-/* We support up to three windowed regions at the moment.
- Don't reorder these - they're used to index into an array. */
-enum chip_helper_window_index
-{
- CHIP_HELPER_WINDOW_1 = 0,
- CHIP_HELPER_WINDOW_2 = 1,
- CHIP_HELPER_WINDOW_3 = 2,
- CHIP_HELPER_WINDOW_COUNT = 3
-};
-
-/* These are the things that we can access through a window.
- Don't reorder these - they're used to index into an array. */
-enum chip_helper_window_type
-{
- CHIP_HELPER_WT_CODE_RAM = 0,
- CHIP_HELPER_WT_FLASH = 1,
- CHIP_HELPER_WT_EXT_SRAM = 2,
- CHIP_HELPER_WT_ROM = 3,
- CHIP_HELPER_WT_SHARED = 4,
- CHIP_HELPER_WT_COUNT = 5
-};
-
-/* Commands to stop and start the XAP */
-enum chip_helper_dbg_emu_cmd_enum
-{
- CHIP_HELPER_DBG_EMU_CMD_XAP_STEP_MASK = 0x0001,
- CHIP_HELPER_DBG_EMU_CMD_XAP_RUN_B_MASK = 0x0002,
- CHIP_HELPER_DBG_EMU_CMD_XAP_BRK_MASK = 0x0004,
- CHIP_HELPER_DBG_EMU_CMD_XAP_WAKEUP_MASK = 0x0008
-};
-
-/* Bitmasks for Stop and sleep status: DBG_SPI_STOP_STATUS & DBG_HOST_STOP_STATUS */
-enum chip_helper_dbg_stop_status_enum
-{
- CHIP_HELPER_DBG_STOP_STATUS_NONE_MASK = 0x0000,
- CHIP_HELPER_DBG_STOP_STATUS_P0_MASK = 0x0001,
- CHIP_HELPER_DBG_STOP_STATUS_P1_MASK = 0x0002,
- CHIP_HELPER_DBG_STOP_STATUS_P2_MASK = 0x0004,
- CHIP_HELPER_DBG_STOP_STATUS_SLEEP_STATUS_P0_MASK = 0x0008,
- CHIP_HELPER_DBG_STOP_STATUS_SLEEP_STATUS_P1_MASK = 0x0010,
- CHIP_HELPER_DBG_STOP_STATUS_SLEEP_STATUS_P2_MASK = 0x0020,
- /* Legacy names/alias */
- CHIP_HELPER_DBG_STOP_STATUS_MAC_MASK = 0x0001,
- CHIP_HELPER_DBG_STOP_STATUS_PHY_MASK = 0x0002,
- CHIP_HELPER_DBG_STOP_STATUS_BT_MASK = 0x0004,
- CHIP_HELPER_DBG_STOP_STATUS_SLEEP_STATUS_MAC_MASK = 0x0008,
- CHIP_HELPER_DBG_STOP_STATUS_SLEEP_STATUS_PHY_MASK = 0x0010,
- CHIP_HELPER_DBG_STOP_STATUS_SLEEP_STATUS_BT_MASK = 0x0020
-};
-
-/* Codes to disable the watchdog */
-enum chip_helper_watchdog_disable_enum
-{
- CHIP_HELPER_WATCHDOG_DISABLE_CODE1 = 0x6734,
- CHIP_HELPER_WATCHDOG_DISABLE_CODE2 = 0xD6BF,
- CHIP_HELPER_WATCHDOG_DISABLE_CODE3 = 0xC31E
-};
-
-/* Other bits have changed between versions */
-enum chip_helper_gbl_misc_enum
-{
- CHIP_HELPER_GBL_MISC_SPI_STOP_OUT_EN_MASK = 0x0001,
- CHIP_HELPER_GBL_MISC_MMU_INIT_DONE_MASK = 0x0004
-};
-
-/* Coex status register, contains interrupt status and reset pullup status.
- * CHIP_HELPER_COEX_STATUS_RST_PULLS_MSB_MASK can be used to check
- * for WAPI on R03 chips and later. */
-enum chip_helper_coex_status_mask_enum
-{
- CHIP_HELPER_COEX_STATUS_RST_PULLS_LSB_MASK = 0x0001,
- CHIP_HELPER_COEX_STATUS_RST_PULLS_MSB_MASK = 0x0008,
- CHIP_HELPER_COEX_STATUS_WL_FEC_PINS_LSB_MASK = 0x0010,
- CHIP_HELPER_COEX_STATUS_WL_FEC_PINS_MSB_MASK = 0x0080,
- CHIP_HELPER_COEX_STATUS_INT_UART_MASK = 0x0100,
- CHIP_HELPER_COEX_STATUS_INT_BT_LEG_MASK = 0x0200
-};
-
-/* How to select the different CPUs */
-enum chip_helper_dbg_proc_sel_enum
-{
- CHIP_HELPER_DBG_PROC_SEL_MAC = 0,
- CHIP_HELPER_DBG_PROC_SEL_PHY = 1,
- CHIP_HELPER_DBG_PROC_SEL_BT = 2,
- CHIP_HELPER_DBG_PROC_SEL_NONE = 2,
- CHIP_HELPER_DBG_PROC_SEL_BOTH = 3
-};
-
-/* These are the only registers that we have to know the
- address of before we know the chip version. */
-enum chip_helper_fixed_registers
-{
- /* This is the address of GBL_CHIP_VERISON on BC7,
- UF105x, UF60xx and
- anything later than that. */
- CHIP_HELPER_UNIFI_GBL_CHIP_VERSION = 0xFE81,
-
- CHIP_HELPER_OLD_BLUECORE_GBL_CHIP_VERSION = 0xFF9A
-
- /* This isn't used at the moment (but might be needed
- to distinguish the BlueCore sub version?) */
- /* CHIP_HELPER_OLD_BLUECORE_ANA_VERSION_ID = 0xFF7D */
-};
-
-/* Address-value pairs for defining initialisation values */
-struct chip_helper_init_values
-{
- u16 addr;
- u16 value;
-};
-
-/* A block of data that should be written to the device */
-struct chip_helper_reset_values
-{
- u32 gp_address;
- u32 len;
- const u16 *data;
-};
-
-/*
- * This is the C API.
- */
-
-/* opaque type */
-typedef const struct chip_device_desc_t ChipDescript;
-
-/* Return a NULL descriptor */
-ChipDescript* ChipHelper_Null(void);
-
-/* This should get the correct version for any CSR chip.
- The two parameters are what is read from addresses
- 0xFF9A and 0xFE81 (OLD_BLUECORE_GBL_CHIP_VERSION and
- UNIFI_GBL_CHIP_VERSION). These should give a unique identity
- for most (all?) chips.
-
- FF9A is the old GBL_CHIP_VERSION register. If the high
- eight bits are zero then the chip is a new (BC7 +) one
- and FE81 is the _new_ GBL_CHIP_VERSION register. */
-ChipDescript* ChipHelper_GetVersionAny(u16 from_FF9A, u16 from_FE81);
-
-/* The chip is a UniFi, but we don't know which type
- The parameter is the value of UNIFI_GBL_CHIP_VERSION (0xFE81) */
-ChipDescript* ChipHelper_GetVersionUniFi(u16 version);
-
-/* This gets the version from the SDIO device id. This only
- gives quite a coarse grained version, so we should update once
- we hav access to the function N registers. */
-ChipDescript* ChipHelper_GetVersionSdio(u8 sdio_version);
-
-/* The chip is some sort of BlueCore. If "age" is "pre_bc7" then
- "version" is what was read from FF9A. If "age" is bc7_or_later
- then "version" is read from FE81. If we don't know if we're pre
- or post BC7 then we should use "GetVersionAny". */
-ChipDescript* ChipHelper_GetVersionBlueCore(enum chip_helper_bluecore_age age,
- u16 version);
-
-/* The main functions of this class are built with an X macro. This
- means we can generate the C and C++ versions from the same source
- without the two diverging.
-
- The DEF0 functions are simple and take no parameters. The first
- parameter to the macro is the return type. The second parameter
- is the function name and the third parameter is where to get the
- info from (this is hidden from the user).
-
- The DEF1 functions take one parameter. This time the third macro
- parameter is the type of this parameter, and the fourth macro
- parameter is the name of the parameter. The bodies of these
- functions are hand written. */
-#define CHIP_HELPER_LIST(m) \
- CHIP_HELPER_DEF0(m, (const char *, FriendlyName, friendly_name)) \
- CHIP_HELPER_DEF0(m, (const char *, MarketingName, marketing_name)) \
- CHIP_HELPER_DEF0(m, (u16, DBG_EMU_CMD, regs->dbg_emu_cmd)) \
- CHIP_HELPER_DEF0(m, (u16, DBG_HOST_PROC_SELECT, regs->host.dbg_proc_select)) \
- CHIP_HELPER_DEF0(m, (u16, DBG_HOST_STOP_STATUS, regs->host.dbg_stop_status)) \
- CHIP_HELPER_DEF0(m, (u16, HOST_WINDOW1_PAGE, regs->host.window1_page)) \
- CHIP_HELPER_DEF0(m, (u16, HOST_WINDOW2_PAGE, regs->host.window2_page)) \
- CHIP_HELPER_DEF0(m, (u16, HOST_WINDOW3_PAGE, regs->host.window3_page)) \
- CHIP_HELPER_DEF0(m, (u16, HOST_IO_LOG_ADDR, regs->host.io_log_addr)) \
- CHIP_HELPER_DEF0(m, (u16, DBG_SPI_PROC_SELECT, regs->spi.dbg_proc_select)) \
- CHIP_HELPER_DEF0(m, (u16, DBG_SPI_STOP_STATUS, regs->spi.dbg_stop_status)) \
- CHIP_HELPER_DEF0(m, (u16, SPI_WINDOW1_PAGE, regs->spi.window1_page)) \
- CHIP_HELPER_DEF0(m, (u16, SPI_WINDOW2_PAGE, regs->spi.window2_page)) \
- CHIP_HELPER_DEF0(m, (u16, SPI_WINDOW3_PAGE, regs->spi.window3_page)) \
- CHIP_HELPER_DEF0(m, (u16, SPI_IO_LOG_ADDR, regs->spi.io_log_addr)) \
- CHIP_HELPER_DEF0(m, (u16, DBG_RESET, regs->dbg_reset)) \
- CHIP_HELPER_DEF0(m, (u16, DBG_RESET_VALUE, regs->dbg_reset_value)) \
- CHIP_HELPER_DEF0(m, (u16, DBG_RESET_WARN, regs->dbg_reset_warn)) \
- CHIP_HELPER_DEF0(m, (u16, DBG_RESET_WARN_VALUE, regs->dbg_reset_warn_value)) \
- CHIP_HELPER_DEF0(m, (u16, DBG_RESET_RESULT, regs->dbg_reset_result)) \
- CHIP_HELPER_DEF0(m, (u16, WATCHDOG_DISABLE, regs->watchdog_disable)) \
- CHIP_HELPER_DEF0(m, (u16, PROC_PC_SNOOP, regs->proc_pc_snoop)) \
- CHIP_HELPER_DEF0(m, (u16, GBL_CHIP_VERSION, regs->gbl_chip_version)) \
- CHIP_HELPER_DEF0(m, (u16, GBL_MISC_ENABLES, regs->gbl_misc_enables)) \
- CHIP_HELPER_DEF0(m, (u16, XAP_PCH, regs->xap_pch)) \
- CHIP_HELPER_DEF0(m, (u16, XAP_PCL, regs->xap_pcl)) \
- CHIP_HELPER_DEF0(m, (u16, MAILBOX0, regs->mailbox0)) \
- CHIP_HELPER_DEF0(m, (u16, MAILBOX1, regs->mailbox1)) \
- CHIP_HELPER_DEF0(m, (u16, MAILBOX2, regs->mailbox2)) \
- CHIP_HELPER_DEF0(m, (u16, MAILBOX3, regs->mailbox3)) \
- CHIP_HELPER_DEF0(m, (u16, SDIO_HIP_HANDSHAKE, regs->sdio_hip_handshake)) \
- CHIP_HELPER_DEF0(m, (u16, SDIO_HOST_INT, regs->sdio_host_int)) \
- CHIP_HELPER_DEF0(m, (u16, COEX_STATUS, regs->coex_status)) \
- CHIP_HELPER_DEF0(m, (u16, SHARED_IO_INTERRUPT, regs->shared_io_interrupt)) \
- CHIP_HELPER_DEF0(m, (u32, PROGRAM_MEMORY_RAM_OFFSET, prog_offset.ram)) \
- CHIP_HELPER_DEF0(m, (u32, PROGRAM_MEMORY_ROM_OFFSET, prog_offset.rom)) \
- CHIP_HELPER_DEF0(m, (u32, PROGRAM_MEMORY_FLASH_OFFSET, prog_offset.flash)) \
- CHIP_HELPER_DEF0(m, (u32, PROGRAM_MEMORY_EXT_SRAM_OFFSET, prog_offset.ext_sram)) \
- CHIP_HELPER_DEF0(m, (u16, DATA_MEMORY_RAM_OFFSET, data_offset.ram)) \
- CHIP_HELPER_DEF0(m, (s32, HasFlash, bools.has_flash)) \
- CHIP_HELPER_DEF0(m, (s32, HasExtSram, bools.has_ext_sram)) \
- CHIP_HELPER_DEF0(m, (s32, HasRom, bools.has_rom)) \
- CHIP_HELPER_DEF0(m, (s32, HasBt, bools.has_bt)) \
- CHIP_HELPER_DEF0(m, (s32, HasWLan, bools.has_wlan)) \
- CHIP_HELPER_DEF1(m, (u16, WINDOW_ADDRESS, enum chip_helper_window_index, window)) \
- CHIP_HELPER_DEF1(m, (u16, WINDOW_SIZE, enum chip_helper_window_index, window)) \
- CHIP_HELPER_DEF1(m, (u16, MapAddress_SPI2HOST, u16, addr)) \
- CHIP_HELPER_DEF1(m, (u16, MapAddress_HOST2SPI, u16, addr)) \
- CHIP_HELPER_DEF1(m, (u32, ClockStartupSequence, const struct chip_helper_init_values **, val)) \
- CHIP_HELPER_DEF1(m, (u32, HostResetSequence, const struct chip_helper_reset_values **, val))
-
-/* Some magic to help the expansion */
-#define CHIP_HELPER_DEF0(a, b) \
- CHIP_HELPER_DEF0_ ## a b
-#define CHIP_HELPER_DEF1(a, b) \
- CHIP_HELPER_DEF1_ ## a b
-
-/* Macros so that when we expand the list we get "C" function prototypes. */
-#define CHIP_HELPER_DEF0_C_DEC(ret_type, name, info) \
- ret_type ChipHelper_ ## name(ChipDescript * chip_help);
-#define CHIP_HELPER_DEF1_C_DEC(ret_type, name, type1, name1) \
- ret_type ChipHelper_ ## name(ChipDescript * chip_help, type1 name1);
-
-CHIP_HELPER_LIST(C_DEC)
-
-/* FriendlyName
- MarketingName
-
- These two functions return human readable strings that describe
- the chip. FriendlyName returns something that a software engineer
- at CSR might understand. MarketingName returns something more like
- an external name for a CSR chip.
-*/
-/* DBG_EMU_CMD
- WATCHDOG_DISABLE
- PROC_PC_SNOOP
- GBL_CHIP_VERSION
- XAP_PCH
- XAP_PCL
-
- These registers are used to control the XAPs.
-*/
-/* DBG_HOST_PROC_SELECT DBG_HOST_STOP_STATUS
- HOST_WINDOW1_PAGE HOST_WINDOW2_PAGE HOST_WINDOW3_PAGE
- HOST_IO_LOG_ADDR
- DBG_SPI_PROC_SELECT DBG_SPI_STOP_STATUS
- SPI_WINDOW1_PAGE SPI_WINDOW2_PAGE SPI_WINDOW3_PAGE
- SPI_IO_LOG_ADDR
-
- These register are used to control the XAPs and the memory
- windows, normally while debugging the code on chip. There
- are two versons of these registers, one for access via SPI
- and another for access via the host interface.
-*/
-/* DBG_RESET
- DBG_RESET_VALUE
- DBG_RESET_WARN
- DBG_RESET_WARN_VALUE
- DBG_RESET_RESULT
-
- These registers are used to reset the XAP. This can be
- quite complex for some chips. If DBG_RESET_WARN is non
- zero the DBG_RESET_WARN_VALUE should be written to address
- DBG_RESET_WARN before the reset is perfeormed. DBG_RESET_VALUE
- should then be written to DBG_RESET to make the reset happen.
- The DBG_RESET_RESULT register should contain 0 if the reset
- was successful.
-*/
-/* GBL_MISC_ENABLES
-
- This register controls some special chip features. It
- should be used with care is it changes quite a lot between
- chip versions.
-*/
-/* MAILBOX0
- MAILBOX1
- MAILBOX2
- MAILBOX3
-
- The mailbox registers are for communication between the host
- and the firmware. There use is described in part by the host
- interface protcol specifcation.
-*/
-/* SDIO_HIP_HANDSHAKE
-
- This is one of the more important SDIO HIP registers. On some
- chips it has the same value as one of the mailbox registers
- and on other chips it is different.
-*/
-/* SDIO_HOST_INT
- SHARED_IO_INTERRUPT
-
- These registers are used by some versions of the host interface
- protocol specification. Their names should probably be changed
- to hide the registers and to expose the functions more.
-*/
-/* COEX_STATUS
-
- Coex status register, contains interrupt status and reset
- pullup status. The latter is used to detect WAPI.
-*/
-/* PROGRAM_MEMORY_RAM_OFFSET
- PROGRAM_MEMORY_ROM_OFFSET
- PROGRAM_MEMORY_FLASH_OFFSET
- PROGRAM_MEMORY_EXT_SRAM_OFFSET
- DATA_MEMORY_RAM_OFFSET
-
- These are constants that describe the offset of the different
- memory types in the two different address spaces.
-*/
-/* HasFlash HasExtSram HasRom
- HasBt HasWLan
-
- These are a set of bools describing the chip.
-*/
-/* WINDOW_ADDRESS WINDOW_SIZE
-
- These two functions return the size and address of the windows.
- The address is the address of the lowest value in the address
- map that is part of the window and the size is the number of
- visible words.
-
- Some of the windows have their lowest portion covered by
- registers. For these windows address is the first address
- after the registers and size is the siave excluding the part
- covered by registers.
-*/
-/* MapAddress_SPI2HOST
- MapAddress_HOST2SPI
-
- The debugging interface is duplicated on UniFi and later chips
- so that there are two versions - one over the SPI interaface and
- the other over the SDIO interface. These functions map the
- registers between these two interfaces.
-*/
-/* ClockStartupSequence
-
- This function returns the list of register value pairs that
- should be forced into UniFi to enable SPI communication. This
- set of registers is not needed if the firmware is running, but
- will be needed if the device is being booted from cold. These
- register writes enable the clocks and setup the PLL to a basic
- working state. SPI access might be unreliable until these writes
- have occurred (And they may take mulitple goes).
-*/
-/* HostResetSequence
-
- This returns a number of chunks of data and generic pointers.
- All of the XAPs should be stopped. The data should be written
- to the generic pointers. The instruction pointer for the MAC
- should then be set to the start of program memory and then the
- MAC should be "go"d. This will reset the chip in a reliable
- and orderly manner without resetting the SDIO interface. It
- is therefore not needed if the chip is being accessed by the
- SPI interface (the DBG_RESET_ mechanism can be used instead).
-*/
-
-/* The Decode Window function is more complex. For the window
- 'window' it tries to return the address and page register
- value needed to see offset 'offset' of memory type 'type'.
-
- It return 1 on success and 0 on failure. 'page' is what
- should be written to the page register. 'addr' is the
- address in the XAPs 16 address map to read from. 'len'
- is the length that we can read without having to change
- the page registers. */
-s32 ChipHelper_DecodeWindow(ChipDescript *chip_help,
- enum chip_helper_window_index window,
- enum chip_helper_window_type type,
- u32 offset,
- u16 *page, u16 *addr, u32 *len);
-
-#endif
diff --git a/drivers/staging/csr/csr_wifi_hip_chiphelper_private.h b/drivers/staging/csr/csr_wifi_hip_chiphelper_private.h
deleted file mode 100644
index e5e579912550..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_chiphelper_private.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#ifndef CSR_WIFI_HIP_CHIPHELPER_PRIVATE_H__
-#define CSR_WIFI_HIP_CHIPHELPER_PRIVATE_H__
-
-
-#include "csr_wifi_hip_chiphelper.h"
-
-/* This GP stuff should be somewhere else? */
-
-/* Memory spaces encoded in top byte of Generic Pointer type */
-#define UNIFI_SH_DMEM 0x01 /* Shared Data Memory */
-#define UNIFI_EXT_FLASH 0x02 /* External FLASH */
-#define UNIFI_EXT_SRAM 0x03 /* External SRAM */
-#define UNIFI_REGISTERS 0x04 /* Registers */
-#define UNIFI_PHY_DMEM 0x10 /* PHY Data Memory */
-#define UNIFI_PHY_PMEM 0x11 /* PHY Program Memory */
-#define UNIFI_PHY_ROM 0x12 /* PHY ROM */
-#define UNIFI_MAC_DMEM 0x20 /* MAC Data Memory */
-#define UNIFI_MAC_PMEM 0x21 /* MAC Program Memory */
-#define UNIFI_MAC_ROM 0x22 /* MAC ROM */
-#define UNIFI_BT_DMEM 0x30 /* BT Data Memory */
-#define UNIFI_BT_PMEM 0x31 /* BT Program Memory */
-#define UNIFI_BT_ROM 0x32 /* BT ROM */
-
-#define MAKE_GP(R, O) (((UNIFI_ ## R) << 24) | (O))
-#define GP_OFFSET(GP) ((GP) & 0xFFFFFF)
-#define GP_SPACE(GP) (((GP) >> 24) & 0xFF)
-
-
-/* Address value pairs */
-struct val_array_t
-{
- u32 len;
- const struct chip_helper_init_values *vals;
-};
-
-/* Just a (counted) u16 array */
-struct data_array_t
-{
- u32 len;
- const u16 *vals;
-};
-
-struct reset_prog_t
-{
- u32 len;
- const struct chip_helper_reset_values *vals;
-};
-
-/* The addresses of registers that are equivalent but on
- different host transports. */
-struct chip_map_address_t
-{
- u16 spi, host;
-};
-
-struct map_array_t
-{
- u32 len;
- const struct chip_map_address_t *vals;
-};
-
-struct chip_device_regs_per_transport_t
-{
- u16 dbg_proc_select;
- u16 dbg_stop_status;
- u16 window1_page; /* PROG_PMEM1 or GW1 */
- u16 window2_page; /* PROG_PMEM2 or GW2 */
- u16 window3_page; /* SHARED or GW3 */
- u16 io_log_addr;
-};
-
-struct chip_device_regs_t
-{
- u16 gbl_chip_version;
- u16 gbl_misc_enables;
- u16 dbg_emu_cmd;
- struct chip_device_regs_per_transport_t host;
- struct chip_device_regs_per_transport_t spi;
- u16 dbg_reset;
- u16 dbg_reset_value;
- u16 dbg_reset_warn;
- u16 dbg_reset_warn_value;
- u16 dbg_reset_result;
- u16 xap_pch;
- u16 xap_pcl;
- u16 proc_pc_snoop;
- u16 watchdog_disable;
- u16 mailbox0;
- u16 mailbox1;
- u16 mailbox2;
- u16 mailbox3;
- u16 sdio_host_int;
- u16 shared_io_interrupt;
- u16 sdio_hip_handshake;
- u16 coex_status; /* Allows WAPI detection */
-};
-
-/* If allowed is false then this window does not provide this
- type of access.
- This describes how addresses should be shifted to make the
- "page" address. The address is shifted left by 'page_shift'
- and then has 'page_offset' added. This value should then be
- written to the page register. */
-struct window_shift_info_t
-{
- s32 allowed;
- u32 page_shift;
- u16 page_offset;
-};
-
-/* Each window has an address and size. These are obvious. It then
- has a description for each type of memory that might be accessed
- through it. There might also be a start to the offset of the window.
- This means that that number of addresses at the start of the window
- are unusable. */
-struct window_info_t
-{
- u16 address;
- u16 size;
- u16 blocked;
- const struct window_shift_info_t *mode;
-};
-
-/* If GBL_CHIP_VERSION and'ed with 'mask' and is equal to 'result'
- then this is the correct set of info. If pre_bc7 is true then the
- address of GBL_CHIP_VERSION is FF9A, else its FE81. */
-struct chip_version_t
-{
- s32 pre_bc7;
- u16 mask;
- u16 result;
- u8 sdio;
-};
-
-struct chip_device_desc_t
-{
- struct chip_version_t chip_version;
-
- /* This is a text string that a human might find useful (BC02, UF105x) */
- const char *friendly_name;
- /* This is what we show to customers */
- const char *marketing_name;
-
- /* Initialisation values to write following a reset */
- struct val_array_t init;
-
- /* Binary sequence for hard reset */
- struct reset_prog_t reset_prog;
-
- /* The register map */
- const struct chip_device_regs_t *regs;
-
- /* Some misc. info on the chip */
- struct
- {
- u32 has_flash : 1;
- u32 has_ext_sram : 1;
- u32 has_rom : 1;
- u32 has_bt : 1;
- u32 has_wlan : 1;
- } bools;
-
- /* This table is used to remap register addresses depending on what
- host interface is used. On the BC7 and later chips there are
- multiple sets of memory window registers, on for each host
- interafce (SDIO / SPI). The correct one is needed. */
- struct map_array_t map;
-
- /* The offsets into the program address space of the different types of memory.
- The RAM offset is probably the most useful. */
- struct
- {
- u32 ram;
- u32 rom;
- u32 flash;
- u32 ext_sram;
- } prog_offset;
-
- /* The offsets into the data address space of interesting things. */
- struct
- {
- u16 ram;
- /* maybe add shared / page tables? */
- } data_offset;
-
- /* Information on the different windows */
- const struct window_info_t *windows[CHIP_HELPER_WINDOW_COUNT];
-};
-
-#endif /* CSR_WIFI_HIP_CHIPHELPER_PRIVATE_H__ */
diff --git a/drivers/staging/csr/csr_wifi_hip_conversions.h b/drivers/staging/csr/csr_wifi_hip_conversions.h
deleted file mode 100644
index bf7a52e82995..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_conversions.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- *
- * FILE: csr_wifi_hip_conversions.h
- *
- * PURPOSE:
- * This header file provides the macros for converting to and from
- * wire format.
- * These macros *MUST* work for little-endian AND big-endian hosts.
- *
- * ---------------------------------------------------------------------------
- */
-#ifndef __CSR_WIFI_HIP_CONVERSIONS_H__
-#define __CSR_WIFI_HIP_CONVERSIONS_H__
-
-#define SIZEOF_UINT16 2
-#define SIZEOF_UINT32 4
-#define SIZEOF_UINT64 8
-
-#define SIZEOF_SIGNAL_HEADER 6
-#define SIZEOF_DATAREF 4
-
-
-/*
- * Macro to retrieve the signal ID from a wire-format signal.
- */
-#define GET_SIGNAL_ID(_buf) CSR_GET_UINT16_FROM_LITTLE_ENDIAN((_buf))
-
-/*
- * Macros to retrieve and set the DATAREF fields in a packed (i.e. wire-format)
- * HIP signal.
- */
-#define GET_PACKED_DATAREF_SLOT(_buf, _ref) \
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN(((_buf) + SIZEOF_SIGNAL_HEADER + ((_ref) * SIZEOF_DATAREF) + 0))
-
-#define GET_PACKED_DATAREF_LEN(_buf, _ref) \
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN(((_buf) + SIZEOF_SIGNAL_HEADER + ((_ref) * SIZEOF_DATAREF) + 2))
-
-#define SET_PACKED_DATAREF_SLOT(_buf, _ref, _slot) \
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN((_slot), ((_buf) + SIZEOF_SIGNAL_HEADER + ((_ref) * SIZEOF_DATAREF) + 0))
-
-#define SET_PACKED_DATAREF_LEN(_buf, _ref, _len) \
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN((_len), ((_buf) + SIZEOF_SIGNAL_HEADER + ((_ref) * SIZEOF_DATAREF) + 2))
-
-#define GET_PACKED_MA_PACKET_REQUEST_FRAME_PRIORITY(_buf) \
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN(((_buf) + SIZEOF_SIGNAL_HEADER + UNIFI_MAX_DATA_REFERENCES * SIZEOF_DATAREF + 8))
-
-#define GET_PACKED_MA_PACKET_REQUEST_HOST_TAG(_buf) \
- CSR_GET_UINT32_FROM_LITTLE_ENDIAN(((_buf) + SIZEOF_SIGNAL_HEADER + UNIFI_MAX_DATA_REFERENCES * SIZEOF_DATAREF + 4))
-
-#define GET_PACKED_MA_PACKET_CONFIRM_HOST_TAG(_buf) \
- CSR_GET_UINT32_FROM_LITTLE_ENDIAN(((_buf) + SIZEOF_SIGNAL_HEADER + UNIFI_MAX_DATA_REFERENCES * SIZEOF_DATAREF + 8))
-
-#define GET_PACKED_MA_PACKET_CONFIRM_TRANSMISSION_STATUS(_buf) \
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN(((_buf) + SIZEOF_SIGNAL_HEADER + UNIFI_MAX_DATA_REFERENCES * SIZEOF_DATAREF + 2))
-
-
-s32 get_packed_struct_size(const u8 *buf);
-CsrResult read_unpack_signal(const u8 *ptr, CSR_SIGNAL *sig);
-CsrResult write_pack(const CSR_SIGNAL *sig, u8 *ptr, u16 *sig_len);
-
-#endif /* __CSR_WIFI_HIP_CONVERSIONS_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_hip_download.c b/drivers/staging/csr/csr_wifi_hip_download.c
deleted file mode 100644
index 2f44a383d2cf..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_download.c
+++ /dev/null
@@ -1,819 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- * FILE: csr_wifi_hip_download.c
- *
- * PURPOSE:
- * Routines for downloading firmware to UniFi.
- *
- * ---------------------------------------------------------------------------
- */
-#include <linux/slab.h>
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_unifiversion.h"
-#include "csr_wifi_hip_card.h"
-#include "csr_wifi_hip_xbv.h"
-
-#undef CSR_WIFI_IGNORE_PATCH_VERSION_MISMATCH
-
-static CsrResult do_patch_download(card_t *card, void *dlpriv,
- xbv1_t *pfwinfo, u32 boot_ctrl_addr);
-
-static CsrResult do_patch_convert_download(card_t *card,
- void *dlpriv, xbv1_t *pfwinfo);
-
-/*
- * ---------------------------------------------------------------------------
- * _find_in_slut
- *
- * Find the offset of the appropriate object in the SLUT of a card
- *
- * Arguments:
- * card Pointer to card struct
- * psym Pointer to symbol object.
- * id set up by caller
- * obj will be set up by this function
- * pslut Pointer to SLUT address, if 0xffffffff then it must be
- * read from the chip.
- * Returns:
- * CSR_RESULT_SUCCESS on success
- * Non-zero on error,
- * CSR_WIFI_HIP_RESULT_NOT_FOUND if not found
- * ---------------------------------------------------------------------------
- */
-static CsrResult _find_in_slut(card_t *card, symbol_t *psym, u32 *pslut)
-{
- u32 slut_address;
- u16 finger_print;
- CsrResult r;
- CsrResult csrResult;
-
- /* Get SLUT address */
- if (*pslut == 0xffffffff)
- {
- r = card_wait_for_firmware_to_start(card, &slut_address);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Firmware hasn't started\n");
- return r;
- }
- *pslut = slut_address;
-
- /*
- * Firmware has started so set the SDIO bus clock to the initial speed,
- * faster than UNIFI_SDIO_CLOCK_SAFE_HZ, to speed up the f/w download.
- */
- csrResult = CsrSdioMaxBusClockFrequencySet(card->sdio_if, UNIFI_SDIO_CLOCK_INIT_HZ);
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- r = ConvertCsrSdioToCsrHipResult(card, csrResult);
- return r;
- }
- card->sdio_clock_speed = UNIFI_SDIO_CLOCK_INIT_HZ;
- }
- else
- {
- slut_address = *pslut; /* Use previously discovered address */
- }
- unifi_trace(card->ospriv, UDBG4, "SLUT addr: 0x%lX\n", slut_address);
-
- /*
- * Check the SLUT fingerprint.
- * The slut_address is a generic pointer so we must use unifi_card_read16().
- */
- unifi_trace(card->ospriv, UDBG4, "Looking for SLUT finger print\n");
- finger_print = 0;
- r = unifi_card_read16(card, slut_address, &finger_print);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read SLUT finger print\n");
- return r;
- }
-
- if (finger_print != SLUT_FINGERPRINT)
- {
- unifi_error(card->ospriv, "Failed to find SLUT fingerprint\n");
- return CSR_RESULT_FAILURE;
- }
-
- /* Symbol table starts imedately after the fingerprint */
- slut_address += 2;
-
- while (1)
- {
- u16 id;
- u32 obj;
-
- r = unifi_card_read16(card, slut_address, &id);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- slut_address += 2;
-
- if (id == CSR_SLT_END)
- {
- /* End of table reached: not found */
- r = CSR_WIFI_HIP_RESULT_RANGE;
- break;
- }
-
- r = unifi_read32(card, slut_address, &obj);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
- slut_address += 4;
-
- unifi_trace(card->ospriv, UDBG3, " found SLUT id %02d.%08lx\n", id, obj);
-
- r = CSR_WIFI_HIP_RESULT_NOT_FOUND;
- /* Found search term? */
- if (id == psym->id)
- {
- unifi_trace(card->ospriv, UDBG1, " matched SLUT id %02d.%08lx\n", id, obj);
- psym->obj = obj;
- r = CSR_RESULT_SUCCESS;
- break;
- }
- }
-
- return r;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * do_patch_convert_download
- *
- * Download the given firmware image to the UniFi, converting from FWDL
- * to PTDL XBV format.
- *
- * Arguments:
- * card Pointer to card struct
- * dlpriv Pointer to source firmware image
- * fwinfo Pointer to source firmware info struct
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, CSR error code on error
- *
- * Notes:
- * ---------------------------------------------------------------------------
- */
-static CsrResult do_patch_convert_download(card_t *card, void *dlpriv, xbv1_t *pfwinfo)
-{
- CsrResult r;
- u32 slut_base = 0xffffffff;
- void *pfw;
- u32 psize;
- symbol_t sym;
-
- /* Reset the chip to guarantee that the ROM loader is running */
- r = unifi_init(card);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv,
- "do_patch_convert_download: failed to re-init UniFi\n");
- return r;
- }
-
- /* If no unifi_helper is running, the firmware version must be read */
- if (card->build_id == 0)
- {
- u32 ver = 0;
- sym.id = CSR_SLT_BUILD_ID_NUMBER;
- sym.obj = 0; /* To be updated by _find_in_slut() */
-
- unifi_trace(card->ospriv, UDBG1, "Need f/w version\n");
-
- /* Find chip build id entry in SLUT */
- r = _find_in_slut(card, &sym, &slut_base);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to find CSR_SLT_BUILD_ID_NUMBER\n");
- return CSR_RESULT_FAILURE;
- }
-
- /* Read running f/w version */
- r = unifi_read32(card, sym.obj, &ver);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read f/w id\n");
- return CSR_RESULT_FAILURE;
- }
- card->build_id = ver;
- }
-
- /* Convert the ptest firmware to a patch against the running firmware */
- pfw = xbv_to_patch(card, unifi_fw_read, dlpriv, pfwinfo, &psize);
- if (!pfw)
- {
- unifi_error(card->ospriv, "Failed to convert f/w to patch");
- return CSR_WIFI_HIP_RESULT_NO_MEMORY;
- }
- else
- {
- void *desc;
- sym.id = CSR_SLT_BOOT_LOADER_CONTROL;
- sym.obj = 0; /* To be updated by _find_in_slut() */
-
- /* Find boot loader control entry in SLUT */
- r = _find_in_slut(card, &sym, &slut_base);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to find BOOT_LOADER_CONTROL\n");
- kfree(pfw);
- return CSR_RESULT_FAILURE;
- }
-
- r = unifi_set_host_state(card, UNIFI_HOST_STATE_AWAKE);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to wake UniFi\n");
- }
-
- /* Get a dlpriv for the patch buffer so that unifi_fw_read() can
- * access it.
- */
- desc = unifi_fw_open_buffer(card->ospriv, pfw, psize);
- if (!desc)
- {
- kfree(pfw);
- return CSR_WIFI_HIP_RESULT_NO_MEMORY;
- }
-
- /* Download the patch */
- unifi_info(card->ospriv, "Downloading converted f/w as patch\n");
- r = unifi_dl_patch(card, desc, sym.obj);
- kfree(pfw);
- unifi_fw_close_buffer(card->ospriv, desc);
-
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Converted patch download failed\n");
- return r;
- }
- else
- {
- unifi_trace(card->ospriv, UDBG1, "Converted patch downloaded\n");
- }
-
- /* This command starts the firmware */
- r = unifi_do_loader_op(card, sym.obj + 6, UNIFI_BOOT_LOADER_RESTART);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write loader restart cmd\n");
- }
-
- return r;
- }
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_dl_firmware
- *
- * Download the given firmware image to the UniFi.
- *
- * Arguments:
- * card Pointer to card struct
- * dlpriv A context pointer from the calling function to be
- * passed when calling unifi_fw_read().
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success,
- * CSR_WIFI_HIP_RESULT_NO_MEMORY memory allocation failed
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE error in XBV file
- * CSR_RESULT_FAILURE SDIO error
- *
- * Notes:
- * Stops and resets the chip, does the download and runs the new
- * firmware.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_dl_firmware(card_t *card, void *dlpriv)
-{
- xbv1_t *fwinfo;
- CsrResult r;
-
- fwinfo = kmalloc(sizeof(xbv1_t), GFP_KERNEL);
- if (fwinfo == NULL)
- {
- unifi_error(card->ospriv, "Failed to allocate memory for firmware\n");
- return CSR_WIFI_HIP_RESULT_NO_MEMORY;
- }
-
- /*
- * Scan the firmware file to find the TLVs we are interested in.
- * These are:
- * - check we support the file format version in VERF
- * - SLTP Symbol Lookup Table Pointer
- * - FWDL firmware download segments
- * - FWOV firmware overlay segment
- * - VMEQ Register probe tests to verify matching h/w
- */
- r = xbv1_parse(card, unifi_fw_read, dlpriv, fwinfo);
- if (r != CSR_RESULT_SUCCESS || fwinfo->mode != xbv_firmware)
- {
- unifi_error(card->ospriv, "File type is %s, expected firmware.\n",
- fwinfo->mode == xbv_patch?"patch" : "unknown");
- kfree(fwinfo);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- /* UF6xxx doesn't accept firmware, only patches. Therefore we convert
- * the file to patch format with version numbers matching the current
- * running firmware, and then download via the patch mechanism.
- * The sole purpose of this is to support production test firmware across
- * different ROM releases, the test firmware being provided in non-patch
- * format.
- */
- if (card->chip_id > SDIO_CARD_ID_UNIFI_2)
- {
- unifi_info(card->ospriv, "Must convert f/w to patch format\n");
- r = do_patch_convert_download(card, dlpriv, fwinfo);
- }
- else
- {
- /* Older UniFi chips allowed firmware to be directly loaded onto the
- * chip, which is no longer supported.
- */
- unifi_error(card->ospriv, "Only patch downloading supported\n");
- r = CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- kfree(fwinfo);
- return r;
-} /* unifi_dl_firmware() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_dl_patch
- *
- * Load the given patch set into UniFi.
- *
- * Arguments:
- * card Pointer to card struct
- * dlpriv The os specific handle to the firmware file.
- * boot_ctrl The address of the boot loader control structure.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success,
- * CSR_WIFI_HIP_RESULT_NO_MEMORY memory allocation failed
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE error in XBV file
- * CSR_RESULT_FAILURE SDIO error
- *
- * Notes:
- * This ends up telling UniFi to restart.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_dl_patch(card_t *card, void *dlpriv, u32 boot_ctrl)
-{
- xbv1_t *fwinfo;
- CsrResult r;
-
- unifi_info(card->ospriv, "unifi_dl_patch %p %08x\n", dlpriv, boot_ctrl);
-
- fwinfo = kmalloc(sizeof(xbv1_t), GFP_KERNEL);
- if (fwinfo == NULL)
- {
- unifi_error(card->ospriv, "Failed to allocate memory for patches\n");
- return CSR_WIFI_HIP_RESULT_NO_MEMORY;
- }
-
- /*
- * Scan the firmware file to find the TLVs we are interested in.
- * These are:
- * - check we support the file format version in VERF
- * - FWID The build ID of the ROM that we can patch
- * - PTDL patch download segments
- */
- r = xbv1_parse(card, unifi_fw_read, dlpriv, fwinfo);
- if (r != CSR_RESULT_SUCCESS || fwinfo->mode != xbv_patch)
- {
- kfree(fwinfo);
- unifi_error(card->ospriv, "Failed to read in patch file\n");
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- /*
- * We have to check the build id read from the SLUT against that
- * for the patch file. They have to match exactly.
- * "card->build_id" == XBV1.PTCH.FWID
- */
- if (card->build_id != fwinfo->build_id)
- {
- unifi_error(card->ospriv, "Wrong patch file for chip (chip = %lu, file = %lu)\n",
- card->build_id, fwinfo->build_id);
- kfree(fwinfo);
-#ifndef CSR_WIFI_IGNORE_PATCH_VERSION_MISMATCH
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
-#else
- fwinfo = NULL;
- dlpriv = NULL;
- return CSR_RESULT_SUCCESS;
-#endif
- }
-
- r = do_patch_download(card, dlpriv, fwinfo, boot_ctrl);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to patch image\n");
- }
-
- kfree(fwinfo);
-
- return r;
-} /* unifi_dl_patch() */
-
-
-void* unifi_dl_fw_read_start(card_t *card, s8 is_fw)
-{
- card_info_t card_info;
-
- unifi_card_info(card, &card_info);
- unifi_trace(card->ospriv, UDBG5,
- "id=%d, ver=0x%x, fw_build=%u, fw_hip=0x%x, block_size=%d\n",
- card_info.chip_id, card_info.chip_version,
- card_info.fw_build, card_info.fw_hip_version,
- card_info.sdio_block_size);
-
- return unifi_fw_read_start(card->ospriv, is_fw, &card_info);
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * safe_read_shared_location
- *
- * Read a shared memory location repeatedly until we get two readings
- * the same.
- *
- * Arguments:
- * card Pointer to card context struct.
- * unifi_addr UniFi shared-data-memory address to access.
- * pdata Pointer to a byte variable for the value read.
- *
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, CSR error code on failure
- * ---------------------------------------------------------------------------
- */
-static CsrResult safe_read_shared_location(card_t *card, u32 address, u8 *pdata)
-{
- CsrResult r;
- u16 limit = 1000;
- u8 b, b2;
-
- *pdata = 0;
-
- r = unifi_read_8_or_16(card, address, &b);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- while (limit--)
- {
- r = unifi_read_8_or_16(card, address, &b2);
- if (r != CSR_RESULT_SUCCESS)
- {
- return r;
- }
-
- /* When we have a stable value, return it */
- if (b == b2)
- {
- *pdata = b;
- return CSR_RESULT_SUCCESS;
- }
-
- b = b2;
- }
-
- return CSR_RESULT_FAILURE;
-} /* safe_read_shared_location() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_do_loader_op
- *
- * Send a loader / boot_loader command to the UniFi and wait for
- * it to complete.
- *
- * Arguments:
- * card Pointer to card context struct.
- * op_addr The address of the loader operation control word.
- * opcode The operation to perform.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success
- * CSR_RESULT_FAILURE SDIO error or SDIO/XAP timeout
- * ---------------------------------------------------------------------------
- */
-
-/*
- * Ideally instead of sleeping, we want to busy wait.
- * Currently there is no framework API to do this. When it becomes available,
- * we can use it to busy wait using usecs
- */
-#define OPERATION_TIMEOUT_LOOPS (100) /* when OPERATION_TIMEOUT_DELAY==1, (500) otherwise */
-#define OPERATION_TIMEOUT_DELAY 1 /* msec, or 200usecs */
-
-CsrResult unifi_do_loader_op(card_t *card, u32 op_addr, u8 opcode)
-{
- CsrResult r;
- s16 op_retries;
-
- unifi_trace(card->ospriv, UDBG4, "Loader cmd 0x%0x -> 0x%08x\n", opcode, op_addr);
-
- /* Set the Operation command byte to the opcode */
- r = unifi_write_8_or_16(card, op_addr, opcode);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to write loader copy command\n");
- return r;
- }
-
- /* Wait for Operation command byte to be Idle */
- /* Typically takes ~100us */
- op_retries = 0;
- r = CSR_RESULT_SUCCESS;
- while (1)
- {
- u8 op;
-
- /*
- * Read the memory location until two successive reads give
- * the same value.
- * Then handle it.
- */
- r = safe_read_shared_location(card, op_addr, &op);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to read loader status\n");
- break;
- }
-
- if (op == UNIFI_LOADER_IDLE)
- {
- /* Success */
- break;
- }
-
- if (op != opcode)
- {
- unifi_error(card->ospriv, "Error reported by loader: 0x%X\n", op);
- r = CSR_RESULT_FAILURE;
- break;
- }
-
- /* Allow 500us timeout */
- if (++op_retries >= OPERATION_TIMEOUT_LOOPS)
- {
- unifi_error(card->ospriv, "Timeout waiting for loader to ack transfer\n");
- /* Stop XAPs to aid post-mortem */
- r = unifi_card_stop_processor(card, UNIFI_PROC_BOTH);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to stop UniFi processors\n");
- }
- else
- {
- r = CSR_RESULT_FAILURE;
- }
- break;
- }
- CsrThreadSleep(OPERATION_TIMEOUT_DELAY);
- } /* Loop exits with r != CSR_RESULT_SUCCESS on error */
-
- return r;
-} /* unifi_do_loader_op() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * send_ptdl_to_unifi
- *
- * Copy a patch block from userland to the UniFi.
- * This function reads data, 2K at a time, from userland and writes
- * it to the UniFi.
- *
- * Arguments:
- * card A pointer to the card structure
- * dlpriv The os specific handle for the firmware file
- * ptdl A pointer ot the PTDL block
- * handle The buffer handle to use for the xfer
- * op_addr The address of the loader operation control word
- *
- * Returns:
- * Number of bytes sent (Positive) or negative value indicating
- * error code:
- * CSR_WIFI_HIP_RESULT_NO_MEMORY memory allocation failed
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE error in XBV file
- * CSR_RESULT_FAILURE SDIO error
- * ---------------------------------------------------------------------------
- */
-static CsrResult send_ptdl_to_unifi(card_t *card, void *dlpriv,
- const struct PTDL *ptdl, u32 handle,
- u32 op_addr)
-{
- u32 offset;
- u8 *buf;
- s32 data_len;
- u32 write_len;
- CsrResult r;
- const u16 buf_size = 2 * 1024;
-
- offset = ptdl->dl_offset;
- data_len = ptdl->dl_size;
-
- if (data_len > buf_size)
- {
- unifi_error(card->ospriv, "PTDL block is too large (%u)\n",
- ptdl->dl_size);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- buf = kmalloc(buf_size, GFP_KERNEL);
- if (buf == NULL)
- {
- unifi_error(card->ospriv, "Failed to allocate transfer buffer for firmware download\n");
- return CSR_WIFI_HIP_RESULT_NO_MEMORY;
- }
-
- r = CSR_RESULT_SUCCESS;
-
- if (unifi_fw_read(card->ospriv, dlpriv, offset, buf, data_len) != data_len)
- {
- unifi_error(card->ospriv, "Failed to read from file\n");
- }
- else
- {
- /* We can always round these if the host wants to */
- if (card->sdio_io_block_pad)
- {
- write_len = (data_len + (card->sdio_io_block_size - 1)) &
- ~(card->sdio_io_block_size - 1);
-
- /* Zero out the rest of the buffer (This isn't needed, but it
- * makes debugging things later much easier). */
- memset(buf + data_len, 0, write_len - data_len);
- }
- else
- {
- write_len = data_len;
- }
-
- r = unifi_bulk_rw_noretry(card, handle, buf, write_len, UNIFI_SDIO_WRITE);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "CMD53 failed writing %d bytes to handle %ld\n",
- data_len, handle);
- }
- else
- {
- /*
- * Can change the order of things to overlap read from file
- * with copy to unifi
- */
- r = unifi_do_loader_op(card, op_addr, UNIFI_BOOT_LOADER_PATCH);
- }
- }
-
- kfree(buf);
-
- if (r != CSR_RESULT_SUCCESS && r != CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- unifi_error(card->ospriv, "Failed to copy block of %u bytes to UniFi\n",
- ptdl->dl_size);
- }
-
- return r;
-} /* send_ptdl_to_unifi() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * do_patch_download
- *
- * This function downloads a set of patches to UniFi and then
- * causes it to restart.
- *
- * Arguments:
- * card Pointer to card struct.
- * dlpriv A context pointer from the calling function to be
- * used when reading the XBV file. This can be NULL
- * in which case not patches are applied.
- * pfwinfo Pointer to a fwinfo struct describing the f/w
- * XBV file.
- * boot_ctrl_addr The address of the boot loader control structure.
- *
- * Returns:
- * 0 on success, or an error code
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE for a bad laoader version number
- * ---------------------------------------------------------------------------
- */
-static CsrResult do_patch_download(card_t *card, void *dlpriv, xbv1_t *pfwinfo, u32 boot_ctrl_addr)
-{
- CsrResult r;
- s32 i;
- u16 loader_version;
- u16 handle;
- u32 total_bytes;
-
- /*
- * Read info from the SDIO Loader Control Data Structure
- */
- /* Check the loader version */
- r = unifi_card_read16(card, boot_ctrl_addr, &loader_version);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Patch download: Failed to read loader version\n");
- return r;
- }
- unifi_trace(card->ospriv, UDBG2, "Patch download: boot loader version 0x%04X\n", loader_version);
- switch (loader_version)
- {
- case 0x0000:
- break;
-
- default:
- unifi_error(card->ospriv, "Patch loader version (0x%04X) is not supported by this driver\n",
- loader_version);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- /* Retrieve the handle to use with CMD53 */
- r = unifi_card_read16(card, boot_ctrl_addr + 4, &handle);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Patch download: Failed to read loader handle\n");
- return r;
- }
-
- /* Set the mask of LEDs to flash */
- if (card->loader_led_mask)
- {
- r = unifi_card_write16(card, boot_ctrl_addr + 2,
- (u16)card->loader_led_mask);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Patch download: Failed to write LED mask\n");
- return r;
- }
- }
-
- total_bytes = 0;
-
- /* Copy download data to UniFi memory */
- for (i = 0; i < pfwinfo->num_ptdl; i++)
- {
- unifi_trace(card->ospriv, UDBG3, "Patch download: %d Downloading for %d from offset %d\n",
- i,
- pfwinfo->ptdl[i].dl_size,
- pfwinfo->ptdl[i].dl_offset);
-
- r = send_ptdl_to_unifi(card, dlpriv, &pfwinfo->ptdl[i],
- handle, boot_ctrl_addr + 6);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- return r;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Patch failed after %u bytes\n",
- total_bytes);
- return r;
- }
- total_bytes += pfwinfo->ptdl[i].dl_size;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* do_patch_download() */
-
-
diff --git a/drivers/staging/csr/csr_wifi_hip_dump.c b/drivers/staging/csr/csr_wifi_hip_dump.c
deleted file mode 100644
index 7b7eec49d028..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_dump.c
+++ /dev/null
@@ -1,837 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- * FILE: csr_wifi_hip_dump.c
- *
- * PURPOSE:
- * Routines for retrieving and buffering core status from the UniFi
- *
- * ---------------------------------------------------------------------------
- */
-#include <linux/slab.h>
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_unifiversion.h"
-#include "csr_wifi_hip_card.h"
-
-/* Locations to capture in dump (XAP words) */
-#define HIP_CDUMP_FIRST_CPUREG (0xFFE0) /* First CPU register */
-#define HIP_CDUMP_FIRST_LO (0) /* Start of low address range */
-#define HIP_CDUMP_FIRST_HI_MAC (0x3C00) /* Start of MAC high area */
-#define HIP_CDUMP_FIRST_HI_PHY (0x1C00) /* Start of PHY high area */
-#define HIP_CDUMP_FIRST_SH (0) /* Start of shared memory area */
-
-#define HIP_CDUMP_NCPUREGS (10) /* No. of 16-bit XAP registers */
-#define HIP_CDUMP_NWORDS_LO (0x0100) /* Low area size in 16-bit words */
-#define HIP_CDUMP_NWORDS_HI (0x0400) /* High area size in 16-bit words */
-#define HIP_CDUMP_NWORDS_SH (0x0500) /* Shared memory area size, 16-bit words */
-
-#define HIP_CDUMP_NUM_ZONES 7 /* Number of UniFi memory areas to capture */
-
-/* Mini-coredump state */
-typedef struct coredump_buf
-{
- u16 count; /* serial number of dump */
- u32 timestamp; /* host's system time at capture */
- s16 requestor; /* request: 0=auto dump, 1=manual */
- u16 chip_ver;
- u32 fw_ver;
- u16 *zone[HIP_CDUMP_NUM_ZONES];
-
- struct coredump_buf *next; /* circular list */
- struct coredump_buf *prev; /* circular list */
-} coredump_buffer;
-
-/* Structure used to describe a zone of chip memory captured by mini-coredump */
-struct coredump_zone
-{
- unifi_coredump_space_t space; /* XAP memory space this zone covers */
- enum unifi_dbg_processors_select cpu; /* XAP CPU core selector */
- u32 gp; /* Generic Pointer to memory zone on XAP */
- u16 offset; /* 16-bit XAP word offset of zone in memory space */
- u16 length; /* Length of zone in XAP words */
-};
-
-static CsrResult unifi_coredump_from_sdio(card_t *card, coredump_buffer *dump_buf);
-static CsrResult unifi_coredump_read_zones(card_t *card, coredump_buffer *dump_buf);
-static CsrResult unifi_coredump_read_zone(card_t *card, u16 *zone,
- const struct coredump_zone *def);
-static s32 get_value_from_coredump(const coredump_buffer *dump,
- const unifi_coredump_space_t space, const u16 offset);
-
-/* Table of chip memory zones we capture on mini-coredump */
-static const struct coredump_zone zonedef_table[HIP_CDUMP_NUM_ZONES] = {
- { UNIFI_COREDUMP_MAC_REG, UNIFI_PROC_MAC, UNIFI_MAKE_GP(REGISTERS, HIP_CDUMP_FIRST_CPUREG * 2), HIP_CDUMP_FIRST_CPUREG, HIP_CDUMP_NCPUREGS },
- { UNIFI_COREDUMP_PHY_REG, UNIFI_PROC_PHY, UNIFI_MAKE_GP(REGISTERS, HIP_CDUMP_FIRST_CPUREG * 2), HIP_CDUMP_FIRST_CPUREG, HIP_CDUMP_NCPUREGS },
- { UNIFI_COREDUMP_SH_DMEM, UNIFI_PROC_INVALID, UNIFI_MAKE_GP(SH_DMEM, HIP_CDUMP_FIRST_SH * 2), HIP_CDUMP_FIRST_SH, HIP_CDUMP_NWORDS_SH },
- { UNIFI_COREDUMP_MAC_DMEM, UNIFI_PROC_MAC, UNIFI_MAKE_GP(MAC_DMEM, HIP_CDUMP_FIRST_LO * 2), HIP_CDUMP_FIRST_LO, HIP_CDUMP_NWORDS_LO },
- { UNIFI_COREDUMP_MAC_DMEM, UNIFI_PROC_MAC, UNIFI_MAKE_GP(MAC_DMEM, HIP_CDUMP_FIRST_HI_MAC * 2), HIP_CDUMP_FIRST_HI_MAC, HIP_CDUMP_NWORDS_HI },
- { UNIFI_COREDUMP_PHY_DMEM, UNIFI_PROC_PHY, UNIFI_MAKE_GP(PHY_DMEM, HIP_CDUMP_FIRST_LO * 2), HIP_CDUMP_FIRST_LO, HIP_CDUMP_NWORDS_LO },
- { UNIFI_COREDUMP_PHY_DMEM, UNIFI_PROC_PHY, UNIFI_MAKE_GP(PHY_DMEM, HIP_CDUMP_FIRST_HI_PHY * 2), HIP_CDUMP_FIRST_HI_PHY, HIP_CDUMP_NWORDS_HI },
-};
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_coredump_request_at_next_reset
- *
- * Request that a mini-coredump is performed when the driver has
- * completed resetting the UniFi device.
- *
- * Arguments:
- * card Pointer to card struct
- * enable If non-zero, sets the request.
- * If zero, cancels any pending request.
- *
- * Returns:
- * CSR_RESULT_SUCCESS or CSR HIP error code
- *
- * Notes:
- * This function is typically called once the driver has detected that
- * the UniFi device has become unresponsive due to crash, or internal
- * watchdog reset. The driver must reset it to regain communication and,
- * immediately after that, the mini-coredump can be captured.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_coredump_request_at_next_reset(card_t *card, s8 enable)
-{
- CsrResult r;
-
- if (enable)
- {
- unifi_trace(card->ospriv, UDBG2, "Mini-coredump requested after reset\n");
- }
-
- if (card == NULL)
- {
- r = CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- else
- {
- card->request_coredump_on_reset = enable?1 : 0;
- r = CSR_RESULT_SUCCESS;
- }
-
- return r;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_coredump_handle_request
- *
- * Performs a coredump now, if one was requested, and clears the request.
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * CSR_RESULT_SUCCESS or CSR HIP error code
- *
- * Notes:
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_coredump_handle_request(card_t *card)
-{
- CsrResult r = CSR_RESULT_SUCCESS;
-
- if (card == NULL)
- {
- r = CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- else
- {
- if (card->request_coredump_on_reset == 1)
- {
- card->request_coredump_on_reset = 0;
- r = unifi_coredump_capture(card, NULL);
- }
- }
-
- return r;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_coredump_capture
- *
- * Capture the current status of the UniFi device.
- * Various registers are buffered for future offline inspection.
- *
- * Arguments:
- * card Pointer to card struct
- * req Pointer to request struct, or NULL:
- * A coredump requested manually by the user app
- * will have a request struct pointer, an automatic
- * coredump will have a NULL pointer.
- * Returns:
- * CSR_RESULT_SUCCESS on success,
- * CSR_RESULT_FAILURE SDIO error
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE Initialisation not complete
- *
- * Notes:
- * The result is a filled entry in the circular buffer of core dumps,
- * values from which can be extracted to userland via an ioctl.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_coredump_capture(card_t *card, struct unifi_coredump_req *req)
-{
- CsrResult r = CSR_RESULT_SUCCESS;
- static u16 dump_seq_no = 1;
- u32 time_of_capture;
-
- if (card->dump_next_write == NULL)
- {
- r = CSR_RESULT_SUCCESS;
- goto done;
- }
-
- /* Reject forced capture before initialisation has happened */
- if (card->helper == NULL)
- {
- r = CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- goto done;
- }
-
-
- /*
- * Force a mini-coredump capture right now
- */
- time_of_capture = CsrTimeGet(NULL);
- unifi_info(card->ospriv, "Mini-coredump capture at t=%u\n", time_of_capture);
-
- /* Wake up the processors so we can talk to them */
- r = unifi_set_host_state(card, UNIFI_HOST_STATE_AWAKE);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to wake UniFi\n");
- goto done;
- }
- CsrThreadSleep(20);
-
- /* Stop both XAPs */
- unifi_trace(card->ospriv, UDBG4, "Stopping XAPs for coredump capture\n");
- r = unifi_card_stop_processor(card, UNIFI_PROC_BOTH);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to stop UniFi XAPs\n");
- goto done;
- }
-
- /* Dump core into the next available slot in the circular list */
- r = unifi_coredump_from_sdio(card, card->dump_next_write);
- if (r == CSR_RESULT_SUCCESS)
- {
- /* Record whether the dump was manual or automatic */
- card->dump_next_write->requestor = (req?1 : 0);
- card->dump_next_write->timestamp = time_of_capture;
- /* Advance to the next buffer */
- card->dump_next_write->count = dump_seq_no++;
- card->dump_cur_read = card->dump_next_write;
- card->dump_next_write = card->dump_next_write->next;
-
- /* Sequence no. of zero indicates slot not in use, so handle wrap */
- if (dump_seq_no == 0)
- {
- dump_seq_no = 1;
- }
-
- unifi_trace(card->ospriv, UDBG3,
- "Coredump (%p), SeqNo=%d, cur_read=%p, next_write=%p\n",
- req,
- card->dump_cur_read->count,
- card->dump_cur_read, card->dump_next_write);
- }
-
- /* Start both XAPs */
- unifi_trace(card->ospriv, UDBG4, "Restart XAPs after coredump\n");
- r = card_start_processor(card, UNIFI_PROC_BOTH);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Failed to start UniFi XAPs\n");
- goto done;
- }
-
-done:
- return r;
-} /* unifi_coredump_capture() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * get_value_from_coredump
- *
- *
- *
- * Arguments:
- * dump Pointer to buffered coredump data
- * offset_in_space XAP memory space to retrieve from the buffer (there
- * may be more than one zone covering the same memory
- * space, but starting from different offsets).
- * offset Offset within the XAP memory space to be retrieved
- *
- * Returns:
- * >=0 Register value on success
- * <0 Register out of range of any captured zones
- *
- * Notes:
- * ---------------------------------------------------------------------------
- */
-static s32 get_value_from_coredump(const coredump_buffer *coreDump,
- const unifi_coredump_space_t space,
- const u16 offset_in_space)
-{
- s32 r = -1;
- u16 offset_in_zone;
- u32 zone_end_offset;
- s32 i;
- const struct coredump_zone *def = &zonedef_table[0];
-
- /* Search zone def table for a match with the requested memory space */
- for (i = 0; i < HIP_CDUMP_NUM_ZONES; i++, def++)
- {
- if (space == def->space)
- {
- zone_end_offset = def->offset + def->length;
-
- /* Is the space offset contained in this zone? */
- if (offset_in_space < zone_end_offset &&
- offset_in_space >= def->offset)
- {
- /* Calculate the offset of data within the zone buffer */
- offset_in_zone = offset_in_space - def->offset;
- r = (s32) * (coreDump->zone[i] + offset_in_zone);
-
- unifi_trace(NULL, UDBG6,
- "sp %d, offs 0x%04x = 0x%04x (in z%d 0x%04x->0x%04x)\n",
- space, offset_in_space, r,
- i, def->offset, zone_end_offset - 1);
- break;
- }
- }
- }
- return r;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_coredump_get_value
- *
- * Retrieve the value of a register buffered from a previous core dump,
- * so that it may be reported back to application code.
- *
- * Arguments:
- * card Pointer to card struct
- * req_reg Pointer to request parameter partially filled. This
- * function puts in the values retrieved from the dump.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, or:
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE Null parameter error
- * CSR_WIFI_HIP_RESULT_RANGE Register out of range
- * CSR_WIFI_HIP_RESULT_NOT_FOUND Dump index not (yet) captured
- *
- * Notes:
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_coredump_get_value(card_t *card, struct unifi_coredump_req *req)
-{
- CsrResult r;
- s32 i = 0;
- coredump_buffer *find_dump = NULL;
-
- if (req == NULL || card == NULL)
- {
- r = CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- goto done;
- }
- req->value = -1;
- if (card->dump_buf == NULL)
- {
- unifi_trace(card->ospriv, UDBG2, "No coredump buffers\n");
- r = CSR_WIFI_HIP_RESULT_NOT_FOUND; /* Coredumping disabled */
- goto done;
- }
- if (card->dump_cur_read == NULL)
- {
- unifi_trace(card->ospriv, UDBG4, "No coredumps captured\n");
- r = CSR_WIFI_HIP_RESULT_NOT_FOUND; /* No coredump yet captured */
- goto done;
- }
-
- /* Find the requested dump buffer */
- switch (req->index)
- {
- case 0: /* Newest */
- find_dump = card->dump_cur_read;
- break;
- case -1: /* Oldest: The next used slot forward */
- for (find_dump = card->dump_cur_read->next;
- (find_dump->count == 0) && (find_dump != card->dump_cur_read);
- find_dump = card->dump_cur_read->next)
- {
- }
- break;
- default: /* Number of steps back from current read position */
- for (i = 0, find_dump = card->dump_cur_read;
- i < req->index;
- i++, find_dump = find_dump->prev)
- {
- /* Walk the list for the index'th entry, but
- * stop when about to wrap. */
- unifi_trace(card->ospriv, UDBG6,
- "%d: %d, @%p, p=%p, n=%p, cr=%p, h=%p\n",
- i, find_dump->count, find_dump, find_dump->prev,
- find_dump->next, card->dump_cur_read, card->dump_buf);
- if (find_dump->prev == card->dump_cur_read)
- {
- /* Wrapped but still not found, index out of range */
- if (i != req->index)
- {
- unifi_trace(card->ospriv, UDBG6,
- "Dump index %d not found %d\n", req->index, i);
- r = CSR_WIFI_HIP_RESULT_NOT_FOUND;
- goto done;
- }
- break;
- }
- }
- break;
- }
-
- /* Check if the slot is actually filled with a core dump */
- if (find_dump->count == 0)
- {
- unifi_trace(card->ospriv, UDBG4, "Not captured %d\n", req->index);
- r = CSR_WIFI_HIP_RESULT_NOT_FOUND;
- goto done;
- }
-
- unifi_trace(card->ospriv, UDBG6, "Req index %d, found seq %d at step %d\n",
- req->index, find_dump->count, i);
-
- /* Find the appropriate entry in the buffer */
- req->value = get_value_from_coredump(find_dump, req->space, (u16)req->offset);
- if (req->value < 0)
- {
- r = CSR_WIFI_HIP_RESULT_RANGE; /* Un-captured register */
- unifi_trace(card->ospriv, UDBG4,
- "Can't read space %d, reg 0x%x from coredump buffer %d\n",
- req->space, req->offset, req->index);
- }
- else
- {
- r = CSR_RESULT_SUCCESS;
- }
-
- /* Update the private request structure with the found values */
- req->chip_ver = find_dump->chip_ver;
- req->fw_ver = find_dump->fw_ver;
- req->timestamp = find_dump->timestamp;
- req->requestor = find_dump->requestor;
- req->serial = find_dump->count;
-
-done:
- return r;
-} /* unifi_coredump_get_value() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_coredump_read_zone
- *
- * Captures a UniFi memory zone into a buffer on the host
- *
- * Arguments:
- * card Pointer to card struct
- * zonebuf Pointer to on-host buffer to dump the memory zone into
- * def Pointer to description of the memory zone to read from UniFi.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, or:
- * CSR_RESULT_FAILURE SDIO error
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE Parameter error
- *
- * Notes:
- * It is assumed that the caller has already stopped the XAPs
- * ---------------------------------------------------------------------------
- */
-static CsrResult unifi_coredump_read_zone(card_t *card, u16 *zonebuf, const struct coredump_zone *def)
-{
- CsrResult r;
-
- if (zonebuf == NULL || def == NULL)
- {
- r = CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- goto done;
- }
-
- /* Select XAP CPU if necessary */
- if (def->cpu != UNIFI_PROC_INVALID)
- {
- if (def->cpu != UNIFI_PROC_MAC && def->cpu != UNIFI_PROC_PHY)
- {
- r = CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- goto done;
- }
- r = unifi_set_proc_select(card, def->cpu);
- if (r != CSR_RESULT_SUCCESS)
- {
- goto done;
- }
- }
-
- unifi_trace(card->ospriv, UDBG4,
- "Dump sp %d, offs 0x%04x, 0x%04x words @GP=%08x CPU %d\n",
- def->space, def->offset, def->length, def->gp, def->cpu);
-
- /* Read on-chip RAM (byte-wise) */
- r = unifi_card_readn(card, def->gp, zonebuf, (u16)(def->length * 2));
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- goto done;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Can't read UniFi shared data area\n");
- goto done;
- }
-
-done:
- return r;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_coredump_read_zones
- *
- * Walks through the table of on-chip memory zones defined in zonedef_table,
- * and reads each of them from the UniFi chip
- *
- * Arguments:
- * card Pointer to card struct
- * dump_buf Buffer into which register values will be dumped
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, or:
- * CSR_RESULT_FAILURE SDIO error
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE Parameter error
- *
- * Notes:
- * It is assumed that the caller has already stopped the XAPs
- * ---------------------------------------------------------------------------
- */
-static CsrResult unifi_coredump_read_zones(card_t *card, coredump_buffer *dump_buf)
-{
- CsrResult r = CSR_RESULT_SUCCESS;
- s32 i;
-
- /* Walk the table of coredump zone definitions and read them from the chip */
- for (i = 0;
- (i < HIP_CDUMP_NUM_ZONES) && (r == 0);
- i++)
- {
- r = unifi_coredump_read_zone(card, dump_buf->zone[i], &zonedef_table[i]);
- }
-
- return r;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_coredump_from_sdio
- *
- * Capture the status of the UniFi processors, over SDIO
- *
- * Arguments:
- * card Pointer to card struct
- * reg_buffer Buffer into which register values will be dumped
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, or:
- * CSR_RESULT_FAILURE SDIO error
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE Parameter error
- *
- * Notes:
- * ---------------------------------------------------------------------------
- */
-static CsrResult unifi_coredump_from_sdio(card_t *card, coredump_buffer *dump_buf)
-{
- u16 val;
- CsrResult r;
- u32 sdio_addr;
-
- if (dump_buf == NULL)
- {
- r = CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- goto done;
- }
-
-
- /* Chip and firmware version */
- unifi_trace(card->ospriv, UDBG4, "Get chip version\n");
- sdio_addr = 2 * ChipHelper_GBL_CHIP_VERSION(card->helper);
- if (sdio_addr != 0)
- {
- r = unifi_read_direct16(card, sdio_addr, &val);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- goto done;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Can't read GBL_CHIP_VERSION\n");
- goto done;
- }
- }
- dump_buf->chip_ver = val;
- dump_buf->fw_ver = card->build_id;
-
- unifi_trace(card->ospriv, UDBG4, "chip_ver 0x%04x, fw_ver %u\n",
- dump_buf->chip_ver, dump_buf->fw_ver);
-
- /* Capture the memory zones required from UniFi */
- r = unifi_coredump_read_zones(card, dump_buf);
- if (r == CSR_WIFI_HIP_RESULT_NO_DEVICE)
- {
- goto done;
- }
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "Can't read UniFi memory areas\n");
- goto done;
- }
-
-done:
- return r;
-} /* unifi_coredump_from_sdio() */
-
-
-#ifndef UNIFI_DISABLE_COREDUMP
-/*
- * ---------------------------------------------------------------------------
- * new_coredump_node
- *
- * Allocates a coredump linked-list node, and links it to the previous.
- *
- * Arguments:
- * ospriv OS context
- * prevnode Previous node to link into
- *
- * Returns:
- * Pointer to valid coredump_buffer on success
- * NULL on memory allocation failure
- *
- * Notes:
- * Allocates "all or nothing"
- * ---------------------------------------------------------------------------
- */
-static
-coredump_buffer* new_coredump_node(void *ospriv, coredump_buffer *prevnode)
-{
- coredump_buffer *newnode = NULL;
- u16 *newzone = NULL;
- s32 i;
- u32 zone_size;
-
- /* Allocate node header */
- newnode = kzalloc(sizeof(coredump_buffer), GFP_KERNEL);
- if (newnode == NULL)
- {
- return NULL;
- }
-
- /* Allocate chip memory zone capture buffers */
- for (i = 0; i < HIP_CDUMP_NUM_ZONES; i++)
- {
- zone_size = sizeof(u16) * zonedef_table[i].length;
- newzone = kzalloc(zone_size, GFP_KERNEL);
- newnode->zone[i] = newzone;
- if (newzone == NULL)
- {
- unifi_error(ospriv, "Out of memory on coredump zone %d (%d words)\n",
- i, zonedef_table[i].length);
- break;
- }
- }
-
- /* Clean up if any zone alloc failed */
- if (newzone == NULL)
- {
- for (i = 0; newnode->zone[i] != NULL; i++)
- {
- kfree(newnode->zone[i]);
- newnode->zone[i] = NULL;
- }
- }
-
- /* Link to previous node */
- newnode->prev = prevnode;
- if (prevnode)
- {
- prevnode->next = newnode;
- }
- newnode->next = NULL;
-
- return newnode;
-}
-
-
-#endif /* UNIFI_DISABLE_COREDUMP */
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_coredump_init
- *
- * Allocates buffers for the automatic SDIO core dump
- *
- * Arguments:
- * card Pointer to card struct
- * num_dump_buffers Number of buffers to reserve for coredumps
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, or:
- * CSR_WIFI_HIP_RESULT_NO_MEMORY memory allocation failed
- *
- * Notes:
- * Allocates space in advance, to be used for the last n coredump buffers
- * the intention being that the size is sufficient for at least one dump,
- * probably several.
- * It's probably advisable to have at least 2 coredump buffers to allow
- * one to be enquired with the unifi_coredump tool, while leaving another
- * free for capturing.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_coredump_init(card_t *card, u16 num_dump_buffers)
-{
-#ifndef UNIFI_DISABLE_COREDUMP
- void *ospriv = card->ospriv;
- coredump_buffer *prev = NULL;
- coredump_buffer *newnode = NULL;
- u32 i = 0;
-#endif
-
- card->request_coredump_on_reset = 0;
- card->dump_next_write = NULL;
- card->dump_cur_read = NULL;
- card->dump_buf = NULL;
-
-#ifndef UNIFI_DISABLE_COREDUMP
- unifi_trace(ospriv, UDBG1,
- "Allocate buffers for %d core dumps\n", num_dump_buffers);
- if (num_dump_buffers == 0)
- {
- goto done;
- }
-
- /* Root node */
- card->dump_buf = new_coredump_node(ospriv, NULL);
- if (card->dump_buf == NULL)
- {
- goto fail;
- }
- prev = card->dump_buf;
- newnode = card->dump_buf;
-
- /* Add each subsequent node at tail */
- for (i = 1; i < num_dump_buffers; i++)
- {
- newnode = new_coredump_node(ospriv, prev);
- if (newnode == NULL)
- {
- goto fail;
- }
- prev = newnode;
- }
-
- /* Link the first and last nodes to make the list circular */
- card->dump_buf->prev = newnode;
- newnode->next = card->dump_buf;
-
- /* Set initial r/w access pointers */
- card->dump_next_write = card->dump_buf;
- card->dump_cur_read = NULL;
-
- unifi_trace(ospriv, UDBG2, "Core dump configured (%d dumps max)\n", i);
-
-done:
-#endif
- return CSR_RESULT_SUCCESS;
-
-#ifndef UNIFI_DISABLE_COREDUMP
-fail:
- /* Unwind what we allocated so far */
- unifi_error(ospriv, "Out of memory allocating core dump node %d\n", i);
- unifi_coredump_free(card);
- return CSR_WIFI_HIP_RESULT_NO_MEMORY;
-#endif
-} /* unifi_coreump_init() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_coredump_free
- *
- * Free all memory dynamically allocated for core dump
- *
- * Arguments:
- * card Pointer to card struct
- *
- * Returns:
- * None
- *
- * Notes:
- * ---------------------------------------------------------------------------
- */
-void unifi_coredump_free(card_t *card)
-{
- void *ospriv = card->ospriv;
- coredump_buffer *node, *del_node;
- s16 i = 0;
- s16 j;
-
- unifi_trace(ospriv, UDBG2, "Core dump de-configured\n");
-
- if (card->dump_buf == NULL)
- {
- return;
- }
-
- node = card->dump_buf;
- do
- {
- /* Free payload zones */
- for (j = 0; j < HIP_CDUMP_NUM_ZONES; j++)
- {
- kfree(node->zone[j]);
- node->zone[j] = NULL;
- }
-
- /* Detach */
- del_node = node;
- node = node->next;
-
- /* Free header */
- kfree(del_node);
- i++;
- } while ((node != NULL) && (node != card->dump_buf));
-
- unifi_trace(ospriv, UDBG3, "Freed %d coredump buffers\n", i);
-
- card->dump_buf = NULL;
- card->dump_next_write = NULL;
- card->dump_cur_read = NULL;
-} /* unifi_coredump_free() */
-
-
diff --git a/drivers/staging/csr/csr_wifi_hip_packing.c b/drivers/staging/csr/csr_wifi_hip_packing.c
deleted file mode 100644
index 0768aefc6d1f..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_packing.c
+++ /dev/null
@@ -1,4804 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#include "csr_wifi_hip_signals.h"
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_conversions.h"
-
-
-/*
- * ---------------------------------------------------------------------------
- * get_packed_struct_size
- *
- * Examine a buffer containing a UniFi signal in wire-format.
- * The first two bytes contain the signal ID, decode the signal ID and
- * return the size, in bytes, of the signal, not including any bulk
- * data.
- *
- * WARNING: This function is auto-generated, DO NOT EDIT!
- *
- * Arguments:
- * buf Pointer to buffer to decode.
- *
- * Returns:
- * 0 if the signal ID is not recognised (i.e. zero length),
- * otherwise the number of bytes occupied by the signal in the buffer.
- * This is useful for stepping past the signal to the object in the buffer.
- * ---------------------------------------------------------------------------
- */
-s32 get_packed_struct_size(const u8 *buf)
-{
- s32 size = 0;
- u16 sig_id;
-
- sig_id = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(buf);
-
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- switch (sig_id)
- {
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_PACKET_FILTER_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SETKEYS_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONFIG_QUEUE_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_AUTONOMOUS_SCAN_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_BLACKOUT_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_BLACKOUT_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_KEY_SEQUENCE_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SM_START_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_AGGREGATION_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TSPEC_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
- case CSR_DEBUG_WORD16_INDICATION_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
- case CSR_DEBUG_GENERIC_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
- case CSR_MA_PACKET_INDICATION_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT64;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
- case CSR_MLME_SET_TIM_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECTED_INDICATION_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_RX_TRIGGER_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_TRIGGERED_GET_INDICATION_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT32;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DELETEKEYS_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_NEXT_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CHANNEL_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_START_AGGREGATION_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- break;
-#endif
- case CSR_DEBUG_GENERIC_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_LEAVE_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TRIGGERED_GET_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_MULTICAST_ADDRESS_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_RESET_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_CANCEL_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TRIGGERED_GET_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_PACKET_FILTER_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT32;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_RX_TRIGGER_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECT_STATUS_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_LEAVE_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONFIG_QUEUE_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TSPEC_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MLME_SET_TIM_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_INDICATION_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_BLACKOUT_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TRIGGERED_GET_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
- case CSR_DEBUG_GENERIC_INDICATION_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
- case CSR_MA_PACKET_CANCEL_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT32;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MODIFY_BSS_PARAMETER_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_PAUSE_AUTONOMOUS_SCAN_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MA_PACKET_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT32;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- size += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MODIFY_BSS_PARAMETER_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_RX_TRIGGER_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MA_VIF_AVAILABILITY_INDICATION_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CANCEL_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_AUTONOMOUS_SCAN_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_BLACKOUT_ENDED_INDICATION_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_AUTONOMOUS_SCAN_DONE_INDICATION_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_KEY_SEQUENCE_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CHANNEL_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TRIGGERED_GET_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_AUTONOMOUS_SCAN_LOSS_INDICATION_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- break;
-#endif
- case CSR_MA_VIF_AVAILABILITY_RESPONSE_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TEMPLATE_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_POWERMGT_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_PERIODIC_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_NEXT_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_AGGREGATION_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_RX_TRIGGER_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_BLACKOUT_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT32;
- size += SIZEOF_UINT32;
- size += SIZEOF_UINT32;
- size += 48 / 8;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DELETEKEYS_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_RESET_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_AUTONOMOUS_SCAN_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT32;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SM_START_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- size += 48 / 8;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECT_STATUS_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_AUTONOMOUS_SCAN_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_PERIODIC_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SETKEYS_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 32 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_PAUSE_AUTONOMOUS_SCAN_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_POWERMGT_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MA_PACKET_ERROR_INDICATION_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_PERIODIC_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT32;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TSPEC_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT32;
- size += SIZEOF_UINT32;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_MULTICAST_ADDRESS_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TSPEC_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CANCEL_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
- case CSR_DEBUG_STRING_INDICATION_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TEMPLATE_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_BLOCKACK_ERROR_INDICATION_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_START_AGGREGATION_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += 48 / 8;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_MEASURE_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MA_PACKET_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT32;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_PERIODIC_CONFIRM_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_MEASURE_REQUEST_ID:
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- size += SIZEOF_UINT16;
- break;
-#endif
- default:
- size = 0;
- }
- return size;
-} /* get_packed_struct_size() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * read_unpack_signal
- *
- * Unpack a wire-format signal into a host-native structure.
- * This function handles any necessary conversions for endianness and
- * places no restrictions on packing or alignment for the structure
- * definition.
- *
- * WARNING: This function is auto-generated, DO NOT EDIT!
- *
- * Arguments:
- * ptr Signal buffer to unpack.
- * sig Pointer to destination structure to populate.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success,
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE if the ID of signal was not recognised.
- * ---------------------------------------------------------------------------
- */
-CsrResult read_unpack_signal(const u8 *ptr, CSR_SIGNAL *sig)
-{
- s32 index = 0;
-
- sig->SignalPrimitiveHeader.SignalId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
-
- sig->SignalPrimitiveHeader.ReceiverProcessId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
-
- sig->SignalPrimitiveHeader.SenderProcessId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
-
- switch (sig->SignalPrimitiveHeader.SignalId)
- {
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_PACKET_FILTER_CONFIRM_ID:
- sig->u.MlmeSetPacketFilterConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetPacketFilterConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetPacketFilterConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetPacketFilterConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetPacketFilterConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetPacketFilterConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SETKEYS_CONFIRM_ID:
- sig->u.MlmeSetkeysConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONFIG_QUEUE_CONFIRM_ID:
- sig->u.MlmeConfigQueueConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConfigQueueConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConfigQueueConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConfigQueueConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConfigQueueConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_AUTONOMOUS_SCAN_CONFIRM_ID:
- sig->u.MlmeAddAutonomousScanConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanConfirm.AutonomousScanId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_BLACKOUT_CONFIRM_ID:
- sig->u.MlmeAddBlackoutConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddBlackoutConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddBlackoutConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddBlackoutConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddBlackoutConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddBlackoutConfirm.BlackoutId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddBlackoutConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_BLACKOUT_REQUEST_ID:
- sig->u.MlmeDelBlackoutRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelBlackoutRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelBlackoutRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelBlackoutRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelBlackoutRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelBlackoutRequest.BlackoutId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_KEY_SEQUENCE_CONFIRM_ID:
- sig->u.MlmeGetKeySequenceConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[0] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[1] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[2] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[3] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[4] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[5] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[6] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[7] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SM_START_CONFIRM_ID:
- sig->u.MlmeSmStartConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSmStartConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSmStartConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSmStartConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSmStartConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSmStartConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_AGGREGATION_CONFIRM_ID:
- sig->u.MlmeStopAggregationConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopAggregationConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopAggregationConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopAggregationConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopAggregationConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeStopAggregationConfirm.PeerQstaAddress.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- sig->u.MlmeStopAggregationConfirm.UserPriority = (CSR_PRIORITY) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopAggregationConfirm.Direction = (CSR_DIRECTION) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopAggregationConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TSPEC_REQUEST_ID:
- sig->u.MlmeDelTspecRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTspecRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTspecRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTspecRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTspecRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTspecRequest.UserPriority = (CSR_PRIORITY) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTspecRequest.Direction = (CSR_DIRECTION) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_DEBUG_WORD16_INDICATION_ID:
- sig->u.DebugWord16Indication.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[0] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[1] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[2] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[3] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[4] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[5] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[6] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[7] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[8] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[9] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[10] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[11] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[12] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[13] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[14] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugWord16Indication.DebugWords[15] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
- case CSR_DEBUG_GENERIC_CONFIRM_ID:
- sig->u.DebugGenericConfirm.DebugVariable.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericConfirm.DebugVariable.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericConfirm.DebugWords[0] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericConfirm.DebugWords[1] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericConfirm.DebugWords[2] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericConfirm.DebugWords[3] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericConfirm.DebugWords[4] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericConfirm.DebugWords[5] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericConfirm.DebugWords[6] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericConfirm.DebugWords[7] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
- case CSR_MA_PACKET_INDICATION_ID:
- sig->u.MaPacketIndication.Data.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketIndication.Data.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketIndication.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketIndication.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketIndication.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MaPacketIndication.LocalTime.x, &ptr[index], 64 / 8);
- index += 64 / 8;
- sig->u.MaPacketIndication.Ifindex = (CSR_IFINTERFACE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketIndication.Channel = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketIndication.ReceptionStatus = (CSR_RECEPTION_STATUS) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketIndication.Rssi = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketIndication.Snr = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketIndication.ReceivedRate = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
- case CSR_MLME_SET_TIM_REQUEST_ID:
- sig->u.MlmeSetTimRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetTimRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetTimRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetTimRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetTimRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetTimRequest.AssociationId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetTimRequest.TimValue = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECTED_INDICATION_ID:
- sig->u.MlmeConnectedIndication.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectedIndication.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectedIndication.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectedIndication.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectedIndication.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectedIndication.ConnectionStatus = (CSR_CONNECTION_STATUS) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeConnectedIndication.PeerMacAddress.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_RX_TRIGGER_REQUEST_ID:
- sig->u.MlmeDelRxTriggerRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelRxTriggerRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelRxTriggerRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelRxTriggerRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelRxTriggerRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelRxTriggerRequest.TriggerId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_TRIGGERED_GET_INDICATION_ID:
- sig->u.MlmeTriggeredGetIndication.MibAttributeValue.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeTriggeredGetIndication.MibAttributeValue.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeTriggeredGetIndication.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeTriggeredGetIndication.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeTriggeredGetIndication.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeTriggeredGetIndication.Status = (CSR_MIB_STATUS) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeTriggeredGetIndication.ErrorIndex = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeTriggeredGetIndication.TriggeredId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_REQUEST_ID:
- sig->u.MlmeScanRequest.ChannelList.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanRequest.ChannelList.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanRequest.InformationElements.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanRequest.InformationElements.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanRequest.Ifindex = (CSR_IFINTERFACE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanRequest.ScanType = (CSR_SCAN_TYPE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanRequest.ProbeDelay = CSR_GET_UINT32_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT32;
- sig->u.MlmeScanRequest.MinChannelTime = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanRequest.MaxChannelTime = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DELETEKEYS_CONFIRM_ID:
- sig->u.MlmeDeletekeysConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDeletekeysConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDeletekeysConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDeletekeysConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDeletekeysConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDeletekeysConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_NEXT_REQUEST_ID:
- sig->u.MlmeGetNextRequest.MibAttribute.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetNextRequest.MibAttribute.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetNextRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetNextRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CHANNEL_CONFIRM_ID:
- sig->u.MlmeSetChannelConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetChannelConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetChannelConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetChannelConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetChannelConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetChannelConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_START_AGGREGATION_REQUEST_ID:
- sig->u.MlmeStartAggregationRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeStartAggregationRequest.PeerQstaAddress.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- sig->u.MlmeStartAggregationRequest.UserPriority = (CSR_PRIORITY) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationRequest.Direction = (CSR_DIRECTION) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationRequest.StartingSequenceNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationRequest.BufferSize = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationRequest.BlockAckTimeout = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_REQUEST_ID:
- sig->u.MlmeHlSyncRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeHlSyncRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeHlSyncRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeHlSyncRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeHlSyncRequest.GroupAddress.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- break;
-#endif
- case CSR_DEBUG_GENERIC_REQUEST_ID:
- sig->u.DebugGenericRequest.DebugVariable.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericRequest.DebugVariable.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericRequest.DebugWords[0] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericRequest.DebugWords[1] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericRequest.DebugWords[2] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericRequest.DebugWords[3] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericRequest.DebugWords[4] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericRequest.DebugWords[5] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericRequest.DebugWords[6] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericRequest.DebugWords[7] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_LEAVE_CONFIRM_ID:
- sig->u.MlmeLeaveConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeLeaveConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeLeaveConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeLeaveConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeLeaveConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeLeaveConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TRIGGERED_GET_REQUEST_ID:
- sig->u.MlmeDelTriggeredGetRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTriggeredGetRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTriggeredGetRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTriggeredGetRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTriggeredGetRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTriggeredGetRequest.TriggeredId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_MULTICAST_ADDRESS_REQUEST_ID:
- sig->u.MlmeAddMulticastAddressRequest.Data.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddMulticastAddressRequest.Data.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddMulticastAddressRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddMulticastAddressRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddMulticastAddressRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddMulticastAddressRequest.NumberOfMulticastGroupAddresses = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_RESET_REQUEST_ID:
- sig->u.MlmeResetRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeResetRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeResetRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeResetRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeResetRequest.StaAddress.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- sig->u.MlmeResetRequest.SetDefaultMib = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_CANCEL_REQUEST_ID:
- sig->u.MlmeScanCancelRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanCancelRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanCancelRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanCancelRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanCancelRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TRIGGERED_GET_CONFIRM_ID:
- sig->u.MlmeAddTriggeredGetConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTriggeredGetConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTriggeredGetConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTriggeredGetConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTriggeredGetConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTriggeredGetConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTriggeredGetConfirm.TriggeredId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_PACKET_FILTER_REQUEST_ID:
- sig->u.MlmeSetPacketFilterRequest.InformationElements.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetPacketFilterRequest.InformationElements.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetPacketFilterRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetPacketFilterRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetPacketFilterRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetPacketFilterRequest.PacketFilterMode = (CSR_PACKET_FILTER_MODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetPacketFilterRequest.ArpFilterAddress = CSR_GET_UINT32_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT32;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_RX_TRIGGER_CONFIRM_ID:
- sig->u.MlmeDelRxTriggerConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelRxTriggerConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelRxTriggerConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelRxTriggerConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelRxTriggerConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelRxTriggerConfirm.TriggerId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelRxTriggerConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECT_STATUS_REQUEST_ID:
- sig->u.MlmeConnectStatusRequest.InformationElements.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectStatusRequest.InformationElements.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectStatusRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectStatusRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectStatusRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectStatusRequest.ConnectionStatus = (CSR_CONNECTION_STATUS) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeConnectStatusRequest.StaAddress.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- sig->u.MlmeConnectStatusRequest.AssociationId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectStatusRequest.AssociationCapabilityInformation = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_LEAVE_REQUEST_ID:
- sig->u.MlmeLeaveRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeLeaveRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeLeaveRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeLeaveRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeLeaveRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONFIG_QUEUE_REQUEST_ID:
- sig->u.MlmeConfigQueueRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConfigQueueRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConfigQueueRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConfigQueueRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConfigQueueRequest.QueueIndex = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConfigQueueRequest.Aifs = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConfigQueueRequest.Cwmin = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConfigQueueRequest.Cwmax = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConfigQueueRequest.TxopLimit = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TSPEC_CONFIRM_ID:
- sig->u.MlmeDelTspecConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTspecConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTspecConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTspecConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTspecConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTspecConfirm.UserPriority = (CSR_PRIORITY) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTspecConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MLME_SET_TIM_CONFIRM_ID:
- sig->u.MlmeSetTimConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetTimConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetTimConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetTimConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetTimConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetTimConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_INDICATION_ID:
- sig->u.MlmeMeasureIndication.MeasurementReportSet.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeMeasureIndication.MeasurementReportSet.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeMeasureIndication.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeMeasureIndication.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeMeasureIndication.DialogToken = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_BLACKOUT_CONFIRM_ID:
- sig->u.MlmeDelBlackoutConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelBlackoutConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelBlackoutConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelBlackoutConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelBlackoutConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelBlackoutConfirm.BlackoutId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelBlackoutConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TRIGGERED_GET_CONFIRM_ID:
- sig->u.MlmeDelTriggeredGetConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTriggeredGetConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTriggeredGetConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTriggeredGetConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTriggeredGetConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTriggeredGetConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelTriggeredGetConfirm.TriggeredId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_DEBUG_GENERIC_INDICATION_ID:
- sig->u.DebugGenericIndication.DebugVariable.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericIndication.DebugVariable.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericIndication.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericIndication.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericIndication.DebugWords[0] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericIndication.DebugWords[1] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericIndication.DebugWords[2] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericIndication.DebugWords[3] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericIndication.DebugWords[4] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericIndication.DebugWords[5] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericIndication.DebugWords[6] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugGenericIndication.DebugWords[7] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
- case CSR_MA_PACKET_CANCEL_REQUEST_ID:
- sig->u.MaPacketCancelRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketCancelRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketCancelRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketCancelRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketCancelRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketCancelRequest.HostTag = CSR_GET_UINT32_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT32;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MODIFY_BSS_PARAMETER_CONFIRM_ID:
- sig->u.MlmeModifyBssParameterConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeModifyBssParameterConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeModifyBssParameterConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeModifyBssParameterConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeModifyBssParameterConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeModifyBssParameterConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_PAUSE_AUTONOMOUS_SCAN_CONFIRM_ID:
- sig->u.MlmePauseAutonomousScanConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePauseAutonomousScanConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePauseAutonomousScanConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePauseAutonomousScanConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePauseAutonomousScanConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePauseAutonomousScanConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePauseAutonomousScanConfirm.AutonomousScanId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MA_PACKET_REQUEST_ID:
- sig->u.MaPacketRequest.Data.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketRequest.Data.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketRequest.TransmitRate = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketRequest.HostTag = CSR_GET_UINT32_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT32;
- sig->u.MaPacketRequest.Priority = (CSR_PRIORITY) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MaPacketRequest.Ra.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- sig->u.MaPacketRequest.TransmissionControl = (CSR_TRANSMISSION_CONTROL) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MODIFY_BSS_PARAMETER_REQUEST_ID:
- sig->u.MlmeModifyBssParameterRequest.Data.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeModifyBssParameterRequest.Data.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeModifyBssParameterRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeModifyBssParameterRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeModifyBssParameterRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeModifyBssParameterRequest.BeaconPeriod = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeModifyBssParameterRequest.DtimPeriod = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeModifyBssParameterRequest.CapabilityInformation = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeModifyBssParameterRequest.Bssid.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- sig->u.MlmeModifyBssParameterRequest.RtsThreshold = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_RX_TRIGGER_REQUEST_ID:
- sig->u.MlmeAddRxTriggerRequest.InformationElements.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddRxTriggerRequest.InformationElements.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddRxTriggerRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddRxTriggerRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddRxTriggerRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddRxTriggerRequest.TriggerId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddRxTriggerRequest.Priority = (CSR_PRIORITY) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MA_VIF_AVAILABILITY_INDICATION_ID:
- sig->u.MaVifAvailabilityIndication.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaVifAvailabilityIndication.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaVifAvailabilityIndication.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaVifAvailabilityIndication.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaVifAvailabilityIndication.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaVifAvailabilityIndication.Multicast = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CANCEL_REQUEST_ID:
- sig->u.MlmeHlSyncCancelRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeHlSyncCancelRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeHlSyncCancelRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeHlSyncCancelRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeHlSyncCancelRequest.GroupAddress.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_AUTONOMOUS_SCAN_REQUEST_ID:
- sig->u.MlmeDelAutonomousScanRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelAutonomousScanRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelAutonomousScanRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelAutonomousScanRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelAutonomousScanRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelAutonomousScanRequest.AutonomousScanId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_BLACKOUT_ENDED_INDICATION_ID:
- sig->u.MlmeBlackoutEndedIndication.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeBlackoutEndedIndication.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeBlackoutEndedIndication.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeBlackoutEndedIndication.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeBlackoutEndedIndication.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeBlackoutEndedIndication.BlackoutId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_AUTONOMOUS_SCAN_DONE_INDICATION_ID:
- sig->u.MlmeAutonomousScanDoneIndication.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAutonomousScanDoneIndication.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAutonomousScanDoneIndication.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAutonomousScanDoneIndication.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAutonomousScanDoneIndication.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAutonomousScanDoneIndication.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAutonomousScanDoneIndication.AutonomousScanId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_KEY_SEQUENCE_REQUEST_ID:
- sig->u.MlmeGetKeySequenceRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceRequest.KeyId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetKeySequenceRequest.KeyType = (CSR_KEY_TYPE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeGetKeySequenceRequest.Address.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CHANNEL_REQUEST_ID:
- sig->u.MlmeSetChannelRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetChannelRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetChannelRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetChannelRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetChannelRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetChannelRequest.Ifindex = (CSR_IFINTERFACE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetChannelRequest.Channel = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeSetChannelRequest.Address.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- sig->u.MlmeSetChannelRequest.AvailabilityDuration = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetChannelRequest.AvailabilityInterval = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_CONFIRM_ID:
- sig->u.MlmeMeasureConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeMeasureConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeMeasureConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeMeasureConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeMeasureConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeMeasureConfirm.DialogToken = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TRIGGERED_GET_REQUEST_ID:
- sig->u.MlmeAddTriggeredGetRequest.MibAttribute.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTriggeredGetRequest.MibAttribute.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTriggeredGetRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTriggeredGetRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTriggeredGetRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTriggeredGetRequest.TriggeredId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_AUTONOMOUS_SCAN_LOSS_INDICATION_ID:
- sig->u.MlmeAutonomousScanLossIndication.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAutonomousScanLossIndication.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAutonomousScanLossIndication.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAutonomousScanLossIndication.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAutonomousScanLossIndication.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeAutonomousScanLossIndication.Bssid.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- break;
-#endif
- case CSR_MA_VIF_AVAILABILITY_RESPONSE_ID:
- sig->u.MaVifAvailabilityResponse.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaVifAvailabilityResponse.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaVifAvailabilityResponse.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaVifAvailabilityResponse.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaVifAvailabilityResponse.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaVifAvailabilityResponse.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TEMPLATE_REQUEST_ID:
- sig->u.MlmeAddTemplateRequest.Data1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTemplateRequest.Data1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTemplateRequest.Data2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTemplateRequest.Data2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTemplateRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTemplateRequest.FrameType = (CSR_FRAME_TYPE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTemplateRequest.MinTransmitRate = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_POWERMGT_CONFIRM_ID:
- sig->u.MlmePowermgtConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePowermgtConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePowermgtConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePowermgtConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePowermgtConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePowermgtConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_PERIODIC_CONFIRM_ID:
- sig->u.MlmeAddPeriodicConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddPeriodicConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddPeriodicConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddPeriodicConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddPeriodicConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddPeriodicConfirm.PeriodicId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddPeriodicConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_CONFIRM_ID:
- sig->u.MlmeGetConfirm.MibAttributeValue.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetConfirm.MibAttributeValue.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetConfirm.Status = (CSR_MIB_STATUS) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetConfirm.ErrorIndex = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_NEXT_CONFIRM_ID:
- sig->u.MlmeGetNextConfirm.MibAttributeValue.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetNextConfirm.MibAttributeValue.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetNextConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetNextConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetNextConfirm.Status = (CSR_MIB_STATUS) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetNextConfirm.ErrorIndex = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_AGGREGATION_REQUEST_ID:
- sig->u.MlmeStopAggregationRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopAggregationRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopAggregationRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopAggregationRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopAggregationRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeStopAggregationRequest.PeerQstaAddress.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- sig->u.MlmeStopAggregationRequest.UserPriority = (CSR_PRIORITY) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopAggregationRequest.Direction = (CSR_DIRECTION) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_RX_TRIGGER_CONFIRM_ID:
- sig->u.MlmeAddRxTriggerConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddRxTriggerConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddRxTriggerConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddRxTriggerConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddRxTriggerConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddRxTriggerConfirm.TriggerId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddRxTriggerConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_BLACKOUT_REQUEST_ID:
- sig->u.MlmeAddBlackoutRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddBlackoutRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddBlackoutRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddBlackoutRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddBlackoutRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddBlackoutRequest.BlackoutId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddBlackoutRequest.BlackoutType = (CSR_BLACKOUT_TYPE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddBlackoutRequest.BlackoutSource = (CSR_BLACKOUT_SOURCE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddBlackoutRequest.BlackoutStartReference = CSR_GET_UINT32_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT32;
- sig->u.MlmeAddBlackoutRequest.BlackoutPeriod = CSR_GET_UINT32_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT32;
- sig->u.MlmeAddBlackoutRequest.BlackoutDuration = CSR_GET_UINT32_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT32;
- memcpy(sig->u.MlmeAddBlackoutRequest.PeerStaAddress.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- sig->u.MlmeAddBlackoutRequest.BlackoutCount = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DELETEKEYS_REQUEST_ID:
- sig->u.MlmeDeletekeysRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDeletekeysRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDeletekeysRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDeletekeysRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDeletekeysRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDeletekeysRequest.KeyId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDeletekeysRequest.KeyType = (CSR_KEY_TYPE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeDeletekeysRequest.Address.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_RESET_CONFIRM_ID:
- sig->u.MlmeResetConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeResetConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeResetConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeResetConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeResetConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CONFIRM_ID:
- sig->u.MlmeHlSyncConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeHlSyncConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeHlSyncConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeHlSyncConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeHlSyncConfirm.GroupAddress.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- sig->u.MlmeHlSyncConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_AUTONOMOUS_SCAN_REQUEST_ID:
- sig->u.MlmeAddAutonomousScanRequest.ChannelList.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanRequest.ChannelList.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanRequest.InformationElements.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanRequest.InformationElements.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanRequest.AutonomousScanId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanRequest.Ifindex = (CSR_IFINTERFACE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanRequest.ChannelStartingFactor = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanRequest.ScanType = (CSR_SCAN_TYPE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanRequest.ProbeDelay = CSR_GET_UINT32_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT32;
- sig->u.MlmeAddAutonomousScanRequest.MinChannelTime = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddAutonomousScanRequest.MaxChannelTime = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_REQUEST_ID:
- sig->u.MlmeSetRequest.MibAttributeValue.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetRequest.MibAttributeValue.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SM_START_REQUEST_ID:
- sig->u.MlmeSmStartRequest.Beacon.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSmStartRequest.Beacon.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSmStartRequest.BssParameters.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSmStartRequest.BssParameters.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSmStartRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSmStartRequest.Ifindex = (CSR_IFINTERFACE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSmStartRequest.Channel = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeSmStartRequest.InterfaceAddress.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- memcpy(sig->u.MlmeSmStartRequest.Bssid.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- sig->u.MlmeSmStartRequest.BeaconPeriod = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSmStartRequest.DtimPeriod = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSmStartRequest.CapabilityInformation = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECT_STATUS_CONFIRM_ID:
- sig->u.MlmeConnectStatusConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectStatusConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectStatusConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectStatusConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectStatusConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeConnectStatusConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_AUTONOMOUS_SCAN_CONFIRM_ID:
- sig->u.MlmeDelAutonomousScanConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelAutonomousScanConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelAutonomousScanConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelAutonomousScanConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelAutonomousScanConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelAutonomousScanConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelAutonomousScanConfirm.AutonomousScanId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_PERIODIC_REQUEST_ID:
- sig->u.MlmeDelPeriodicRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelPeriodicRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelPeriodicRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelPeriodicRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelPeriodicRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelPeriodicRequest.PeriodicId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SETKEYS_REQUEST_ID:
- sig->u.MlmeSetkeysRequest.Key.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysRequest.Key.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysRequest.Length = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysRequest.KeyId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysRequest.KeyType = (CSR_KEY_TYPE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeSetkeysRequest.Address.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- sig->u.MlmeSetkeysRequest.SequenceNumber[0] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysRequest.SequenceNumber[1] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysRequest.SequenceNumber[2] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysRequest.SequenceNumber[3] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysRequest.SequenceNumber[4] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysRequest.SequenceNumber[5] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysRequest.SequenceNumber[6] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetkeysRequest.SequenceNumber[7] = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(&sig->u.MlmeSetkeysRequest.CipherSuiteSelector, &ptr[index], 32 / 8);
- index += 32 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_PAUSE_AUTONOMOUS_SCAN_REQUEST_ID:
- sig->u.MlmePauseAutonomousScanRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePauseAutonomousScanRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePauseAutonomousScanRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePauseAutonomousScanRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePauseAutonomousScanRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePauseAutonomousScanRequest.AutonomousScanId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePauseAutonomousScanRequest.Pause = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_REQUEST_ID:
- sig->u.MlmeGetRequest.MibAttribute.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetRequest.MibAttribute.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeGetRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_POWERMGT_REQUEST_ID:
- sig->u.MlmePowermgtRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePowermgtRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePowermgtRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePowermgtRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePowermgtRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePowermgtRequest.PowerManagementMode = (CSR_POWER_MANAGEMENT_MODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePowermgtRequest.ReceiveDtims = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePowermgtRequest.ListenInterval = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmePowermgtRequest.TrafficWindow = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MA_PACKET_ERROR_INDICATION_ID:
- sig->u.MaPacketErrorIndication.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketErrorIndication.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketErrorIndication.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketErrorIndication.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketErrorIndication.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MaPacketErrorIndication.PeerQstaAddress.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- sig->u.MaPacketErrorIndication.UserPriority = (CSR_PRIORITY) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketErrorIndication.SequenceNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_PERIODIC_REQUEST_ID:
- sig->u.MlmeAddPeriodicRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddPeriodicRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddPeriodicRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddPeriodicRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddPeriodicRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddPeriodicRequest.PeriodicId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddPeriodicRequest.MaximumLatency = CSR_GET_UINT32_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT32;
- sig->u.MlmeAddPeriodicRequest.PeriodicSchedulingMode = (CSR_PERIODIC_SCHEDULING_MODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddPeriodicRequest.WakeHost = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddPeriodicRequest.UserPriority = (CSR_PRIORITY) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TSPEC_REQUEST_ID:
- sig->u.MlmeAddTspecRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecRequest.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecRequest.UserPriority = (CSR_PRIORITY) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecRequest.Direction = (CSR_DIRECTION) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecRequest.PsScheme = (CSR_PS_SCHEME) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecRequest.MediumTime = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecRequest.ServiceStartTime = CSR_GET_UINT32_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT32;
- sig->u.MlmeAddTspecRequest.ServiceInterval = CSR_GET_UINT32_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT32;
- sig->u.MlmeAddTspecRequest.MinimumDataRate = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_MULTICAST_ADDRESS_CONFIRM_ID:
- sig->u.MlmeAddMulticastAddressConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddMulticastAddressConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddMulticastAddressConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddMulticastAddressConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddMulticastAddressConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddMulticastAddressConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TSPEC_CONFIRM_ID:
- sig->u.MlmeAddTspecConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecConfirm.UserPriority = (CSR_PRIORITY) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTspecConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CANCEL_CONFIRM_ID:
- sig->u.MlmeHlSyncCancelConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeHlSyncCancelConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeHlSyncCancelConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeHlSyncCancelConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeHlSyncCancelConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_CONFIRM_ID:
- sig->u.MlmeScanConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeScanConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_DEBUG_STRING_INDICATION_ID:
- sig->u.DebugStringIndication.DebugMessage.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugStringIndication.DebugMessage.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugStringIndication.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.DebugStringIndication.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TEMPLATE_CONFIRM_ID:
- sig->u.MlmeAddTemplateConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTemplateConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTemplateConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTemplateConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTemplateConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTemplateConfirm.FrameType = (CSR_FRAME_TYPE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeAddTemplateConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_BLOCKACK_ERROR_INDICATION_ID:
- sig->u.MlmeBlockackErrorIndication.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeBlockackErrorIndication.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeBlockackErrorIndication.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeBlockackErrorIndication.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeBlockackErrorIndication.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeBlockackErrorIndication.ResultCode = (CSR_REASON_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeBlockackErrorIndication.PeerQstaAddress.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CONFIRM_ID:
- sig->u.MlmeSetConfirm.MibAttributeValue.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetConfirm.MibAttributeValue.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetConfirm.Status = (CSR_MIB_STATUS) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeSetConfirm.ErrorIndex = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_REQUEST_ID:
- sig->u.MlmeMeasureRequest.MeasurementRequestSet.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeMeasureRequest.MeasurementRequestSet.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeMeasureRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeMeasureRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeMeasureRequest.DialogToken = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_START_AGGREGATION_CONFIRM_ID:
- sig->u.MlmeStartAggregationConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- memcpy(sig->u.MlmeStartAggregationConfirm.PeerQstaAddress.x, &ptr[index], 48 / 8);
- index += 48 / 8;
- sig->u.MlmeStartAggregationConfirm.UserPriority = (CSR_PRIORITY) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationConfirm.Direction = (CSR_DIRECTION) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStartAggregationConfirm.SequenceNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_MEASURE_CONFIRM_ID:
- sig->u.MlmeStopMeasureConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopMeasureConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopMeasureConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopMeasureConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopMeasureConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopMeasureConfirm.DialogToken = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MA_PACKET_CONFIRM_ID:
- sig->u.MaPacketConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketConfirm.TransmissionStatus = (CSR_TRANSMISSION_STATUS) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketConfirm.RetryCount = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketConfirm.Rate = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MaPacketConfirm.HostTag = CSR_GET_UINT32_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT32;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_PERIODIC_CONFIRM_ID:
- sig->u.MlmeDelPeriodicConfirm.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelPeriodicConfirm.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelPeriodicConfirm.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelPeriodicConfirm.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelPeriodicConfirm.VirtualInterfaceIdentifier = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelPeriodicConfirm.PeriodicId = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeDelPeriodicConfirm.ResultCode = (CSR_RESULT_CODE) CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_MEASURE_REQUEST_ID:
- sig->u.MlmeStopMeasureRequest.Dummydataref1.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopMeasureRequest.Dummydataref1.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopMeasureRequest.Dummydataref2.SlotNumber = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopMeasureRequest.Dummydataref2.DataLength = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- sig->u.MlmeStopMeasureRequest.DialogToken = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-
- default:
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- return CSR_RESULT_SUCCESS;
-} /* read_unpack_signal() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * write_pack
- *
- * Convert a signal structure, in host-native format, to the
- * little-endian wire format specified in the UniFi Host Interface
- * Protocol Specification.
- *
- * WARNING: This function is auto-generated, DO NOT EDIT!
- *
- * Arguments:
- * sig Pointer to signal structure to pack.
- * ptr Destination buffer to pack into.
- * sig_len Returns the length of the packed signal, i.e. the
- * number of bytes written to ptr.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success,
- * CSR_WIFI_HIP_RESULT_INVALID_VALUE if the ID of signal was not recognised.
- * ---------------------------------------------------------------------------
- */
-CsrResult write_pack(const CSR_SIGNAL *sig, u8 *ptr, u16 *sig_len)
-{
- s16 index = 0;
-
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->SignalPrimitiveHeader.SignalId, ptr + index);
- index += SIZEOF_UINT16;
-
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->SignalPrimitiveHeader.ReceiverProcessId, ptr + index);
- index += SIZEOF_UINT16;
-
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->SignalPrimitiveHeader.SenderProcessId, ptr + index);
- index += SIZEOF_UINT16;
-
- switch (sig->SignalPrimitiveHeader.SignalId)
- {
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_PACKET_FILTER_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetPacketFilterConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetPacketFilterConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetPacketFilterConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetPacketFilterConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetPacketFilterConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetPacketFilterConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SETKEYS_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONFIG_QUEUE_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConfigQueueConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConfigQueueConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConfigQueueConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConfigQueueConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConfigQueueConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_AUTONOMOUS_SCAN_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanConfirm.AutonomousScanId, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_BLACKOUT_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutConfirm.BlackoutId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_BLACKOUT_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelBlackoutRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelBlackoutRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelBlackoutRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelBlackoutRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelBlackoutRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelBlackoutRequest.BlackoutId, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_KEY_SEQUENCE_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[0], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[1], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[2], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[3], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[4], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[5], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[6], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceConfirm.SequenceNumber[7], ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SM_START_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_AGGREGATION_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeStopAggregationConfirm.PeerQstaAddress.x, 48 / 8);
- index += 48 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationConfirm.UserPriority, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationConfirm.Direction, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TSPEC_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTspecRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTspecRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTspecRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTspecRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTspecRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTspecRequest.UserPriority, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTspecRequest.Direction, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_DEBUG_WORD16_INDICATION_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[0], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[1], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[2], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[3], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[4], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[5], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[6], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[7], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[8], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[9], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[10], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[11], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[12], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[13], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[14], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugWord16Indication.DebugWords[15], ptr + index);
- index += SIZEOF_UINT16;
- break;
- case CSR_DEBUG_GENERIC_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericConfirm.DebugVariable.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericConfirm.DebugVariable.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericConfirm.DebugWords[0], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericConfirm.DebugWords[1], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericConfirm.DebugWords[2], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericConfirm.DebugWords[3], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericConfirm.DebugWords[4], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericConfirm.DebugWords[5], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericConfirm.DebugWords[6], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericConfirm.DebugWords[7], ptr + index);
- index += SIZEOF_UINT16;
- break;
- case CSR_MA_PACKET_INDICATION_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketIndication.Data.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketIndication.Data.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketIndication.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketIndication.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketIndication.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MaPacketIndication.LocalTime.x, 64 / 8);
- index += 64 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketIndication.Ifindex, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketIndication.Channel, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketIndication.ReceptionStatus, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketIndication.Rssi, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketIndication.Snr, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketIndication.ReceivedRate, ptr + index);
- index += SIZEOF_UINT16;
- break;
- case CSR_MLME_SET_TIM_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetTimRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetTimRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetTimRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetTimRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetTimRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetTimRequest.AssociationId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetTimRequest.TimValue, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECTED_INDICATION_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectedIndication.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectedIndication.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectedIndication.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectedIndication.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectedIndication.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectedIndication.ConnectionStatus, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeConnectedIndication.PeerMacAddress.x, 48 / 8);
- index += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_RX_TRIGGER_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelRxTriggerRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelRxTriggerRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelRxTriggerRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelRxTriggerRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelRxTriggerRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelRxTriggerRequest.TriggerId, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_TRIGGERED_GET_INDICATION_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeTriggeredGetIndication.MibAttributeValue.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeTriggeredGetIndication.MibAttributeValue.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeTriggeredGetIndication.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeTriggeredGetIndication.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeTriggeredGetIndication.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeTriggeredGetIndication.Status, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeTriggeredGetIndication.ErrorIndex, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeTriggeredGetIndication.TriggeredId, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanRequest.ChannelList.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanRequest.ChannelList.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanRequest.InformationElements.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanRequest.InformationElements.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanRequest.Ifindex, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanRequest.ScanType, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT32_TO_LITTLE_ENDIAN(sig->u.MlmeScanRequest.ProbeDelay, ptr + index);
- index += SIZEOF_UINT32;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanRequest.MinChannelTime, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanRequest.MaxChannelTime, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DELETEKEYS_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDeletekeysConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDeletekeysConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDeletekeysConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDeletekeysConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDeletekeysConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDeletekeysConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_NEXT_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetNextRequest.MibAttribute.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetNextRequest.MibAttribute.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetNextRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetNextRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CHANNEL_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_START_AGGREGATION_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeStartAggregationRequest.PeerQstaAddress.x, 48 / 8);
- index += 48 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationRequest.UserPriority, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationRequest.Direction, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationRequest.StartingSequenceNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationRequest.BufferSize, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationRequest.BlockAckTimeout, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeHlSyncRequest.GroupAddress.x, 48 / 8);
- index += 48 / 8;
- break;
-#endif
- case CSR_DEBUG_GENERIC_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericRequest.DebugVariable.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericRequest.DebugVariable.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericRequest.DebugWords[0], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericRequest.DebugWords[1], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericRequest.DebugWords[2], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericRequest.DebugWords[3], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericRequest.DebugWords[4], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericRequest.DebugWords[5], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericRequest.DebugWords[6], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericRequest.DebugWords[7], ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_LEAVE_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeLeaveConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeLeaveConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeLeaveConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeLeaveConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeLeaveConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeLeaveConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TRIGGERED_GET_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTriggeredGetRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTriggeredGetRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTriggeredGetRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTriggeredGetRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTriggeredGetRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTriggeredGetRequest.TriggeredId, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_MULTICAST_ADDRESS_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddMulticastAddressRequest.Data.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddMulticastAddressRequest.Data.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddMulticastAddressRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddMulticastAddressRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddMulticastAddressRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddMulticastAddressRequest.NumberOfMulticastGroupAddresses, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_RESET_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeResetRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeResetRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeResetRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeResetRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeResetRequest.StaAddress.x, 48 / 8);
- index += 48 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeResetRequest.SetDefaultMib, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_CANCEL_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanCancelRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanCancelRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanCancelRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanCancelRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanCancelRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TRIGGERED_GET_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTriggeredGetConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTriggeredGetConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTriggeredGetConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTriggeredGetConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTriggeredGetConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTriggeredGetConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTriggeredGetConfirm.TriggeredId, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_PACKET_FILTER_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetPacketFilterRequest.InformationElements.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetPacketFilterRequest.InformationElements.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetPacketFilterRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetPacketFilterRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetPacketFilterRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetPacketFilterRequest.PacketFilterMode, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT32_TO_LITTLE_ENDIAN(sig->u.MlmeSetPacketFilterRequest.ArpFilterAddress, ptr + index);
- index += SIZEOF_UINT32;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_RX_TRIGGER_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelRxTriggerConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelRxTriggerConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelRxTriggerConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelRxTriggerConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelRxTriggerConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelRxTriggerConfirm.TriggerId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelRxTriggerConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECT_STATUS_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectStatusRequest.InformationElements.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectStatusRequest.InformationElements.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectStatusRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectStatusRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectStatusRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectStatusRequest.ConnectionStatus, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeConnectStatusRequest.StaAddress.x, 48 / 8);
- index += 48 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectStatusRequest.AssociationId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectStatusRequest.AssociationCapabilityInformation, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_LEAVE_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeLeaveRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeLeaveRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeLeaveRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeLeaveRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeLeaveRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONFIG_QUEUE_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConfigQueueRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConfigQueueRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConfigQueueRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConfigQueueRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConfigQueueRequest.QueueIndex, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConfigQueueRequest.Aifs, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConfigQueueRequest.Cwmin, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConfigQueueRequest.Cwmax, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConfigQueueRequest.TxopLimit, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TSPEC_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTspecConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTspecConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTspecConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTspecConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTspecConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTspecConfirm.UserPriority, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTspecConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MLME_SET_TIM_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetTimConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetTimConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetTimConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetTimConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetTimConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetTimConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_INDICATION_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureIndication.MeasurementReportSet.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureIndication.MeasurementReportSet.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureIndication.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureIndication.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureIndication.DialogToken, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_BLACKOUT_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelBlackoutConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelBlackoutConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelBlackoutConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelBlackoutConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelBlackoutConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelBlackoutConfirm.BlackoutId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelBlackoutConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TRIGGERED_GET_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTriggeredGetConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTriggeredGetConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTriggeredGetConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTriggeredGetConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTriggeredGetConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTriggeredGetConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelTriggeredGetConfirm.TriggeredId, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_DEBUG_GENERIC_INDICATION_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericIndication.DebugVariable.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericIndication.DebugVariable.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericIndication.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericIndication.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericIndication.DebugWords[0], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericIndication.DebugWords[1], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericIndication.DebugWords[2], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericIndication.DebugWords[3], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericIndication.DebugWords[4], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericIndication.DebugWords[5], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericIndication.DebugWords[6], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugGenericIndication.DebugWords[7], ptr + index);
- index += SIZEOF_UINT16;
- break;
- case CSR_MA_PACKET_CANCEL_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketCancelRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketCancelRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketCancelRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketCancelRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketCancelRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT32_TO_LITTLE_ENDIAN(sig->u.MaPacketCancelRequest.HostTag, ptr + index);
- index += SIZEOF_UINT32;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MODIFY_BSS_PARAMETER_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_PAUSE_AUTONOMOUS_SCAN_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePauseAutonomousScanConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePauseAutonomousScanConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePauseAutonomousScanConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePauseAutonomousScanConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePauseAutonomousScanConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePauseAutonomousScanConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePauseAutonomousScanConfirm.AutonomousScanId, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MA_PACKET_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketRequest.Data.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketRequest.Data.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketRequest.TransmitRate, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT32_TO_LITTLE_ENDIAN(sig->u.MaPacketRequest.HostTag, ptr + index);
- index += SIZEOF_UINT32;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketRequest.Priority, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MaPacketRequest.Ra.x, 48 / 8);
- index += 48 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketRequest.TransmissionControl, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MODIFY_BSS_PARAMETER_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterRequest.Data.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterRequest.Data.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterRequest.BeaconPeriod, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterRequest.DtimPeriod, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterRequest.CapabilityInformation, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeModifyBssParameterRequest.Bssid.x, 48 / 8);
- index += 48 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeModifyBssParameterRequest.RtsThreshold, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_RX_TRIGGER_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddRxTriggerRequest.InformationElements.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddRxTriggerRequest.InformationElements.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddRxTriggerRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddRxTriggerRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddRxTriggerRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddRxTriggerRequest.TriggerId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddRxTriggerRequest.Priority, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MA_VIF_AVAILABILITY_INDICATION_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaVifAvailabilityIndication.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaVifAvailabilityIndication.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaVifAvailabilityIndication.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaVifAvailabilityIndication.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaVifAvailabilityIndication.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaVifAvailabilityIndication.Multicast, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CANCEL_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncCancelRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncCancelRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncCancelRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncCancelRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeHlSyncCancelRequest.GroupAddress.x, 48 / 8);
- index += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_AUTONOMOUS_SCAN_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelAutonomousScanRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelAutonomousScanRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelAutonomousScanRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelAutonomousScanRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelAutonomousScanRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelAutonomousScanRequest.AutonomousScanId, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_BLACKOUT_ENDED_INDICATION_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeBlackoutEndedIndication.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeBlackoutEndedIndication.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeBlackoutEndedIndication.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeBlackoutEndedIndication.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeBlackoutEndedIndication.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeBlackoutEndedIndication.BlackoutId, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_AUTONOMOUS_SCAN_DONE_INDICATION_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAutonomousScanDoneIndication.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAutonomousScanDoneIndication.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAutonomousScanDoneIndication.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAutonomousScanDoneIndication.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAutonomousScanDoneIndication.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAutonomousScanDoneIndication.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAutonomousScanDoneIndication.AutonomousScanId, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_KEY_SEQUENCE_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceRequest.KeyId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetKeySequenceRequest.KeyType, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeGetKeySequenceRequest.Address.x, 48 / 8);
- index += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CHANNEL_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelRequest.Ifindex, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelRequest.Channel, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeSetChannelRequest.Address.x, 48 / 8);
- index += 48 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelRequest.AvailabilityDuration, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetChannelRequest.AvailabilityInterval, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureConfirm.DialogToken, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TRIGGERED_GET_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTriggeredGetRequest.MibAttribute.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTriggeredGetRequest.MibAttribute.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTriggeredGetRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTriggeredGetRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTriggeredGetRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTriggeredGetRequest.TriggeredId, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_AUTONOMOUS_SCAN_LOSS_INDICATION_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAutonomousScanLossIndication.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAutonomousScanLossIndication.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAutonomousScanLossIndication.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAutonomousScanLossIndication.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAutonomousScanLossIndication.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeAutonomousScanLossIndication.Bssid.x, 48 / 8);
- index += 48 / 8;
- break;
-#endif
- case CSR_MA_VIF_AVAILABILITY_RESPONSE_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaVifAvailabilityResponse.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaVifAvailabilityResponse.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaVifAvailabilityResponse.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaVifAvailabilityResponse.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaVifAvailabilityResponse.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaVifAvailabilityResponse.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TEMPLATE_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTemplateRequest.Data1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTemplateRequest.Data1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTemplateRequest.Data2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTemplateRequest.Data2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTemplateRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTemplateRequest.FrameType, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTemplateRequest.MinTransmitRate, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_POWERMGT_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_PERIODIC_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicConfirm.PeriodicId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetConfirm.MibAttributeValue.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetConfirm.MibAttributeValue.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetConfirm.Status, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetConfirm.ErrorIndex, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_NEXT_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetNextConfirm.MibAttributeValue.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetNextConfirm.MibAttributeValue.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetNextConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetNextConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetNextConfirm.Status, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetNextConfirm.ErrorIndex, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_AGGREGATION_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeStopAggregationRequest.PeerQstaAddress.x, 48 / 8);
- index += 48 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationRequest.UserPriority, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopAggregationRequest.Direction, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_RX_TRIGGER_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddRxTriggerConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddRxTriggerConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddRxTriggerConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddRxTriggerConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddRxTriggerConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddRxTriggerConfirm.TriggerId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddRxTriggerConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_BLACKOUT_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutRequest.BlackoutId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutRequest.BlackoutType, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutRequest.BlackoutSource, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT32_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutRequest.BlackoutStartReference, ptr + index);
- index += SIZEOF_UINT32;
- CSR_COPY_UINT32_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutRequest.BlackoutPeriod, ptr + index);
- index += SIZEOF_UINT32;
- CSR_COPY_UINT32_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutRequest.BlackoutDuration, ptr + index);
- index += SIZEOF_UINT32;
- memcpy(ptr + index, sig->u.MlmeAddBlackoutRequest.PeerStaAddress.x, 48 / 8);
- index += 48 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddBlackoutRequest.BlackoutCount, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DELETEKEYS_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDeletekeysRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDeletekeysRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDeletekeysRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDeletekeysRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDeletekeysRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDeletekeysRequest.KeyId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDeletekeysRequest.KeyType, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeDeletekeysRequest.Address.x, 48 / 8);
- index += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_RESET_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeResetConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeResetConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeResetConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeResetConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeResetConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeHlSyncConfirm.GroupAddress.x, 48 / 8);
- index += 48 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_AUTONOMOUS_SCAN_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanRequest.ChannelList.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanRequest.ChannelList.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanRequest.InformationElements.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanRequest.InformationElements.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanRequest.AutonomousScanId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanRequest.Ifindex, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanRequest.ChannelStartingFactor, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanRequest.ScanType, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT32_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanRequest.ProbeDelay, ptr + index);
- index += SIZEOF_UINT32;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanRequest.MinChannelTime, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddAutonomousScanRequest.MaxChannelTime, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetRequest.MibAttributeValue.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetRequest.MibAttributeValue.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SM_START_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartRequest.Beacon.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartRequest.Beacon.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartRequest.BssParameters.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartRequest.BssParameters.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartRequest.Ifindex, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartRequest.Channel, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeSmStartRequest.InterfaceAddress.x, 48 / 8);
- index += 48 / 8;
- memcpy(ptr + index, sig->u.MlmeSmStartRequest.Bssid.x, 48 / 8);
- index += 48 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartRequest.BeaconPeriod, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartRequest.DtimPeriod, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSmStartRequest.CapabilityInformation, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECT_STATUS_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectStatusConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectStatusConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectStatusConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectStatusConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectStatusConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeConnectStatusConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_AUTONOMOUS_SCAN_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelAutonomousScanConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelAutonomousScanConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelAutonomousScanConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelAutonomousScanConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelAutonomousScanConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelAutonomousScanConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelAutonomousScanConfirm.AutonomousScanId, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_PERIODIC_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelPeriodicRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelPeriodicRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelPeriodicRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelPeriodicRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelPeriodicRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelPeriodicRequest.PeriodicId, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SETKEYS_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.Key.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.Key.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.Length, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.KeyId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.KeyType, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeSetkeysRequest.Address.x, 48 / 8);
- index += 48 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.SequenceNumber[0], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.SequenceNumber[1], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.SequenceNumber[2], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.SequenceNumber[3], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.SequenceNumber[4], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.SequenceNumber[5], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.SequenceNumber[6], ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetkeysRequest.SequenceNumber[7], ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, &sig->u.MlmeSetkeysRequest.CipherSuiteSelector, 32 / 8);
- index += 32 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_PAUSE_AUTONOMOUS_SCAN_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePauseAutonomousScanRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePauseAutonomousScanRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePauseAutonomousScanRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePauseAutonomousScanRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePauseAutonomousScanRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePauseAutonomousScanRequest.AutonomousScanId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePauseAutonomousScanRequest.Pause, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetRequest.MibAttribute.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetRequest.MibAttribute.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeGetRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_POWERMGT_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtRequest.PowerManagementMode, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtRequest.ReceiveDtims, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtRequest.ListenInterval, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmePowermgtRequest.TrafficWindow, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MA_PACKET_ERROR_INDICATION_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketErrorIndication.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketErrorIndication.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketErrorIndication.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketErrorIndication.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketErrorIndication.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MaPacketErrorIndication.PeerQstaAddress.x, 48 / 8);
- index += 48 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketErrorIndication.UserPriority, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketErrorIndication.SequenceNumber, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_PERIODIC_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicRequest.PeriodicId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT32_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicRequest.MaximumLatency, ptr + index);
- index += SIZEOF_UINT32;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicRequest.PeriodicSchedulingMode, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicRequest.WakeHost, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddPeriodicRequest.UserPriority, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TSPEC_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecRequest.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecRequest.UserPriority, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecRequest.Direction, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecRequest.PsScheme, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecRequest.MediumTime, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT32_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecRequest.ServiceStartTime, ptr + index);
- index += SIZEOF_UINT32;
- CSR_COPY_UINT32_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecRequest.ServiceInterval, ptr + index);
- index += SIZEOF_UINT32;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecRequest.MinimumDataRate, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_MULTICAST_ADDRESS_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddMulticastAddressConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddMulticastAddressConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddMulticastAddressConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddMulticastAddressConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddMulticastAddressConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddMulticastAddressConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TSPEC_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecConfirm.UserPriority, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTspecConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CANCEL_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncCancelConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncCancelConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncCancelConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncCancelConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeHlSyncCancelConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeScanConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_DEBUG_STRING_INDICATION_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugStringIndication.DebugMessage.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugStringIndication.DebugMessage.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugStringIndication.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.DebugStringIndication.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TEMPLATE_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTemplateConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTemplateConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTemplateConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTemplateConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTemplateConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTemplateConfirm.FrameType, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeAddTemplateConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_BLOCKACK_ERROR_INDICATION_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeBlockackErrorIndication.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeBlockackErrorIndication.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeBlockackErrorIndication.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeBlockackErrorIndication.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeBlockackErrorIndication.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeBlockackErrorIndication.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeBlockackErrorIndication.PeerQstaAddress.x, 48 / 8);
- index += 48 / 8;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetConfirm.MibAttributeValue.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetConfirm.MibAttributeValue.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetConfirm.Status, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeSetConfirm.ErrorIndex, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureRequest.MeasurementRequestSet.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureRequest.MeasurementRequestSet.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeMeasureRequest.DialogToken, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_START_AGGREGATION_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- memcpy(ptr + index, sig->u.MlmeStartAggregationConfirm.PeerQstaAddress.x, 48 / 8);
- index += 48 / 8;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationConfirm.UserPriority, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationConfirm.Direction, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStartAggregationConfirm.SequenceNumber, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_MEASURE_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopMeasureConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopMeasureConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopMeasureConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopMeasureConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopMeasureConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopMeasureConfirm.DialogToken, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
- case CSR_MA_PACKET_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketConfirm.TransmissionStatus, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketConfirm.RetryCount, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MaPacketConfirm.Rate, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT32_TO_LITTLE_ENDIAN(sig->u.MaPacketConfirm.HostTag, ptr + index);
- index += SIZEOF_UINT32;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_PERIODIC_CONFIRM_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelPeriodicConfirm.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelPeriodicConfirm.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelPeriodicConfirm.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelPeriodicConfirm.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelPeriodicConfirm.VirtualInterfaceIdentifier, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelPeriodicConfirm.PeriodicId, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeDelPeriodicConfirm.ResultCode, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_MEASURE_REQUEST_ID:
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopMeasureRequest.Dummydataref1.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopMeasureRequest.Dummydataref1.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopMeasureRequest.Dummydataref2.SlotNumber, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopMeasureRequest.Dummydataref2.DataLength, ptr + index);
- index += SIZEOF_UINT16;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(sig->u.MlmeStopMeasureRequest.DialogToken, ptr + index);
- index += SIZEOF_UINT16;
- break;
-#endif
-
- default:
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- *sig_len = index;
-
- return CSR_RESULT_SUCCESS;
-} /* write_pack() */
-
-
diff --git a/drivers/staging/csr/csr_wifi_hip_send.c b/drivers/staging/csr/csr_wifi_hip_send.c
deleted file mode 100644
index 76429e5e77cf..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_send.c
+++ /dev/null
@@ -1,415 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ***************************************************************************
- *
- * FILE: csr_wifi_hip_send.c
- *
- * PURPOSE:
- * Code for adding a signal request to the from-host queue.
- * When the driver bottom-half is run, it will take requests from the
- * queue and pass them to the UniFi.
- *
- * ***************************************************************************
- */
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_conversions.h"
-#include "csr_wifi_hip_sigs.h"
-#include "csr_wifi_hip_card.h"
-
-unifi_TrafficQueue unifi_frame_priority_to_queue(CSR_PRIORITY priority)
-{
- switch (priority)
- {
- case CSR_QOS_UP0:
- case CSR_QOS_UP3:
- return UNIFI_TRAFFIC_Q_BE;
- case CSR_QOS_UP1:
- case CSR_QOS_UP2:
- return UNIFI_TRAFFIC_Q_BK;
- case CSR_QOS_UP4:
- case CSR_QOS_UP5:
- return UNIFI_TRAFFIC_Q_VI;
- case CSR_QOS_UP6:
- case CSR_QOS_UP7:
- case CSR_MANAGEMENT:
- return UNIFI_TRAFFIC_Q_VO;
- default:
- return UNIFI_TRAFFIC_Q_BE;
- }
-}
-
-
-CSR_PRIORITY unifi_get_default_downgrade_priority(unifi_TrafficQueue queue)
-{
- switch (queue)
- {
- case UNIFI_TRAFFIC_Q_BE:
- return CSR_QOS_UP0;
- case UNIFI_TRAFFIC_Q_BK:
- return CSR_QOS_UP1;
- case UNIFI_TRAFFIC_Q_VI:
- return CSR_QOS_UP5;
- case UNIFI_TRAFFIC_Q_VO:
- return CSR_QOS_UP6;
- default:
- return CSR_QOS_UP0;
- }
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * send_signal
- *
- * This function queues a signal for sending to UniFi. It first checks
- * that there is space on the fh_signal_queue for another entry, then
- * claims any bulk data slots required and copies data into them. Then
- * increments the fh_signal_queue write count.
- *
- * The fh_signal_queue is later processed by the driver bottom half
- * (in unifi_bh()).
- *
- * This function call unifi_pause_xmit() to pause the flow of data plane
- * packets when:
- * - the fh_signal_queue ring buffer is full
- * - there are less than UNIFI_MAX_DATA_REFERENCES (2) bulk data
- * slots available.
- *
- * Arguments:
- * card Pointer to card context structure
- * sigptr Pointer to the signal to write to UniFi.
- * siglen Number of bytes pointer to by sigptr.
- * bulkdata Array of pointers to an associated bulk data.
- * sigq To which from-host queue to add the signal.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success
- * CSR_WIFI_HIP_RESULT_NO_SPACE if there were insufficient data slots or
- * no free signal queue entry
- *
- * Notes:
- * Calls unifi_pause_xmit() when the last slots are used.
- * ---------------------------------------------------------------------------
- */
-static CsrResult send_signal(card_t *card, const u8 *sigptr, u32 siglen,
- const bulk_data_param_t *bulkdata,
- q_t *sigq, u32 priority_q, u32 run_bh)
-{
- u16 i, data_slot_size;
- card_signal_t *csptr;
- s16 qe;
- CsrResult r;
- s16 debug_print = 0;
-
- data_slot_size = CardGetDataSlotSize(card);
-
- /* Check that the fh_data_queue has a free slot */
- if (!CSR_WIFI_HIP_Q_SLOTS_FREE(sigq))
- {
- unifi_trace(card->ospriv, UDBG3, "send_signal: %s full\n", sigq->name);
-
- return CSR_WIFI_HIP_RESULT_NO_SPACE;
- }
-
- /*
- * Now add the signal to the From Host signal queue
- */
- /* Get next slot on queue */
- qe = CSR_WIFI_HIP_Q_NEXT_W_SLOT(sigq);
- csptr = CSR_WIFI_HIP_Q_SLOT_DATA(sigq, qe);
-
- /* Make up the card_signal struct */
- csptr->signal_length = (u16)siglen;
- memcpy((void *)csptr->sigbuf, (void *)sigptr, siglen);
-
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; ++i)
- {
- if ((bulkdata != NULL) && (bulkdata->d[i].data_length != 0))
- {
- u32 datalen = bulkdata->d[i].data_length;
-
- /* Make sure data will fit in a bulk data slot */
- if (bulkdata->d[i].os_data_ptr == NULL)
- {
- unifi_error(card->ospriv, "send_signal - NULL bulkdata[%d]\n", i);
- debug_print++;
- csptr->bulkdata[i].data_length = 0;
- }
- else
- {
- if (datalen > data_slot_size)
- {
- unifi_error(card->ospriv,
- "send_signal - Invalid data length %u (@%p), "
- "truncating\n",
- datalen, bulkdata->d[i].os_data_ptr);
- datalen = data_slot_size;
- debug_print++;
- }
- /* Store the bulk data info in the soft queue. */
- csptr->bulkdata[i].os_data_ptr = (u8 *)bulkdata->d[i].os_data_ptr;
- csptr->bulkdata[i].os_net_buf_ptr = (u8 *)bulkdata->d[i].os_net_buf_ptr;
- csptr->bulkdata[i].net_buf_length = bulkdata->d[i].net_buf_length;
- csptr->bulkdata[i].data_length = datalen;
- }
- }
- else
- {
- UNIFI_INIT_BULK_DATA(&csptr->bulkdata[i]);
- }
- }
-
- if (debug_print)
- {
- const u8 *sig = sigptr;
-
- unifi_error(card->ospriv, "Signal(%d): %*ph\n", siglen,
- 16, sig);
- unifi_error(card->ospriv, "Bulkdata pointer %p(%d), %p(%d)\n",
- bulkdata != NULL?bulkdata->d[0].os_data_ptr : NULL,
- bulkdata != NULL?bulkdata->d[0].data_length : 0,
- bulkdata != NULL?bulkdata->d[1].os_data_ptr : NULL,
- bulkdata != NULL?bulkdata->d[1].data_length : 0);
- }
-
- /* Advance the written count to say there is a new entry */
- CSR_WIFI_HIP_Q_INC_W(sigq);
-
- /*
- * Set the flag to say reason for waking was a host request.
- * Then ask the OS layer to run the unifi_bh.
- */
- if (run_bh == 1)
- {
- card->bh_reason_host = 1;
- r = unifi_run_bh(card->ospriv);
- if (r != CSR_RESULT_SUCCESS)
- {
- unifi_error(card->ospriv, "failed to run bh.\n");
- card->bh_reason_host = 0;
-
- /*
- * The bulk data buffer will be freed by the caller.
- * We need to invalidate the description of the bulk data in our
- * soft queue, to prevent the core freeing the bulk data again later.
- */
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; ++i)
- {
- if (csptr->bulkdata[i].data_length != 0)
- {
- csptr->bulkdata[i].os_data_ptr = csptr->bulkdata[i].os_net_buf_ptr = NULL;
- csptr->bulkdata[i].net_buf_length = csptr->bulkdata[i].data_length = 0;
- }
- }
- return r;
- }
- }
- else
- {
- unifi_error(card->ospriv, "run_bh=%d, bh not called.\n", run_bh);
- }
-
- /*
- * Have we used up all the fh signal list entries?
- */
- if (CSR_WIFI_HIP_Q_SLOTS_FREE(sigq) == 0)
- {
- /* We have filled the queue, so stop the upper layer. The command queue
- * is an exception, as suspending due to that being full could delay
- * resume/retry until new commands or data are received.
- */
- if (sigq != &card->fh_command_queue)
- {
- /*
- * Must call unifi_pause_xmit() *before* setting the paused flag.
- * (the unifi_pause_xmit call should not be after setting the flag because of the possibility of being interrupted
- * by the bh thread between our setting the flag and the call to unifi_pause_xmit()
- * If bh thread then cleared the flag, we would end up paused, but without the flag set)
- * Instead, setting it afterwards means that if this thread is interrupted by the bh thread
- * the pause flag is still guaranteed to end up set
- * However the potential deadlock now is that if bh thread emptied the queue and cleared the flag before this thread's
- * call to unifi_pause_xmit(), then bh thread may not run again because it will be waiting for
- * a packet to appear in the queue but nothing ever will because xmit is paused.
- * So we will end up with the queue paused, and the flag set to say it is paused, but bh never runs to unpause it.
- * (Note even this bad situation would not persist long in practice, because something else (eg rx, or tx in different queue)
- * is likely to wake bh thread quite soon)
- * But to avoid this deadlock completely, after setting the flag we check that there is something left in the queue.
- * If there is, we know that bh thread has not emptied the queue yet.
- * Since bh thread checks to unpause the queue *after* taking packets from the queue, we know that it is still going to make at
- * least one more check to see whether it needs to unpause the queue. So all is well.
- * If there are no packets in the queue, then the deadlock described above might happen. To make sure it does not, we
- * unpause the queue here. A possible side effect is that unifi_restart_xmit() may (rarely) be called for second time
- * unnecessarily, which is harmless
- */
-
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- unifi_debug_log_to_buf("P");
-#endif
- unifi_pause_xmit(card->ospriv, (unifi_TrafficQueue)priority_q);
- card_tx_q_pause(card, priority_q);
- if (CSR_WIFI_HIP_Q_SLOTS_USED(sigq) == 0)
- {
- card_tx_q_unpause(card, priority_q);
- unifi_restart_xmit(card->ospriv, (unifi_TrafficQueue) priority_q);
- }
- }
- else
- {
- unifi_warning(card->ospriv,
- "send_signal: fh_cmd_q full, not pausing (run_bh=%d)\n",
- run_bh);
- }
- }
-
- return CSR_RESULT_SUCCESS;
-} /* send_signal() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_send_signal
- *
- * Invokes send_signal() to queue a signal in the command or traffic queue
- * If sigptr pointer is NULL, it pokes the bh to check if UniFi is responsive.
- *
- * Arguments:
- * card Pointer to card context struct
- * sigptr Pointer to signal from card.
- * siglen Size of the signal
- * bulkdata Pointer to the bulk data of the signal
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success
- * CSR_WIFI_HIP_RESULT_NO_SPACE if there were insufficient data slots or no free signal queue entry
- *
- * Notes:
- * unifi_send_signal() is used to queue signals, created by the driver,
- * to the device. Signals are constructed using the UniFi packed structures.
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_send_signal(card_t *card, const u8 *sigptr, u32 siglen,
- const bulk_data_param_t *bulkdata)
-{
- q_t *sig_soft_q;
- u16 signal_id;
- CsrResult r;
- u32 run_bh;
- u32 priority_q;
-
- /* A NULL signal pointer is a request to check if UniFi is responsive */
- if (sigptr == NULL)
- {
- card->bh_reason_host = 1;
- return unifi_run_bh(card->ospriv);
- }
-
- priority_q = 0;
- run_bh = 1;
- signal_id = GET_SIGNAL_ID(sigptr);
- /*
- * If the signal is a CSR_MA_PACKET_REQUEST ,
- * we send it using the traffic soft queue. Else we use the command soft queue.
- */
- if (signal_id == CSR_MA_PACKET_REQUEST_ID)
- {
- u16 frame_priority;
-
- if (card->periodic_wake_mode == UNIFI_PERIODIC_WAKE_HOST_ENABLED)
- {
- run_bh = 0;
- }
-
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE) && defined (CSR_WIFI_HIP_DATA_PLANE_PROFILE)
- unifi_debug_log_to_buf("D");
-#endif
- /* Sanity check: MA-PACKET.req must have a valid bulk data */
- if ((bulkdata->d[0].data_length == 0) || (bulkdata->d[0].os_data_ptr == NULL))
- {
- unifi_error(card->ospriv, "MA-PACKET.req with empty bulk data (%d bytes in %p)\n",
- bulkdata->d[0].data_length, bulkdata->d[0].os_data_ptr);
- dump((void *)sigptr, siglen);
- return CSR_RESULT_FAILURE;
- }
-
- /* Map the frame priority to a traffic queue index. */
- frame_priority = GET_PACKED_MA_PACKET_REQUEST_FRAME_PRIORITY(sigptr);
- priority_q = unifi_frame_priority_to_queue((CSR_PRIORITY)frame_priority);
-
- sig_soft_q = &card->fh_traffic_queue[priority_q];
- }
- else
- {
- sig_soft_q = &card->fh_command_queue;
- }
-
- r = send_signal(card, sigptr, siglen, bulkdata, sig_soft_q, priority_q, run_bh);
- /* On error, the caller must free or requeue bulkdata buffers */
-
- return r;
-} /* unifi_send_signal() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_send_resources_available
- *
- * Examines whether there is available space to queue
- * a signal in the command or traffic queue
- *
- * Arguments:
- * card Pointer to card context struct
- * sigptr Pointer to signal.
- *
- * Returns:
- * CSR_RESULT_SUCCESS if resources available
- * CSR_WIFI_HIP_RESULT_NO_SPACE if there was no free signal queue entry
- *
- * Notes:
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_send_resources_available(card_t *card, const u8 *sigptr)
-{
- q_t *sig_soft_q;
- u16 signal_id = GET_SIGNAL_ID(sigptr);
-
- /*
- * If the signal is a CSR_MA_PACKET_REQUEST ,
- * we send it using the traffic soft queue. Else we use the command soft queue.
- */
- if (signal_id == CSR_MA_PACKET_REQUEST_ID)
- {
- u16 frame_priority;
- u32 priority_q;
-
- /* Map the frame priority to a traffic queue index. */
- frame_priority = GET_PACKED_MA_PACKET_REQUEST_FRAME_PRIORITY(sigptr);
- priority_q = unifi_frame_priority_to_queue((CSR_PRIORITY)frame_priority);
-
- sig_soft_q = &card->fh_traffic_queue[priority_q];
- }
- else
- {
- sig_soft_q = &card->fh_command_queue;
- }
-
- /* Check that the fh_data_queue has a free slot */
- if (!CSR_WIFI_HIP_Q_SLOTS_FREE(sig_soft_q))
- {
- unifi_notice(card->ospriv, "unifi_send_resources_available: %s full\n",
- sig_soft_q->name);
- return CSR_WIFI_HIP_RESULT_NO_SPACE;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* unifi_send_resources_available() */
-
-
diff --git a/drivers/staging/csr/csr_wifi_hip_signals.c b/drivers/staging/csr/csr_wifi_hip_signals.c
deleted file mode 100644
index 3c821320df00..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_signals.c
+++ /dev/null
@@ -1,1313 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-
-/* Generated by hip_dd_l_c_gen.pl */
-
-#include "csr_wifi_hip_signals.h"
-
-#include "csr_wifi_hip_unifi.h"
-
-s32 SigGetSize(const CSR_SIGNAL *aSignal)
-{
- switch (aSignal->SignalPrimitiveHeader.SignalId)
- {
- case CSR_MA_PACKET_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MA_PACKET_REQUEST);
- case CSR_MA_PACKET_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MA_PACKET_CONFIRM);
- case CSR_MA_PACKET_INDICATION_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MA_PACKET_INDICATION);
- case CSR_MA_PACKET_CANCEL_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MA_PACKET_CANCEL_REQUEST);
- case CSR_MA_VIF_AVAILABILITY_RESPONSE_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MA_VIF_AVAILABILITY_RESPONSE);
- case CSR_MA_VIF_AVAILABILITY_INDICATION_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MA_VIF_AVAILABILITY_INDICATION);
- case CSR_MA_PACKET_ERROR_INDICATION_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MA_PACKET_ERROR_INDICATION);
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_RESET_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_RESET_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_RESET_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_RESET_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_GET_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_GET_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SET_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SET_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_NEXT_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_GET_NEXT_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_NEXT_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_GET_NEXT_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_POWERMGT_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_POWERMGT_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_POWERMGT_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_POWERMGT_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SCAN_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SCAN_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_HL_SYNC_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_HL_SYNC_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_MEASURE_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_MEASURE_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_INDICATION_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_MEASURE_INDICATION);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SETKEYS_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SETKEYS_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SETKEYS_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SETKEYS_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DELETEKEYS_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_DELETEKEYS_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DELETEKEYS_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_DELETEKEYS_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_AUTONOMOUS_SCAN_LOSS_INDICATION_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_AUTONOMOUS_SCAN_LOSS_INDICATION);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECTED_INDICATION_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_CONNECTED_INDICATION);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_CANCEL_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SCAN_CANCEL_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CANCEL_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_HL_SYNC_CANCEL_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CANCEL_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_HL_SYNC_CANCEL_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_PERIODIC_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_PERIODIC_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_PERIODIC_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_PERIODIC_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_PERIODIC_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_DEL_PERIODIC_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_PERIODIC_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_DEL_PERIODIC_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_AUTONOMOUS_SCAN_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_AUTONOMOUS_SCAN_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_AUTONOMOUS_SCAN_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_AUTONOMOUS_SCAN_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_AUTONOMOUS_SCAN_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_DEL_AUTONOMOUS_SCAN_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_AUTONOMOUS_SCAN_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_DEL_AUTONOMOUS_SCAN_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_PACKET_FILTER_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SET_PACKET_FILTER_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_PACKET_FILTER_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SET_PACKET_FILTER_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_MEASURE_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_STOP_MEASURE_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_MEASURE_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_STOP_MEASURE_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_PAUSE_AUTONOMOUS_SCAN_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_PAUSE_AUTONOMOUS_SCAN_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_PAUSE_AUTONOMOUS_SCAN_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_PAUSE_AUTONOMOUS_SCAN_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_AUTONOMOUS_SCAN_DONE_INDICATION_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_AUTONOMOUS_SCAN_DONE_INDICATION);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TRIGGERED_GET_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_TRIGGERED_GET_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TRIGGERED_GET_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_TRIGGERED_GET_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TRIGGERED_GET_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_DEL_TRIGGERED_GET_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TRIGGERED_GET_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_DEL_TRIGGERED_GET_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_TRIGGERED_GET_INDICATION_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_TRIGGERED_GET_INDICATION);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_BLACKOUT_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_BLACKOUT_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_BLACKOUT_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_BLACKOUT_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_BLACKOUT_ENDED_INDICATION_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_BLACKOUT_ENDED_INDICATION);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_BLACKOUT_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_DEL_BLACKOUT_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_BLACKOUT_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_DEL_BLACKOUT_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_RX_TRIGGER_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_RX_TRIGGER_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_RX_TRIGGER_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_RX_TRIGGER_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_RX_TRIGGER_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_DEL_RX_TRIGGER_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_RX_TRIGGER_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_DEL_RX_TRIGGER_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECT_STATUS_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_CONNECT_STATUS_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECT_STATUS_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_CONNECT_STATUS_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MODIFY_BSS_PARAMETER_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_MODIFY_BSS_PARAMETER_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MODIFY_BSS_PARAMETER_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_MODIFY_BSS_PARAMETER_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TEMPLATE_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_TEMPLATE_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TEMPLATE_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_TEMPLATE_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONFIG_QUEUE_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_CONFIG_QUEUE_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONFIG_QUEUE_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_CONFIG_QUEUE_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TSPEC_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_TSPEC_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TSPEC_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_TSPEC_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TSPEC_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_DEL_TSPEC_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TSPEC_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_DEL_TSPEC_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_START_AGGREGATION_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_START_AGGREGATION_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_START_AGGREGATION_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_START_AGGREGATION_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_BLOCKACK_ERROR_INDICATION_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_BLOCKACK_ERROR_INDICATION);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_AGGREGATION_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_STOP_AGGREGATION_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_AGGREGATION_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_STOP_AGGREGATION_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SM_START_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SM_START_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SM_START_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SM_START_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_LEAVE_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_LEAVE_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_LEAVE_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_LEAVE_CONFIRM);
-#endif
- case CSR_MLME_SET_TIM_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SET_TIM_REQUEST);
- case CSR_MLME_SET_TIM_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SET_TIM_CONFIRM);
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_KEY_SEQUENCE_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_GET_KEY_SEQUENCE_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_KEY_SEQUENCE_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_GET_KEY_SEQUENCE_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CHANNEL_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SET_CHANNEL_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CHANNEL_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_SET_CHANNEL_CONFIRM);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_MULTICAST_ADDRESS_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_MULTICAST_ADDRESS_REQUEST);
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_MULTICAST_ADDRESS_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_MLME_ADD_MULTICAST_ADDRESS_CONFIRM);
-#endif
- case CSR_DEBUG_STRING_INDICATION_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_DEBUG_STRING_INDICATION);
- case CSR_DEBUG_WORD16_INDICATION_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_DEBUG_WORD16_INDICATION);
- case CSR_DEBUG_GENERIC_REQUEST_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_DEBUG_GENERIC_REQUEST);
- case CSR_DEBUG_GENERIC_CONFIRM_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_DEBUG_GENERIC_CONFIRM);
- case CSR_DEBUG_GENERIC_INDICATION_ID:
- return offsetof(struct CSR_SIGNAL_PRIMITIVE, u) + sizeof(CSR_DEBUG_GENERIC_INDICATION);
- default:
- return 0;
- }
-}
-
-
-s32 SigGetDataRefs(CSR_SIGNAL *aSignal, CSR_DATAREF **aDataRef)
-{
- s32 numRefs = 0;
-
- switch (aSignal->SignalPrimitiveHeader.SignalId)
- {
- case CSR_MA_PACKET_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MaPacketRequest.Data;
- aDataRef[numRefs++] = &aSignal->u.MaPacketRequest.Dummydataref2;
- break;
- case CSR_MA_PACKET_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MaPacketConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MaPacketConfirm.Dummydataref2;
- break;
- case CSR_MA_PACKET_INDICATION_ID:
- aDataRef[numRefs++] = &aSignal->u.MaPacketIndication.Data;
- aDataRef[numRefs++] = &aSignal->u.MaPacketIndication.Dummydataref2;
- break;
- case CSR_MA_PACKET_CANCEL_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MaPacketCancelRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MaPacketCancelRequest.Dummydataref2;
- break;
- case CSR_MA_VIF_AVAILABILITY_RESPONSE_ID:
- aDataRef[numRefs++] = &aSignal->u.MaVifAvailabilityResponse.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MaVifAvailabilityResponse.Dummydataref2;
- break;
- case CSR_MA_VIF_AVAILABILITY_INDICATION_ID:
- aDataRef[numRefs++] = &aSignal->u.MaVifAvailabilityIndication.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MaVifAvailabilityIndication.Dummydataref2;
- break;
- case CSR_MA_PACKET_ERROR_INDICATION_ID:
- aDataRef[numRefs++] = &aSignal->u.MaPacketErrorIndication.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MaPacketErrorIndication.Dummydataref2;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_RESET_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeResetRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeResetRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_RESET_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeResetConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeResetConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeGetRequest.MibAttribute;
- aDataRef[numRefs++] = &aSignal->u.MlmeGetRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeGetConfirm.MibAttributeValue;
- aDataRef[numRefs++] = &aSignal->u.MlmeGetConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeSetRequest.MibAttributeValue;
- aDataRef[numRefs++] = &aSignal->u.MlmeSetRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeSetConfirm.MibAttributeValue;
- aDataRef[numRefs++] = &aSignal->u.MlmeSetConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_NEXT_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeGetNextRequest.MibAttribute;
- aDataRef[numRefs++] = &aSignal->u.MlmeGetNextRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_NEXT_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeGetNextConfirm.MibAttributeValue;
- aDataRef[numRefs++] = &aSignal->u.MlmeGetNextConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_POWERMGT_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmePowermgtRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmePowermgtRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_POWERMGT_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmePowermgtConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmePowermgtConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeScanRequest.ChannelList;
- aDataRef[numRefs++] = &aSignal->u.MlmeScanRequest.InformationElements;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeScanConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeScanConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeHlSyncRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeHlSyncRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeHlSyncConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeHlSyncConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeMeasureRequest.MeasurementRequestSet;
- aDataRef[numRefs++] = &aSignal->u.MlmeMeasureRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeMeasureConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeMeasureConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_INDICATION_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeMeasureIndication.MeasurementReportSet;
- aDataRef[numRefs++] = &aSignal->u.MlmeMeasureIndication.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SETKEYS_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeSetkeysRequest.Key;
- aDataRef[numRefs++] = &aSignal->u.MlmeSetkeysRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SETKEYS_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeSetkeysConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeSetkeysConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DELETEKEYS_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeDeletekeysRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeDeletekeysRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DELETEKEYS_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeDeletekeysConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeDeletekeysConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_AUTONOMOUS_SCAN_LOSS_INDICATION_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAutonomousScanLossIndication.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeAutonomousScanLossIndication.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECTED_INDICATION_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeConnectedIndication.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeConnectedIndication.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_CANCEL_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeScanCancelRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeScanCancelRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CANCEL_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeHlSyncCancelRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeHlSyncCancelRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CANCEL_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeHlSyncCancelConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeHlSyncCancelConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_PERIODIC_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddPeriodicRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddPeriodicRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_PERIODIC_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddPeriodicConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddPeriodicConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_PERIODIC_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeDelPeriodicRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeDelPeriodicRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_PERIODIC_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeDelPeriodicConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeDelPeriodicConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_AUTONOMOUS_SCAN_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddAutonomousScanRequest.ChannelList;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddAutonomousScanRequest.InformationElements;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_AUTONOMOUS_SCAN_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddAutonomousScanConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddAutonomousScanConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_AUTONOMOUS_SCAN_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeDelAutonomousScanRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeDelAutonomousScanRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_AUTONOMOUS_SCAN_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeDelAutonomousScanConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeDelAutonomousScanConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_PACKET_FILTER_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeSetPacketFilterRequest.InformationElements;
- aDataRef[numRefs++] = &aSignal->u.MlmeSetPacketFilterRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_PACKET_FILTER_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeSetPacketFilterConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeSetPacketFilterConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_MEASURE_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeStopMeasureRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeStopMeasureRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_MEASURE_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeStopMeasureConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeStopMeasureConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_PAUSE_AUTONOMOUS_SCAN_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmePauseAutonomousScanRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmePauseAutonomousScanRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_PAUSE_AUTONOMOUS_SCAN_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmePauseAutonomousScanConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmePauseAutonomousScanConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_AUTONOMOUS_SCAN_DONE_INDICATION_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAutonomousScanDoneIndication.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeAutonomousScanDoneIndication.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TRIGGERED_GET_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddTriggeredGetRequest.MibAttribute;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddTriggeredGetRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TRIGGERED_GET_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddTriggeredGetConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddTriggeredGetConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TRIGGERED_GET_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeDelTriggeredGetRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeDelTriggeredGetRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TRIGGERED_GET_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeDelTriggeredGetConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeDelTriggeredGetConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_TRIGGERED_GET_INDICATION_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeTriggeredGetIndication.MibAttributeValue;
- aDataRef[numRefs++] = &aSignal->u.MlmeTriggeredGetIndication.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_BLACKOUT_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddBlackoutRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddBlackoutRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_BLACKOUT_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddBlackoutConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddBlackoutConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_BLACKOUT_ENDED_INDICATION_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeBlackoutEndedIndication.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeBlackoutEndedIndication.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_BLACKOUT_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeDelBlackoutRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeDelBlackoutRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_BLACKOUT_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeDelBlackoutConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeDelBlackoutConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_RX_TRIGGER_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddRxTriggerRequest.InformationElements;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddRxTriggerRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_RX_TRIGGER_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddRxTriggerConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddRxTriggerConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_RX_TRIGGER_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeDelRxTriggerRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeDelRxTriggerRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_RX_TRIGGER_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeDelRxTriggerConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeDelRxTriggerConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECT_STATUS_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeConnectStatusRequest.InformationElements;
- aDataRef[numRefs++] = &aSignal->u.MlmeConnectStatusRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECT_STATUS_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeConnectStatusConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeConnectStatusConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MODIFY_BSS_PARAMETER_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeModifyBssParameterRequest.Data;
- aDataRef[numRefs++] = &aSignal->u.MlmeModifyBssParameterRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MODIFY_BSS_PARAMETER_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeModifyBssParameterConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeModifyBssParameterConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TEMPLATE_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddTemplateRequest.Data1;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddTemplateRequest.Data2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TEMPLATE_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddTemplateConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddTemplateConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONFIG_QUEUE_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeConfigQueueRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeConfigQueueRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONFIG_QUEUE_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeConfigQueueConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeConfigQueueConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TSPEC_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddTspecRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddTspecRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TSPEC_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddTspecConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddTspecConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TSPEC_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeDelTspecRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeDelTspecRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TSPEC_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeDelTspecConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeDelTspecConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_START_AGGREGATION_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeStartAggregationRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeStartAggregationRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_START_AGGREGATION_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeStartAggregationConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeStartAggregationConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_BLOCKACK_ERROR_INDICATION_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeBlockackErrorIndication.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeBlockackErrorIndication.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_AGGREGATION_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeStopAggregationRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeStopAggregationRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_AGGREGATION_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeStopAggregationConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeStopAggregationConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SM_START_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeSmStartRequest.Beacon;
- aDataRef[numRefs++] = &aSignal->u.MlmeSmStartRequest.BssParameters;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SM_START_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeSmStartConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeSmStartConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_LEAVE_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeLeaveRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeLeaveRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_LEAVE_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeLeaveConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeLeaveConfirm.Dummydataref2;
- break;
-#endif
- case CSR_MLME_SET_TIM_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeSetTimRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeSetTimRequest.Dummydataref2;
- break;
- case CSR_MLME_SET_TIM_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeSetTimConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeSetTimConfirm.Dummydataref2;
- break;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_KEY_SEQUENCE_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeGetKeySequenceRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeGetKeySequenceRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_KEY_SEQUENCE_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeGetKeySequenceConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeGetKeySequenceConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CHANNEL_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeSetChannelRequest.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeSetChannelRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CHANNEL_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeSetChannelConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeSetChannelConfirm.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_MULTICAST_ADDRESS_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddMulticastAddressRequest.Data;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddMulticastAddressRequest.Dummydataref2;
- break;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_MULTICAST_ADDRESS_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.MlmeAddMulticastAddressConfirm.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.MlmeAddMulticastAddressConfirm.Dummydataref2;
- break;
-#endif
- case CSR_DEBUG_STRING_INDICATION_ID:
- aDataRef[numRefs++] = &aSignal->u.DebugStringIndication.DebugMessage;
- aDataRef[numRefs++] = &aSignal->u.DebugStringIndication.Dummydataref2;
- break;
- case CSR_DEBUG_WORD16_INDICATION_ID:
- aDataRef[numRefs++] = &aSignal->u.DebugWord16Indication.Dummydataref1;
- aDataRef[numRefs++] = &aSignal->u.DebugWord16Indication.Dummydataref2;
- break;
- case CSR_DEBUG_GENERIC_REQUEST_ID:
- aDataRef[numRefs++] = &aSignal->u.DebugGenericRequest.DebugVariable;
- aDataRef[numRefs++] = &aSignal->u.DebugGenericRequest.Dummydataref2;
- break;
- case CSR_DEBUG_GENERIC_CONFIRM_ID:
- aDataRef[numRefs++] = &aSignal->u.DebugGenericConfirm.DebugVariable;
- aDataRef[numRefs++] = &aSignal->u.DebugGenericConfirm.Dummydataref2;
- break;
- case CSR_DEBUG_GENERIC_INDICATION_ID:
- aDataRef[numRefs++] = &aSignal->u.DebugGenericIndication.DebugVariable;
- aDataRef[numRefs++] = &aSignal->u.DebugGenericIndication.Dummydataref2;
- break;
- default:
- return 0;
- }
- return numRefs;
-}
-
-
-u32 SigGetFilterPos(u16 aSigID)
-{
- switch (aSigID)
- {
- case CSR_MA_PACKET_REQUEST_ID:
- return 0x00000001;
- case CSR_MA_PACKET_CONFIRM_ID:
- return 0x00000002;
- case CSR_MA_PACKET_INDICATION_ID:
- return 0x00000004;
- case CSR_MA_PACKET_CANCEL_REQUEST_ID:
- return 0x00000008;
- case CSR_MA_VIF_AVAILABILITY_RESPONSE_ID:
- return 0x00000010;
- case CSR_MA_VIF_AVAILABILITY_INDICATION_ID:
- return 0x00000020;
- case CSR_MA_PACKET_ERROR_INDICATION_ID:
- return 0x00000040;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_RESET_REQUEST_ID:
- return 0x00000080;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_RESET_CONFIRM_ID:
- return 0x00000100;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_REQUEST_ID:
- return 0x00000200;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_CONFIRM_ID:
- return 0x00000400;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_REQUEST_ID:
- return 0x00000800;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CONFIRM_ID:
- return 0x00001000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_NEXT_REQUEST_ID:
- return 0x00002000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_NEXT_CONFIRM_ID:
- return 0x00004000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_POWERMGT_REQUEST_ID:
- return 0x00008000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_POWERMGT_CONFIRM_ID:
- return 0x00010001;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_REQUEST_ID:
- return 0x00010002;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_CONFIRM_ID:
- return 0x00010004;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_REQUEST_ID:
- return 0x00010008;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CONFIRM_ID:
- return 0x00010010;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_REQUEST_ID:
- return 0x00010020;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_CONFIRM_ID:
- return 0x00010040;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MEASURE_INDICATION_ID:
- return 0x00010080;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SETKEYS_REQUEST_ID:
- return 0x00010100;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SETKEYS_CONFIRM_ID:
- return 0x00010200;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DELETEKEYS_REQUEST_ID:
- return 0x00010400;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DELETEKEYS_CONFIRM_ID:
- return 0x00010800;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_AUTONOMOUS_SCAN_LOSS_INDICATION_ID:
- return 0x00011000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECTED_INDICATION_ID:
- return 0x00012000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SCAN_CANCEL_REQUEST_ID:
- return 0x00014000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CANCEL_REQUEST_ID:
- return 0x00018000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_HL_SYNC_CANCEL_CONFIRM_ID:
- return 0x00020001;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_PERIODIC_REQUEST_ID:
- return 0x00020002;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_PERIODIC_CONFIRM_ID:
- return 0x00020004;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_PERIODIC_REQUEST_ID:
- return 0x00020008;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_PERIODIC_CONFIRM_ID:
- return 0x00020010;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_AUTONOMOUS_SCAN_REQUEST_ID:
- return 0x00020020;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_AUTONOMOUS_SCAN_CONFIRM_ID:
- return 0x00020040;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_AUTONOMOUS_SCAN_REQUEST_ID:
- return 0x00020080;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_AUTONOMOUS_SCAN_CONFIRM_ID:
- return 0x00020100;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_PACKET_FILTER_REQUEST_ID:
- return 0x00020200;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_PACKET_FILTER_CONFIRM_ID:
- return 0x00020400;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_MEASURE_REQUEST_ID:
- return 0x00020800;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_MEASURE_CONFIRM_ID:
- return 0x00021000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_PAUSE_AUTONOMOUS_SCAN_REQUEST_ID:
- return 0x00022000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_PAUSE_AUTONOMOUS_SCAN_CONFIRM_ID:
- return 0x00024000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_AUTONOMOUS_SCAN_DONE_INDICATION_ID:
- return 0x00028000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TRIGGERED_GET_REQUEST_ID:
- return 0x00030001;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TRIGGERED_GET_CONFIRM_ID:
- return 0x00030002;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TRIGGERED_GET_REQUEST_ID:
- return 0x00030004;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TRIGGERED_GET_CONFIRM_ID:
- return 0x00030008;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_TRIGGERED_GET_INDICATION_ID:
- return 0x00030010;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_BLACKOUT_REQUEST_ID:
- return 0x00030020;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_BLACKOUT_CONFIRM_ID:
- return 0x00030040;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_BLACKOUT_ENDED_INDICATION_ID:
- return 0x00030080;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_BLACKOUT_REQUEST_ID:
- return 0x00030100;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_BLACKOUT_CONFIRM_ID:
- return 0x00030200;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_RX_TRIGGER_REQUEST_ID:
- return 0x00030400;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_RX_TRIGGER_CONFIRM_ID:
- return 0x00030800;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_RX_TRIGGER_REQUEST_ID:
- return 0x00031000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_RX_TRIGGER_CONFIRM_ID:
- return 0x00032000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECT_STATUS_REQUEST_ID:
- return 0x00034000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONNECT_STATUS_CONFIRM_ID:
- return 0x00038000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MODIFY_BSS_PARAMETER_REQUEST_ID:
- return 0x00040001;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_MODIFY_BSS_PARAMETER_CONFIRM_ID:
- return 0x00040002;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TEMPLATE_REQUEST_ID:
- return 0x00040004;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TEMPLATE_CONFIRM_ID:
- return 0x00040008;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONFIG_QUEUE_REQUEST_ID:
- return 0x00040010;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_CONFIG_QUEUE_CONFIRM_ID:
- return 0x00040020;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TSPEC_REQUEST_ID:
- return 0x00040040;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_TSPEC_CONFIRM_ID:
- return 0x00040080;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TSPEC_REQUEST_ID:
- return 0x00040100;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_DEL_TSPEC_CONFIRM_ID:
- return 0x00040200;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_START_AGGREGATION_REQUEST_ID:
- return 0x00040400;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_START_AGGREGATION_CONFIRM_ID:
- return 0x00040800;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_BLOCKACK_ERROR_INDICATION_ID:
- return 0x00041000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_AGGREGATION_REQUEST_ID:
- return 0x00042000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_STOP_AGGREGATION_CONFIRM_ID:
- return 0x00044000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SM_START_REQUEST_ID:
- return 0x00048000;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SM_START_CONFIRM_ID:
- return 0x00050001;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_LEAVE_REQUEST_ID:
- return 0x00050002;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_LEAVE_CONFIRM_ID:
- return 0x00050004;
-#endif
- case CSR_MLME_SET_TIM_REQUEST_ID:
- return 0x00050008;
- case CSR_MLME_SET_TIM_CONFIRM_ID:
- return 0x00050010;
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_KEY_SEQUENCE_REQUEST_ID:
- return 0x00050020;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_GET_KEY_SEQUENCE_CONFIRM_ID:
- return 0x00050040;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CHANNEL_REQUEST_ID:
- return 0x00050080;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_SET_CHANNEL_CONFIRM_ID:
- return 0x00050100;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_MULTICAST_ADDRESS_REQUEST_ID:
- return 0x00050200;
-#endif
-#ifdef CSR_WIFI_HIP_FULL_SIGNAL_SET
- case CSR_MLME_ADD_MULTICAST_ADDRESS_CONFIRM_ID:
- return 0x00050400;
-#endif
- case CSR_DEBUG_STRING_INDICATION_ID:
- return 0x00050800;
- case CSR_DEBUG_WORD16_INDICATION_ID:
- return 0x00051000;
- case CSR_DEBUG_GENERIC_REQUEST_ID:
- return 0x00052000;
- case CSR_DEBUG_GENERIC_CONFIRM_ID:
- return 0x00054000;
- case CSR_DEBUG_GENERIC_INDICATION_ID:
- return 0x00058000;
- default:
- break;
- }
- return 0xffffffff;
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_hip_signals.h b/drivers/staging/csr/csr_wifi_hip_signals.h
deleted file mode 100644
index ca4d0774195c..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_signals.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- *****************************************************************************
- *
- * FILE: csr_wifi_hip_signals.h
- *
- * PURPOSE:
- * Header file wrapping the auto-generated code in csr_wifi_hip_sigs.h
- * and csr_wifi_hip_signals.c -
- * csr_wifi_hip_sigs.h provides structures defining UniFi signals and
- * csr_wifi_hip_signals.c provides SigGetSize() and SigGetDataRefs().
- *
- *****************************************************************************
- */
-#ifndef __CSR_WIFI_HIP_SIGNALS_H__
-#define __CSR_WIFI_HIP_SIGNALS_H__
-
-#include <linux/types.h>
-#include "csr_wifi_hip_sigs.h"
-
-
-/****************************************************************************/
-/* INFORMATION ELEMENTS */
-/****************************************************************************/
-
-/* Information Element ID's - shouldn't be in here, but nowhere better yet */
-#define IE_SSID_ID 0
-#define IE_SUPPORTED_RATES_ID 1
-#define IE_FH_PARAM_SET_ID 2
-#define IE_DS_PARAM_SET_ID 3
-#define IE_CF_PARAM_SET_ID 4
-#define IE_TIM_ID 5
-#define IE_IBSS_PARAM_SET_ID 6
-#define IE_COUNTRY_ID 7
-#define IE_HOPPING_PATTERN_PARAMS_ID 8
-#define IE_HOPPING_PATTERN_TABLE_ID 9
-#define IE_REQUEST_ID 10
-#define IE_QBSS_LOAD_ID 11
-#define IE_EDCA_PARAM_SET_ID 12
-#define IE_TRAFFIC_SPEC_ID 13
-#define IE_TRAFFIC_CLASS_ID 14
-#define IE_SCHEDULE_ID 15
-#define IE_CHALLENGE_TEXT_ID 16
-#define IE_POWER_CONSTRAINT_ID 32
-#define IE_POWER_CAPABILITY_ID 33
-#define IE_TPC_REQUEST_ID 34
-#define IE_TPC_REPORT_ID 35
-#define IE_SUPPORTED_CHANNELS_ID 36
-#define IE_CHANNEL_SWITCH_ANNOUNCE_ID 37
-#define IE_MEASUREMENT_REQUEST_ID 38
-#define IE_MEASUREMENT_REPORT_ID 39
-#define IE_QUIET_ID 40
-#define IE_IBSS_DFS_ID 41
-#define IE_ERP_INFO_ID 42
-#define IE_TS_DELAY_ID 43
-#define IE_TCLAS_PROCESSING_ID 44
-#define IE_QOS_CAPABILITY_ID 46
-#define IE_RSN_ID 48
-#define IE_EXTENDED_SUPPORTED_RATES_ID 50
-#define IE_AP_CHANNEL_REPORT_ID 52
-#define IE_RCPI_ID 53
-#define IE_WPA_ID 221
-
-
-/* The maximum number of data references in a signal structure */
-#define UNIFI_MAX_DATA_REFERENCES 2
-
-/* The space to allow for a wire-format signal structure */
-#define UNIFI_PACKED_SIGBUF_SIZE 64
-
-
-/******************************************************************************/
-/* SIGNAL PARAMETER VALUES */
-/******************************************************************************/
-
-/* ifIndex */
-#define UNIFI_IF_2G4 1
-#define UNIFI_IF_5G 2
-
-/* SendProcessId */
-#define HOST_PROC_ID 0xc000
-
-#define SIG_CAP_ESS 0x0001
-#define SIG_CAP_IBSS 0x0002
-#define SIG_CAP_CF_POLLABLE 0x0004
-#define SIG_CAP_CF_POLL_REQUEST 0x0008
-#define SIG_CAP_PRIVACY 0x0010
-#define SIG_CAP_SHORT_PREAMBLE 0x0020
-#define SIG_CAP_DSSSOFDM 0x2000
-
-/******************************************************************************/
-/* FUNCTION DECLARATIONS */
-/******************************************************************************/
-
-/******************************************************************************
- * SigGetNumDataRefs - Retrieve pointers to data-refs from a signal.
- *
- * PARAMETERS:
- * aSignal - Pointer to signal to retrieve the data refs of.
- * aDataRef - Address of a pointer to the structure that the data refs
- * pointers will be stored.
- *
- * RETURNS:
- * The number of data-refs in the signal.
- */
-s32 SigGetDataRefs(CSR_SIGNAL *aSignal, CSR_DATAREF **aDataRef);
-
-/******************************************************************************
- * SigGetSize - Retrieve the size (in bytes) of a given signal.
- *
- * PARAMETERS:
- * aSignal - Pointer to signal to retrieve size of.
- *
- * RETURNS:
- * The size (in bytes) of the given signal.
- */
-s32 SigGetSize(const CSR_SIGNAL *aSignal);
-
-#endif /* __CSR_WIFI_HIP_SIGNALS_H__ */
diff --git a/drivers/staging/csr/csr_wifi_hip_sigs.h b/drivers/staging/csr/csr_wifi_hip_sigs.h
deleted file mode 100644
index 6112cc3e87fa..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_sigs.h
+++ /dev/null
@@ -1,1417 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-
-/* Generated by hip_dd_l_h_gen.pl */
-
-#ifndef CSR_WIFI_HIP_SIGS_H
-#define CSR_WIFI_HIP_SIGS_H
-
-typedef s16 csr_place_holding_type;
-
-typedef u16 CSR_ASSOCIATION_ID;
-
-typedef u16 CSR_AUTONOMOUS_SCAN_ID;
-
-typedef u16 CSR_BEACON_PERIODS;
-
-typedef u16 CSR_BLACKOUT_ID;
-
-typedef enum CSR_BLACKOUT_SOURCE
-{
- CSR_DOT11_LOCAL = 0x0000,
- CSR_DOT11_REMOTE = 0x0001,
- CSR_OTHER_RADIO = 0x0002,
- CSR_NOT_LINKED = 0x0004
-} CSR_BLACKOUT_SOURCE;
-
-typedef enum CSR_BLACKOUT_TYPE
-{
- CSR_LOCAL_DEVICE_ONLY = 0x0001,
- CSR_SPECIFIED_PEER = 0x0002,
- CSR_CURRENT_CHANNEL = 0x0004,
- CSR_P2P = 0x0008
-} CSR_BLACKOUT_TYPE;
-
-typedef enum CSR_BOOT_LOADER_OPERATION
-{
- CSR_BOOT_LOADER_IDLE = 0x00,
- CSR_BOOT_LOADER_RESTART = 0x01,
- CSR_BOOT_LOADER_PATCH = 0x02,
- CSR_BOOT_LOADER_IMAGE_0 = 0x10,
- CSR_BOOT_LOADER_IMAGE_1 = 0x11,
- CSR_BOOT_LOADER_IMAGE_2 = 0x12,
- CSR_BOOT_LOADER_IMAGE_3 = 0x13
-} CSR_BOOT_LOADER_OPERATION;
-
-typedef u16 CSR_CAPABILITY_INFORMATION;
-
-typedef u16 CSR_CHANNEL_STARTING_FACTOR;
-
-typedef u32 CSR_CIPHER_SUITE_SELECTOR;
-
-typedef u32 CSR_CLIENT_TAG;
-
-typedef enum CSR_CONNECTION_STATUS
-{
- CSR_DISCONNECTED = 0x0000,
- CSR_CONNECTED_AWAKE = 0x0001
-} CSR_CONNECTION_STATUS;
-
-typedef s16 CSR_DECIBELS;
-
-typedef enum CSR_DIRECTION
-{
- CSR_TRANSMIT = 0x0000,
- CSR_RECEIVE = 0x0001,
- CSR_BIDIRECTIONAL = 0x0003
-} CSR_DIRECTION;
-
-typedef enum CSR_FRAME_TYPE
-{
- CSR_RESERVED = 0x0000,
- CSR_BEACON = 0x0001,
- CSR_PROBE_RESPONSE = 0x0002,
- CSR_BEACON_AND_PROBE_RESPONSE = 0x0003,
- CSR_PROBE_REQUEST = 0x0004
-} CSR_FRAME_TYPE;
-
-typedef u32 CSR_IPV4_ADDRESS;
-
-typedef enum CSR_IFINTERFACE
-{
- CSR_INDEX_2G4 = 0x0001,
- CSR_INDEX_5G = 0x0002
-} CSR_IFINTERFACE;
-
-typedef enum CSR_KEY_TYPE
-{
- CSR_GROUP = 0x0000,
- CSR_PAIRWISE = 0x0001,
- CSR_PEER_KEY = 0x0002,
- CSR_IGTK = 0x0003
-} CSR_KEY_TYPE;
-
-typedef enum CSR_LOADER_OPERATION
-{
- CSR_LOADER_IDLE = 0x0000,
- CSR_LOADER_COPY = 0x0001
-} CSR_LOADER_OPERATION;
-
-typedef struct CSR_MAC_ADDRESS
-{
- u8 x[6];
-} CSR_MACADDRESS;
-
-typedef enum CSR_MIB_STATUS
-{
- CSR_MIB_SUCCESSFUL = 0x0000,
- CSR_MIB_INVALID_PARAMETERS = 0x0001,
- CSR_MIB_WRITE_ONLY = 0x0002,
- CSR_MIB_READ_ONLY = 0x0003
-} CSR_MIB_STATUS;
-
-typedef enum CSR_MEMORY_SPACE
-{
- CSR_NONE = 0x00,
- CSR_SHARED_DATA_MEMORY = 0x01,
- CSR_EXTERNAL_FLASH_MEMORY = 0x02,
- CSR_EXTERNAL_SRAM = 0x03,
- CSR_REGISTERS = 0x04,
- CSR_PHY_PROCESSOR_DATA_MEMORY = 0x10,
- CSR_PHY_PROCESSOR_PROGRAM_MEMORY = 0x11,
- CSR_PHY_PROCESSOR_ROM = 0x12,
- CSR_MAC_PROCESSOR_DATA_MEMORY = 0x20,
- CSR_MAC_PROCESSOR_PROGRAM_MEMORY = 0x21,
- CSR_MAC_PROCESSOR_ROM = 0x22,
- CSR_BT_PROCESSOR_DATA_MEMORY = 0x30,
- CSR_BT_PROCESSOR_PROGRAM_MEMORY = 0x31,
- CSR_BT_PROCESSOR_ROM = 0x32
-} CSR_MEMORY_SPACE;
-
-typedef u16 CSR_MICROSECONDS16;
-
-typedef u32 CSR_MICROSECONDS32;
-
-typedef u16 CSR_NATURAL16;
-
-typedef enum CSR_PS_SCHEME
-{
- CSR_LEGACY_PS = 0x0001,
- CSR_U_APSD = 0x0002,
- CSR_S_APSD = 0x0004
-} CSR_PS_SCHEME;
-
-typedef enum CSR_PACKET_FILTER_MODE
-{
- CSR_PFM_OPT_OUT = 0x0000,
- CSR_PFM_OPT_IN = 0x0003
-} CSR_PACKET_FILTER_MODE;
-
-typedef u16 CSR_PERIODIC_ID;
-
-typedef enum CSR_PERIODIC_SCHEDULING_MODE
-{
- CSR_PSM_PERIODIC_SCHEDULE_PS_POLL = 0x0001,
- CSR_PSM_PERIODIC_SCHEDULE_PM_BIT = 0x0002,
- CSR_PSM_PERIODIC_SCHEDULE_UAPSD = 0x0004,
- CSR_PSM_PERIODIC_SCHEDULE_SAPSD = 0x0008
-} CSR_PERIODIC_SCHEDULING_MODE;
-
-typedef enum CSR_POWER_MANAGEMENT_MODE
-{
- CSR_PMM_ACTIVE_MODE = 0x0000,
- CSR_PMM_POWER_SAVE = 0x0001,
- CSR_PMM_FAST_POWER_SAVE = 0x0002
-} CSR_POWER_MANAGEMENT_MODE;
-
-typedef enum CSR_PRIORITY
-{
- CSR_QOS_UP0 = 0x0000,
- CSR_QOS_UP1 = 0x0001,
- CSR_QOS_UP2 = 0x0002,
- CSR_QOS_UP3 = 0x0003,
- CSR_QOS_UP4 = 0x0004,
- CSR_QOS_UP5 = 0x0005,
- CSR_QOS_UP6 = 0x0006,
- CSR_QOS_UP7 = 0x0007,
- CSR_CONTENTION = 0x8000,
- CSR_MANAGEMENT = 0x8010
-} CSR_PRIORITY;
-
-typedef enum CSR_REASON_CODE
-{
- CSR_UNSPECIFIED_REASON = 0x0001,
- CSR_INVALID_INFORMATION_ELEMENT = 0x000d,
- CSR_QOS_UNSPECIFIED_REASON = 0x0020,
- CSR_QOS_EXCESSIVE_NOT_ACK = 0x0022,
- CSR_QOS_TXOP_LIMIT_EXCEEDED = 0x0023,
- CSR_QSTA_LEAVING = 0x0024,
- CSR_UNKNOWN_BA = 0x0026,
- CSR_UNKNOWN_TS = 0x0026,
- CSR_TIMEOUT = 0x0027
-} CSR_REASON_CODE;
-
-typedef enum CSR_RECEPTION_STATUS
-{
- CSR_RX_SUCCESS = 0x0000,
- CSR_RX_FAILURE_UNSPECIFIED = 0x0001,
- CSR_MICHAEL_MIC_ERROR = 0x0002,
- CSR_DECRYPTION_ERROR = 0x0003,
- CSR_NO_TEMPORAL_KEY_AVAILABLE = 0x0004,
- CSR_UNSUPPORTED_MODULATION = 0x0011,
- CSR_BAD_FCS = 0x0012,
- CSR_BAD_SIGNAL = 0x0013
-} CSR_RECEPTION_STATUS;
-
-typedef enum CSR_RESULT_CODE
-{
- CSR_RC_SUCCESS = 0x0000,
- CSR_RC_UNSPECIFIED_FAILURE = 0x0001,
- CSR_RC_REFUSED = 0x0003,
- CSR_RC_INVALID_PARAMETERS = 0x0026,
- CSR_RC_REJECTED_INVALID_IE = 0x0028,
- CSR_RC_REJECTED_INVALID_GROUP_CIPHER = 0x0029,
- CSR_RC_REJECTED_INVALID_PAIRWISE_CIPHER = 0x002a,
- CSR_RC_TIMEOUT = 0x8000,
- CSR_RC_TOO_MANY_SIMULTANEOUS_REQUESTS = 0x8001,
- CSR_RC_BSS_ALREADY_STARTED_OR_JOINED = 0x8002,
- CSR_RC_NOT_SUPPORTED = 0x8003,
- CSR_RC_TRANSMISSION_FAILURE = 0x8004,
- CSR_RC_RESET_REQUIRED_BEFORE_START = 0x8006,
- CSR_RC_INSUFFICIENT_RESOURCE = 0x8007,
- CSR_RC_NO_BUFFERED_BROADCAST_MULTICAST_FRAMES = 0x8008,
- CSR_RC_INVALID_UNICAST_CIPHER = 0xf02f,
- CSR_RC_INVALID_MULTICAST_CIPHER = 0xf030
-} CSR_RESULT_CODE;
-
-typedef enum CSR_SCAN_TYPE
-{
- CSR_SC_ACTIVE_SCAN = 0x0000,
- CSR_SC_PASSIVE_SCAN = 0x0001
-} CSR_SCAN_TYPE;
-
-typedef enum CSR_SIGNAL_ID
-{
- CSR_MA_PACKET_REQUEST_ID = 0x0110,
- CSR_MA_PACKET_CONFIRM_ID = 0x0111,
- CSR_MA_PACKET_INDICATION_ID = 0x0113,
- CSR_MA_PACKET_CANCEL_REQUEST_ID = 0x0114,
- CSR_MA_VIF_AVAILABILITY_RESPONSE_ID = 0x0116,
- CSR_MA_VIF_AVAILABILITY_INDICATION_ID = 0x0117,
- CSR_MA_PACKET_ERROR_INDICATION_ID = 0x011b,
- CSR_MLME_RESET_REQUEST_ID = 0x0200,
- CSR_MLME_RESET_CONFIRM_ID = 0x0201,
- CSR_MLME_GET_REQUEST_ID = 0x0204,
- CSR_MLME_GET_CONFIRM_ID = 0x0205,
- CSR_MLME_SET_REQUEST_ID = 0x0208,
- CSR_MLME_SET_CONFIRM_ID = 0x0209,
- CSR_MLME_GET_NEXT_REQUEST_ID = 0x020c,
- CSR_MLME_GET_NEXT_CONFIRM_ID = 0x020d,
- CSR_MLME_POWERMGT_REQUEST_ID = 0x0210,
- CSR_MLME_POWERMGT_CONFIRM_ID = 0x0211,
- CSR_MLME_SCAN_REQUEST_ID = 0x0214,
- CSR_MLME_SCAN_CONFIRM_ID = 0x0215,
- CSR_MLME_HL_SYNC_REQUEST_ID = 0x0244,
- CSR_MLME_HL_SYNC_CONFIRM_ID = 0x0245,
- CSR_MLME_MEASURE_REQUEST_ID = 0x0258,
- CSR_MLME_MEASURE_CONFIRM_ID = 0x0259,
- CSR_MLME_MEASURE_INDICATION_ID = 0x025b,
- CSR_MLME_SETKEYS_REQUEST_ID = 0x0268,
- CSR_MLME_SETKEYS_CONFIRM_ID = 0x0269,
- CSR_MLME_DELETEKEYS_REQUEST_ID = 0x026c,
- CSR_MLME_DELETEKEYS_CONFIRM_ID = 0x026d,
- CSR_MLME_AUTONOMOUS_SCAN_LOSS_INDICATION_ID = 0x0287,
- CSR_MLME_CONNECTED_INDICATION_ID = 0x028b,
- CSR_MLME_SCAN_CANCEL_REQUEST_ID = 0x028c,
- CSR_MLME_HL_SYNC_CANCEL_REQUEST_ID = 0x0298,
- CSR_MLME_HL_SYNC_CANCEL_CONFIRM_ID = 0x0299,
- CSR_MLME_ADD_PERIODIC_REQUEST_ID = 0x02a0,
- CSR_MLME_ADD_PERIODIC_CONFIRM_ID = 0x02a1,
- CSR_MLME_DEL_PERIODIC_REQUEST_ID = 0x02a4,
- CSR_MLME_DEL_PERIODIC_CONFIRM_ID = 0x02a5,
- CSR_MLME_ADD_AUTONOMOUS_SCAN_REQUEST_ID = 0x02a8,
- CSR_MLME_ADD_AUTONOMOUS_SCAN_CONFIRM_ID = 0x02a9,
- CSR_MLME_DEL_AUTONOMOUS_SCAN_REQUEST_ID = 0x02ac,
- CSR_MLME_DEL_AUTONOMOUS_SCAN_CONFIRM_ID = 0x02ad,
- CSR_MLME_SET_PACKET_FILTER_REQUEST_ID = 0x02b8,
- CSR_MLME_SET_PACKET_FILTER_CONFIRM_ID = 0x02b9,
- CSR_MLME_STOP_MEASURE_REQUEST_ID = 0x02bc,
- CSR_MLME_STOP_MEASURE_CONFIRM_ID = 0x02bd,
- CSR_MLME_PAUSE_AUTONOMOUS_SCAN_REQUEST_ID = 0x02cc,
- CSR_MLME_PAUSE_AUTONOMOUS_SCAN_CONFIRM_ID = 0x02cd,
- CSR_MLME_AUTONOMOUS_SCAN_DONE_INDICATION_ID = 0x02db,
- CSR_MLME_ADD_TRIGGERED_GET_REQUEST_ID = 0x02dc,
- CSR_MLME_ADD_TRIGGERED_GET_CONFIRM_ID = 0x02dd,
- CSR_MLME_DEL_TRIGGERED_GET_REQUEST_ID = 0x02e0,
- CSR_MLME_DEL_TRIGGERED_GET_CONFIRM_ID = 0x02e1,
- CSR_MLME_TRIGGERED_GET_INDICATION_ID = 0x02e7,
- CSR_MLME_ADD_BLACKOUT_REQUEST_ID = 0x02f8,
- CSR_MLME_ADD_BLACKOUT_CONFIRM_ID = 0x02f9,
- CSR_MLME_BLACKOUT_ENDED_INDICATION_ID = 0x02fb,
- CSR_MLME_DEL_BLACKOUT_REQUEST_ID = 0x02fc,
- CSR_MLME_DEL_BLACKOUT_CONFIRM_ID = 0x02fd,
- CSR_MLME_ADD_RX_TRIGGER_REQUEST_ID = 0x0304,
- CSR_MLME_ADD_RX_TRIGGER_CONFIRM_ID = 0x0305,
- CSR_MLME_DEL_RX_TRIGGER_REQUEST_ID = 0x0308,
- CSR_MLME_DEL_RX_TRIGGER_CONFIRM_ID = 0x0309,
- CSR_MLME_CONNECT_STATUS_REQUEST_ID = 0x0310,
- CSR_MLME_CONNECT_STATUS_CONFIRM_ID = 0x0311,
- CSR_MLME_MODIFY_BSS_PARAMETER_REQUEST_ID = 0x0314,
- CSR_MLME_MODIFY_BSS_PARAMETER_CONFIRM_ID = 0x0315,
- CSR_MLME_ADD_TEMPLATE_REQUEST_ID = 0x0318,
- CSR_MLME_ADD_TEMPLATE_CONFIRM_ID = 0x0319,
- CSR_MLME_CONFIG_QUEUE_REQUEST_ID = 0x031c,
- CSR_MLME_CONFIG_QUEUE_CONFIRM_ID = 0x031d,
- CSR_MLME_ADD_TSPEC_REQUEST_ID = 0x0320,
- CSR_MLME_ADD_TSPEC_CONFIRM_ID = 0x0321,
- CSR_MLME_DEL_TSPEC_REQUEST_ID = 0x0324,
- CSR_MLME_DEL_TSPEC_CONFIRM_ID = 0x0325,
- CSR_MLME_START_AGGREGATION_REQUEST_ID = 0x0328,
- CSR_MLME_START_AGGREGATION_CONFIRM_ID = 0x0329,
- CSR_MLME_BLOCKACK_ERROR_INDICATION_ID = 0x032b,
- CSR_MLME_STOP_AGGREGATION_REQUEST_ID = 0x032c,
- CSR_MLME_STOP_AGGREGATION_CONFIRM_ID = 0x032d,
- CSR_MLME_SM_START_REQUEST_ID = 0x0334,
- CSR_MLME_SM_START_CONFIRM_ID = 0x0335,
- CSR_MLME_LEAVE_REQUEST_ID = 0x0338,
- CSR_MLME_LEAVE_CONFIRM_ID = 0x0339,
- CSR_MLME_SET_TIM_REQUEST_ID = 0x033c,
- CSR_MLME_SET_TIM_CONFIRM_ID = 0x033d,
- CSR_MLME_GET_KEY_SEQUENCE_REQUEST_ID = 0x0340,
- CSR_MLME_GET_KEY_SEQUENCE_CONFIRM_ID = 0x0341,
- CSR_MLME_SET_CHANNEL_REQUEST_ID = 0x034c,
- CSR_MLME_SET_CHANNEL_CONFIRM_ID = 0x034d,
- CSR_MLME_ADD_MULTICAST_ADDRESS_REQUEST_ID = 0x040c,
- CSR_MLME_ADD_MULTICAST_ADDRESS_CONFIRM_ID = 0x040d,
- CSR_DEBUG_STRING_INDICATION_ID = 0x0803,
- CSR_DEBUG_WORD16_INDICATION_ID = 0x0807,
- CSR_DEBUG_GENERIC_REQUEST_ID = 0x0808,
- CSR_DEBUG_GENERIC_CONFIRM_ID = 0x0809,
- CSR_DEBUG_GENERIC_INDICATION_ID = 0x080b
-} CSR_SIGNAL_ID;
-
-typedef u16 CSR_SIMPLE_POINTER;
-
-typedef u16 CSR_STARTING_SEQUENCE_NUMBER;
-
-typedef enum CSR_SYMBOL_ID
-{
- CSR_SLT_END = 0x0000,
- CSR_SLT_PCI_SLOT_CONFIG = 0x0001,
- CSR_SLT_SDIO_SLOT_CONFIG = 0x0002,
- CSR_SLT_BUILD_ID_NUMBER = 0x0003,
- CSR_SLT_BUILD_ID_STRING = 0x0004,
- CSR_SLT_PERSISTENT_STORE_DB = 0x0005,
- CSR_SLT_RESET_VECTOR_PHY = 0x0006,
- CSR_SLT_RESET_VECTOR_MAC = 0x0007,
- CSR_SLT_SDIO_LOADER_CONTROL = 0x0008,
- CSR_SLT_TEST_CMD = 0x0009,
- CSR_SLT_TEST_ALIVE_COUNTER = 0x000a,
- CSR_SLT_TEST_PARAMETERS = 0x000b,
- CSR_SLT_TEST_RESULTS = 0x000c,
- CSR_SLT_TEST_VERSION = 0x000d,
- CSR_SLT_MIB_PSID_RANGES = 0x000e,
- CSR_SLT_KIP_TABLE = 0x000f,
- CSR_SLT_PANIC_DATA_PHY = 0x0010,
- CSR_SLT_PANIC_DATA_MAC = 0x0011,
- CSR_SLT_BOOT_LOADER_CONTROL = 0x0012,
- CSR_SLT_SOFT_MAC = 0x0013
-} CSR_SYMBOL_ID;
-
-typedef struct CSR_TSF_TIME
-{
- u8 x[8];
-} CSR_TSF_TIME;
-
-typedef u16 CSR_TIME_UNITS;
-
-typedef enum CSR_TRANSMISSION_CONTROL
-{
- CSR_TRIGGERED = 0x0001,
- CSR_END_OF_SERVICE = 0x0002,
- CSR_NO_CONFIRM_REQUIRED = 0x0004,
- CSR_ALLOW_BA = 0x0008
-} CSR_TRANSMISSION_CONTROL;
-
-typedef enum CSR_TRANSMISSION_STATUS
-{
- CSR_TX_SUCCESSFUL = 0x0000,
- CSR_TX_RETRY_LIMIT = 0x0001,
- CSR_TX_LIFETIME = 0x0002,
- CSR_TX_NO_BSS = 0x0003,
- CSR_TX_EXCESSIVE_DATA_LENGTH = 0x0004,
- CSR_TX_UNSUPPORTED_PRIORITY = 0x0006,
- CSR_TX_UNAVAILABLE_PRIORITY = 0x0007,
- CSR_TX_UNAVAILABLE_KEY_MAPPING = 0x000a,
- CSR_TX_EDCA_TIMEOUT = 0x000b,
- CSR_TX_BLOCK_ACK_TIMEOUT = 0x000c,
- CSR_TX_FAIL_TRANSMISSION_VIF_INTERRUPTED = 0x000d,
- CSR_TX_REJECTED_PEER_STATION_SLEEPING = 0x000e,
- CSR_TX_REJECTED_DTIM_ENDED = 0x000f,
- CSR_TX_REJECTED_DTIM_STARTED = 0x0010
-} CSR_TRANSMISSION_STATUS;
-
-typedef u16 CSR_TRIGGER_ID;
-
-typedef u16 CSR_TRIGGERED_ID;
-
-typedef enum CSR_HIP_VERSIONS
-{
- CSR_HIP_ENG_VERSION = 0x0001,
- CSR_HIP_VERSION = 0x0900
-} CSR_HIP_VERSIONS;
-
-typedef u16 CSR_BUFFER_HANDLE;
-
-typedef u16 CSR_CHANNEL_NUMBER;
-
-typedef struct CSR_DATA_REFERENCE
-{
- u16 SlotNumber;
- u16 DataLength;
-} CSR_DATAREF;
-
-typedef u16 CSR_DIALOG_TOKEN;
-
-typedef struct CSR_GENERIC_POINTER
-{
- u32 MemoryOffset;
- CSR_MEMORY_SPACE MemorySpace;
-} CSR_GENERIC_POINTER;
-
-typedef struct CSR_MLME_CONFIG_QUEUE_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_CONFIG_QUEUE_CONFIRM;
-
-typedef struct CSR_MLME_CONFIG_QUEUE_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_NATURAL16 QueueIndex;
- CSR_NATURAL16 Aifs;
- CSR_NATURAL16 Cwmin;
- CSR_NATURAL16 Cwmax;
- CSR_NATURAL16 TxopLimit;
-} CSR_MLME_CONFIG_QUEUE_REQUEST;
-
-typedef struct CSR_MLME_GET_CONFIRM
-{
- CSR_DATAREF MibAttributeValue;
- CSR_DATAREF Dummydataref2;
- CSR_MIB_STATUS Status;
- CSR_NATURAL16 ErrorIndex;
-} CSR_MLME_GET_CONFIRM;
-
-typedef struct CSR_MLME_GET_REQUEST
-{
- CSR_DATAREF MibAttribute;
- CSR_DATAREF Dummydataref2;
-} CSR_MLME_GET_REQUEST;
-
-typedef struct CSR_MLME_GET_NEXT_CONFIRM
-{
- CSR_DATAREF MibAttributeValue;
- CSR_DATAREF Dummydataref2;
- CSR_MIB_STATUS Status;
- CSR_NATURAL16 ErrorIndex;
-} CSR_MLME_GET_NEXT_CONFIRM;
-
-typedef struct CSR_MLME_GET_NEXT_REQUEST
-{
- CSR_DATAREF MibAttribute;
- CSR_DATAREF Dummydataref2;
-} CSR_MLME_GET_NEXT_REQUEST;
-
-typedef struct CSR_MLME_HL_SYNC_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_MACADDRESS GroupAddress;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_HL_SYNC_CONFIRM;
-
-typedef struct CSR_MLME_HL_SYNC_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_MACADDRESS GroupAddress;
-} CSR_MLME_HL_SYNC_REQUEST;
-
-typedef struct CSR_MLME_HL_SYNC_CANCEL_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_HL_SYNC_CANCEL_CONFIRM;
-
-typedef struct CSR_MLME_HL_SYNC_CANCEL_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_MACADDRESS GroupAddress;
-} CSR_MLME_HL_SYNC_CANCEL_REQUEST;
-
-typedef struct CSR_MLME_MEASURE_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_RESULT_CODE ResultCode;
- CSR_DIALOG_TOKEN DialogToken;
-} CSR_MLME_MEASURE_CONFIRM;
-
-typedef struct CSR_MLME_MEASURE_INDICATION
-{
- CSR_DATAREF MeasurementReportSet;
- CSR_DATAREF Dummydataref2;
- CSR_DIALOG_TOKEN DialogToken;
-} CSR_MLME_MEASURE_INDICATION;
-
-typedef struct CSR_MLME_MEASURE_REQUEST
-{
- CSR_DATAREF MeasurementRequestSet;
- CSR_DATAREF Dummydataref2;
- CSR_DIALOG_TOKEN DialogToken;
-} CSR_MLME_MEASURE_REQUEST;
-
-typedef struct CSR_MLME_RESET_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_RESET_CONFIRM;
-
-typedef struct CSR_MLME_RESET_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_MACADDRESS StaAddress;
- s16 SetDefaultMib;
-} CSR_MLME_RESET_REQUEST;
-
-typedef struct CSR_MLME_SET_CONFIRM
-{
- CSR_DATAREF MibAttributeValue;
- CSR_DATAREF Dummydataref2;
- CSR_MIB_STATUS Status;
- CSR_NATURAL16 ErrorIndex;
-} CSR_MLME_SET_CONFIRM;
-
-typedef struct CSR_MLME_SET_REQUEST
-{
- CSR_DATAREF MibAttributeValue;
- CSR_DATAREF Dummydataref2;
-} CSR_MLME_SET_REQUEST;
-
-typedef struct CSR_MLME_STOP_MEASURE_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_RESULT_CODE ResultCode;
- CSR_DIALOG_TOKEN DialogToken;
-} CSR_MLME_STOP_MEASURE_CONFIRM;
-
-typedef struct CSR_MLME_STOP_MEASURE_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_DIALOG_TOKEN DialogToken;
-} CSR_MLME_STOP_MEASURE_REQUEST;
-
-typedef u16 CSR_PROCESS_ID;
-
-typedef u16 CSR_RATE;
-
-typedef u16 CSR_SEQUENCE_NUMBER;
-
-typedef struct CSR_SIGNAL_PRIMITIVE_HEADER
-{
- s16 SignalId;
- CSR_PROCESS_ID ReceiverProcessId;
- CSR_PROCESS_ID SenderProcessId;
-} CSR_SIGNAL_PRIMITIVE_HEADER;
-
-typedef u16 CSR_TRAFFIC_WINDOW;
-
-typedef u16 CSR_VIF_IDENTIFIER;
-
-typedef struct CSR_DEBUG_GENERIC_CONFIRM
-{
- CSR_DATAREF DebugVariable;
- CSR_DATAREF Dummydataref2;
- CSR_NATURAL16 DebugWords[8];
-} CSR_DEBUG_GENERIC_CONFIRM;
-
-typedef struct CSR_DEBUG_GENERIC_INDICATION
-{
- CSR_DATAREF DebugVariable;
- CSR_DATAREF Dummydataref2;
- CSR_NATURAL16 DebugWords[8];
-} CSR_DEBUG_GENERIC_INDICATION;
-
-typedef struct CSR_DEBUG_GENERIC_REQUEST
-{
- CSR_DATAREF DebugVariable;
- CSR_DATAREF Dummydataref2;
- CSR_NATURAL16 DebugWords[8];
-} CSR_DEBUG_GENERIC_REQUEST;
-
-typedef struct CSR_DEBUG_STRING_INDICATION
-{
- CSR_DATAREF DebugMessage;
- CSR_DATAREF Dummydataref2;
-} CSR_DEBUG_STRING_INDICATION;
-
-typedef struct CSR_DEBUG_WORD16_INDICATION
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_NATURAL16 DebugWords[16];
-} CSR_DEBUG_WORD16_INDICATION;
-
-typedef struct CSR_MA_PACKET_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_TRANSMISSION_STATUS TransmissionStatus;
- CSR_NATURAL16 RetryCount;
- CSR_RATE Rate;
- CSR_CLIENT_TAG HostTag;
-} CSR_MA_PACKET_CONFIRM;
-
-typedef struct CSR_MA_PACKET_INDICATION
-{
- CSR_DATAREF Data;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_TSF_TIME LocalTime;
- CSR_IFINTERFACE Ifindex;
- CSR_CHANNEL_NUMBER Channel;
- CSR_RECEPTION_STATUS ReceptionStatus;
- CSR_DECIBELS Rssi;
- CSR_DECIBELS Snr;
- CSR_RATE ReceivedRate;
-} CSR_MA_PACKET_INDICATION;
-
-typedef struct CSR_MA_PACKET_REQUEST
-{
- CSR_DATAREF Data;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RATE TransmitRate;
- CSR_CLIENT_TAG HostTag;
- CSR_PRIORITY Priority;
- CSR_MACADDRESS Ra;
- CSR_TRANSMISSION_CONTROL TransmissionControl;
-} CSR_MA_PACKET_REQUEST;
-
-typedef struct CSR_MA_PACKET_CANCEL_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_CLIENT_TAG HostTag;
-} CSR_MA_PACKET_CANCEL_REQUEST;
-
-typedef struct CSR_MA_PACKET_ERROR_INDICATION
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_MACADDRESS PeerQstaAddress;
- CSR_PRIORITY UserPriority;
- CSR_SEQUENCE_NUMBER SequenceNumber;
-} CSR_MA_PACKET_ERROR_INDICATION;
-
-typedef struct CSR_MA_VIF_AVAILABILITY_INDICATION
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- s16 Multicast;
-} CSR_MA_VIF_AVAILABILITY_INDICATION;
-
-typedef struct CSR_MA_VIF_AVAILABILITY_RESPONSE
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
-} CSR_MA_VIF_AVAILABILITY_RESPONSE;
-
-typedef struct CSR_MLME_ADD_AUTONOMOUS_SCAN_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
- CSR_AUTONOMOUS_SCAN_ID AutonomousScanId;
-} CSR_MLME_ADD_AUTONOMOUS_SCAN_CONFIRM;
-
-typedef struct CSR_MLME_ADD_AUTONOMOUS_SCAN_REQUEST
-{
- CSR_DATAREF ChannelList;
- CSR_DATAREF InformationElements;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_AUTONOMOUS_SCAN_ID AutonomousScanId;
- CSR_IFINTERFACE Ifindex;
- CSR_CHANNEL_STARTING_FACTOR ChannelStartingFactor;
- CSR_SCAN_TYPE ScanType;
- CSR_MICROSECONDS32 ProbeDelay;
- CSR_TIME_UNITS MinChannelTime;
- CSR_TIME_UNITS MaxChannelTime;
-} CSR_MLME_ADD_AUTONOMOUS_SCAN_REQUEST;
-
-typedef struct CSR_MLME_ADD_BLACKOUT_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_BLACKOUT_ID BlackoutId;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_ADD_BLACKOUT_CONFIRM;
-
-typedef struct CSR_MLME_ADD_BLACKOUT_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_BLACKOUT_ID BlackoutId;
- CSR_BLACKOUT_TYPE BlackoutType;
- CSR_BLACKOUT_SOURCE BlackoutSource;
- CSR_MICROSECONDS32 BlackoutStartReference;
- CSR_MICROSECONDS32 BlackoutPeriod;
- CSR_MICROSECONDS32 BlackoutDuration;
- CSR_MACADDRESS PeerStaAddress;
- CSR_NATURAL16 BlackoutCount;
-} CSR_MLME_ADD_BLACKOUT_REQUEST;
-
-typedef struct CSR_MLME_ADD_MULTICAST_ADDRESS_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_ADD_MULTICAST_ADDRESS_CONFIRM;
-
-typedef struct CSR_MLME_ADD_MULTICAST_ADDRESS_REQUEST
-{
- CSR_DATAREF Data;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_NATURAL16 NumberOfMulticastGroupAddresses;
-} CSR_MLME_ADD_MULTICAST_ADDRESS_REQUEST;
-
-typedef struct CSR_MLME_ADD_PERIODIC_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_PERIODIC_ID PeriodicId;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_ADD_PERIODIC_CONFIRM;
-
-typedef struct CSR_MLME_ADD_PERIODIC_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_PERIODIC_ID PeriodicId;
- CSR_MICROSECONDS32 MaximumLatency;
- CSR_PERIODIC_SCHEDULING_MODE PeriodicSchedulingMode;
- s16 WakeHost;
- CSR_PRIORITY UserPriority;
-} CSR_MLME_ADD_PERIODIC_REQUEST;
-
-typedef struct CSR_MLME_ADD_RX_TRIGGER_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_TRIGGER_ID TriggerId;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_ADD_RX_TRIGGER_CONFIRM;
-
-typedef struct CSR_MLME_ADD_RX_TRIGGER_REQUEST
-{
- CSR_DATAREF InformationElements;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_TRIGGER_ID TriggerId;
- CSR_PRIORITY Priority;
-} CSR_MLME_ADD_RX_TRIGGER_REQUEST;
-
-typedef struct CSR_MLME_ADD_TEMPLATE_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_FRAME_TYPE FrameType;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_ADD_TEMPLATE_CONFIRM;
-
-typedef struct CSR_MLME_ADD_TEMPLATE_REQUEST
-{
- CSR_DATAREF Data1;
- CSR_DATAREF Data2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_FRAME_TYPE FrameType;
- CSR_RATE MinTransmitRate;
-} CSR_MLME_ADD_TEMPLATE_REQUEST;
-
-typedef struct CSR_MLME_ADD_TRIGGERED_GET_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
- CSR_TRIGGERED_ID TriggeredId;
-} CSR_MLME_ADD_TRIGGERED_GET_CONFIRM;
-
-typedef struct CSR_MLME_ADD_TRIGGERED_GET_REQUEST
-{
- CSR_DATAREF MibAttribute;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_TRIGGERED_ID TriggeredId;
-} CSR_MLME_ADD_TRIGGERED_GET_REQUEST;
-
-typedef struct CSR_MLME_ADD_TSPEC_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_PRIORITY UserPriority;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_ADD_TSPEC_CONFIRM;
-
-typedef struct CSR_MLME_ADD_TSPEC_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_PRIORITY UserPriority;
- CSR_DIRECTION Direction;
- CSR_PS_SCHEME PsScheme;
- CSR_NATURAL16 MediumTime;
- CSR_MICROSECONDS32 ServiceStartTime;
- CSR_MICROSECONDS32 ServiceInterval;
- CSR_RATE MinimumDataRate;
-} CSR_MLME_ADD_TSPEC_REQUEST;
-
-typedef struct CSR_MLME_AUTONOMOUS_SCAN_DONE_INDICATION
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
- CSR_AUTONOMOUS_SCAN_ID AutonomousScanId;
-} CSR_MLME_AUTONOMOUS_SCAN_DONE_INDICATION;
-
-typedef struct CSR_MLME_AUTONOMOUS_SCAN_LOSS_INDICATION
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_MACADDRESS Bssid;
-} CSR_MLME_AUTONOMOUS_SCAN_LOSS_INDICATION;
-
-typedef struct CSR_MLME_BLACKOUT_ENDED_INDICATION
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_BLACKOUT_ID BlackoutId;
-} CSR_MLME_BLACKOUT_ENDED_INDICATION;
-
-typedef struct CSR_MLME_BLOCKACK_ERROR_INDICATION
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_REASON_CODE ResultCode;
- CSR_MACADDRESS PeerQstaAddress;
-} CSR_MLME_BLOCKACK_ERROR_INDICATION;
-
-typedef struct CSR_MLME_CONNECTED_INDICATION
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_CONNECTION_STATUS ConnectionStatus;
- CSR_MACADDRESS PeerMacAddress;
-} CSR_MLME_CONNECTED_INDICATION;
-
-typedef struct CSR_MLME_CONNECT_STATUS_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_CONNECT_STATUS_CONFIRM;
-
-typedef struct CSR_MLME_CONNECT_STATUS_REQUEST
-{
- CSR_DATAREF InformationElements;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_CONNECTION_STATUS ConnectionStatus;
- CSR_MACADDRESS StaAddress;
- CSR_ASSOCIATION_ID AssociationId;
- CSR_CAPABILITY_INFORMATION AssociationCapabilityInformation;
-} CSR_MLME_CONNECT_STATUS_REQUEST;
-
-typedef struct CSR_MLME_DELETEKEYS_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_DELETEKEYS_CONFIRM;
-
-typedef struct CSR_MLME_DELETEKEYS_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_NATURAL16 KeyId;
- CSR_KEY_TYPE KeyType;
- CSR_MACADDRESS Address;
-} CSR_MLME_DELETEKEYS_REQUEST;
-
-typedef struct CSR_MLME_DEL_AUTONOMOUS_SCAN_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
- CSR_AUTONOMOUS_SCAN_ID AutonomousScanId;
-} CSR_MLME_DEL_AUTONOMOUS_SCAN_CONFIRM;
-
-typedef struct CSR_MLME_DEL_AUTONOMOUS_SCAN_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_AUTONOMOUS_SCAN_ID AutonomousScanId;
-} CSR_MLME_DEL_AUTONOMOUS_SCAN_REQUEST;
-
-typedef struct CSR_MLME_DEL_BLACKOUT_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_BLACKOUT_ID BlackoutId;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_DEL_BLACKOUT_CONFIRM;
-
-typedef struct CSR_MLME_DEL_BLACKOUT_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_BLACKOUT_ID BlackoutId;
-} CSR_MLME_DEL_BLACKOUT_REQUEST;
-
-typedef struct CSR_MLME_DEL_PERIODIC_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_PERIODIC_ID PeriodicId;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_DEL_PERIODIC_CONFIRM;
-
-typedef struct CSR_MLME_DEL_PERIODIC_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_PERIODIC_ID PeriodicId;
-} CSR_MLME_DEL_PERIODIC_REQUEST;
-
-typedef struct CSR_MLME_DEL_RX_TRIGGER_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_TRIGGER_ID TriggerId;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_DEL_RX_TRIGGER_CONFIRM;
-
-typedef struct CSR_MLME_DEL_RX_TRIGGER_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_TRIGGER_ID TriggerId;
-} CSR_MLME_DEL_RX_TRIGGER_REQUEST;
-
-typedef struct CSR_MLME_DEL_TRIGGERED_GET_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
- CSR_TRIGGERED_ID TriggeredId;
-} CSR_MLME_DEL_TRIGGERED_GET_CONFIRM;
-
-typedef struct CSR_MLME_DEL_TRIGGERED_GET_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_TRIGGERED_ID TriggeredId;
-} CSR_MLME_DEL_TRIGGERED_GET_REQUEST;
-
-typedef struct CSR_MLME_DEL_TSPEC_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_PRIORITY UserPriority;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_DEL_TSPEC_CONFIRM;
-
-typedef struct CSR_MLME_DEL_TSPEC_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_PRIORITY UserPriority;
- CSR_DIRECTION Direction;
-} CSR_MLME_DEL_TSPEC_REQUEST;
-
-typedef struct CSR_MLME_GET_KEY_SEQUENCE_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
- CSR_NATURAL16 SequenceNumber[8];
-} CSR_MLME_GET_KEY_SEQUENCE_CONFIRM;
-
-typedef struct CSR_MLME_GET_KEY_SEQUENCE_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_NATURAL16 KeyId;
- CSR_KEY_TYPE KeyType;
- CSR_MACADDRESS Address;
-} CSR_MLME_GET_KEY_SEQUENCE_REQUEST;
-
-typedef struct CSR_MLME_LEAVE_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_LEAVE_CONFIRM;
-
-typedef struct CSR_MLME_LEAVE_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
-} CSR_MLME_LEAVE_REQUEST;
-
-typedef struct CSR_MLME_MODIFY_BSS_PARAMETER_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_MODIFY_BSS_PARAMETER_CONFIRM;
-
-typedef struct CSR_MLME_MODIFY_BSS_PARAMETER_REQUEST
-{
- CSR_DATAREF Data;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_TIME_UNITS BeaconPeriod;
- CSR_BEACON_PERIODS DtimPeriod;
- CSR_CAPABILITY_INFORMATION CapabilityInformation;
- CSR_MACADDRESS Bssid;
- CSR_NATURAL16 RtsThreshold;
-} CSR_MLME_MODIFY_BSS_PARAMETER_REQUEST;
-
-typedef struct CSR_MLME_PAUSE_AUTONOMOUS_SCAN_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
- CSR_AUTONOMOUS_SCAN_ID AutonomousScanId;
-} CSR_MLME_PAUSE_AUTONOMOUS_SCAN_CONFIRM;
-
-typedef struct CSR_MLME_PAUSE_AUTONOMOUS_SCAN_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_AUTONOMOUS_SCAN_ID AutonomousScanId;
- s16 Pause;
-} CSR_MLME_PAUSE_AUTONOMOUS_SCAN_REQUEST;
-
-typedef struct CSR_MLME_POWERMGT_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_POWERMGT_CONFIRM;
-
-typedef struct CSR_MLME_POWERMGT_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_POWER_MANAGEMENT_MODE PowerManagementMode;
- s16 ReceiveDtims;
- CSR_BEACON_PERIODS ListenInterval;
- CSR_TRAFFIC_WINDOW TrafficWindow;
-} CSR_MLME_POWERMGT_REQUEST;
-
-typedef struct CSR_MLME_SCAN_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_SCAN_CONFIRM;
-
-typedef struct CSR_MLME_SCAN_REQUEST
-{
- CSR_DATAREF ChannelList;
- CSR_DATAREF InformationElements;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_IFINTERFACE Ifindex;
- CSR_SCAN_TYPE ScanType;
- CSR_MICROSECONDS32 ProbeDelay;
- CSR_TIME_UNITS MinChannelTime;
- CSR_TIME_UNITS MaxChannelTime;
-} CSR_MLME_SCAN_REQUEST;
-
-typedef struct CSR_MLME_SCAN_CANCEL_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
-} CSR_MLME_SCAN_CANCEL_REQUEST;
-
-typedef struct CSR_MLME_SETKEYS_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_SETKEYS_CONFIRM;
-
-typedef struct CSR_MLME_SETKEYS_REQUEST
-{
- CSR_DATAREF Key;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_NATURAL16 Length;
- CSR_NATURAL16 KeyId;
- CSR_KEY_TYPE KeyType;
- CSR_MACADDRESS Address;
- CSR_NATURAL16 SequenceNumber[8];
- CSR_CIPHER_SUITE_SELECTOR CipherSuiteSelector;
-} CSR_MLME_SETKEYS_REQUEST;
-
-typedef struct CSR_MLME_SET_CHANNEL_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_SET_CHANNEL_CONFIRM;
-
-typedef struct CSR_MLME_SET_CHANNEL_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_IFINTERFACE Ifindex;
- CSR_CHANNEL_NUMBER Channel;
- CSR_MACADDRESS Address;
- CSR_TIME_UNITS AvailabilityDuration;
- CSR_TIME_UNITS AvailabilityInterval;
-} CSR_MLME_SET_CHANNEL_REQUEST;
-
-typedef struct CSR_MLME_SET_PACKET_FILTER_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_SET_PACKET_FILTER_CONFIRM;
-
-typedef struct CSR_MLME_SET_PACKET_FILTER_REQUEST
-{
- CSR_DATAREF InformationElements;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_PACKET_FILTER_MODE PacketFilterMode;
- CSR_IPV4_ADDRESS ArpFilterAddress;
-} CSR_MLME_SET_PACKET_FILTER_REQUEST;
-
-typedef struct CSR_MLME_SET_TIM_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_SET_TIM_CONFIRM;
-
-typedef struct CSR_MLME_SET_TIM_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_ASSOCIATION_ID AssociationId;
- s16 TimValue;
-} CSR_MLME_SET_TIM_REQUEST;
-
-typedef struct CSR_MLME_SM_START_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_SM_START_CONFIRM;
-
-typedef struct CSR_MLME_SM_START_REQUEST
-{
- CSR_DATAREF Beacon;
- CSR_DATAREF BssParameters;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_IFINTERFACE Ifindex;
- CSR_CHANNEL_NUMBER Channel;
- CSR_MACADDRESS InterfaceAddress;
- CSR_MACADDRESS Bssid;
- CSR_TIME_UNITS BeaconPeriod;
- CSR_BEACON_PERIODS DtimPeriod;
- CSR_CAPABILITY_INFORMATION CapabilityInformation;
-} CSR_MLME_SM_START_REQUEST;
-
-typedef struct CSR_MLME_START_AGGREGATION_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_MACADDRESS PeerQstaAddress;
- CSR_PRIORITY UserPriority;
- CSR_DIRECTION Direction;
- CSR_RESULT_CODE ResultCode;
- CSR_SEQUENCE_NUMBER SequenceNumber;
-} CSR_MLME_START_AGGREGATION_CONFIRM;
-
-typedef struct CSR_MLME_START_AGGREGATION_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_MACADDRESS PeerQstaAddress;
- CSR_PRIORITY UserPriority;
- CSR_DIRECTION Direction;
- CSR_STARTING_SEQUENCE_NUMBER StartingSequenceNumber;
- CSR_NATURAL16 BufferSize;
- CSR_TIME_UNITS BlockAckTimeout;
-} CSR_MLME_START_AGGREGATION_REQUEST;
-
-typedef struct CSR_MLME_STOP_AGGREGATION_CONFIRM
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_MACADDRESS PeerQstaAddress;
- CSR_PRIORITY UserPriority;
- CSR_DIRECTION Direction;
- CSR_RESULT_CODE ResultCode;
-} CSR_MLME_STOP_AGGREGATION_CONFIRM;
-
-typedef struct CSR_MLME_STOP_AGGREGATION_REQUEST
-{
- CSR_DATAREF Dummydataref1;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_MACADDRESS PeerQstaAddress;
- CSR_PRIORITY UserPriority;
- CSR_DIRECTION Direction;
-} CSR_MLME_STOP_AGGREGATION_REQUEST;
-
-typedef struct CSR_MLME_TRIGGERED_GET_INDICATION
-{
- CSR_DATAREF MibAttributeValue;
- CSR_DATAREF Dummydataref2;
- CSR_VIF_IDENTIFIER VirtualInterfaceIdentifier;
- CSR_MIB_STATUS Status;
- CSR_NATURAL16 ErrorIndex;
- CSR_TRIGGERED_ID TriggeredId;
-} CSR_MLME_TRIGGERED_GET_INDICATION;
-
-typedef struct CSR_SIGNAL_PRIMITIVE
-{
- CSR_SIGNAL_PRIMITIVE_HEADER SignalPrimitiveHeader;
- union
- {
- CSR_MA_PACKET_REQUEST MaPacketRequest;
- CSR_MA_PACKET_CONFIRM MaPacketConfirm;
- CSR_MA_PACKET_INDICATION MaPacketIndication;
- CSR_MA_PACKET_CANCEL_REQUEST MaPacketCancelRequest;
- CSR_MA_VIF_AVAILABILITY_RESPONSE MaVifAvailabilityResponse;
- CSR_MA_VIF_AVAILABILITY_INDICATION MaVifAvailabilityIndication;
- CSR_MA_PACKET_ERROR_INDICATION MaPacketErrorIndication;
- CSR_MLME_RESET_REQUEST MlmeResetRequest;
- CSR_MLME_RESET_CONFIRM MlmeResetConfirm;
- CSR_MLME_GET_REQUEST MlmeGetRequest;
- CSR_MLME_GET_CONFIRM MlmeGetConfirm;
- CSR_MLME_SET_REQUEST MlmeSetRequest;
- CSR_MLME_SET_CONFIRM MlmeSetConfirm;
- CSR_MLME_GET_NEXT_REQUEST MlmeGetNextRequest;
- CSR_MLME_GET_NEXT_CONFIRM MlmeGetNextConfirm;
- CSR_MLME_POWERMGT_REQUEST MlmePowermgtRequest;
- CSR_MLME_POWERMGT_CONFIRM MlmePowermgtConfirm;
- CSR_MLME_SCAN_REQUEST MlmeScanRequest;
- CSR_MLME_SCAN_CONFIRM MlmeScanConfirm;
- CSR_MLME_HL_SYNC_REQUEST MlmeHlSyncRequest;
- CSR_MLME_HL_SYNC_CONFIRM MlmeHlSyncConfirm;
- CSR_MLME_MEASURE_REQUEST MlmeMeasureRequest;
- CSR_MLME_MEASURE_CONFIRM MlmeMeasureConfirm;
- CSR_MLME_MEASURE_INDICATION MlmeMeasureIndication;
- CSR_MLME_SETKEYS_REQUEST MlmeSetkeysRequest;
- CSR_MLME_SETKEYS_CONFIRM MlmeSetkeysConfirm;
- CSR_MLME_DELETEKEYS_REQUEST MlmeDeletekeysRequest;
- CSR_MLME_DELETEKEYS_CONFIRM MlmeDeletekeysConfirm;
- CSR_MLME_AUTONOMOUS_SCAN_LOSS_INDICATION MlmeAutonomousScanLossIndication;
- CSR_MLME_CONNECTED_INDICATION MlmeConnectedIndication;
- CSR_MLME_SCAN_CANCEL_REQUEST MlmeScanCancelRequest;
- CSR_MLME_HL_SYNC_CANCEL_REQUEST MlmeHlSyncCancelRequest;
- CSR_MLME_HL_SYNC_CANCEL_CONFIRM MlmeHlSyncCancelConfirm;
- CSR_MLME_ADD_PERIODIC_REQUEST MlmeAddPeriodicRequest;
- CSR_MLME_ADD_PERIODIC_CONFIRM MlmeAddPeriodicConfirm;
- CSR_MLME_DEL_PERIODIC_REQUEST MlmeDelPeriodicRequest;
- CSR_MLME_DEL_PERIODIC_CONFIRM MlmeDelPeriodicConfirm;
- CSR_MLME_ADD_AUTONOMOUS_SCAN_REQUEST MlmeAddAutonomousScanRequest;
- CSR_MLME_ADD_AUTONOMOUS_SCAN_CONFIRM MlmeAddAutonomousScanConfirm;
- CSR_MLME_DEL_AUTONOMOUS_SCAN_REQUEST MlmeDelAutonomousScanRequest;
- CSR_MLME_DEL_AUTONOMOUS_SCAN_CONFIRM MlmeDelAutonomousScanConfirm;
- CSR_MLME_SET_PACKET_FILTER_REQUEST MlmeSetPacketFilterRequest;
- CSR_MLME_SET_PACKET_FILTER_CONFIRM MlmeSetPacketFilterConfirm;
- CSR_MLME_STOP_MEASURE_REQUEST MlmeStopMeasureRequest;
- CSR_MLME_STOP_MEASURE_CONFIRM MlmeStopMeasureConfirm;
- CSR_MLME_PAUSE_AUTONOMOUS_SCAN_REQUEST MlmePauseAutonomousScanRequest;
- CSR_MLME_PAUSE_AUTONOMOUS_SCAN_CONFIRM MlmePauseAutonomousScanConfirm;
- CSR_MLME_AUTONOMOUS_SCAN_DONE_INDICATION MlmeAutonomousScanDoneIndication;
- CSR_MLME_ADD_TRIGGERED_GET_REQUEST MlmeAddTriggeredGetRequest;
- CSR_MLME_ADD_TRIGGERED_GET_CONFIRM MlmeAddTriggeredGetConfirm;
- CSR_MLME_DEL_TRIGGERED_GET_REQUEST MlmeDelTriggeredGetRequest;
- CSR_MLME_DEL_TRIGGERED_GET_CONFIRM MlmeDelTriggeredGetConfirm;
- CSR_MLME_TRIGGERED_GET_INDICATION MlmeTriggeredGetIndication;
- CSR_MLME_ADD_BLACKOUT_REQUEST MlmeAddBlackoutRequest;
- CSR_MLME_ADD_BLACKOUT_CONFIRM MlmeAddBlackoutConfirm;
- CSR_MLME_BLACKOUT_ENDED_INDICATION MlmeBlackoutEndedIndication;
- CSR_MLME_DEL_BLACKOUT_REQUEST MlmeDelBlackoutRequest;
- CSR_MLME_DEL_BLACKOUT_CONFIRM MlmeDelBlackoutConfirm;
- CSR_MLME_ADD_RX_TRIGGER_REQUEST MlmeAddRxTriggerRequest;
- CSR_MLME_ADD_RX_TRIGGER_CONFIRM MlmeAddRxTriggerConfirm;
- CSR_MLME_DEL_RX_TRIGGER_REQUEST MlmeDelRxTriggerRequest;
- CSR_MLME_DEL_RX_TRIGGER_CONFIRM MlmeDelRxTriggerConfirm;
- CSR_MLME_CONNECT_STATUS_REQUEST MlmeConnectStatusRequest;
- CSR_MLME_CONNECT_STATUS_CONFIRM MlmeConnectStatusConfirm;
- CSR_MLME_MODIFY_BSS_PARAMETER_REQUEST MlmeModifyBssParameterRequest;
- CSR_MLME_MODIFY_BSS_PARAMETER_CONFIRM MlmeModifyBssParameterConfirm;
- CSR_MLME_ADD_TEMPLATE_REQUEST MlmeAddTemplateRequest;
- CSR_MLME_ADD_TEMPLATE_CONFIRM MlmeAddTemplateConfirm;
- CSR_MLME_CONFIG_QUEUE_REQUEST MlmeConfigQueueRequest;
- CSR_MLME_CONFIG_QUEUE_CONFIRM MlmeConfigQueueConfirm;
- CSR_MLME_ADD_TSPEC_REQUEST MlmeAddTspecRequest;
- CSR_MLME_ADD_TSPEC_CONFIRM MlmeAddTspecConfirm;
- CSR_MLME_DEL_TSPEC_REQUEST MlmeDelTspecRequest;
- CSR_MLME_DEL_TSPEC_CONFIRM MlmeDelTspecConfirm;
- CSR_MLME_START_AGGREGATION_REQUEST MlmeStartAggregationRequest;
- CSR_MLME_START_AGGREGATION_CONFIRM MlmeStartAggregationConfirm;
- CSR_MLME_BLOCKACK_ERROR_INDICATION MlmeBlockackErrorIndication;
- CSR_MLME_STOP_AGGREGATION_REQUEST MlmeStopAggregationRequest;
- CSR_MLME_STOP_AGGREGATION_CONFIRM MlmeStopAggregationConfirm;
- CSR_MLME_SM_START_REQUEST MlmeSmStartRequest;
- CSR_MLME_SM_START_CONFIRM MlmeSmStartConfirm;
- CSR_MLME_LEAVE_REQUEST MlmeLeaveRequest;
- CSR_MLME_LEAVE_CONFIRM MlmeLeaveConfirm;
- CSR_MLME_SET_TIM_REQUEST MlmeSetTimRequest;
- CSR_MLME_SET_TIM_CONFIRM MlmeSetTimConfirm;
- CSR_MLME_GET_KEY_SEQUENCE_REQUEST MlmeGetKeySequenceRequest;
- CSR_MLME_GET_KEY_SEQUENCE_CONFIRM MlmeGetKeySequenceConfirm;
- CSR_MLME_SET_CHANNEL_REQUEST MlmeSetChannelRequest;
- CSR_MLME_SET_CHANNEL_CONFIRM MlmeSetChannelConfirm;
- CSR_MLME_ADD_MULTICAST_ADDRESS_REQUEST MlmeAddMulticastAddressRequest;
- CSR_MLME_ADD_MULTICAST_ADDRESS_CONFIRM MlmeAddMulticastAddressConfirm;
- CSR_DEBUG_STRING_INDICATION DebugStringIndication;
- CSR_DEBUG_WORD16_INDICATION DebugWord16Indication;
- CSR_DEBUG_GENERIC_REQUEST DebugGenericRequest;
- CSR_DEBUG_GENERIC_CONFIRM DebugGenericConfirm;
- CSR_DEBUG_GENERIC_INDICATION DebugGenericIndication;
- } u;
-} CSR_SIGNAL;
-
-#define SIG_FILTER_SIZE 6
-
-u32 SigGetFilterPos(u16 aSigID);
-
-#endif
diff --git a/drivers/staging/csr/csr_wifi_hip_ta_sampling.c b/drivers/staging/csr/csr_wifi_hip_ta_sampling.c
deleted file mode 100644
index f1df36aa87e7..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_ta_sampling.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- * FILE: csr_wifi_hip_ta_sampling.c
- *
- * PURPOSE:
- * The traffic analysis sampling module.
- * This gathers data which is sent to the SME and used to analyse
- * the traffic behaviour.
- *
- * Provides:
- * unifi_ta_sampling_init - Initialise the internal state
- * unifi_ta_sample - Sampling function, call this for every data packet
- *
- * Calls these external functions which must be provided:
- * unifi_ta_indicate_sampling - Pass sample data to the SME.
- * unifi_ta_indicate_protocol - Report certain data packet types to the SME.
- * ---------------------------------------------------------------------------
- */
-
-#include "csr_wifi_hip_card_sdio.h"
-
-/* Maximum number of Tx frames we store each CYCLE_1, for detecting period */
-#define TA_MAX_INTERVALS_IN_C1 100
-
-/* Number of intervals in CYCLE_1 (one second), for detecting periodic */
-/* Must match size of unifi_TrafficStats.intervals - 1 */
-#define TA_INTERVALS_NUM 10
-
-/* Step (in msecs) between intervals, for detecting periodic */
-/* We are only interested in periods up to 100ms, i.e. between beacons */
-/* This is correct for TA_INTERVALS_NUM=10 */
-#define TA_INTERVALS_STEP 10
-
-
-enum ta_frame_identity
-{
- TA_FRAME_UNKNOWN,
- TA_FRAME_ETHERNET_UNINTERESTING,
- TA_FRAME_ETHERNET_INTERESTING
-};
-
-
-#define TA_ETHERNET_TYPE_OFFSET 6
-#define TA_LLC_HEADER_SIZE 8
-#define TA_IP_TYPE_OFFSET 17
-#define TA_UDP_SOURCE_PORT_OFFSET 28
-#define TA_UDP_DEST_PORT_OFFSET (TA_UDP_SOURCE_PORT_OFFSET + 2)
-#define TA_BOOTP_CLIENT_MAC_ADDR_OFFSET 64
-#define TA_DHCP_MESSAGE_TYPE_OFFSET 278
-#define TA_DHCP_MESSAGE_TYPE_ACK 0x05
-#define TA_PROTO_TYPE_IP 0x0800
-#define TA_PROTO_TYPE_EAP 0x888E
-#define TA_PROTO_TYPE_WAI 0x8864
-#define TA_PROTO_TYPE_ARP 0x0806
-#define TA_IP_TYPE_TCP 0x06
-#define TA_IP_TYPE_UDP 0x11
-#define TA_UDP_PORT_BOOTPC 0x0044
-#define TA_UDP_PORT_BOOTPS 0x0043
-#define TA_EAPOL_TYPE_OFFSET 9
-#define TA_EAPOL_TYPE_START 0x01
-
-#define snap_802_2 0xAAAA0300
-#define oui_rfc1042 0x00000000
-#define oui_8021h 0x0000f800
-static const u8 aironet_snap[5] = { 0x00, 0x40, 0x96, 0x00, 0x00 };
-
-
-/*
- * ---------------------------------------------------------------------------
- * ta_detect_protocol
- *
- * Internal only.
- * Detects a specific protocol in a frame and indicates a TA event.
- *
- * Arguments:
- * ta The pointer to the TA module.
- * direction The direction of the frame (tx or rx).
- * data Pointer to the structure that contains the data.
- *
- * Returns:
- * None
- * ---------------------------------------------------------------------------
- */
-static enum ta_frame_identity ta_detect_protocol(card_t *card, CsrWifiRouterCtrlProtocolDirection direction,
- const bulk_data_desc_t *data,
- const u8 *saddr,
- const u8 *sta_macaddr)
-{
- ta_data_t *tad = &card->ta_sampling;
- u16 proto;
- u16 source_port, dest_port;
- CsrWifiMacAddress srcAddress;
- u32 snap_hdr, oui_hdr;
-
- if (data->data_length < TA_LLC_HEADER_SIZE)
- {
- return TA_FRAME_UNKNOWN;
- }
-
- snap_hdr = (((u32)data->os_data_ptr[0]) << 24) |
- (((u32)data->os_data_ptr[1]) << 16) |
- (((u32)data->os_data_ptr[2]) << 8);
- if (snap_hdr != snap_802_2)
- {
- return TA_FRAME_UNKNOWN;
- }
-
- if (tad->packet_filter & CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_CUSTOM)
- {
- /*
- * Here we would use the custom filter to detect interesting frames.
- */
- }
-
- oui_hdr = (((u32)data->os_data_ptr[3]) << 24) |
- (((u32)data->os_data_ptr[4]) << 16) |
- (((u32)data->os_data_ptr[5]) << 8);
- if ((oui_hdr == oui_rfc1042) || (oui_hdr == oui_8021h))
- {
- proto = (data->os_data_ptr[TA_ETHERNET_TYPE_OFFSET] * 256) +
- data->os_data_ptr[TA_ETHERNET_TYPE_OFFSET + 1];
-
- /* The only interesting IP frames are the DHCP */
- if (proto == TA_PROTO_TYPE_IP)
- {
- if (data->data_length > TA_IP_TYPE_OFFSET)
- {
- if (tad->packet_filter & CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_CUSTOM)
- {
- ta_l4stats_t *ta_l4stats = &tad->ta_l4stats;
- u8 l4proto = data->os_data_ptr[TA_IP_TYPE_OFFSET];
-
- if (l4proto == TA_IP_TYPE_TCP)
- {
- if (direction == CSR_WIFI_ROUTER_CTRL_PROTOCOL_DIRECTION_TX)
- {
- ta_l4stats->txTcpBytesCount += data->data_length;
- }
- else
- {
- ta_l4stats->rxTcpBytesCount += data->data_length;
- }
- }
- else if (l4proto == TA_IP_TYPE_UDP)
- {
- if (direction == CSR_WIFI_ROUTER_CTRL_PROTOCOL_DIRECTION_TX)
- {
- ta_l4stats->txUdpBytesCount += data->data_length;
- }
- else
- {
- ta_l4stats->rxUdpBytesCount += data->data_length;
- }
- }
- }
-
- /* detect DHCP frames */
- if (tad->packet_filter & CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_DHCP)
- {
- /* DHCP frames are UDP frames with BOOTP ports */
- if (data->os_data_ptr[TA_IP_TYPE_OFFSET] == TA_IP_TYPE_UDP)
- {
- if (data->data_length > TA_UDP_DEST_PORT_OFFSET)
- {
- source_port = (data->os_data_ptr[TA_UDP_SOURCE_PORT_OFFSET] * 256) +
- data->os_data_ptr[TA_UDP_SOURCE_PORT_OFFSET + 1];
- dest_port = (data->os_data_ptr[TA_UDP_DEST_PORT_OFFSET] * 256) +
- data->os_data_ptr[TA_UDP_DEST_PORT_OFFSET + 1];
-
- if (((source_port == TA_UDP_PORT_BOOTPC) && (dest_port == TA_UDP_PORT_BOOTPS)) ||
- ((source_port == TA_UDP_PORT_BOOTPS) && (dest_port == TA_UDP_PORT_BOOTPC)))
- {
- /* The DHCP should have at least a message type (request, ack, nack, etc) */
- if (data->data_length > TA_DHCP_MESSAGE_TYPE_OFFSET + 6)
- {
- UNIFI_MAC_ADDRESS_COPY(srcAddress.a, saddr);
-
- if (direction == CSR_WIFI_ROUTER_CTRL_PROTOCOL_DIRECTION_TX)
- {
- unifi_ta_indicate_protocol(card->ospriv,
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_DHCP,
- direction,
- &srcAddress);
- return TA_FRAME_ETHERNET_UNINTERESTING;
- }
-
- /* DHCPACK is a special indication */
- if (UNIFI_MAC_ADDRESS_CMP(data->os_data_ptr + TA_BOOTP_CLIENT_MAC_ADDR_OFFSET, sta_macaddr) == TRUE)
- {
- if (data->os_data_ptr[TA_DHCP_MESSAGE_TYPE_OFFSET] == TA_DHCP_MESSAGE_TYPE_ACK)
- {
- unifi_ta_indicate_protocol(card->ospriv,
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_DHCP_ACK,
- direction,
- &srcAddress);
- }
- else
- {
- unifi_ta_indicate_protocol(card->ospriv,
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_DHCP,
- direction,
- &srcAddress);
- }
- }
- }
- }
- }
- }
- }
- }
-
- return TA_FRAME_ETHERNET_INTERESTING;
- }
-
- /* detect protocol type EAPOL or WAI (treated as equivalent here) */
- if (tad->packet_filter & CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_EAPOL)
- {
- if (TA_PROTO_TYPE_EAP == proto || TA_PROTO_TYPE_WAI == proto)
- {
- if ((TA_PROTO_TYPE_WAI == proto) || (direction != CSR_WIFI_ROUTER_CTRL_PROTOCOL_DIRECTION_TX) ||
- (data->os_data_ptr[TA_EAPOL_TYPE_OFFSET] == TA_EAPOL_TYPE_START))
- {
- UNIFI_MAC_ADDRESS_COPY(srcAddress.a, saddr);
- unifi_ta_indicate_protocol(card->ospriv,
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_EAPOL,
- direction, &srcAddress);
- }
- return TA_FRAME_ETHERNET_UNINTERESTING;
- }
- }
-
- /* detect protocol type 0x0806 (ARP) */
- if (tad->packet_filter & CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_ARP)
- {
- if (proto == TA_PROTO_TYPE_ARP)
- {
- UNIFI_MAC_ADDRESS_COPY(srcAddress.a, saddr);
- unifi_ta_indicate_protocol(card->ospriv,
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_ARP,
- direction, &srcAddress);
- return TA_FRAME_ETHERNET_UNINTERESTING;
- }
- }
-
- return TA_FRAME_ETHERNET_INTERESTING;
- }
- else if (tad->packet_filter & CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_AIRONET)
- {
- /* detect Aironet frames */
- if (!memcmp(data->os_data_ptr + 3, aironet_snap, 5))
- {
- UNIFI_MAC_ADDRESS_COPY(srcAddress.a, saddr);
- unifi_ta_indicate_protocol(card->ospriv, CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_AIRONET,
- direction, &srcAddress);
- }
- }
-
- return TA_FRAME_ETHERNET_UNINTERESTING;
-} /* ta_detect_protocol() */
-
-
-static void tas_reset_data(ta_data_t *tad)
-{
- s16 i;
-
- for (i = 0; i < (TA_INTERVALS_NUM + 1); i++)
- {
- tad->stats.intervals[i] = 0;
- }
-
- tad->stats.rxFramesNum = 0;
- tad->stats.txFramesNum = 0;
- tad->stats.rxBytesCount = 0;
- tad->stats.txBytesCount = 0;
- tad->stats.rxMeanRate = 0;
-
- tad->rx_sum_rate = 0;
-
- tad->ta_l4stats.rxTcpBytesCount = 0;
- tad->ta_l4stats.txTcpBytesCount = 0;
- tad->ta_l4stats.rxUdpBytesCount = 0;
- tad->ta_l4stats.txUdpBytesCount = 0;
-} /* tas_reset_data() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * API.
- * unifi_ta_sampling_init
- *
- * (Re)Initialise the Traffic Analysis sampling module.
- * Resets the counters and timestamps.
- *
- * Arguments:
- * tad Pointer to a ta_data_t structure containing the
- * context for this device instance.
- * drv_priv An opaque pointer that the TA sampling module will
- * pass in call-outs.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void unifi_ta_sampling_init(card_t *card)
-{
- (void)unifi_ta_configure(card, CSR_WIFI_ROUTER_CTRL_TRAFFIC_CONFIG_TYPE_RESET, NULL);
-
- card->ta_sampling.packet_filter = CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_NONE;
- card->ta_sampling.traffic_type = CSR_WIFI_ROUTER_CTRL_TRAFFIC_TYPE_OCCASIONAL;
-} /* unifi_ta_sampling_init() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * API.
- * unifi_ta_sample
- *
- * Sample a data frame for the TA module.
- * This function stores all the useful information it can extract from
- * the frame and detects any specific protocols.
- *
- * Arguments:
- * tad The pointer to the TA sampling context struct.
- * direction The direction of the frame (rx, tx)
- * data Pointer to the frame data
- * saddr Source MAC address of frame.
- * timestamp Time (in msecs) that the frame was received.
- * rate Reported data rate for the rx frame (0 for tx frames)
- *
- * Returns:
- * None
- * ---------------------------------------------------------------------------
- */
-void unifi_ta_sample(card_t *card,
- CsrWifiRouterCtrlProtocolDirection direction,
- const bulk_data_desc_t *data,
- const u8 *saddr,
- const u8 *sta_macaddr,
- u32 timestamp,
- u16 rate)
-{
- ta_data_t *tad = &card->ta_sampling;
- enum ta_frame_identity identity;
- u32 time_delta;
-
-
-
- /* Step1: Check for specific frames */
- if (tad->packet_filter != CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_NONE)
- {
- identity = ta_detect_protocol(card, direction, data, saddr, sta_macaddr);
- }
- else
- {
- identity = TA_FRAME_ETHERNET_INTERESTING;
- }
-
-
- /* Step2: Update the information in the current record */
- if (direction == CSR_WIFI_ROUTER_CTRL_PROTOCOL_DIRECTION_RX)
- {
- /* Update the Rx packet count and the throughput count */
- tad->stats.rxFramesNum++;
- tad->stats.rxBytesCount += data->data_length;
-
- /* Accumulate packet Rx rates for later averaging */
- tad->rx_sum_rate += rate;
- }
- else
- {
- if (identity == TA_FRAME_ETHERNET_INTERESTING)
- {
- /*
- * Store the period between the last and the current frame.
- * There is not point storing more than TA_MAX_INTERVALS_IN_C1 periods,
- * the traffic will be bursty or continuous.
- */
- if (tad->stats.txFramesNum < TA_MAX_INTERVALS_IN_C1)
- {
- u32 interval;
- u32 index_in_intervals;
-
- interval = timestamp - tad->tx_last_ts;
- tad->tx_last_ts = timestamp;
- index_in_intervals = (interval + TA_INTERVALS_STEP / 2 - 1) / TA_INTERVALS_STEP;
-
- /* If the interval is interesting, update the t1_intervals count */
- if (index_in_intervals <= TA_INTERVALS_NUM)
- {
- unifi_trace(card->ospriv, UDBG5,
- "unifi_ta_sample: TX interval=%d index=%d\n",
- interval, index_in_intervals);
- tad->stats.intervals[index_in_intervals]++;
- }
- }
- }
-
- /* Update the Tx packet count... */
- tad->stats.txFramesNum++;
- /* ... and the number of bytes for throughput. */
- tad->stats.txBytesCount += data->data_length;
- }
-
- /*
- * If more than one second has elapsed since the last report, send
- * another one.
- */
- /* Unsigned subtraction handles wrap-around from 0xFFFFFFFF to 0 */
- time_delta = timestamp - tad->last_indication_time;
- if (time_delta >= 1000)
- {
- /*
- * rxFramesNum can be flashed in tas_reset_data() by another thread.
- * Use a temp to avoid division by zero.
- */
- u32 temp_rxFramesNum;
- temp_rxFramesNum = tad->stats.rxFramesNum;
-
- /* Calculate this interval's mean frame Rx rate from the sum */
- if (temp_rxFramesNum)
- {
- tad->stats.rxMeanRate = tad->rx_sum_rate / temp_rxFramesNum;
- }
- unifi_trace(card->ospriv, UDBG5,
- "unifi_ta_sample: RX fr=%lu, r=%u, sum=%lu, av=%lu\n",
- tad->stats.rxFramesNum, rate,
- tad->rx_sum_rate, tad->stats.rxMeanRate);
-
- /*
- * Send the information collected in the stats struct
- * to the SME and reset the counters.
- */
- if (tad->packet_filter & CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_CUSTOM)
- {
- u32 rxTcpThroughput = tad->ta_l4stats.rxTcpBytesCount / time_delta;
- u32 txTcpThroughput = tad->ta_l4stats.txTcpBytesCount / time_delta;
- u32 rxUdpThroughput = tad->ta_l4stats.rxUdpBytesCount / time_delta;
- u32 txUdpThroughput = tad->ta_l4stats.txUdpBytesCount / time_delta;
-
- unifi_ta_indicate_l4stats(card->ospriv,
- rxTcpThroughput,
- txTcpThroughput,
- rxUdpThroughput,
- txUdpThroughput
- );
- }
- unifi_ta_indicate_sampling(card->ospriv, &tad->stats);
- tas_reset_data(tad);
- tad->last_indication_time = timestamp;
- }
-} /* unifi_ta_sample() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * External API.
- * unifi_ta_configure
- *
- * Configures the TA module parameters.
- *
- * Arguments:
- * ta The pointer to the TA module.
- * config_type The type of the configuration request
- * config Pointer to the configuration parameters.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, CSR error code otherwise
- * ---------------------------------------------------------------------------
- */
-CsrResult unifi_ta_configure(card_t *card,
- CsrWifiRouterCtrlTrafficConfigType config_type,
- const CsrWifiRouterCtrlTrafficConfig *config)
-{
- ta_data_t *tad = &card->ta_sampling;
-
- /* Reinitialise our data when we are reset */
- if (config_type == CSR_WIFI_ROUTER_CTRL_TRAFFIC_CONFIG_TYPE_RESET)
- {
- /* Reset the stats to zero */
- tas_reset_data(tad);
-
- /* Reset the timer variables */
- tad->tx_last_ts = 0;
- tad->last_indication_time = 0;
-
- return CSR_RESULT_SUCCESS;
- }
-
- if (config_type == CSR_WIFI_ROUTER_CTRL_TRAFFIC_CONFIG_TYPE_FILTER)
- {
- tad->packet_filter = config->packetFilter;
-
- if (tad->packet_filter & CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_CUSTOM)
- {
- tad->custom_filter = config->customFilter;
- }
-
- return CSR_RESULT_SUCCESS;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* unifi_ta_configure() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * External API.
- * unifi_ta_classification
- *
- * Configures the current TA classification.
- *
- * Arguments:
- * ta The pointer to the TA module.
- * traffic_type The classification type
- * period The traffic period if the type is periodic
- *
- * Returns:
- * None
- * ---------------------------------------------------------------------------
- */
-void unifi_ta_classification(card_t *card,
- CsrWifiRouterCtrlTrafficType traffic_type,
- u16 period)
-{
- unifi_trace(card->ospriv, UDBG3,
- "Changed current ta classification to: %d\n", traffic_type);
-
- card->ta_sampling.traffic_type = traffic_type;
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_hip_ta_sampling.h b/drivers/staging/csr/csr_wifi_hip_ta_sampling.h
deleted file mode 100644
index aa684c654d06..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_ta_sampling.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- * FILE: csr_wifi_hip_ta_sampling.h
- *
- * PURPOSE:
- * This file contains Traffic Analysis definitions common to the
- * sampling and analysis modules.
- *
- * ---------------------------------------------------------------------------
- */
-#ifndef __TA_SAMPLING_H__
-#define __TA_SAMPLING_H__
-
-#include "csr_wifi_hip_unifi.h"
-
-typedef struct ta_l4stats
-{
- u32 rxTcpBytesCount;
- u32 txTcpBytesCount;
- u32 rxUdpBytesCount;
- u32 txUdpBytesCount;
-} ta_l4stats_t;
-
-/*
- * Context structure to preserve state between calls.
- */
-
-typedef struct ta_data
-{
- /* Current packet filter configuration */
- u16 packet_filter;
-
- /* Current packet custom filter configuration */
- CsrWifiRouterCtrlTrafficFilter custom_filter;
-
- /* The timestamp of the last tx packet processed. */
- u32 tx_last_ts;
-
- /* The timestamp of the last packet processed. */
- u32 last_indication_time;
-
- /* Statistics */
- CsrWifiRouterCtrlTrafficStats stats;
-
- /* Current traffic classification */
- CsrWifiRouterCtrlTrafficType traffic_type;
-
- /* Sum of packet rx rates for this interval used to calculate mean */
- u32 rx_sum_rate;
- ta_l4stats_t ta_l4stats;
-} ta_data_t;
-
-
-void unifi_ta_sampling_init(card_t *card);
-
-#endif /* __TA_SAMPLING_H__ */
diff --git a/drivers/staging/csr/csr_wifi_hip_udi.c b/drivers/staging/csr/csr_wifi_hip_udi.c
deleted file mode 100644
index a6b006b0e983..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_udi.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- * FILE: csr_wifi_hip_card_udi.c
- *
- * PURPOSE:
- * Maintain a list of callbacks to log UniFi exchanges to one or more
- * debug/monitoring client applications.
- *
- * NOTES:
- * Just call the UDI driver log fn directly for now.
- * When done properly, each open() on the UDI device will install
- * a log function. We will call all log fns whenever a signal is written
- * to or read form the UniFi.
- *
- * ---------------------------------------------------------------------------
- */
-#include <linux/seq_file.h>
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_card.h"
-
-
-static void unifi_print_unsafe_sdio_status(card_t *card, struct seq_file *m)
-{
-#ifdef CSR_UNSAFE_SDIO_ACCESS
- s32 iostate;
- CsrResult r;
- static const char *const states[] = {
- "AWAKE", "DROWSY", "TORPID"
- };
-#define SHARED_READ_RETRY_LIMIT 10
- u8 b;
-
- seq_printf(m, "Host State: %s\n", states[card->host_state]);
-
- r = unifi_check_io_status(card, &iostate);
- if (iostate == 1) {
- seq_puts(m, remaining, "I/O Check: F1 disabled\n");
- } else {
- if (iostate == 1) {
- seq_puts(m, "I/O Check: pending interrupt\n");
-
- seq_printf(m, "BH reason interrupt = %d\n", card->bh_reason_unifi);
- seq_printf(m, "BH reason host = %d\n", card->bh_reason_host);
-
- for (i = 0; i < SHARED_READ_RETRY_LIMIT; i++) {
- r = unifi_read_8_or_16(card, card->sdio_ctrl_addr + 2, &b);
- if (r == CSR_RESULT_SUCCESS && !(b & 0x80)) {
- seq_printf(m, "fhsr: %u (driver thinks is %u)\n",
- b, card->from_host_signals_r);
- break;
- }
- }
-
- iostate = unifi_read_shared_count(card, card->sdio_ctrl_addr + 4);
- seq_printf(m, "thsw: %u (driver thinks is %u)\n",
- iostate, card->to_host_signals_w);
- }
-#endif
-}
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_print_status
- *
- * Print status info to given character buffer.
- *
- * Arguments:
- * None.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-s32 unifi_print_status(card_t *card, struct seq_file *m)
-{
- sdio_config_data_t *cfg;
- u16 i, n;
-
- i = n = 0;
- seq_printf(m, "Chip ID %u\n", card->chip_id);
- seq_printf(m, "Chip Version %04X\n", card->chip_version);
- seq_printf(m, "HIP v%u.%u\n",
- (card->config_data.version >> 8) & 0xFF,
- card->config_data.version & 0xFF);
- seq_printf(m, "Build %u: %s\n", card->build_id, card->build_id_string);
-
- cfg = &card->config_data;
-
- seq_printf(m, "sdio ctrl offset %u\n", cfg->sdio_ctrl_offset);
- seq_printf(m, "fromhost sigbuf handle %u\n", cfg->fromhost_sigbuf_handle);
- seq_printf(m, "tohost_sigbuf_handle %u\n", cfg->tohost_sigbuf_handle);
- seq_printf(m, "num_fromhost_sig_frags %u\n", cfg->num_fromhost_sig_frags);
- seq_printf(m, "num_tohost_sig_frags %u\n", cfg->num_tohost_sig_frags);
- seq_printf(m, "num_fromhost_data_slots %u\n", cfg->num_fromhost_data_slots);
- seq_printf(m, "num_tohost_data_slots %u\n", cfg->num_tohost_data_slots);
- seq_printf(m, "data_slot_size %u\n", cfg->data_slot_size);
-
- /* Added by protocol version 0x0001 */
- seq_printf(m, "overlay_size %u\n", cfg->overlay_size);
-
- /* Added by protocol version 0x0300 */
- seq_printf(m, "data_slot_round %u\n", cfg->data_slot_round);
- seq_printf(m, "sig_frag_size %u\n", cfg->sig_frag_size);
-
- /* Added by protocol version 0x0300 */
- seq_printf(m, "tohost_sig_pad %u\n", cfg->tohost_signal_padding);
-
- seq_puts(m, "\nInternal state:\n");
-
- seq_printf(m, "Last PHY PANIC: %04x:%04x\n",
- card->last_phy_panic_code, card->last_phy_panic_arg);
- seq_printf(m, "Last MAC PANIC: %04x:%04x\n",
- card->last_mac_panic_code, card->last_mac_panic_arg);
-
- seq_printf(m, "fhsr: %hu\n", (u16)card->from_host_signals_r);
- seq_printf(m, "fhsw: %hu\n", (u16)card->from_host_signals_w);
- seq_printf(m, "thsr: %hu\n", (u16)card->to_host_signals_r);
- seq_printf(m, "thsw: %hu\n", (u16)card->to_host_signals_w);
- seq_printf(m, "fh buffer contains: %d signals, %td bytes\n",
- card->fh_buffer.count,
- card->fh_buffer.ptr - card->fh_buffer.buf);
-
- seq_puts(m, "paused: ");
- for (i = 0; i < ARRAY_SIZE(card->tx_q_paused_flag); i++)
- seq_printf(m, card->tx_q_paused_flag[i] ? "1" : "0");
- seq_putc(m, '\n');
-
- seq_printf(m, "fh command q: %u waiting, %u free of %u:\n",
- CSR_WIFI_HIP_Q_SLOTS_USED(&card->fh_command_queue),
- CSR_WIFI_HIP_Q_SLOTS_FREE(&card->fh_command_queue),
- UNIFI_SOFT_COMMAND_Q_LENGTH);
-
- for (i = 0; i < UNIFI_NO_OF_TX_QS; i++)
- seq_printf(m, "fh traffic q[%u]: %u waiting, %u free of %u:\n",
- i,
- CSR_WIFI_HIP_Q_SLOTS_USED(&card->fh_traffic_queue[i]),
- CSR_WIFI_HIP_Q_SLOTS_FREE(&card->fh_traffic_queue[i]),
- UNIFI_SOFT_TRAFFIC_Q_LENGTH);
-
- seq_printf(m, "fh data slots free: %u\n",
- card->from_host_data ? CardGetFreeFromHostDataSlots(card) : 0);
-
- seq_puts(m, "From host data slots:");
- n = card->config_data.num_fromhost_data_slots;
- for (i = 0; i < n && card->from_host_data; i++)
- seq_printf(m, " %hu", (u16)card->from_host_data[i].bd.data_length);
- seq_putc(m, '\n');
-
- seq_puts(m, "To host data slots:");
- n = card->config_data.num_tohost_data_slots;
- for (i = 0; i < n && card->to_host_data; i++)
- seq_printf(m, " %hu", (u16)card->to_host_data[i].data_length);
- seq_putc(m, '\n');
-
- unifi_print_unsafe_sdio_status(card, m);
-
- seq_puts(m, "\nStats:\n");
- seq_printf(m, "Total SDIO bytes: R=%u W=%u\n",
- card->sdio_bytes_read, card->sdio_bytes_written);
-
- seq_printf(m, "Interrupts generated on card: %u\n", card->unifi_interrupt_seq);
- return 0;
-}
diff --git a/drivers/staging/csr/csr_wifi_hip_unifi.h b/drivers/staging/csr/csr_wifi_hip_unifi.h
deleted file mode 100644
index 1160a0e25c7d..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_unifi.h
+++ /dev/null
@@ -1,871 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- *
- * FILE : csr_wifi_hip_unifi.h
- *
- * PURPOSE : Public API for the UniFi HIP core library.
- *
- * ---------------------------------------------------------------------------
- */
-#ifndef __CSR_WIFI_HIP_UNIFI_H__
-#define __CSR_WIFI_HIP_UNIFI_H__ 1
-
-#ifndef CSR_WIFI_HIP_TA_DISABLE
-#include "csr_wifi_router_ctrl_prim.h"
-#include "csr_wifi_router_prim.h"
-#else
-#include "csr_time.h"
-#endif
-
-/* SDIO chip ID numbers */
-
-/* Manufacturer id */
-#define SDIO_MANF_ID_CSR 0x032a
-
-/* Device id */
-#define SDIO_CARD_ID_UNIFI_1 0x0001
-#define SDIO_CARD_ID_UNIFI_2 0x0002
-#define SDIO_CARD_ID_UNIFI_3 0x0007
-#define SDIO_CARD_ID_UNIFI_4 0x0008
-
-/* Function number for WLAN */
-#define SDIO_WLAN_FUNC_ID_UNIFI_1 0x0001
-#define SDIO_WLAN_FUNC_ID_UNIFI_2 0x0001
-#define SDIO_WLAN_FUNC_ID_UNIFI_3 0x0001
-#define SDIO_WLAN_FUNC_ID_UNIFI_4 0x0002
-
-/* Maximum SDIO bus clock supported. */
-#define UNIFI_SDIO_CLOCK_MAX_HZ 50000000 /* Hz */
-
-/*
- * Initialisation SDIO bus clock.
- *
- * The initialisation clock speed should be used from when the chip has been
- * reset until the first MLME-reset has been received (i.e. during firmware
- * initialisation), unless UNIFI_SDIO_CLOCK_SAFE_HZ applies.
- */
-#define UNIFI_SDIO_CLOCK_INIT_HZ 12500000 /* Hz */
-
-/*
- * Safe SDIO bus clock.
- *
- * The safe speed should be used when the chip is in deep sleep or
- * it's state is unknown (just after reset / power on).
- */
-#define UNIFI_SDIO_CLOCK_SAFE_HZ 1000000 /* Hz */
-
-/* I/O default block size to use for UniFi. */
-#define UNIFI_IO_BLOCK_SIZE 64
-
-#define UNIFI_WOL_OFF 0
-#define UNIFI_WOL_SDIO 1
-#define UNIFI_WOL_PIO 2
-
-/* The number of Tx traffic queues */
-#define UNIFI_NO_OF_TX_QS 4
-
-#define CSR_WIFI_HIP_RESERVED_HOST_TAG 0xFFFFFFFF
-
-/*
- * The number of slots in the from-host queues.
- *
- * UNIFI_SOFT_TRAFFIC_Q_LENGTH is the number of slots in the traffic queues
- * and there will be UNIFI_NO_OF_TX_QS of them.
- * Traffic queues are used for data packets.
- *
- * UNIFI_SOFT_COMMAND_Q_LENGTH is the number of slots in the command queue.
- * The command queue is used for MLME management requests.
- *
- * Queues are ring buffers and so must always have 1 unused slot.
- */
-#define UNIFI_SOFT_TRAFFIC_Q_LENGTH (20 + 1)
-#define UNIFI_SOFT_COMMAND_Q_LENGTH (16 + 1)
-
-#include "csr_framework_ext.h" /* from the synergy porting folder */
-#include "csr_sdio.h" /* from the synergy porting folder */
-#include "csr_macro.h" /* from the synergy porting folder */
-#include "csr_wifi_result.h"
-
-/* Utility MACROS. Note that UNIFI_MAC_ADDRESS_CMP returns TRUE on success */
-#define UNIFI_MAC_ADDRESS_COPY(dst, src) \
- do { (dst)[0] = (src)[0]; (dst)[1] = (src)[1]; \
- (dst)[2] = (src)[2]; (dst)[3] = (src)[3]; \
- (dst)[4] = (src)[4]; (dst)[5] = (src)[5]; \
- } while (0)
-
-#define UNIFI_MAC_ADDRESS_CMP(addr1, addr2) \
- (((addr1)[0] == (addr2)[0]) && ((addr1)[1] == (addr2)[1]) && \
- ((addr1)[2] == (addr2)[2]) && ((addr1)[3] == (addr2)[3]) && \
- ((addr1)[4] == (addr2)[4]) && ((addr1)[5] == (addr2)[5]))
-
-/* Traffic queue ordered according to priority
- * EAPOL/Uncontrolled port Queue should be the last
- */
-typedef enum
-{
- UNIFI_TRAFFIC_Q_BK = 0,
- UNIFI_TRAFFIC_Q_BE,
- UNIFI_TRAFFIC_Q_VI,
- UNIFI_TRAFFIC_Q_VO,
- UNIFI_TRAFFIC_Q_EAPOL, /* Non existent in HIP */
- UNIFI_TRAFFIC_Q_MAX, /* Non existent */
- UNIFI_TRAFFIC_Q_MLME /* Non existent */
-} unifi_TrafficQueue;
-
-/*
- * Structure describing a bulk data slot.
- * This structure is shared between the HIP core library and the OS
- * layer. See the definition of unifi_net_data_malloc() for more details.
- *
- * The data_length field is used to indicate empty/occupied state.
- * Needs to be defined before #include "unifi_os.h".
- */
-typedef struct _bulk_data_desc
-{
- const u8 *os_data_ptr;
- u32 data_length;
- const void *os_net_buf_ptr;
- u32 net_buf_length;
-} bulk_data_desc_t;
-
-/* Structure of an entry in the Symbol Look Up Table (SLUT). */
-typedef struct _symbol
-{
- u16 id;
- u32 obj;
-} symbol_t;
-
-/*
- * Header files need to be included from the current directory,
- * the SME library, the synergy framework and the OS layer.
- * A thin OS layer needs to be implemented in the porting exercise.
- *
- * Note that unifi_os.h should be included only in unifi.h
- */
-
-#include "unifi_os.h"
-
-/*
- * Contains the HIP core definitions selected in the porting exercise, such as
- * UNIFI_PAD_BULK_DATA_TO_BLOCK_SIZE and UNIFI_PAD_SIGNALS_TO_BLOCK_SIZE.
- * Implemented in the OS layer, as part of the porting exersice.
- */
-#include "unifi_config.h"
-
-#include "csr_wifi_hip_signals.h" /* from this dir */
-
-/*
- * The card structure is an opaque pointer that is used to pass context
- * to the upper-edge API functions.
- */
-typedef struct card card_t;
-
-
-/*
- * This structure describes all of the bulk data that 'might' be
- * associated with a signal.
- */
-typedef struct _bulk_data_param
-{
- bulk_data_desc_t d[UNIFI_MAX_DATA_REFERENCES];
-} bulk_data_param_t;
-
-
-/*
- * This structure describes the chip and HIP core lib
- * information that exposed to the OS layer.
- */
-typedef struct _card_info
-{
- u16 chip_id;
- u16 chip_version;
- u32 fw_build;
- u16 fw_hip_version;
- u32 sdio_block_size;
-} card_info_t;
-
-
-/*
- * Mini-coredump definitions
- */
-/* Definition of XAP memory ranges used by the mini-coredump system.
- * Note that, these values are NOT the same as UNIFI_REGISTERS, etc
- * in unifihw.h which don't allow selection of register areas for each XAP.
- */
-typedef enum unifi_coredump_space
-{
- UNIFI_COREDUMP_MAC_REG,
- UNIFI_COREDUMP_PHY_REG,
- UNIFI_COREDUMP_SH_DMEM,
- UNIFI_COREDUMP_MAC_DMEM,
- UNIFI_COREDUMP_PHY_DMEM,
- UNIFI_COREDUMP_TRIGGER_MAGIC = 0xFEED
-} unifi_coredump_space_t;
-
-/* Structure used to request a register value from a mini-coredump buffer */
-typedef struct unifi_coredump_req
-{
- /* From user */
- s32 index; /* 0=newest, -1=oldest */
- unifi_coredump_space_t space; /* memory space */
- u32 offset; /* register offset in space */
- /* From driver */
- u32 drv_build; /* Driver build id */
- u32 chip_ver; /* Chip version */
- u32 fw_ver; /* Firmware version */
- s32 requestor; /* Requestor: 0=auto dump, 1=manual */
- u32 timestamp; /* time of capture by driver */
- u32 serial; /* capture serial number */
- s32 value; /* register value */
-} unifi_coredump_req_t; /* mini-coredumped reg value request */
-
-
-/**
- * @defgroup upperedge Upper edge API
- *
- * The following functions are implemented in the HIP core lib.
- */
-
-/**
- *
- * Initialise the HIP core lib.
- * Note that the OS layer must initialise the SDIO glue layer and obtain
- * an SDIO function context, prior to this call.
- *
- * @param sdiopriv the SDIO function context.
- *
- * @param ospriv the OS layer context.
- *
- * @return \p card_t the HIP core lib API context.
- *
- * @ingroup upperedge
- */
-card_t* unifi_alloc_card(CsrSdioFunction *sdiopriv, void *ospriv);
-
-
-/**
- *
- * Initialise the UniFi chip.
- *
- * @param card the HIP core lib API context.
- *
- * @param led_mask the led mask to apply to UniFi.
- *
- * @return \b 0 if UniFi is initialized.
- *
- * @return \b -CSR_EIO if an I/O error occurred while initializing UniFi
- *
- * @return \b -CSR_ENODEV if the card is no longer present.
- *
- * @ingroup upperedge
- */
-CsrResult unifi_init_card(card_t *card, s32 led_mask);
-
-/**
- *
- * De-Initialise the HIP core lib.
- *
- * @param card the HIP core lib API context.
- *
- * @ingroup upperedge
- */
-void unifi_free_card(card_t *card);
-
-/**
- *
- * Cancel all the signals pending in the HIP core lib.
- * Normally used during a system suspend when the power is retained on UniFi.
- *
- * @param card the HIP core lib API context.
- *
- * @ingroup upperedge
- */
-void unifi_cancel_pending_signals(card_t *card);
-
-/**
- *
- * Send a signal to UniFi.
- * Normally it is called from unifi_sys_hip_req() and the OS layer
- * Tx data plane.
- *
- * Note that the bulkdata buffers ownership is passed to the HIP core lib.
- * These buffers must be allocated using unifi_net_data_malloc().
- *
- * @param card the HIP core lib API context.
- *
- * @param sigptr pointer to the signal.
- *
- * @param siglen size of the signal.
- *
- * @param bulkdata pointer to the bulk data associated with the signal.
- *
- * @return \b 0 signal is sent.
- *
- * @return \b -CSR_EIO if an error occurred while sending the signal
- *
- * @return \b -CSR_ENODEV if the card is no longer present.
- *
- * @ingroup upperedge
- */
-CsrResult unifi_send_signal(card_t *card, const u8 *sigptr,
- u32 siglen,
- const bulk_data_param_t *bulkdata);
-
-/**
- *
- * Check if the HIP core lib has resources to send a signal.
- * Normally there no need to use this function.
- *
- * @param card the HIP core lib API context.
- *
- * @param sigptr pointer to the signal.
- *
- * @return \b 0 if there are resources for the signal.
- *
- * @return \b -CSR_ENOSPC if there are not enough resources
- *
- * @ingroup upperedge
- */
-CsrResult unifi_send_resources_available(card_t *card, const u8 *sigptr);
-
-/**
- *
- * Read the UniFi chip and the HIP core lib information.
- *
- * @param card the HIP core lib API context.
- *
- * @param card_info pointer to save the information.
- *
- * @ingroup upperedge
- */
-void unifi_card_info(card_t *card, card_info_t *card_info);
-
-/**
- *
- * Print the UniFi I/O and Interrupt status.
- * Normally it is used for debug purposes only.
- *
- * @param card the HIP core lib API context.
-
- * @param status buffer for the chip status
- *
- * @return \b 0 if the check was performed.
- *
- * @return \b -CSR_EIO if an error occurred while checking the status.
- *
- * @return \b -CSR_ENODEV if the card is no longer present.
- *
- * @ingroup upperedge
- */
-CsrResult unifi_check_io_status(card_t *card, s32 *status);
-
-
-/**
- *
- * Run the HIP core lib Botton-Half.
- * Whenever the HIP core lib want this function to be called
- * by the OS layer, it calls unifi_run_bh().
- *
- * @param card the HIP core lib API context.
- *
- * @param remaining pointer to return the time (in msecs) that this function
- * should be re-scheduled. A return value of 0 means that no re-scheduling
- * is required. If unifi_bh() is called before the timeout expires,
- * the caller must pass in the remaining time.
- *
- * @return \b 0 if no error occurred.
- *
- * @return \b -CSR_ENODEV if the card is no longer present.
- *
- * @return \b -CSR_E* if an error occurred while running the bottom half.
- *
- * @ingroup upperedge
- */
-CsrResult unifi_bh(card_t *card, u32 *remaining);
-
-
-/**
- * UniFi Low Power Mode (Deep Sleep Signaling)
- *
- * unifi_low_power_mode defines the UniFi Deep Sleep Signaling status.
- * Use with unifi_configure_low_power_mode() to enable/disable
- * the Deep Sleep Signaling.
- */
-enum unifi_low_power_mode
-{
- UNIFI_LOW_POWER_DISABLED,
- UNIFI_LOW_POWER_ENABLED
-};
-
-/**
- * Periodic Wake Host Mode
- *
- * unifi_periodic_wake_mode defines the Periodic Wake Host Mode.
- * It can only be set to UNIFI_PERIODIC_WAKE_HOST_ENABLED if
- * low_power_mode == UNIFI_LOW_POWER_ENABLED.
- */
-enum unifi_periodic_wake_mode
-{
- UNIFI_PERIODIC_WAKE_HOST_DISABLED,
- UNIFI_PERIODIC_WAKE_HOST_ENABLED
-};
-
-/**
- *
- * Run the HIP core lib Botton-Half.
- * Whenever the HIP core lib want this function to be called
- * by the OS layer, it calls unifi_run_bh().
- *
- * Typically, the SME is responsible for configuring these parameters,
- * so unifi_sys_configure_power_mode_req() is usually implemented
- * as a direct call to unifi_configure_low_power_mode().
- *
- * Note: When polling mode is used instead of interrupts,
- * low_power_mode must never be set to UNIFI_LOW_POWER_ENABLED.
- *
- * @param card the HIP core lib API context.
- *
- * @param low_power_mode the Low Power Mode.
- *
- * @param periodic_wake_mode the Periodic Wake Mode.
- *
- * @return \b 0 if no error occurred.
- *
- * @return \b -CSR_E* if the request failed.
- *
- * @ingroup upperedge
- */
-CsrResult unifi_configure_low_power_mode(card_t *card,
- enum unifi_low_power_mode low_power_mode,
- enum unifi_periodic_wake_mode periodic_wake_mode);
-
-/**
- *
- * Forces the UniFi chip to enter a Deep Sleep state.
- * This is normally called by the OS layer when the platform suspends.
- *
- * Note that if the UniFi Low Power Mode is disabled this call fails.
- *
- * @param card the HIP core lib API context.
- *
- * @return \b 0 if no error occurred.
- *
- * @return \b -CSR_ENODEV if the card is no longer present.
- *
- * @return \b -CSR_E* if the request failed.
- *
- * @ingroup upperedge
- */
-CsrResult unifi_force_low_power_mode(card_t *card);
-
-#ifndef CSR_WIFI_HIP_TA_DISABLE
-/**
- * Configure the Traffic Analysis sampling
- *
- * Enable or disable statistics gathering.
- * Enable or disable particular packet detection.
- *
- * @param card the HIP core context
- * @param config_type the item to configure
- * @param config pointer to struct containing config info
- *
- * @return \b 0 if configuration was successful
- *
- * @return \b -CSR_EINVAL if a parameter had an invalid value
- *
- * @ingroup upperedge
- */
-CsrResult unifi_ta_configure(card_t *card,
- CsrWifiRouterCtrlTrafficConfigType config_type,
- const CsrWifiRouterCtrlTrafficConfig *config);
-
-/**
- * Pass a packet for Traffic Analysis sampling
- *
- * @param card the HIP core context
- * @param direction the direction (Rx or Tx) of the frame.
- * @param data pointer to bulkdata struct containing the packet
- * @param saddr the source address of the packet
- * @param sta_macaddr the MAC address of the UniFi chip
- * @param timestamp the current time in msecs
- *
- * @ingroup upperedge
- */
-void unifi_ta_sample(card_t *card,
- CsrWifiRouterCtrlProtocolDirection direction,
- const bulk_data_desc_t *data,
- const u8 *saddr,
- const u8 *sta_macaddr,
- u32 timestamp,
- u16 rate);
-
-/**
- * Notify the HIP core lib for a detected Traffic Classification.
- * Typically, the SME is responsible for configuring these parameters,
- * so unifi_sys_traffic_classification_req() is usually implemented
- * as a direct call to unifi_ta_classification().
- *
- * @param card the HIP core context.
- * @param traffic_type the detected traffic type.
- * @param period The detected period of the traffic.
- *
- * @ingroup upperedge
- */
-void unifi_ta_classification(card_t *card,
- CsrWifiRouterCtrlTrafficType traffic_type,
- u16 period);
-
-#endif
-/**
- * Use software to hard reset the chip.
- * This is a subset of the unifi_init_card() functionality and should
- * only be used only to reset a paniced chip before a coredump is taken.
- *
- * @param card the HIP core context.
- *
- * @ingroup upperedge
- */
-CsrResult unifi_card_hard_reset(card_t *card);
-
-
-CsrResult unifi_card_readn(card_t *card, u32 unifi_addr, void *pdata, u16 len);
-CsrResult unifi_card_read16(card_t *card, u32 unifi_addr, u16 *pdata);
-CsrResult unifi_card_write16(card_t *card, u32 unifi_addr, u16 data);
-
-
-enum unifi_dbg_processors_select
-{
- UNIFI_PROC_MAC,
- UNIFI_PROC_PHY,
- UNIFI_PROC_BT,
- UNIFI_PROC_BOTH,
- UNIFI_PROC_INVALID
-};
-
-CsrResult unifi_card_stop_processor(card_t *card, enum unifi_dbg_processors_select which);
-
-/**
- * Call-outs from the HIP core lib to the OS layer.
- * The following functions need to be implemented during the porting exercise.
- */
-
-/**
- * Selects appropriate queue according to priority
- * Helps maintain uniformity in queue selection between the HIP
- * and the OS layers.
- *
- * @param priority priority of the packet
- *
- * @return \b Traffic queue to which a packet of this priority belongs
- *
- * @ingroup upperedge
- */
-unifi_TrafficQueue
-unifi_frame_priority_to_queue(CSR_PRIORITY priority);
-
-/**
- * Returns the priority corresponding to a particular Queue when that is used
- * when downgrading a packet to a lower AC.
- * Helps maintain uniformity in queue - priority mapping between the HIP
- * and the OS layers.
- *
- * @param queue
- *
- * @return \b Highest priority corresponding to this queue
- *
- * @ingroup upperedge
- */
-CSR_PRIORITY unifi_get_default_downgrade_priority(unifi_TrafficQueue queue);
-
-/**
- *
- * Flow control callbacks.
- * unifi_pause_xmit() is called when the HIP core lib does not have any
- * resources to store data packets. The OS layer needs to pause
- * the Tx data plane until unifi_restart_xmit() is called.
- *
- * @param ospriv the OS layer context.
- *
- * @ingroup upperedge
- */
-void unifi_pause_xmit(void *ospriv, unifi_TrafficQueue queue);
-void unifi_restart_xmit(void *ospriv, unifi_TrafficQueue queue);
-
-/**
- *
- * Request to run the Bottom-Half.
- * The HIP core lib calls this function to request that unifi_bh()
- * needs to be run by the OS layer. It can be called anytime, i.e.
- * when the unifi_bh() is running.
- * Since unifi_bh() is not re-entrant, usually unifi_run_bh() sets
- * an event to a thread that schedules a call to unifi_bh().
- *
- * @param ospriv the OS layer context.
- *
- * @ingroup upperedge
- */
-CsrResult unifi_run_bh(void *ospriv);
-
-/**
- *
- * Delivers a signal received from UniFi to the OS layer.
- * Normally, the data signals should be delivered to the data plane
- * and all the rest to the SME (unifi_sys_hip_ind()).
- *
- * Note that the OS layer is responsible for freeing the bulkdata
- * buffers, using unifi_net_data_free().
- *
- * @param ospriv the OS layer context.
- *
- * @param sigptr pointer to the signal.
- *
- * @param siglen size of the signal.
- *
- * @param bulkdata pointer to the bulk data associated with the signal.
- *
- * @ingroup upperedge
- */
-void unifi_receive_event(void *ospriv,
- u8 *sigdata, u32 siglen,
- const bulk_data_param_t *bulkdata);
-
-#ifdef CSR_WIFI_REQUEUE_PACKET_TO_HAL
-/**
- *
- * Used to reque the failed ma packet request back to hal queues
- *
- * @param ospriv the OS layer context.
- *
- * @param host_tag host tag for the packet to requeue.
- *
- * @param bulkDataDesc pointer to the bulk data.
- *
- * @ingroup upperedge
- */
-CsrResult unifi_reque_ma_packet_request(void *ospriv, u32 host_tag,
- u16 status,
- bulk_data_desc_t *bulkDataDesc);
-
-#endif
-typedef struct
-{
- u16 free_fh_sig_queue_slots[UNIFI_NO_OF_TX_QS];
- u16 free_fh_bulkdata_slots;
- u16 free_fh_fw_slots;
-} unifi_HipQosInfo;
-
-void unifi_get_hip_qos_info(card_t *card, unifi_HipQosInfo *hipqosinfo);
-
-
-/**
- * Functions that read a portion of a firmware file.
- *
- * Note: If the UniFi chip runs the f/w from ROM, the HIP core may never
- * call these functions. Also, the HIP core may call these functions even if
- * a f/w file is not available. In this case, it is safe to fail the request.
- */
-#define UNIFI_FW_STA 1 /* Identify STA firmware file */
-
-/**
- *
- * Ask the OS layer to initialise a read from a f/w file.
- *
- * @param ospriv the OS layer context.
- *
- * @param is_fw if 0 the request if for the loader file, if 1 the request
- * is for a f/w file.
- *
- * @param info a card_info_t structure containing versions information.
- * Note that some members of the structure may not be initialised.
- *
- * @return \p NULL if the file is not available, or a pointer which contains
- * OS specific information for the file (typically the contents of the file)
- * that the HIP core uses when calling unifi_fw_read() and unifi_fw_read_stop()
- *
- * @ingroup upperedge
- */
-void* unifi_fw_read_start(void *ospriv, s8 is_fw, const card_info_t *info);
-
-/**
- *
- * Ask the OS layer to return a portion from a f/w file.
- *
- * @param ospriv the OS layer context.
- *
- * @param arg the OS pointer returned by unifi_fw_read_start().
- *
- * @param offset the offset in the f/w file to read the read from.
- *
- * @param buf the buffer to store the returned data.
- *
- * @param len the size in bytes of the requested read.
- *
- * @ingroup upperedge
- */
-s32 unifi_fw_read(void *ospriv, void *arg, u32 offset, void *buf, u32 len);
-
-/**
- *
- * Ask the OS layer to finish reading from a f/w file.
- *
- * @param ospriv the OS layer context.
- *
- * @param dlpriv the OS pointer returned by unifi_fw_read_start().
- *
- * @ingroup upperedge
- */
-void unifi_fw_read_stop(void *ospriv, void *dlpriv);
-
-/**
- *
- * Ask OS layer for a handle to a dynamically allocated firmware buffer
- * (primarily intended for production test images which may need conversion)
- *
- * @param ospriv the OS layer context.
- *
- * @param fwbuf pointer to dynamically allocated buffer
- *
- * @param len length of provided buffer in bytes
- *
- * @ingroup upperedge
- */
-void* unifi_fw_open_buffer(void *ospriv, void *fwbuf, u32 len);
-
-/**
- *
- * Release a handle to a dynamically allocated firmware buffer
- * (primarily intended for production test images which may need conversion)
- *
- * @param ospriv the OS layer context.
- *
- * @param fwbuf pointer to dynamically allocated buffer
- *
- * @ingroup upperedge
- */
-void unifi_fw_close_buffer(void *ospriv, void *fwbuf);
-
-#ifndef CSR_WIFI_HIP_TA_DISABLE
-/*
- * Driver must provide these.
- *
- * A simple implementation will just call
- * unifi_sys_traffic_protocol_ind() or unifi_sys_traffic_classification_ind()
- * respectively. See sme_csr_userspace/sme_userspace.c.
- */
-/**
- *
- * Indicates a detected packet of type packet_type.
- * Typically, this information is processed by the SME so
- * unifi_ta_indicate_protocol() needs to schedule a call to
- * unifi_sys_traffic_protocol_ind().
- *
- * @param ospriv the OS layer context.
- *
- * @param packet_type the detected packet type.
- *
- * @param direction the direction of the packet (Rx, Tx).
- *
- * @param src_addr the source address of the packet.
- *
- * @ingroup upperedge
- */
-void unifi_ta_indicate_protocol(void *ospriv,
- CsrWifiRouterCtrlTrafficPacketType packet_type,
- CsrWifiRouterCtrlProtocolDirection direction,
- const CsrWifiMacAddress *src_addr);
-
-/**
- *
- * Indicates statistics for the sample data over a period.
- * Typically, this information is processed by the SME so
- * unifi_ta_indicate_sampling() needs to schedule a call to
- * unifi_sys_traffic_sample_ind().
- *
- * @param ospriv the OS layer context.
- *
- * @param stats the pointer to the structure that contains the statistics.
- *
- * @ingroup upperedge
- */
-void unifi_ta_indicate_sampling(void *ospriv, CsrWifiRouterCtrlTrafficStats *stats);
-void unifi_ta_indicate_l4stats(void *ospriv,
- u32 rxTcpThroughput,
- u32 txTcpThroughput,
- u32 rxUdpThroughput,
- u32 txUdpThroughput);
-#endif
-
-void unifi_rx_queue_flush(void *ospriv);
-
-/**
- * Call-out from the SDIO glue layer.
- *
- * The glue layer needs to call unifi_sdio_interrupt_handler() every time
- * an interrupts occurs.
- *
- * @param card the HIP core context.
- *
- * @ingroup bottomedge
- */
-void unifi_sdio_interrupt_handler(card_t *card);
-
-
-/* HELPER FUNCTIONS */
-
-/*
- * unifi_init() and unifi_download() implement a subset of unifi_init_card functionality
- * that excludes HIP initialization.
- */
-CsrResult unifi_init(card_t *card);
-CsrResult unifi_download(card_t *card, s32 led_mask);
-
-/*
- * unifi_start_processors() ensures both on-chip processors are running
- */
-CsrResult unifi_start_processors(card_t *card);
-
-CsrResult unifi_capture_panic(card_t *card);
-
-/*
- * Configure HIP interrupt processing mode
- */
-#define CSR_WIFI_INTMODE_DEFAULT 0
-#define CSR_WIFI_INTMODE_RUN_BH_ONCE 1 /* Run BH once per interrupt */
-
-void unifi_set_interrupt_mode(card_t *card, u32 mode);
-
-/*
- * unifi_request_max_clock() requests that max SDIO clock speed is set at the
- * next suitable opportunity.
- */
-void unifi_request_max_sdio_clock(card_t *card);
-
-
-/* Functions to lookup bulk data command names. */
-const char* lookup_bulkcmd_name(u16 id);
-
-/* Function to log HIP's global debug buffer */
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-void unifi_debug_buf_dump(void);
-void unifi_debug_log_to_buf(const char *fmt, ...);
-void unifi_debug_hex_to_buf(const char *buff, u16 length);
-#endif
-
-/* Mini-coredump utility functions */
-CsrResult unifi_coredump_get_value(card_t *card, struct unifi_coredump_req *req);
-CsrResult unifi_coredump_capture(card_t *card, struct unifi_coredump_req *req);
-CsrResult unifi_coredump_request_at_next_reset(card_t *card, s8 enable);
-CsrResult unifi_coredump_init(card_t *card, u16 num_dump_buffers);
-void unifi_coredump_free(card_t *card);
-
-#endif /* __CSR_WIFI_HIP_UNIFI_H__ */
diff --git a/drivers/staging/csr/csr_wifi_hip_unifi_signal_names.c b/drivers/staging/csr/csr_wifi_hip_unifi_signal_names.c
deleted file mode 100644
index 9a3528599f3c..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_unifi_signal_names.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#include "csr_wifi_hip_unifi.h"
-
-struct sig_name {
- s16 id;
- const char *name;
-};
-
-static const struct sig_name Unifi_bulkcmd_names[] = {
- { 0, "SignalCmd" },
- { 1, "CopyToHost" },
- { 2, "CopyToHostAck" },
- { 3, "CopyFromHost" },
- { 4, "CopyFromHostAck" },
- { 5, "ClearSlot" },
- { 6, "CopyOverlay" },
- { 7, "CopyOverlayAck" },
- { 8, "CopyFromHostAndClearSlot" },
- { 15, "Padding" }
-};
-
-const char *lookup_bulkcmd_name(u16 id)
-{
- if (id < 9)
- return Unifi_bulkcmd_names[id].name;
- if (id == 15)
- return "Padding";
-
- return "UNKNOWN";
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_hip_unifi_udi.h b/drivers/staging/csr/csr_wifi_hip_unifi_udi.h
deleted file mode 100644
index 4126e85bfe9b..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_unifi_udi.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- * FILE: csr_wifi_hip_unifi_udi.h
- *
- * PURPOSE:
- * Declarations and definitions for the UniFi Debug Interface.
- *
- * ---------------------------------------------------------------------------
- */
-#ifndef __CSR_WIFI_HIP_UNIFI_UDI_H__
-#define __CSR_WIFI_HIP_UNIFI_UDI_H__
-
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_signals.h"
-
-
-/*
- * Support for tracing the wire protocol.
- */
-enum udi_log_direction
-{
- UDI_LOG_FROM_HOST = 0x0000,
- UDI_LOG_TO_HOST = 0x0001
-};
-
-typedef void (*udi_func_t)(void *ospriv, u8 *sigdata,
- u32 signal_len,
- const bulk_data_param_t *bulkdata,
- enum udi_log_direction dir);
-
-CsrResult unifi_set_udi_hook(card_t *card, udi_func_t udi_fn);
-CsrResult unifi_remove_udi_hook(card_t *card, udi_func_t udi_fn);
-
-
-/*
- * Function to print current status info to a string.
- * This is used in the linux /proc interface and might be useful
- * in other systems.
- */
-s32 unifi_print_status(card_t *card, struct seq_file *m);
-
-#endif /* __CSR_WIFI_HIP_UNIFI_UDI_H__ */
diff --git a/drivers/staging/csr/csr_wifi_hip_unifihw.h b/drivers/staging/csr/csr_wifi_hip_unifihw.h
deleted file mode 100644
index 3f9fcbd55b55..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_unifihw.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- *
- * File: csr_wifi_hip_unifihw.h
- *
- * Definitions of various chip registers, addresses, values etc.
- *
- * ---------------------------------------------------------------------------
- */
-#ifndef __UNIFIHW_H__
-#define __UNIFIHW_H__ 1
-
-/* Symbol Look Up Table fingerprint. IDs are in sigs.h */
-#define SLUT_FINGERPRINT 0xD397
-
-
-/* Values of LoaderOperation */
-#define UNIFI_LOADER_IDLE 0x00
-#define UNIFI_LOADER_COPY 0x01
-#define UNIFI_LOADER_ERROR_MASK 0xF0
-
-/* Values of BootLoaderOperation */
-#define UNIFI_BOOT_LOADER_IDLE 0x00
-#define UNIFI_BOOT_LOADER_RESTART 0x01
-#define UNIFI_BOOT_LOADER_PATCH 0x02
-#define UNIFI_BOOT_LOADER_LOAD_STA 0x10
-#define UNIFI_BOOT_LOADER_LOAD_PTEST 0x11
-
-
-/* Memory spaces encoded in top byte of Generic Pointer type */
-#define UNIFI_SH_DMEM 0x01 /* Shared Data Memory */
-#define UNIFI_EXT_FLASH 0x02 /* External FLASH */
-#define UNIFI_EXT_SRAM 0x03 /* External SRAM */
-#define UNIFI_REGISTERS 0x04 /* Registers */
-#define UNIFI_PHY_DMEM 0x10 /* PHY Data Memory */
-#define UNIFI_PHY_PMEM 0x11 /* PHY Program Memory */
-#define UNIFI_PHY_ROM 0x12 /* PHY ROM */
-#define UNIFI_MAC_DMEM 0x20 /* MAC Data Memory */
-#define UNIFI_MAC_PMEM 0x21 /* MAC Program Memory */
-#define UNIFI_MAC_ROM 0x22 /* MAC ROM */
-#define UNIFI_BT_DMEM 0x30 /* BT Data Memory */
-#define UNIFI_BT_PMEM 0x31 /* BT Program Memory */
-#define UNIFI_BT_ROM 0x32 /* BT ROM */
-
-#define UNIFI_MAKE_GP(R, O) (((UNIFI_ ## R) << 24) | (O))
-#define UNIFI_GP_OFFSET(GP) ((GP) & 0xFFFFFF)
-#define UNIFI_GP_SPACE(GP) (((GP) >> 24) & 0xFF)
-
-#endif /* __UNIFIHW_H__ */
diff --git a/drivers/staging/csr/csr_wifi_hip_unifiversion.h b/drivers/staging/csr/csr_wifi_hip_unifiversion.h
deleted file mode 100644
index d1c66783f32c..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_unifiversion.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- * FILE: unifiversion.h
- *
- * PURPOSE:
- * Version information for the portable UniFi driver.
- *
- * ---------------------------------------------------------------------------
- */
-
-#ifndef __UNIFIVERSION_H__
-#define __UNIFIVERSION_H__
-
-/*
- * The minimum version of Host Interface Protocol required by the driver.
- */
-#define UNIFI_HIP_MAJOR_VERSION 9
-#define UNIFI_HIP_MINOR_VERSION 1
-
-#endif /* __UNIFIVERSION_H__ */
diff --git a/drivers/staging/csr/csr_wifi_hip_xbv.c b/drivers/staging/csr/csr_wifi_hip_xbv.c
deleted file mode 100644
index 050a15fbadf9..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_xbv.c
+++ /dev/null
@@ -1,1076 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- * FILE: csr_wifi_hip_xbv.c
- *
- * PURPOSE:
- * Routines for downloading firmware to UniFi.
- *
- * UniFi firmware files use a nested TLV (Tag-Length-Value) format.
- *
- * ---------------------------------------------------------------------------
- */
-#include <linux/slab.h>
-
-#ifdef CSR_WIFI_XBV_TEST
-/* Standalone test harness */
-#include "unifi_xbv.h"
-#include "csr_wifi_hip_unifihw.h"
-#else
-/* Normal driver build */
-#include "csr_wifi_hip_unifiversion.h"
-#include "csr_wifi_hip_card.h"
-#define DBG_TAG(t)
-#endif
-
-#include "csr_wifi_hip_xbv.h"
-
-#define STREAM_CHECKSUM 0x6d34 /* Sum of uint16s in each patch stream */
-
-/* XBV sizes used in patch conversion
- */
-#define PTDL_MAX_SIZE 2048 /* Max bytes allowed per PTDL */
-#define PTDL_HDR_SIZE (4 + 2 + 6 + 2) /* sizeof(fw_id, sec_len, patch_cmd, csum) */
-
-/* Struct to represent a buffer for reading firmware file */
-
-typedef struct
-{
- void *dlpriv;
- s32 ioffset;
- fwreadfn_t iread;
-} ct_t;
-
-/* Struct to represent a TLV field */
-typedef struct
-{
- char t_name[4];
- u32 t_len;
-} tag_t;
-
-
-#define TAG_EQ(i, v) (((i)[0] == (v)[0]) && \
- ((i)[1] == (v)[1]) && \
- ((i)[2] == (v)[2]) && \
- ((i)[3] == (v)[3]))
-
-/* We create a small stack on the stack that contains an enum
- * indicating the containing list segments, and the offset at which
- * those lists end. This enables a lot more error checking. */
-typedef enum
-{
- xbv_xbv1,
- /*xbv_info,*/
- xbv_fw,
- xbv_vers,
- xbv_vand,
- xbv_ptch,
- xbv_other
-} xbv_container;
-
-#define XBV_STACK_SIZE 6
-#define XBV_MAX_OFFS 0x7fffffff
-
-typedef struct
-{
- struct
- {
- xbv_container container;
- s32 ioffset_end;
- } s[XBV_STACK_SIZE];
- u32 ptr;
-} xbv_stack_t;
-
-static s32 read_tag(card_t *card, ct_t *ct, tag_t *tag);
-static s32 read_bytes(card_t *card, ct_t *ct, void *buf, u32 len);
-static s32 read_uint(card_t *card, ct_t *ct, u32 *u, u32 len);
-static s32 xbv_check(xbv1_t *fwinfo, const xbv_stack_t *stack,
- xbv_mode new_mode, xbv_container old_cont);
-static s32 xbv_push(xbv1_t *fwinfo, xbv_stack_t *stack,
- xbv_mode new_mode, xbv_container old_cont,
- xbv_container new_cont, u32 ioff);
-
-static u32 write_uint16(void *buf, const u32 offset,
- const u16 val);
-static u32 write_uint32(void *buf, const u32 offset,
- const u32 val);
-static u32 write_bytes(void *buf, const u32 offset,
- const u8 *data, const u32 len);
-static u32 write_tag(void *buf, const u32 offset,
- const char *tag_str);
-static u32 write_chunk(void *buf, const u32 offset,
- const char *tag_str,
- const u32 payload_len);
-static u16 calc_checksum(void *buf, const u32 offset,
- const u32 bytes_len);
-static u32 calc_patch_size(const xbv1_t *fwinfo);
-
-static u32 write_xbv_header(void *buf, const u32 offset,
- const u32 file_payload_length);
-static u32 write_ptch_header(void *buf, const u32 offset,
- const u32 fw_id);
-static u32 write_patchcmd(void *buf, const u32 offset,
- const u32 dst_genaddr, const u16 len);
-static u32 write_reset_ptdl(void *buf, const u32 offset,
- const xbv1_t *fwinfo, u32 fw_id);
-static u32 write_fwdl_to_ptdl(void *buf, const u32 offset,
- fwreadfn_t readfn, const struct FWDL *fwdl,
- const void *fw_buf, const u32 fw_id,
- void *rdbuf);
-
-/*
- * ---------------------------------------------------------------------------
- * parse_xbv1
- *
- * Scan the firmware file to find the TLVs we are interested in.
- * Actions performed:
- * - check we support the file format version in VERF
- * Store these TLVs if we have a firmware image:
- * - SLTP Symbol Lookup Table Pointer
- * - FWDL firmware download segments
- * - FWOL firmware overlay segment
- * - VMEQ Register probe tests to verify matching h/w
- * Store these TLVs if we have a patch file:
- * - FWID the firmware build ID that this file patches
- * - PTDL The actual patches
- *
- * The structure pointed to by fwinfo is cleared and
- * 'fwinfo->mode' is set to 'unknown'. The 'fwinfo->mode'
- * variable is set to 'firmware' or 'patch' once we know which
- * sort of XBV file we have.
- *
- * Arguments:
- * readfn Pointer to function to call to read from the file.
- * dlpriv Opaque pointer arg to pass to readfn.
- * fwinfo Pointer to fwinfo struct to fill in.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, CSR error code on failure
- * ---------------------------------------------------------------------------
- */
-CsrResult xbv1_parse(card_t *card, fwreadfn_t readfn, void *dlpriv, xbv1_t *fwinfo)
-{
- ct_t ct;
- tag_t tag;
- xbv_stack_t stack;
-
- ct.dlpriv = dlpriv;
- ct.ioffset = 0;
- ct.iread = readfn;
-
- memset(fwinfo, 0, sizeof(xbv1_t));
- fwinfo->mode = xbv_unknown;
-
- /* File must start with XBV1 triplet */
- if (read_tag(card, &ct, &tag) <= 0)
- {
- unifi_error(NULL, "File is not UniFi firmware\n");
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- DBG_TAG(tag.t_name);
-
- if (!TAG_EQ(tag.t_name, "XBV1"))
- {
- unifi_error(NULL, "File is not UniFi firmware (%s)\n", tag.t_name);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- stack.ptr = 0;
- stack.s[stack.ptr].container = xbv_xbv1;
- stack.s[stack.ptr].ioffset_end = XBV_MAX_OFFS;
-
- /* Now scan the file */
- while (1)
- {
- s32 n;
-
- n = read_tag(card, &ct, &tag);
- if (n < 0)
- {
- unifi_error(NULL, "No tag\n");
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- if (n == 0)
- {
- /* End of file */
- break;
- }
-
- DBG_TAG(tag.t_name);
-
- /* File format version */
- if (TAG_EQ(tag.t_name, "VERF"))
- {
- u32 version;
-
- if (xbv_check(fwinfo, &stack, xbv_unknown, xbv_xbv1) ||
- (tag.t_len != 2) ||
- read_uint(card, &ct, &version, 2))
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- if (version != 0)
- {
- unifi_error(NULL, "Unsupported firmware file version: %d.%d\n",
- version >> 8, version & 0xFF);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- }
- else if (TAG_EQ(tag.t_name, "LIST"))
- {
- char name[4];
- u32 list_end;
-
- list_end = ct.ioffset + tag.t_len;
-
- if (read_bytes(card, &ct, name, 4))
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- DBG_TAG(name);
- if (TAG_EQ(name, "FW "))
- {
- if (xbv_push(fwinfo, &stack, xbv_firmware, xbv_xbv1, xbv_fw, list_end))
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- }
- else if (TAG_EQ(name, "VERS"))
- {
- if (xbv_push(fwinfo, &stack, xbv_firmware, xbv_fw, xbv_vers, list_end) ||
- (fwinfo->vers.num_vand != 0))
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- }
- else if (TAG_EQ(name, "VAND"))
- {
- struct VAND *vand;
-
- if (xbv_push(fwinfo, &stack, xbv_firmware, xbv_vers, xbv_vand, list_end) ||
- (fwinfo->vers.num_vand >= MAX_VAND))
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- /* Get a new VAND */
- vand = fwinfo->vand + fwinfo->vers.num_vand++;
-
- /* Fill it in */
- vand->first = fwinfo->num_vmeq;
- vand->count = 0;
- }
- else if (TAG_EQ(name, "PTCH"))
- {
- if (xbv_push(fwinfo, &stack, xbv_patch, xbv_xbv1, xbv_ptch, list_end))
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- }
- else
- {
- /* Skip over any other lists. We dont bother to push
- * the new list type now as we would only pop it at
- * the end of the outer loop. */
- ct.ioffset += tag.t_len - 4;
- }
- }
- else if (TAG_EQ(tag.t_name, "SLTP"))
- {
- u32 addr;
-
- if (xbv_check(fwinfo, &stack, xbv_firmware, xbv_fw) ||
- (tag.t_len != 4) ||
- (fwinfo->slut_addr != 0) ||
- read_uint(card, &ct, &addr, 4))
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- fwinfo->slut_addr = addr;
- }
- else if (TAG_EQ(tag.t_name, "FWDL"))
- {
- u32 addr;
- struct FWDL *fwdl;
-
- if (xbv_check(fwinfo, &stack, xbv_firmware, xbv_fw) ||
- (fwinfo->num_fwdl >= MAX_FWDL) ||
- (read_uint(card, &ct, &addr, 4)))
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- fwdl = fwinfo->fwdl + fwinfo->num_fwdl++;
-
- fwdl->dl_size = tag.t_len - 4;
- fwdl->dl_addr = addr;
- fwdl->dl_offset = ct.ioffset;
-
- ct.ioffset += tag.t_len - 4;
- }
- else if (TAG_EQ(tag.t_name, "FWOV"))
- {
- if (xbv_check(fwinfo, &stack, xbv_firmware, xbv_fw) ||
- (fwinfo->fwov.dl_size != 0) ||
- (fwinfo->fwov.dl_offset != 0))
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- fwinfo->fwov.dl_size = tag.t_len;
- fwinfo->fwov.dl_offset = ct.ioffset;
-
- ct.ioffset += tag.t_len;
- }
- else if (TAG_EQ(tag.t_name, "VMEQ"))
- {
- u32 temp[3];
- struct VAND *vand;
- struct VMEQ *vmeq;
-
- if (xbv_check(fwinfo, &stack, xbv_firmware, xbv_vand) ||
- (fwinfo->num_vmeq >= MAX_VMEQ) ||
- (fwinfo->vers.num_vand == 0) ||
- (tag.t_len != 8) ||
- read_uint(card, &ct, &temp[0], 4) ||
- read_uint(card, &ct, &temp[1], 2) ||
- read_uint(card, &ct, &temp[2], 2))
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- /* Get the last VAND */
- vand = fwinfo->vand + (fwinfo->vers.num_vand - 1);
-
- /* Get a new VMEQ */
- vmeq = fwinfo->vmeq + fwinfo->num_vmeq++;
-
- /* Note that this VAND contains another VMEQ */
- vand->count++;
-
- /* Fill in the VMEQ */
- vmeq->addr = temp[0];
- vmeq->mask = (u16)temp[1];
- vmeq->value = (u16)temp[2];
- }
- else if (TAG_EQ(tag.t_name, "FWID"))
- {
- u32 build_id;
-
- if (xbv_check(fwinfo, &stack, xbv_patch, xbv_ptch) ||
- (tag.t_len != 4) ||
- (fwinfo->build_id != 0) ||
- read_uint(card, &ct, &build_id, 4))
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- fwinfo->build_id = build_id;
- }
- else if (TAG_EQ(tag.t_name, "PTDL"))
- {
- struct PTDL *ptdl;
-
- if (xbv_check(fwinfo, &stack, xbv_patch, xbv_ptch) ||
- (fwinfo->num_ptdl >= MAX_PTDL))
- {
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- /* Allocate a new PTDL */
- ptdl = fwinfo->ptdl + fwinfo->num_ptdl++;
-
- ptdl->dl_size = tag.t_len;
- ptdl->dl_offset = ct.ioffset;
-
- ct.ioffset += tag.t_len;
- }
- else
- {
- /*
- * If we get here it is a tag we are not interested in,
- * just skip over it.
- */
- ct.ioffset += tag.t_len;
- }
-
- /* Check to see if we are at the end of the currently stacked
- * segment. We could finish more than one list at a time. */
- while (ct.ioffset >= stack.s[stack.ptr].ioffset_end)
- {
- if (ct.ioffset > stack.s[stack.ptr].ioffset_end)
- {
- unifi_error(NULL,
- "XBV file has overrun stack'd segment %d (%d > %d)\n",
- stack.ptr, ct.ioffset, stack.s[stack.ptr].ioffset_end);
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- if (stack.ptr <= 0)
- {
- unifi_error(NULL, "XBV file has underrun stack pointer\n");
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
- stack.ptr--;
- }
- }
-
- if (stack.ptr != 0)
- {
- unifi_error(NULL, "Last list of XBV is not complete.\n");
- return CSR_WIFI_HIP_RESULT_INVALID_VALUE;
- }
-
- return CSR_RESULT_SUCCESS;
-} /* xbv1_parse() */
-
-
-/* Check the the XBV file is of a consistant sort (either firmware or
- * patch) and that we are in the correct containing list type. */
-static s32 xbv_check(xbv1_t *fwinfo, const xbv_stack_t *stack,
- xbv_mode new_mode, xbv_container old_cont)
-{
- /* If the new file mode is unknown the current packet could be in
- * either (any) type of XBV file, and we cant make a decission at
- * this time. */
- if (new_mode != xbv_unknown)
- {
- if (fwinfo->mode == xbv_unknown)
- {
- fwinfo->mode = new_mode;
- }
- else if (fwinfo->mode != new_mode)
- {
- return -1;
- }
- }
- /* If the current stack top doesn't match what we expect then the
- * file is corrupt. */
- if (stack->s[stack->ptr].container != old_cont)
- {
- return -1;
- }
- return 0;
-}
-
-
-/* Make checks as above and then enter a new list */
-static s32 xbv_push(xbv1_t *fwinfo, xbv_stack_t *stack,
- xbv_mode new_mode, xbv_container old_cont,
- xbv_container new_cont, u32 new_ioff)
-{
- if (xbv_check(fwinfo, stack, new_mode, old_cont))
- {
- return -1;
- }
-
- /* Check that our stack won't overflow. */
- if (stack->ptr >= (XBV_STACK_SIZE - 1))
- {
- return -1;
- }
-
- /* Add the new list element to the top of the stack. */
- stack->ptr++;
- stack->s[stack->ptr].container = new_cont;
- stack->s[stack->ptr].ioffset_end = new_ioff;
-
- return 0;
-}
-
-
-static u32 xbv2uint(u8 *ptr, s32 len)
-{
- u32 u = 0;
- s16 i;
-
- for (i = 0; i < len; i++)
- {
- u32 b;
- b = ptr[i];
- u += b << (i * 8);
- }
- return u;
-}
-
-
-static s32 read_tag(card_t *card, ct_t *ct, tag_t *tag)
-{
- u8 buf[8];
- s32 n;
-
- n = (*ct->iread)(card->ospriv, ct->dlpriv, ct->ioffset, buf, 8);
- if (n <= 0)
- {
- return n;
- }
-
- /* read the tag and length */
- if (n != 8)
- {
- return -1;
- }
-
- /* get section tag */
- memcpy(tag->t_name, buf, 4);
-
- /* get section length */
- tag->t_len = xbv2uint(buf + 4, 4);
-
- ct->ioffset += 8;
-
- return 8;
-} /* read_tag() */
-
-
-static s32 read_bytes(card_t *card, ct_t *ct, void *buf, u32 len)
-{
- /* read the tag value */
- if ((*ct->iread)(card->ospriv, ct->dlpriv, ct->ioffset, buf, len) != (s32)len)
- {
- return -1;
- }
-
- ct->ioffset += len;
-
- return 0;
-} /* read_bytes() */
-
-
-static s32 read_uint(card_t *card, ct_t *ct, u32 *u, u32 len)
-{
- u8 buf[4];
-
- /* Integer cannot be more than 4 bytes */
- if (len > 4)
- {
- return -1;
- }
-
- if (read_bytes(card, ct, buf, len))
- {
- return -1;
- }
-
- *u = xbv2uint(buf, len);
-
- return 0;
-} /* read_uint() */
-
-
-static u32 write_uint16(void *buf, const u32 offset, const u16 val)
-{
- u8 *dst = (u8 *)buf + offset;
- *dst++ = (u8)(val & 0xff); /* LSB first */
- *dst = (u8)(val >> 8);
- return sizeof(u16);
-}
-
-
-static u32 write_uint32(void *buf, const u32 offset, const u32 val)
-{
- (void)write_uint16(buf, offset + 0, (u16)(val & 0xffff));
- (void)write_uint16(buf, offset + 2, (u16)(val >> 16));
- return sizeof(u32);
-}
-
-
-static u32 write_bytes(void *buf, const u32 offset, const u8 *data, const u32 len)
-{
- u32 i;
- u8 *dst = (u8 *)buf + offset;
-
- for (i = 0; i < len; i++)
- {
- *dst++ = *((u8 *)data + i);
- }
- return len;
-}
-
-
-static u32 write_tag(void *buf, const u32 offset, const char *tag_str)
-{
- u8 *dst = (u8 *)buf + offset;
- memcpy(dst, tag_str, 4);
- return 4;
-}
-
-
-static u32 write_chunk(void *buf, const u32 offset, const char *tag_str, const u32 payload_len)
-{
- u32 written = 0;
- written += write_tag(buf, offset, tag_str);
- written += write_uint32(buf, written + offset, (u32)payload_len);
-
- return written;
-}
-
-
-static u16 calc_checksum(void *buf, const u32 offset, const u32 bytes_len)
-{
- u32 i;
- u8 *src = (u8 *)buf + offset;
- u16 sum = 0;
- u16 val;
-
- for (i = 0; i < bytes_len / 2; i++)
- {
- /* Contents copied to file is LE, host might not be */
- val = (u16) * src++; /* LSB */
- val += (u16)(*src++) << 8; /* MSB */
- sum += val;
- }
-
- /* Total of uint16s in the stream plus the stored check value
- * should equal STREAM_CHECKSUM when decoded.
- */
- return (STREAM_CHECKSUM - sum);
-}
-
-
-#define PTDL_RESET_DATA_SIZE 20 /* Size of reset vectors PTDL */
-
-static u32 calc_patch_size(const xbv1_t *fwinfo)
-{
- s16 i;
- u32 size = 0;
-
- /*
- * Work out how big an equivalent patch format file must be for this image.
- * This only needs to be approximate, so long as it's large enough.
- */
- if (fwinfo->mode != xbv_firmware)
- {
- return 0;
- }
-
- /* Payload (which will get put into a series of PTDLs) */
- for (i = 0; i < fwinfo->num_fwdl; i++)
- {
- size += fwinfo->fwdl[i].dl_size;
- }
-
- /* Another PTDL at the end containing reset vectors */
- size += PTDL_RESET_DATA_SIZE;
-
- /* PTDL headers. Add one for remainder, one for reset vectors */
- size += ((fwinfo->num_fwdl / PTDL_MAX_SIZE) + 2) * PTDL_HDR_SIZE;
-
- /* Another 1K sufficient to cover miscellaneous headers */
- size += 1024;
-
- return size;
-}
-
-
-static u32 write_xbv_header(void *buf, const u32 offset, const u32 file_payload_length)
-{
- u32 written = 0;
-
- /* The length value given to the XBV chunk is the length of all subsequent
- * contents of the file, excluding the 8 byte size of the XBV1 header itself
- * (The added 6 bytes thus accounts for the size of the VERF)
- */
- written += write_chunk(buf, offset + written, (char *)"XBV1", file_payload_length + 6);
-
- written += write_chunk(buf, offset + written, (char *)"VERF", 2);
- written += write_uint16(buf, offset + written, 0); /* File version */
-
- return written;
-}
-
-
-static u32 write_ptch_header(void *buf, const u32 offset, const u32 fw_id)
-{
- u32 written = 0;
-
- /* LIST is written with a zero length, to be updated later */
- written += write_chunk(buf, offset + written, (char *)"LIST", 0);
- written += write_tag(buf, offset + written, (char *)"PTCH"); /* List type */
-
- written += write_chunk(buf, offset + written, (char *)"FWID", 4);
- written += write_uint32(buf, offset + written, fw_id);
-
-
- return written;
-}
-
-
-#define UF_REGION_PHY 1
-#define UF_REGION_MAC 2
-#define UF_MEMPUT_MAC 0x0000
-#define UF_MEMPUT_PHY 0x1000
-
-static u32 write_patchcmd(void *buf, const u32 offset, const u32 dst_genaddr, const u16 len)
-{
- u32 written = 0;
- u32 region = (dst_genaddr >> 28);
- u16 cmd_and_len = UF_MEMPUT_MAC;
-
- if (region == UF_REGION_PHY)
- {
- cmd_and_len = UF_MEMPUT_PHY;
- }
- else if (region != UF_REGION_MAC)
- {
- return 0; /* invalid */
- }
-
- /* Write the command and data length */
- cmd_and_len |= len;
- written += write_uint16(buf, offset + written, cmd_and_len);
-
- /* Write the destination generic address */
- written += write_uint16(buf, offset + written, (u16)(dst_genaddr >> 16));
- written += write_uint16(buf, offset + written, (u16)(dst_genaddr & 0xffff));
-
- /* The data payload should be appended to the command */
- return written;
-}
-
-
-static u32 write_fwdl_to_ptdl(void *buf, const u32 offset, fwreadfn_t readfn,
- const struct FWDL *fwdl, const void *dlpriv,
- const u32 fw_id, void *fw_buf)
-{
- u32 written = 0;
- s16 chunks = 0;
- u32 left = fwdl->dl_size; /* Bytes left in this fwdl */
- u32 dl_addr = fwdl->dl_addr; /* Target address of fwdl image on XAP */
- u32 dl_offs = fwdl->dl_offset; /* Offset of fwdl image data in source */
- u16 csum;
- u32 csum_start_offs; /* first offset to include in checksum */
- u32 sec_data_len; /* section data byte count */
- u32 sec_len; /* section data + header byte count */
-
- /* FWDL maps to one or more PTDLs, as max size for a PTDL is 1K words */
- while (left)
- {
- /* Calculate amount to be transferred */
- sec_data_len = min_t(u32, left, PTDL_MAX_SIZE - PTDL_HDR_SIZE);
- sec_len = sec_data_len + PTDL_HDR_SIZE;
-
- /* Write PTDL header + entire PTDL size */
- written += write_chunk(buf, offset + written, (char *)"PTDL", sec_len);
- /* bug digest implies 4 bytes of padding here, but that seems wrong */
-
- /* Checksum starts here */
- csum_start_offs = offset + written;
-
- /* Patch-chunk header: fw_id. Note that this is in XAP word order */
- written += write_uint16(buf, offset + written, (u16)(fw_id >> 16));
- written += write_uint16(buf, offset + written, (u16)(fw_id & 0xffff));
-
- /* Patch-chunk header: section length in uint16s */
- written += write_uint16(buf, offset + written, (u16)(sec_len / 2));
-
-
- /* Write the appropriate patch command for the data's destination ptr */
- written += write_patchcmd(buf, offset + written, dl_addr, (u16)(sec_data_len / 2));
-
- /* Write the data itself (limited to the max chunk length) */
- if (readfn(NULL, (void *)dlpriv, dl_offs, fw_buf, sec_data_len) < 0)
- {
- return 0;
- }
-
- written += write_bytes(buf,
- offset + written,
- fw_buf,
- sec_data_len);
-
- /* u16 checksum calculated over data written */
- csum = calc_checksum(buf, csum_start_offs, written - (csum_start_offs - offset));
- written += write_uint16(buf, offset + written, csum);
-
- left -= sec_data_len;
- dl_addr += sec_data_len;
- dl_offs += sec_data_len;
- chunks++;
- }
-
- return written;
-}
-
-
-#define SEC_CMD_LEN ((4 + 2) * 2) /* sizeof(cmd, vector) per XAP */
-#define PTDL_VEC_HDR_SIZE (4 + 2 + 2) /* sizeof(fw_id, sec_len, csum) */
-#define UF_MAC_START_VEC 0x00c00000 /* Start address of image on MAC */
-#define UF_PHY_START_VEC 0x00c00000 /* Start address of image on PHY */
-#define UF_MAC_START_CMD 0x6000 /* MAC "Set start address" command */
-#define UF_PHY_START_CMD 0x7000 /* PHY "Set start address" command */
-
-static u32 write_reset_ptdl(void *buf, const u32 offset, const xbv1_t *fwinfo, u32 fw_id)
-{
- u32 written = 0;
- u16 csum;
- u32 csum_start_offs; /* first offset to include in checksum */
- u32 sec_len; /* section data + header byte count */
-
- sec_len = SEC_CMD_LEN + PTDL_VEC_HDR_SIZE; /* Total section byte length */
-
- /* Write PTDL header + entire PTDL size */
- written += write_chunk(buf, offset + written, (char *)"PTDL", sec_len);
-
- /* Checksum starts here */
- csum_start_offs = offset + written;
-
- /* Patch-chunk header: fw_id. Note that this is in XAP word order */
- written += write_uint16(buf, offset + written, (u16)(fw_id >> 16));
- written += write_uint16(buf, offset + written, (u16)(fw_id & 0xffff));
-
- /* Patch-chunk header: section length in uint16s */
- written += write_uint16(buf, offset + written, (u16)(sec_len / 2));
-
- /*
- * Restart addresses to be executed on subsequent loader restart command.
- */
-
- /* Setup the MAC start address, note word ordering */
- written += write_uint16(buf, offset + written, UF_MAC_START_CMD);
- written += write_uint16(buf, offset + written, (UF_MAC_START_VEC >> 16));
- written += write_uint16(buf, offset + written, (UF_MAC_START_VEC & 0xffff));
-
- /* Setup the PHY start address, note word ordering */
- written += write_uint16(buf, offset + written, UF_PHY_START_CMD);
- written += write_uint16(buf, offset + written, (UF_PHY_START_VEC >> 16));
- written += write_uint16(buf, offset + written, (UF_PHY_START_VEC & 0xffff));
-
- /* u16 checksum calculated over data written */
- csum = calc_checksum(buf, csum_start_offs, written - (csum_start_offs - offset));
- written += write_uint16(buf, offset + written, csum);
-
- return written;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * read_slut
- *
- * desc
- *
- * Arguments:
- * readfn Pointer to function to call to read from the file.
- * dlpriv Opaque pointer arg to pass to readfn.
- * addr Offset into firmware image of SLUT.
- * fwinfo Pointer to fwinfo struct to fill in.
- *
- * Returns:
- * Number of SLUT entries in the f/w, or -1 if the image was corrupt.
- * ---------------------------------------------------------------------------
- */
-s32 xbv1_read_slut(card_t *card, fwreadfn_t readfn, void *dlpriv, xbv1_t *fwinfo,
- symbol_t *slut, u32 slut_len)
-{
- s16 i;
- s32 offset;
- u32 magic;
- u32 count = 0;
- ct_t ct;
-
- if (fwinfo->mode != xbv_firmware)
- {
- return -1;
- }
-
- /* Find the d/l segment containing the SLUT */
- /* This relies on the SLUT being entirely contained in one segment */
- offset = -1;
- for (i = 0; i < fwinfo->num_fwdl; i++)
- {
- if ((fwinfo->slut_addr >= fwinfo->fwdl[i].dl_addr) &&
- (fwinfo->slut_addr < (fwinfo->fwdl[i].dl_addr + fwinfo->fwdl[i].dl_size)))
- {
- offset = fwinfo->fwdl[i].dl_offset +
- (fwinfo->slut_addr - fwinfo->fwdl[i].dl_addr);
- }
- }
- if (offset < 0)
- {
- return -1;
- }
-
- ct.dlpriv = dlpriv;
- ct.ioffset = offset;
- ct.iread = readfn;
-
- if (read_uint(card, &ct, &magic, 2))
- {
- return -1;
- }
- if (magic != SLUT_FINGERPRINT)
- {
- return -1;
- }
-
- while (count < slut_len)
- {
- u32 id, obj;
-
- /* Read Symbol Id */
- if (read_uint(card, &ct, &id, 2))
- {
- return -1;
- }
-
- /* Check for end of table marker */
- if (id == CSR_SLT_END)
- {
- break;
- }
-
- /* Read Symbol Value */
- if (read_uint(card, &ct, &obj, 4))
- {
- return -1;
- }
-
- slut[count].id = (u16)id;
- slut[count].obj = obj;
- count++;
- }
-
- return count;
-} /* read_slut() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * xbv_to_patch
- *
- * Convert (the relevant parts of) a firmware xbv file into a patch xbv
- *
- * Arguments:
- * card
- * fw_buf - pointer to xbv firmware image
- * fwinfo - structure describing the firmware image
- * size - pointer to location into which size of f/w is written.
- *
- * Returns:
- * Pointer to firmware image, or NULL on error. Caller must free this
- * buffer via kfree() once it's finished with.
- *
- * Notes:
- * The input fw_buf should have been checked via xbv1_parse prior to
- * calling this function, so the input image is assumed valid.
- * ---------------------------------------------------------------------------
- */
-#define PTCH_LIST_SIZE 16 /* sizeof PTCH+FWID chunk in LIST header */
-
-void* xbv_to_patch(card_t *card, fwreadfn_t readfn,
- const void *fw_buf, const xbv1_t *fwinfo, u32 *size)
-{
- void *patch_buf = NULL;
- u32 patch_buf_size;
- u32 payload_offs = 0; /* Start of XBV payload */
- s16 i;
- u32 patch_offs = 0;
- u32 list_len_offs = 0; /* Offset of PTDL LIST length parameter */
- u32 ptdl_start_offs = 0; /* Offset of first PTDL chunk */
- u32 fw_id;
- void *rdbuf;
-
- if (!fw_buf || !fwinfo || !card)
- {
- return NULL;
- }
-
- if (fwinfo->mode != xbv_firmware)
- {
- unifi_error(NULL, "Not a firmware file\n");
- return NULL;
- }
-
- /* Pre-allocate read buffer for chunk conversion */
- rdbuf = kmalloc(PTDL_MAX_SIZE, GFP_KERNEL);
- if (!rdbuf)
- {
- unifi_error(card, "Couldn't alloc conversion buffer\n");
- return NULL;
- }
-
- /* Loader requires patch file's build ID to match the running firmware's */
- fw_id = card->build_id;
-
- /* Firmware XBV1 contains VERF, optional INFO, SLUT(s), FWDL(s) */
- /* Other chunks should get skipped. */
- /* VERF should be sanity-checked against chip version */
-
- /* Patch XBV1 contains VERF, optional INFO, PTCH */
- /* PTCH contains FWID, optional INFO, PTDL(s), PTDL(start_vec) */
- /* Each FWDL is split into PTDLs (each is 1024 XAP words max) */
- /* Each PTDL contains running ROM f/w version, and checksum */
- /* MAC/PHY reset addresses (known) are added into a final PTDL */
-
- /* The input image has already been parsed, and loaded into fwinfo, so we
- * can use that to build the output image
- */
- patch_buf_size = calc_patch_size(fwinfo);
-
- patch_buf = kmalloc(patch_buf_size, GFP_KERNEL);
- if (!patch_buf)
- {
- kfree(rdbuf);
- unifi_error(NULL, "Can't malloc buffer for patch conversion\n");
- return NULL;
- }
-
- memset(patch_buf, 0xdd, patch_buf_size);
-
- /* Write XBV + VERF headers */
- patch_offs += write_xbv_header(patch_buf, patch_offs, 0);
- payload_offs = patch_offs;
-
- /* Write patch (LIST) header */
- list_len_offs = patch_offs + 4; /* Save LIST.length offset for later update */
- patch_offs += write_ptch_header(patch_buf, patch_offs, fw_id);
-
- /* Save start offset of the PTDL chunks */
- ptdl_start_offs = patch_offs;
-
- /* Write LIST of firmware PTDL blocks */
- for (i = 0; i < fwinfo->num_fwdl; i++)
- {
- patch_offs += write_fwdl_to_ptdl(patch_buf,
- patch_offs,
- readfn,
- &fwinfo->fwdl[i],
- fw_buf,
- fw_id,
- rdbuf);
- }
-
- /* Write restart-vector PTDL last */
- patch_offs += write_reset_ptdl(patch_buf, patch_offs, fwinfo, fw_id);
-
- /* Now the length is known, update the LIST.length */
- (void)write_uint32(patch_buf, list_len_offs,
- (patch_offs - ptdl_start_offs) + PTCH_LIST_SIZE);
-
- /* Re write XBV headers just to fill in the correct file size */
- (void)write_xbv_header(patch_buf, 0, (patch_offs - payload_offs));
-
- unifi_trace(card->ospriv, UDBG1, "XBV:PTCH size %u, fw_id %u\n",
- patch_offs, fw_id);
- if (size)
- {
- *size = patch_offs;
- }
- kfree(rdbuf);
-
- return patch_buf;
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_hip_xbv.h b/drivers/staging/csr/csr_wifi_hip_xbv.h
deleted file mode 100644
index 3c507235323d..000000000000
--- a/drivers/staging/csr/csr_wifi_hip_xbv.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/*
- * ---------------------------------------------------------------------------
- * FILE: csr_wifi_hip_xbv.h
- *
- * PURPOSE:
- * Definitions and declarations for code to read XBV files - the UniFi
- * firmware download file format.
- *
- * ---------------------------------------------------------------------------
- */
-#ifndef __XBV_H__
-#define __XBV_H__
-
-#ifndef CSR_WIFI_XBV_TEST
-/* Driver includes */
-#include "csr_wifi_hip_unifi.h"
-#endif
-
-
-struct VMEQ
-{
- u32 addr;
- u16 mask;
- u16 value;
-};
-
-struct VAND
-{
- u32 first;
- u32 count;
-};
-
-struct VERS
-{
- u32 num_vand;
-};
-
-struct FWDL
-{
- u32 dl_addr;
- u32 dl_size;
- u32 dl_offset;
-};
-
-struct FWOV
-{
- u32 dl_size;
- u32 dl_offset;
-};
-
-struct PTDL
-{
- u32 dl_size;
- u32 dl_offset;
-};
-
-#define MAX_VMEQ 64
-#define MAX_VAND 64
-#define MAX_FWDL 256
-#define MAX_PTDL 256
-
-/* An XBV1 file can either contain firmware or patches (at the
- * moment). The 'mode' member of the xbv1_t structure tells us which
- * one is the case. */
-typedef enum
-{
- xbv_unknown,
- xbv_firmware,
- xbv_patch
-} xbv_mode;
-
-typedef struct
-{
- xbv_mode mode;
-
- /* Parts of a Firmware XBV1 */
-
- struct VMEQ vmeq[MAX_VMEQ];
- u32 num_vmeq;
- struct VAND vand[MAX_VAND];
- struct VERS vers;
-
- u32 slut_addr;
-
- /* F/W download image, possibly more than one part */
- struct FWDL fwdl[MAX_FWDL];
- s16 num_fwdl;
-
- /* F/W overlay image, add r not used */
- struct FWOV fwov;
-
- /* Parts of a Patch XBV1 */
-
- u32 build_id;
-
- struct PTDL ptdl[MAX_PTDL];
- s16 num_ptdl;
-} xbv1_t;
-
-
-typedef s32 (*fwreadfn_t)(void *ospriv, void *dlpriv, u32 offset, void *buf, u32 len);
-
-CsrResult xbv1_parse(card_t *card, fwreadfn_t readfn, void *dlpriv, xbv1_t *fwinfo);
-s32 xbv1_read_slut(card_t *card, fwreadfn_t readfn, void *dlpriv, xbv1_t *fwinfo,
- symbol_t *slut, u32 slut_len);
-void* xbv_to_patch(card_t *card, fwreadfn_t readfn, const void *fw_buf, const xbv1_t *fwinfo,
- u32 *size);
-
-#endif /* __XBV_H__ */
diff --git a/drivers/staging/csr/csr_wifi_hostio_prim.h b/drivers/staging/csr/csr_wifi_hostio_prim.h
deleted file mode 100644
index cfb3e272e359..000000000000
--- a/drivers/staging/csr/csr_wifi_hostio_prim.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-
-#ifndef CSR_WIFI_HOSTIO_H
-#define CSR_WIFI_HOSTIO_H
-
-#define CSR_WIFI_HOSTIO_PRIM 0x0453
-
-#endif /* CSR_WIFI_HOSTIO_H */
-
diff --git a/drivers/staging/csr/csr_wifi_lib.h b/drivers/staging/csr/csr_wifi_lib.h
deleted file mode 100644
index 5fde0efb5dca..000000000000
--- a/drivers/staging/csr/csr_wifi_lib.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-#ifndef CSR_WIFI_LIB_H__
-#define CSR_WIFI_LIB_H__
-
-#include "csr_wifi_fsm_event.h"
-
-/*----------------------------------------------------------------------------*
- * CsrWifiFsmEventInit
- *
- * DESCRIPTION
- * Macro to initialise the members of a CsrWifiFsmEvent.
- *----------------------------------------------------------------------------*/
-#define CsrWifiFsmEventInit(evt, p_primtype, p_msgtype, p_dst, p_src) \
- (evt)->primtype = p_primtype; \
- (evt)->type = p_msgtype; \
- (evt)->destination = p_dst; \
- (evt)->source = p_src
-
-
-/*----------------------------------------------------------------------------*
- * CsrWifiEvent_struct
- *
- * DESCRIPTION
- * Generic message creator.
- * Allocates and fills in a message with the signature CsrWifiEvent
- *
- *----------------------------------------------------------------------------*/
-CsrWifiFsmEvent* CsrWifiEvent_struct(u16 primtype, u16 msgtype, CsrSchedQid dst, CsrSchedQid src);
-
-typedef struct
-{
- CsrWifiFsmEvent common;
- u8 value;
-} CsrWifiEventCsrUint8;
-
-/*----------------------------------------------------------------------------*
- * CsrWifiEventCsrUint8_struct
- *
- * DESCRIPTION
- * Generic message creator.
- * Allocates and fills in a message with the signature CsrWifiEventCsrUint8
- *
- *----------------------------------------------------------------------------*/
-CsrWifiEventCsrUint8* CsrWifiEventCsrUint8_struct(u16 primtype, u16 msgtype, CsrSchedQid dst, CsrSchedQid src, u8 value);
-
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 value;
-} CsrWifiEventCsrUint16;
-
-/*----------------------------------------------------------------------------*
- * CsrWifiEventCsrUint16_struct
- *
- * DESCRIPTION
- * Generic message creator.
- * Allocates and fills in a message with the signature CsrWifiEventCsrUint16
- *
- *----------------------------------------------------------------------------*/
-CsrWifiEventCsrUint16* CsrWifiEventCsrUint16_struct(u16 primtype, u16 msgtype, CsrSchedQid dst, CsrSchedQid src, u16 value);
-
-typedef struct
-{
- CsrWifiFsmEvent common;
- u32 value;
-} CsrWifiEventCsrUint32;
-
-/*----------------------------------------------------------------------------*
- * CsrWifiEventCsrUint32_struct
- *
- * DESCRIPTION
- * Generic message creator.
- * Allocates and fills in a message with the signature CsrWifiEventCsrUint32
- *
- *----------------------------------------------------------------------------*/
-CsrWifiEventCsrUint32* CsrWifiEventCsrUint32_struct(u16 primtype, u16 msgtype, CsrSchedQid dst, CsrSchedQid src, u32 value);
-
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 value16;
- u8 value8;
-} CsrWifiEventCsrUint16CsrUint8;
-
-/*----------------------------------------------------------------------------*
- * CsrWifiEventCsrUint16CsrUint8_struct
- *
- * DESCRIPTION
- * Generic message creator.
- * Allocates and fills in a message with the signature CsrWifiEventCsrUint16CsrUint8
- *
- *----------------------------------------------------------------------------*/
-CsrWifiEventCsrUint16CsrUint8* CsrWifiEventCsrUint16CsrUint8_struct(u16 primtype, u16 msgtype, CsrSchedQid dst, CsrSchedQid src, u16 value16, u8 value8);
-
-#endif /* CSR_WIFI_LIB_H__ */
diff --git a/drivers/staging/csr/csr_wifi_msgconv.h b/drivers/staging/csr/csr_wifi_msgconv.h
deleted file mode 100644
index f8b402947a09..000000000000
--- a/drivers/staging/csr/csr_wifi_msgconv.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#ifndef CSR_WIFI_MSGCONV_H__
-#define CSR_WIFI_MSGCONV_H__
-
-#include "csr_prim_defs.h"
-#include "csr_sched.h"
-
-void CsrUint16SerBigEndian(u8 *ptr, size_t *len, u16 v);
-void CsrUint24SerBigEndian(u8 *ptr, size_t *len, u32 v);
-void CsrUint32SerBigEndian(u8 *ptr, size_t *len, u32 v);
-
-void CsrUint16DesBigEndian(u16 *v, u8 *buffer, size_t *offset);
-void CsrUint24DesBigEndian(u32 *v, u8 *buffer, size_t *offset);
-void CsrUint32DesBigEndian(u32 *v, u8 *buffer, size_t *offset);
-
-void CsrUint24Ser(u8 *ptr, size_t *len, u32 v);
-void CsrUint24Des(u32 *v, u8 *buffer, size_t *offset);
-
-
-size_t CsrWifiEventSizeof(void *msg);
-u8* CsrWifiEventSer(u8 *ptr, size_t *len, void *msg);
-void* CsrWifiEventDes(u8 *buffer, size_t length);
-
-size_t CsrWifiEventCsrUint8Sizeof(void *msg);
-u8* CsrWifiEventCsrUint8Ser(u8 *ptr, size_t *len, void *msg);
-void* CsrWifiEventCsrUint8Des(u8 *buffer, size_t length);
-
-size_t CsrWifiEventCsrUint16Sizeof(void *msg);
-u8* CsrWifiEventCsrUint16Ser(u8 *ptr, size_t *len, void *msg);
-void* CsrWifiEventCsrUint16Des(u8 *buffer, size_t length);
-
-size_t CsrWifiEventCsrUint32Sizeof(void *msg);
-u8* CsrWifiEventCsrUint32Ser(u8 *ptr, size_t *len, void *msg);
-void* CsrWifiEventCsrUint32Des(u8 *buffer, size_t length);
-
-size_t CsrWifiEventCsrUint16CsrUint8Sizeof(void *msg);
-u8* CsrWifiEventCsrUint16CsrUint8Ser(u8 *ptr, size_t *len, void *msg);
-void* CsrWifiEventCsrUint16CsrUint8Des(u8 *buffer, size_t length);
-
-#endif /* CSR_WIFI_MSGCONV_H__ */
diff --git a/drivers/staging/csr/csr_wifi_nme_ap_converter_init.c b/drivers/staging/csr/csr_wifi_nme_ap_converter_init.c
deleted file mode 100644
index 0689d6f1cab1..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_ap_converter_init.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#include "csr_msgconv.h"
-#include "csr_macro.h"
-
-#ifdef CSR_WIFI_NME_ENABLE
-#ifdef CSR_WIFI_AP_ENABLE
-
-#ifdef CSR_LOG_ENABLE
-#include "csr_log.h"
-#endif
-
-#ifndef EXCLUDE_CSR_WIFI_NME_AP_MODULE
-#include "csr_wifi_nme_ap_serialize.h"
-#include "csr_wifi_nme_ap_prim.h"
-
-static CsrMsgConvMsgEntry csrwifinmeap_conv_lut[] = {
- { CSR_WIFI_NME_AP_CONFIG_SET_REQ, CsrWifiNmeApConfigSetReqSizeof, CsrWifiNmeApConfigSetReqSer, CsrWifiNmeApConfigSetReqDes, CsrWifiNmeApConfigSetReqSerFree },
- { CSR_WIFI_NME_AP_WPS_REGISTER_REQ, CsrWifiNmeApWpsRegisterReqSizeof, CsrWifiNmeApWpsRegisterReqSer, CsrWifiNmeApWpsRegisterReqDes, CsrWifiNmeApWpsRegisterReqSerFree },
- { CSR_WIFI_NME_AP_START_REQ, CsrWifiNmeApStartReqSizeof, CsrWifiNmeApStartReqSer, CsrWifiNmeApStartReqDes, CsrWifiNmeApStartReqSerFree },
- { CSR_WIFI_NME_AP_STOP_REQ, CsrWifiNmeApStopReqSizeof, CsrWifiNmeApStopReqSer, CsrWifiNmeApStopReqDes, CsrWifiNmeApStopReqSerFree },
- { CSR_WIFI_NME_AP_WMM_PARAM_UPDATE_REQ, CsrWifiNmeApWmmParamUpdateReqSizeof, CsrWifiNmeApWmmParamUpdateReqSer, CsrWifiNmeApWmmParamUpdateReqDes, CsrWifiNmeApWmmParamUpdateReqSerFree },
- { CSR_WIFI_NME_AP_STA_REMOVE_REQ, CsrWifiNmeApStaRemoveReqSizeof, CsrWifiNmeApStaRemoveReqSer, CsrWifiNmeApStaRemoveReqDes, CsrWifiNmeApStaRemoveReqSerFree },
- { CSR_WIFI_NME_AP_CONFIG_SET_CFM, CsrWifiNmeApConfigSetCfmSizeof, CsrWifiNmeApConfigSetCfmSer, CsrWifiNmeApConfigSetCfmDes, CsrWifiNmeApConfigSetCfmSerFree },
- { CSR_WIFI_NME_AP_WPS_REGISTER_CFM, CsrWifiNmeApWpsRegisterCfmSizeof, CsrWifiNmeApWpsRegisterCfmSer, CsrWifiNmeApWpsRegisterCfmDes, CsrWifiNmeApWpsRegisterCfmSerFree },
- { CSR_WIFI_NME_AP_START_CFM, CsrWifiNmeApStartCfmSizeof, CsrWifiNmeApStartCfmSer, CsrWifiNmeApStartCfmDes, CsrWifiNmeApStartCfmSerFree },
- { CSR_WIFI_NME_AP_STOP_CFM, CsrWifiNmeApStopCfmSizeof, CsrWifiNmeApStopCfmSer, CsrWifiNmeApStopCfmDes, CsrWifiNmeApStopCfmSerFree },
- { CSR_WIFI_NME_AP_STOP_IND, CsrWifiNmeApStopIndSizeof, CsrWifiNmeApStopIndSer, CsrWifiNmeApStopIndDes, CsrWifiNmeApStopIndSerFree },
- { CSR_WIFI_NME_AP_WMM_PARAM_UPDATE_CFM, CsrWifiNmeApWmmParamUpdateCfmSizeof, CsrWifiNmeApWmmParamUpdateCfmSer, CsrWifiNmeApWmmParamUpdateCfmDes, CsrWifiNmeApWmmParamUpdateCfmSerFree },
- { CSR_WIFI_NME_AP_STATION_IND, CsrWifiNmeApStationIndSizeof, CsrWifiNmeApStationIndSer, CsrWifiNmeApStationIndDes, CsrWifiNmeApStationIndSerFree },
-
- { 0, NULL, NULL, NULL, NULL },
-};
-
-CsrMsgConvMsgEntry* CsrWifiNmeApConverterLookup(CsrMsgConvMsgEntry *ce, u16 msgType)
-{
- if (msgType & CSR_PRIM_UPSTREAM)
- {
- u16 idx = (msgType & ~CSR_PRIM_UPSTREAM) + CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_COUNT;
- if (idx < (CSR_WIFI_NME_AP_PRIM_UPSTREAM_COUNT + CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_COUNT) &&
- csrwifinmeap_conv_lut[idx].msgType == msgType)
- {
- return &csrwifinmeap_conv_lut[idx];
- }
- }
- else
- {
- if (msgType < CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_COUNT &&
- csrwifinmeap_conv_lut[msgType].msgType == msgType)
- {
- return &csrwifinmeap_conv_lut[msgType];
- }
- }
- return NULL;
-}
-
-
-void CsrWifiNmeApConverterInit(void)
-{
- CsrMsgConvInsert(CSR_WIFI_NME_AP_PRIM, csrwifinmeap_conv_lut);
- CsrMsgConvCustomLookupRegister(CSR_WIFI_NME_AP_PRIM, CsrWifiNmeApConverterLookup);
-}
-
-
-#ifdef CSR_LOG_ENABLE
-static const CsrLogPrimitiveInformation csrwifinmeap_conv_info = {
- CSR_WIFI_NME_AP_PRIM,
- (char *)"CSR_WIFI_NME_AP_PRIM",
- csrwifinmeap_conv_lut
-};
-const CsrLogPrimitiveInformation* CsrWifiNmeApTechInfoGet(void)
-{
- return &csrwifinmeap_conv_info;
-}
-
-
-#endif /* CSR_LOG_ENABLE */
-#endif /* EXCLUDE_CSR_WIFI_NME_AP_MODULE */
-#endif /* CSR_WIFI_NME_ENABLE */
-#endif /* CSR_WIFI_AP_ENABLE */
diff --git a/drivers/staging/csr/csr_wifi_nme_ap_converter_init.h b/drivers/staging/csr/csr_wifi_nme_ap_converter_init.h
deleted file mode 100644
index b89d7c7f8e21..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_ap_converter_init.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_NME_AP_CONVERTER_INIT_H__
-#define CSR_WIFI_NME_AP_CONVERTER_INIT_H__
-
-#ifndef CSR_WIFI_NME_ENABLE
-#error CSR_WIFI_NME_ENABLE MUST be defined inorder to use csr_wifi_nme_ap_converter_init.h
-#endif
-#ifndef CSR_WIFI_AP_ENABLE
-#error CSR_WIFI_AP_ENABLE MUST be defined inorder to use csr_wifi_nme_ap_converter_init.h
-#endif
-
-#ifndef EXCLUDE_CSR_WIFI_NME_AP_MODULE
-
-#include "csr_msgconv.h"
-
-#ifdef CSR_LOG_ENABLE
-#include "csr_log.h"
-
-extern const CsrLogPrimitiveInformation* CsrWifiNmeApTechInfoGet(void);
-#endif /* CSR_LOG_ENABLE */
-
-extern void CsrWifiNmeApConverterInit(void);
-
-#else /* EXCLUDE_CSR_WIFI_NME_AP_MODULE */
-
-#define CsrWifiNmeApConverterInit()
-
-#endif /* EXCLUDE_CSR_WIFI_NME_AP_MODULE */
-
-#endif /* CSR_WIFI_NME_AP_CONVERTER_INIT_H__ */
diff --git a/drivers/staging/csr/csr_wifi_nme_ap_free_downstream_contents.c b/drivers/staging/csr/csr_wifi_nme_ap_free_downstream_contents.c
deleted file mode 100644
index ab9358873ec3..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_ap_free_downstream_contents.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-#include <linux/slab.h>
-#include "csr_wifi_nme_ap_prim.h"
-#include "csr_wifi_nme_ap_lib.h"
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrWifiNmeApFreeDownstreamMessageContents
- *
- * DESCRIPTION
- *
- *
- * PARAMETERS
- * eventClass: only the value CSR_WIFI_NME_AP_PRIM will be handled
- * message: the message to free
- *----------------------------------------------------------------------------*/
-void CsrWifiNmeApFreeDownstreamMessageContents(u16 eventClass, void *message)
-{
- if (eventClass != CSR_WIFI_NME_AP_PRIM)
- {
- return;
- }
- if (NULL == message)
- {
- return;
- }
-
- switch (*((CsrWifiNmeApPrim *) message))
- {
- case CSR_WIFI_NME_AP_CONFIG_SET_REQ:
- {
- CsrWifiNmeApConfigSetReq *p = (CsrWifiNmeApConfigSetReq *)message;
- kfree(p->apMacConfig.macAddressList);
- p->apMacConfig.macAddressList = NULL;
- break;
- }
- case CSR_WIFI_NME_AP_START_REQ:
- {
- CsrWifiNmeApStartReq *p = (CsrWifiNmeApStartReq *)message;
- switch (p->apCredentials.authType)
- {
- case CSR_WIFI_SME_AP_AUTH_TYPE_PERSONAL:
- switch (p->apCredentials.nmeAuthType.authTypePersonal.pskOrPassphrase)
- {
- case CSR_WIFI_NME_AP_CREDENTIAL_TYPE_PASSPHRASE:
- kfree(p->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.passphrase.passphrase);
- p->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.passphrase.passphrase = NULL;
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- {
- u16 i3;
- for (i3 = 0; i3 < p->p2pGoParam.operatingChanList.channelEntryListCount; i3++)
- {
- kfree(p->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannel);
- p->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannel = NULL;
- }
- }
- kfree(p->p2pGoParam.operatingChanList.channelEntryList);
- p->p2pGoParam.operatingChanList.channelEntryList = NULL;
- break;
- }
-
- default:
- break;
- }
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_nme_ap_free_upstream_contents.c b/drivers/staging/csr/csr_wifi_nme_ap_free_upstream_contents.c
deleted file mode 100644
index 2786a6bbff97..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_ap_free_upstream_contents.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#include "csr_wifi_nme_ap_prim.h"
-#include "csr_wifi_nme_ap_lib.h"
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrWifiNmeApFreeUpstreamMessageContents
- *
- * DESCRIPTION
- *
- *
- * PARAMETERS
- * eventClass: only the value CSR_WIFI_NME_AP_PRIM will be handled
- * message: the message to free
- *----------------------------------------------------------------------------*/
-void CsrWifiNmeApFreeUpstreamMessageContents(u16 eventClass, void *message)
-{
- if (eventClass != CSR_WIFI_NME_AP_PRIM)
- {
- return;
- }
- if (NULL == message)
- {
- return;
- }
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_nme_ap_lib.h b/drivers/staging/csr/csr_wifi_nme_ap_lib.h
deleted file mode 100644
index 6d8df8366817..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_ap_lib.h
+++ /dev/null
@@ -1,495 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_NME_AP_LIB_H__
-#define CSR_WIFI_NME_AP_LIB_H__
-
-#include "csr_sched.h"
-#include "csr_macro.h"
-#include "csr_msg_transport.h"
-
-#include "csr_wifi_lib.h"
-
-#include "csr_wifi_nme_ap_prim.h"
-#include "csr_wifi_nme_task.h"
-
-#ifndef CSR_WIFI_NME_ENABLE
-#error CSR_WIFI_NME_ENABLE MUST be defined inorder to use csr_wifi_nme_ap_lib.h
-#endif
-#ifndef CSR_WIFI_AP_ENABLE
-#error CSR_WIFI_AP_ENABLE MUST be defined inorder to use csr_wifi_nme_ap_lib.h
-#endif
-
-/*----------------------------------------------------------------------------*
- * CsrWifiNmeApFreeUpstreamMessageContents
- *
- * DESCRIPTION
- * Free the allocated memory in a CSR_WIFI_NME_AP upstream message. Does not
- * free the message itself, and can only be used for upstream messages.
- *
- * PARAMETERS
- * Deallocates the resources in a CSR_WIFI_NME_AP upstream message
- *----------------------------------------------------------------------------*/
-void CsrWifiNmeApFreeUpstreamMessageContents(u16 eventClass, void *message);
-
-/*----------------------------------------------------------------------------*
- * CsrWifiNmeApFreeDownstreamMessageContents
- *
- * DESCRIPTION
- * Free the allocated memory in a CSR_WIFI_NME_AP downstream message. Does not
- * free the message itself, and can only be used for downstream messages.
- *
- * PARAMETERS
- * Deallocates the resources in a CSR_WIFI_NME_AP downstream message
- *----------------------------------------------------------------------------*/
-void CsrWifiNmeApFreeDownstreamMessageContents(u16 eventClass, void *message);
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApConfigSetReqSend
-
- DESCRIPTION
- This primitive passes AP configuration info for NME. This can be sent at
- any time but will be acted upon when the AP is started again. This
- information is common to both P2P GO and AP
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- apConfig - AP configuration for the NME.
- apMacConfig - MAC configuration to be acted on when
- CSR_WIFI_NME_AP_START.request is sent.
-
-*******************************************************************************/
-#define CsrWifiNmeApConfigSetReqCreate(msg__, dst__, src__, apConfig__, apMacConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeApConfigSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_AP_PRIM, CSR_WIFI_NME_AP_CONFIG_SET_REQ, dst__, src__); \
- msg__->apConfig = (apConfig__); \
- msg__->apMacConfig = (apMacConfig__);
-
-#define CsrWifiNmeApConfigSetReqSendTo(dst__, src__, apConfig__, apMacConfig__) \
- { \
- CsrWifiNmeApConfigSetReq *msg__; \
- CsrWifiNmeApConfigSetReqCreate(msg__, dst__, src__, apConfig__, apMacConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiNmeApConfigSetReqSend(src__, apConfig__, apMacConfig__) \
- CsrWifiNmeApConfigSetReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, apConfig__, apMacConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApConfigSetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Status of the request.
-
-*******************************************************************************/
-#define CsrWifiNmeApConfigSetCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeApConfigSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_AP_PRIM, CSR_WIFI_NME_AP_CONFIG_SET_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiNmeApConfigSetCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiNmeApConfigSetCfm *msg__; \
- CsrWifiNmeApConfigSetCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiNmeApConfigSetCfmSend(dst__, status__) \
- CsrWifiNmeApConfigSetCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApStaRemoveReqSend
-
- DESCRIPTION
- This primitive disconnects a connected station. If keepBlocking is set to
- TRUE, the station with the specified MAC address is not allowed to
- connect. If the requested station is not already connected,it may be
- blocked based on keepBlocking parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- staMacAddress - Mac Address of the station to be disconnected or blocked
- keepBlocking - If TRUE, the station is blocked. If FALSE and the station is
- connected, disconnect the station. If FALSE and the station
- is not connected, no action is taken.
-
-*******************************************************************************/
-#define CsrWifiNmeApStaRemoveReqCreate(msg__, dst__, src__, interfaceTag__, staMacAddress__, keepBlocking__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeApStaRemoveReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_AP_PRIM, CSR_WIFI_NME_AP_STA_REMOVE_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->staMacAddress = (staMacAddress__); \
- msg__->keepBlocking = (keepBlocking__);
-
-#define CsrWifiNmeApStaRemoveReqSendTo(dst__, src__, interfaceTag__, staMacAddress__, keepBlocking__) \
- { \
- CsrWifiNmeApStaRemoveReq *msg__; \
- CsrWifiNmeApStaRemoveReqCreate(msg__, dst__, src__, interfaceTag__, staMacAddress__, keepBlocking__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiNmeApStaRemoveReqSend(src__, interfaceTag__, staMacAddress__, keepBlocking__) \
- CsrWifiNmeApStaRemoveReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, interfaceTag__, staMacAddress__, keepBlocking__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApStartReqSend
-
- DESCRIPTION
- This primitive requests NME to started the AP operation.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface identifier; unique identifier of an interface
- apType - AP Type specifies the Legacy AP or P2P GO operation
- cloakSsid - Indicates whether the SSID should be cloaked (hidden and
- not broadcast in beacon) or not
- ssid - Service Set Identifier
- ifIndex - Radio interface
- channel - Channel number of the channel to use
- apCredentials - Security credential configuration.
- maxConnections - Maximum number of stations/P2P clients allowed
- p2pGoParam - P2P specific GO parameters.
- wpsEnabled - Indicates whether WPS should be enabled or not
-
-*******************************************************************************/
-#define CsrWifiNmeApStartReqCreate(msg__, dst__, src__, interfaceTag__, apType__, cloakSsid__, ssid__, ifIndex__, channel__, apCredentials__, maxConnections__, p2pGoParam__, wpsEnabled__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeApStartReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_AP_PRIM, CSR_WIFI_NME_AP_START_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->apType = (apType__); \
- msg__->cloakSsid = (cloakSsid__); \
- msg__->ssid = (ssid__); \
- msg__->ifIndex = (ifIndex__); \
- msg__->channel = (channel__); \
- msg__->apCredentials = (apCredentials__); \
- msg__->maxConnections = (maxConnections__); \
- msg__->p2pGoParam = (p2pGoParam__); \
- msg__->wpsEnabled = (wpsEnabled__);
-
-#define CsrWifiNmeApStartReqSendTo(dst__, src__, interfaceTag__, apType__, cloakSsid__, ssid__, ifIndex__, channel__, apCredentials__, maxConnections__, p2pGoParam__, wpsEnabled__) \
- { \
- CsrWifiNmeApStartReq *msg__; \
- CsrWifiNmeApStartReqCreate(msg__, dst__, src__, interfaceTag__, apType__, cloakSsid__, ssid__, ifIndex__, channel__, apCredentials__, maxConnections__, p2pGoParam__, wpsEnabled__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiNmeApStartReqSend(src__, interfaceTag__, apType__, cloakSsid__, ssid__, ifIndex__, channel__, apCredentials__, maxConnections__, p2pGoParam__, wpsEnabled__) \
- CsrWifiNmeApStartReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, interfaceTag__, apType__, cloakSsid__, ssid__, ifIndex__, channel__, apCredentials__, maxConnections__, p2pGoParam__, wpsEnabled__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApStartCfmSend
-
- DESCRIPTION
- This primitive reports the result of CSR_WIFI_NME_AP_START.request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface identifier; unique identifier of an interface
- status - Status of the request.
- ssid - Service Set Identifier
-
-*******************************************************************************/
-#define CsrWifiNmeApStartCfmCreate(msg__, dst__, src__, interfaceTag__, status__, ssid__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeApStartCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_AP_PRIM, CSR_WIFI_NME_AP_START_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->ssid = (ssid__);
-
-#define CsrWifiNmeApStartCfmSendTo(dst__, src__, interfaceTag__, status__, ssid__) \
- { \
- CsrWifiNmeApStartCfm *msg__; \
- CsrWifiNmeApStartCfmCreate(msg__, dst__, src__, interfaceTag__, status__, ssid__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiNmeApStartCfmSend(dst__, interfaceTag__, status__, ssid__) \
- CsrWifiNmeApStartCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, interfaceTag__, status__, ssid__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApStationIndSend
-
- DESCRIPTION
- This primitive indicates that a station has joined or a previously joined
- station has left the BSS/group
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- mediaStatus - Indicates whether the station is connected or
- disconnected
- peerMacAddress - MAC address of the station
- peerDeviceAddress - P2P Device Address
-
-*******************************************************************************/
-#define CsrWifiNmeApStationIndCreate(msg__, dst__, src__, interfaceTag__, mediaStatus__, peerMacAddress__, peerDeviceAddress__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeApStationInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_AP_PRIM, CSR_WIFI_NME_AP_STATION_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->mediaStatus = (mediaStatus__); \
- msg__->peerMacAddress = (peerMacAddress__); \
- msg__->peerDeviceAddress = (peerDeviceAddress__);
-
-#define CsrWifiNmeApStationIndSendTo(dst__, src__, interfaceTag__, mediaStatus__, peerMacAddress__, peerDeviceAddress__) \
- { \
- CsrWifiNmeApStationInd *msg__; \
- CsrWifiNmeApStationIndCreate(msg__, dst__, src__, interfaceTag__, mediaStatus__, peerMacAddress__, peerDeviceAddress__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiNmeApStationIndSend(dst__, interfaceTag__, mediaStatus__, peerMacAddress__, peerDeviceAddress__) \
- CsrWifiNmeApStationIndSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, interfaceTag__, mediaStatus__, peerMacAddress__, peerDeviceAddress__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApStopReqSend
-
- DESCRIPTION
- This primitive requests NME to stop the AP operation.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface identifier; unique identifier of an interface
-
-*******************************************************************************/
-#define CsrWifiNmeApStopReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeApStopReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_AP_PRIM, CSR_WIFI_NME_AP_STOP_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiNmeApStopReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiNmeApStopReq *msg__; \
- CsrWifiNmeApStopReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiNmeApStopReqSend(src__, interfaceTag__) \
- CsrWifiNmeApStopReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApStopIndSend
-
- DESCRIPTION
- Indicates that AP operation had stopped because of some unrecoverable
- error after AP operation was started successfully. NME sends this signal
- after failing to restart the AP operation internally following an error
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- apType - Reports AP Type (P2PGO or AP)
- status - Error Status
-
-*******************************************************************************/
-#define CsrWifiNmeApStopIndCreate(msg__, dst__, src__, interfaceTag__, apType__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeApStopInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_AP_PRIM, CSR_WIFI_NME_AP_STOP_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->apType = (apType__); \
- msg__->status = (status__);
-
-#define CsrWifiNmeApStopIndSendTo(dst__, src__, interfaceTag__, apType__, status__) \
- { \
- CsrWifiNmeApStopInd *msg__; \
- CsrWifiNmeApStopIndCreate(msg__, dst__, src__, interfaceTag__, apType__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiNmeApStopIndSend(dst__, interfaceTag__, apType__, status__) \
- CsrWifiNmeApStopIndSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, interfaceTag__, apType__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApStopCfmSend
-
- DESCRIPTION
- This primitive confirms that the AP operation is stopped. NME shall send
- this primitive in response to the request even if AP operation has
- already been stopped
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface identifier; unique identifier of an interface
- status - Status of the request.
-
-*******************************************************************************/
-#define CsrWifiNmeApStopCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeApStopCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_AP_PRIM, CSR_WIFI_NME_AP_STOP_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiNmeApStopCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiNmeApStopCfm *msg__; \
- CsrWifiNmeApStopCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiNmeApStopCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiNmeApStopCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApWmmParamUpdateReqSend
-
- DESCRIPTION
- Application uses this primitive to update the WMM parameters
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- wmmApParams - WMM Access point parameters per access category. The array
- index corresponds to the ACI
- wmmApBcParams - WMM station parameters per access category to be advertised
- in the beacons and probe response The array index
- corresponds to the ACI
-
-*******************************************************************************/
-#define CsrWifiNmeApWmmParamUpdateReqCreate(msg__, dst__, src__, wmmApParams__, wmmApBcParams__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeApWmmParamUpdateReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_AP_PRIM, CSR_WIFI_NME_AP_WMM_PARAM_UPDATE_REQ, dst__, src__); \
- memcpy(msg__->wmmApParams, (wmmApParams__), sizeof(CsrWifiSmeWmmAcParams) * 4); \
- memcpy(msg__->wmmApBcParams, (wmmApBcParams__), sizeof(CsrWifiSmeWmmAcParams) * 4);
-
-#define CsrWifiNmeApWmmParamUpdateReqSendTo(dst__, src__, wmmApParams__, wmmApBcParams__) \
- { \
- CsrWifiNmeApWmmParamUpdateReq *msg__; \
- CsrWifiNmeApWmmParamUpdateReqCreate(msg__, dst__, src__, wmmApParams__, wmmApBcParams__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiNmeApWmmParamUpdateReqSend(src__, wmmApParams__, wmmApBcParams__) \
- CsrWifiNmeApWmmParamUpdateReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, wmmApParams__, wmmApBcParams__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApWmmParamUpdateCfmSend
-
- DESCRIPTION
- A confirm for for the WMM parameters update
-
- PARAMETERS
- queue - Destination Task Queue
- status - Status of the request.
-
-*******************************************************************************/
-#define CsrWifiNmeApWmmParamUpdateCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeApWmmParamUpdateCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_AP_PRIM, CSR_WIFI_NME_AP_WMM_PARAM_UPDATE_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiNmeApWmmParamUpdateCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiNmeApWmmParamUpdateCfm *msg__; \
- CsrWifiNmeApWmmParamUpdateCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiNmeApWmmParamUpdateCfmSend(dst__, status__) \
- CsrWifiNmeApWmmParamUpdateCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApWpsRegisterReqSend
-
- DESCRIPTION
- This primitive allows the NME to accept the WPS registration from an
- enrollee. Such registration procedure can be cancelled by sending
- CSR_WIFI_NME_WPS_CANCEL.request.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an
- interface
- selectedDevicePasswordId - Selected password type
- selectedConfigMethod - Selected WPS configuration method type
- pin - PIN value.
- Relevant if selected device password ID is PIN.4
- digit pin is passed by sending the pin digits in
- pin[0]..pin[3] and rest of the contents filled
- with '-'.
-
-*******************************************************************************/
-#define CsrWifiNmeApWpsRegisterReqCreate(msg__, dst__, src__, interfaceTag__, selectedDevicePasswordId__, selectedConfigMethod__, pin__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeApWpsRegisterReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_AP_PRIM, CSR_WIFI_NME_AP_WPS_REGISTER_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->selectedDevicePasswordId = (selectedDevicePasswordId__); \
- msg__->selectedConfigMethod = (selectedConfigMethod__); \
- memcpy(msg__->pin, (pin__), sizeof(u8) * 8);
-
-#define CsrWifiNmeApWpsRegisterReqSendTo(dst__, src__, interfaceTag__, selectedDevicePasswordId__, selectedConfigMethod__, pin__) \
- { \
- CsrWifiNmeApWpsRegisterReq *msg__; \
- CsrWifiNmeApWpsRegisterReqCreate(msg__, dst__, src__, interfaceTag__, selectedDevicePasswordId__, selectedConfigMethod__, pin__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiNmeApWpsRegisterReqSend(src__, interfaceTag__, selectedDevicePasswordId__, selectedConfigMethod__, pin__) \
- CsrWifiNmeApWpsRegisterReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, interfaceTag__, selectedDevicePasswordId__, selectedConfigMethod__, pin__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApWpsRegisterCfmSend
-
- DESCRIPTION
- This primitive reports the result of WPS procedure.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface identifier; unique identifier of an interface
- status - Status of the request.
-
-*******************************************************************************/
-#define CsrWifiNmeApWpsRegisterCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeApWpsRegisterCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_AP_PRIM, CSR_WIFI_NME_AP_WPS_REGISTER_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiNmeApWpsRegisterCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiNmeApWpsRegisterCfm *msg__; \
- CsrWifiNmeApWpsRegisterCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiNmeApWpsRegisterCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiNmeApWpsRegisterCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, interfaceTag__, status__)
-
-#endif /* CSR_WIFI_NME_AP_LIB_H__ */
diff --git a/drivers/staging/csr/csr_wifi_nme_ap_prim.h b/drivers/staging/csr/csr_wifi_nme_ap_prim.h
deleted file mode 100644
index b32bdbc7e22f..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_ap_prim.h
+++ /dev/null
@@ -1,494 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_NME_AP_PRIM_H__
-#define CSR_WIFI_NME_AP_PRIM_H__
-
-#include <linux/types.h>
-#include "csr_prim_defs.h"
-#include "csr_sched.h"
-#include "csr_wifi_common.h"
-#include "csr_result.h"
-#include "csr_wifi_fsm_event.h"
-#include "csr_wifi_sme_ap_prim.h"
-#include "csr_wifi_nme_prim.h"
-
-#ifndef CSR_WIFI_NME_ENABLE
-#error CSR_WIFI_NME_ENABLE MUST be defined inorder to use csr_wifi_nme_ap_prim.h
-#endif
-#ifndef CSR_WIFI_AP_ENABLE
-#error CSR_WIFI_AP_ENABLE MUST be defined inorder to use csr_wifi_nme_ap_prim.h
-#endif
-
-#define CSR_WIFI_NME_AP_PRIM (0x0426)
-
-typedef CsrPrim CsrWifiNmeApPrim;
-
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApPersCredentialType
-
- DESCRIPTION
- NME Credential Types
-
- VALUES
- CSR_WIFI_NME_AP_CREDENTIAL_TYPE_PSK
- - Use PSK as credential.
- CSR_WIFI_NME_AP_CREDENTIAL_TYPE_PASSPHRASE
- - Use the specified passphrase as credential
-
-*******************************************************************************/
-typedef u8 CsrWifiNmeApPersCredentialType;
-#define CSR_WIFI_NME_AP_CREDENTIAL_TYPE_PSK ((CsrWifiNmeApPersCredentialType) 0x00)
-#define CSR_WIFI_NME_AP_CREDENTIAL_TYPE_PASSPHRASE ((CsrWifiNmeApPersCredentialType) 0x01)
-
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApConfig
-
- DESCRIPTION
- Structure holding AP config data.
-
- MEMBERS
- apGroupkeyTimeout - Access point group key timeout.
- apStrictGtkRekey - Access point strict GTK rekey flag. If set TRUE, the AP
- shall rekey GTK every time a connected STA leaves BSS.
- apGmkTimeout - Access point GMK timeout
- apResponseTimeout - Response timeout
- apRetransLimit - Max allowed retransmissions
-
-*******************************************************************************/
-typedef struct
-{
- u16 apGroupkeyTimeout;
- u8 apStrictGtkRekey;
- u16 apGmkTimeout;
- u16 apResponseTimeout;
- u8 apRetransLimit;
-} CsrWifiNmeApConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApAuthPers
-
- DESCRIPTION
-
- MEMBERS
- authSupport - Credential type value (as defined in the
- enumeration type).
- rsnCapabilities - RSN capabilities mask
- wapiCapabilities - WAPI capabilities mask
- pskOrPassphrase - Credential type value (as defined in the
- enumeration type).
- authPers_credentials - Union containing credentials which depends
- on credentialType parameter.
- authPers_credentialspsk -
- authPers_credentialspassphrase -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeApAuthSupportMask authSupport;
- CsrWifiSmeApRsnCapabilitiesMask rsnCapabilities;
- CsrWifiSmeApWapiCapabilitiesMask wapiCapabilities;
- CsrWifiNmeApPersCredentialType pskOrPassphrase;
- union {
- CsrWifiNmePsk psk;
- CsrWifiNmePassphrase passphrase;
- } authPers_credentials;
-} CsrWifiNmeApAuthPers;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApCredentials
-
- DESCRIPTION
- Structure containing the Credentials data.
-
- MEMBERS
- authType - Authentication type
- nmeAuthType - Authentication parameters
- nmeAuthTypeopenSystemEmpty -
- nmeAuthTypeauthwep -
- nmeAuthTypeauthTypePersonal -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeApAuthType authType;
- union {
- CsrWifiSmeEmpty openSystemEmpty;
- CsrWifiSmeWepAuth authwep;
- CsrWifiNmeApAuthPers authTypePersonal;
- } nmeAuthType;
-} CsrWifiNmeApCredentials;
-
-
-/* Downstream */
-#define CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_LOWEST (0x0000)
-
-#define CSR_WIFI_NME_AP_CONFIG_SET_REQ ((CsrWifiNmeApPrim) (0x0000 + CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_AP_WPS_REGISTER_REQ ((CsrWifiNmeApPrim) (0x0001 + CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_AP_START_REQ ((CsrWifiNmeApPrim) (0x0002 + CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_AP_STOP_REQ ((CsrWifiNmeApPrim) (0x0003 + CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_AP_WMM_PARAM_UPDATE_REQ ((CsrWifiNmeApPrim) (0x0004 + CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_AP_STA_REMOVE_REQ ((CsrWifiNmeApPrim) (0x0005 + CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_LOWEST))
-
-
-#define CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_HIGHEST (0x0005 + CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_LOWEST)
-
-/* Upstream */
-#define CSR_WIFI_NME_AP_PRIM_UPSTREAM_LOWEST (0x0000 + CSR_PRIM_UPSTREAM)
-
-#define CSR_WIFI_NME_AP_CONFIG_SET_CFM ((CsrWifiNmeApPrim)(0x0000 + CSR_WIFI_NME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_AP_WPS_REGISTER_CFM ((CsrWifiNmeApPrim)(0x0001 + CSR_WIFI_NME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_AP_START_CFM ((CsrWifiNmeApPrim)(0x0002 + CSR_WIFI_NME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_AP_STOP_CFM ((CsrWifiNmeApPrim)(0x0003 + CSR_WIFI_NME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_AP_STOP_IND ((CsrWifiNmeApPrim)(0x0004 + CSR_WIFI_NME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_AP_WMM_PARAM_UPDATE_CFM ((CsrWifiNmeApPrim)(0x0005 + CSR_WIFI_NME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_AP_STATION_IND ((CsrWifiNmeApPrim)(0x0006 + CSR_WIFI_NME_AP_PRIM_UPSTREAM_LOWEST))
-
-#define CSR_WIFI_NME_AP_PRIM_UPSTREAM_HIGHEST (0x0006 + CSR_WIFI_NME_AP_PRIM_UPSTREAM_LOWEST)
-
-#define CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_COUNT (CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_HIGHEST + 1 - CSR_WIFI_NME_AP_PRIM_DOWNSTREAM_LOWEST)
-#define CSR_WIFI_NME_AP_PRIM_UPSTREAM_COUNT (CSR_WIFI_NME_AP_PRIM_UPSTREAM_HIGHEST + 1 - CSR_WIFI_NME_AP_PRIM_UPSTREAM_LOWEST)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApConfigSetReq
-
- DESCRIPTION
- This primitive passes AP configuration info for NME. This can be sent at
- any time but will be acted upon when the AP is started again. This
- information is common to both P2P GO and AP
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- apConfig - AP configuration for the NME.
- apMacConfig - MAC configuration to be acted on when
- CSR_WIFI_NME_AP_START.request is sent.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiNmeApConfig apConfig;
- CsrWifiSmeApMacConfig apMacConfig;
-} CsrWifiNmeApConfigSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApWpsRegisterReq
-
- DESCRIPTION
- This primitive allows the NME to accept the WPS registration from an
- enrollee. Such registration procedure can be cancelled by sending
- CSR_WIFI_NME_WPS_CANCEL.request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an
- interface
- selectedDevicePasswordId - Selected password type
- selectedConfigMethod - Selected WPS configuration method type
- pin - PIN value.
- Relevant if selected device password ID is PIN.4
- digit pin is passed by sending the pin digits in
- pin[0]..pin[3] and rest of the contents filled
- with '-'.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeWpsDpid selectedDevicePasswordId;
- CsrWifiSmeWpsConfigType selectedConfigMethod;
- u8 pin[8];
-} CsrWifiNmeApWpsRegisterReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApStartReq
-
- DESCRIPTION
- This primitive requests NME to started the AP operation.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface identifier; unique identifier of an interface
- apType - AP Type specifies the Legacy AP or P2P GO operation
- cloakSsid - Indicates whether the SSID should be cloaked (hidden and
- not broadcast in beacon) or not
- ssid - Service Set Identifier
- ifIndex - Radio interface
- channel - Channel number of the channel to use
- apCredentials - Security credential configuration.
- maxConnections - Maximum number of stations/P2P clients allowed
- p2pGoParam - P2P specific GO parameters.
- wpsEnabled - Indicates whether WPS should be enabled or not
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeApType apType;
- u8 cloakSsid;
- CsrWifiSsid ssid;
- CsrWifiSmeRadioIF ifIndex;
- u8 channel;
- CsrWifiNmeApCredentials apCredentials;
- u8 maxConnections;
- CsrWifiSmeApP2pGoConfig p2pGoParam;
- u8 wpsEnabled;
-} CsrWifiNmeApStartReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApStopReq
-
- DESCRIPTION
- This primitive requests NME to stop the AP operation.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface identifier; unique identifier of an interface
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiNmeApStopReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApWmmParamUpdateReq
-
- DESCRIPTION
- Application uses this primitive to update the WMM parameters
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- wmmApParams - WMM Access point parameters per access category. The array
- index corresponds to the ACI
- wmmApBcParams - WMM station parameters per access category to be advertised
- in the beacons and probe response The array index
- corresponds to the ACI
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiSmeWmmAcParams wmmApParams[4];
- CsrWifiSmeWmmAcParams wmmApBcParams[4];
-} CsrWifiNmeApWmmParamUpdateReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApStaRemoveReq
-
- DESCRIPTION
- This primitive disconnects a connected station. If keepBlocking is set to
- TRUE, the station with the specified MAC address is not allowed to
- connect. If the requested station is not already connected,it may be
- blocked based on keepBlocking parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- staMacAddress - Mac Address of the station to be disconnected or blocked
- keepBlocking - If TRUE, the station is blocked. If FALSE and the station is
- connected, disconnect the station. If FALSE and the station
- is not connected, no action is taken.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiMacAddress staMacAddress;
- u8 keepBlocking;
-} CsrWifiNmeApStaRemoveReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApConfigSetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Status of the request.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiNmeApConfigSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApWpsRegisterCfm
-
- DESCRIPTION
- This primitive reports the result of WPS procedure.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface identifier; unique identifier of an interface
- status - Status of the request.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiNmeApWpsRegisterCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApStartCfm
-
- DESCRIPTION
- This primitive reports the result of CSR_WIFI_NME_AP_START.request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface identifier; unique identifier of an interface
- status - Status of the request.
- ssid - Service Set Identifier
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSsid ssid;
-} CsrWifiNmeApStartCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApStopCfm
-
- DESCRIPTION
- This primitive confirms that the AP operation is stopped. NME shall send
- this primitive in response to the request even if AP operation has
- already been stopped
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface identifier; unique identifier of an interface
- status - Status of the request.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiNmeApStopCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApStopInd
-
- DESCRIPTION
- Indicates that AP operation had stopped because of some unrecoverable
- error after AP operation was started successfully. NME sends this signal
- after failing to restart the AP operation internally following an error
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- apType - Reports AP Type (P2PGO or AP)
- status - Error Status
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeApType apType;
- CsrResult status;
-} CsrWifiNmeApStopInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApWmmParamUpdateCfm
-
- DESCRIPTION
- A confirm for for the WMM parameters update
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Status of the request.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiNmeApWmmParamUpdateCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeApStationInd
-
- DESCRIPTION
- This primitive indicates that a station has joined or a previously joined
- station has left the BSS/group
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- mediaStatus - Indicates whether the station is connected or
- disconnected
- peerMacAddress - MAC address of the station
- peerDeviceAddress - P2P Device Address
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeMediaStatus mediaStatus;
- CsrWifiMacAddress peerMacAddress;
- CsrWifiMacAddress peerDeviceAddress;
-} CsrWifiNmeApStationInd;
-
-#endif /* CSR_WIFI_NME_AP_PRIM_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_nme_ap_sef.c b/drivers/staging/csr/csr_wifi_nme_ap_sef.c
deleted file mode 100644
index bfebb1529779..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_ap_sef.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*****************************************************************************
-
- FILE: csr_wifi_nme_sef.c
-
- (c) Cambridge Silicon Radio Limited 2010
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
- *****************************************************************************/
-#include "csr_wifi_nme_ap_sef.h"
-#include "unifi_priv.h"
-
-void CsrWifiNmeApUpstreamStateHandlers(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- switch(msg->type) {
- case CSR_WIFI_NME_AP_START_CFM:
- CsrWifiNmeApStartCfmHandler(drvpriv, msg);
- break;
- case CSR_WIFI_NME_AP_STOP_CFM:
- CsrWifiNmeApStopCfmHandler(drvpriv, msg);
- break;
- case CSR_WIFI_NME_AP_CONFIG_SET_CFM:
- CsrWifiNmeApConfigSetCfmHandler(drvpriv, msg);
- break;
- default:
- unifi_error(drvpriv, "CsrWifiNmeApUpstreamStateHandlers: unhandled NME_AP message type 0x%.4X\n", msg->type);
- break;
- }
-}
diff --git a/drivers/staging/csr/csr_wifi_nme_ap_sef.h b/drivers/staging/csr/csr_wifi_nme_ap_sef.h
deleted file mode 100644
index 3daaa0944dba..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_ap_sef.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*****************************************************************************
- FILE: csr_wifi_nme_sef.h
- (c) Cambridge Silicon Radio Limited 2010
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-#ifndef CSR_WIFI_ROUTER_SEF_CSR_WIFI_NME_H__
-#define CSR_WIFI_ROUTER_SEF_CSR_WIFI_NME_H__
-
-#include "csr_wifi_nme_prim.h"
-
-void CsrWifiNmeApUpstreamStateHandlers(void* drvpriv, CsrWifiFsmEvent* msg);
-
-
-extern void CsrWifiNmeApConfigSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg);
-extern void CsrWifiNmeApStartCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg);
-extern void CsrWifiNmeApStopCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg);
-
-#endif /* CSR_WIFI_ROUTER_SEF_CSR_WIFI_NME_H__ */
diff --git a/drivers/staging/csr/csr_wifi_nme_ap_serialize.c b/drivers/staging/csr/csr_wifi_nme_ap_serialize.c
deleted file mode 100644
index 1a901a70d195..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_ap_serialize.c
+++ /dev/null
@@ -1,909 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-#include <linux/string.h>
-#include <linux/slab.h>
-#include "csr_msgconv.h"
-
-#ifdef CSR_WIFI_NME_ENABLE
-#ifdef CSR_WIFI_AP_ENABLE
-
-#include "csr_wifi_nme_ap_prim.h"
-#include "csr_wifi_nme_ap_serialize.h"
-
-void CsrWifiNmeApPfree(void *ptr)
-{
- kfree(ptr);
-}
-
-
-size_t CsrWifiNmeApConfigSetReqSizeof(void *msg)
-{
- CsrWifiNmeApConfigSetReq *primitive = (CsrWifiNmeApConfigSetReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 104) */
- bufferSize += 2; /* u16 primitive->apConfig.apGroupkeyTimeout */
- bufferSize += 1; /* u8 primitive->apConfig.apStrictGtkRekey */
- bufferSize += 2; /* u16 primitive->apConfig.apGmkTimeout */
- bufferSize += 2; /* u16 primitive->apConfig.apResponseTimeout */
- bufferSize += 1; /* u8 primitive->apConfig.apRetransLimit */
- bufferSize += 1; /* CsrWifiSmeApPhySupportMask primitive->apMacConfig.phySupportedBitmap */
- bufferSize += 2; /* u16 primitive->apMacConfig.beaconInterval */
- bufferSize += 1; /* u8 primitive->apMacConfig.dtimPeriod */
- bufferSize += 2; /* u16 primitive->apMacConfig.maxListenInterval */
- bufferSize += 1; /* u8 primitive->apMacConfig.supportedRatesCount */
- bufferSize += 20; /* u8 primitive->apMacConfig.supportedRates[20] */
- bufferSize += 1; /* CsrWifiSmePreambleType primitive->apMacConfig.preamble */
- bufferSize += 1; /* u8 primitive->apMacConfig.shortSlotTimeEnabled */
- bufferSize += 1; /* CsrWifiSmeCtsProtectionType primitive->apMacConfig.ctsProtectionType */
- bufferSize += 1; /* u8 primitive->apMacConfig.wmmEnabled */
- {
- u16 i2;
- for (i2 = 0; i2 < 4; i2++)
- {
- bufferSize += 1; /* u8 primitive->apMacConfig.wmmApParams[i2].cwMin */
- bufferSize += 1; /* u8 primitive->apMacConfig.wmmApParams[i2].cwMax */
- bufferSize += 1; /* u8 primitive->apMacConfig.wmmApParams[i2].aifs */
- bufferSize += 2; /* u16 primitive->apMacConfig.wmmApParams[i2].txopLimit */
- bufferSize += 1; /* u8 primitive->apMacConfig.wmmApParams[i2].admissionControlMandatory */
- }
- }
- {
- u16 i2;
- for (i2 = 0; i2 < 4; i2++)
- {
- bufferSize += 1; /* u8 primitive->apMacConfig.wmmApBcParams[i2].cwMin */
- bufferSize += 1; /* u8 primitive->apMacConfig.wmmApBcParams[i2].cwMax */
- bufferSize += 1; /* u8 primitive->apMacConfig.wmmApBcParams[i2].aifs */
- bufferSize += 2; /* u16 primitive->apMacConfig.wmmApBcParams[i2].txopLimit */
- bufferSize += 1; /* u8 primitive->apMacConfig.wmmApBcParams[i2].admissionControlMandatory */
- }
- }
- bufferSize += 1; /* CsrWifiSmeApAccessType primitive->apMacConfig.accessType */
- bufferSize += 1; /* u8 primitive->apMacConfig.macAddressListCount */
- {
- u16 i2;
- for (i2 = 0; i2 < primitive->apMacConfig.macAddressListCount; i2++)
- {
- bufferSize += 6; /* u8 primitive->apMacConfig.macAddressList[i2].a[6] */
- }
- }
- bufferSize += 1; /* u8 primitive->apMacConfig.apHtParams.greenfieldSupported */
- bufferSize += 1; /* u8 primitive->apMacConfig.apHtParams.shortGi20MHz */
- bufferSize += 1; /* u8 primitive->apMacConfig.apHtParams.rxStbc */
- bufferSize += 1; /* u8 primitive->apMacConfig.apHtParams.rifsModeAllowed */
- bufferSize += 1; /* u8 primitive->apMacConfig.apHtParams.htProtection */
- bufferSize += 1; /* u8 primitive->apMacConfig.apHtParams.dualCtsProtection */
- return bufferSize;
-}
-
-
-u8* CsrWifiNmeApConfigSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiNmeApConfigSetReq *primitive = (CsrWifiNmeApConfigSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->apConfig.apGroupkeyTimeout);
- CsrUint8Ser(ptr, len, (u8) primitive->apConfig.apStrictGtkRekey);
- CsrUint16Ser(ptr, len, (u16) primitive->apConfig.apGmkTimeout);
- CsrUint16Ser(ptr, len, (u16) primitive->apConfig.apResponseTimeout);
- CsrUint8Ser(ptr, len, (u8) primitive->apConfig.apRetransLimit);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.phySupportedBitmap);
- CsrUint16Ser(ptr, len, (u16) primitive->apMacConfig.beaconInterval);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.dtimPeriod);
- CsrUint16Ser(ptr, len, (u16) primitive->apMacConfig.maxListenInterval);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.supportedRatesCount);
- CsrMemCpySer(ptr, len, (const void *) primitive->apMacConfig.supportedRates, ((u16) (20)));
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.preamble);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.shortSlotTimeEnabled);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.ctsProtectionType);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.wmmEnabled);
- {
- u16 i2;
- for (i2 = 0; i2 < 4; i2++)
- {
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.wmmApParams[i2].cwMin);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.wmmApParams[i2].cwMax);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.wmmApParams[i2].aifs);
- CsrUint16Ser(ptr, len, (u16) primitive->apMacConfig.wmmApParams[i2].txopLimit);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.wmmApParams[i2].admissionControlMandatory);
- }
- }
- {
- u16 i2;
- for (i2 = 0; i2 < 4; i2++)
- {
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.wmmApBcParams[i2].cwMin);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.wmmApBcParams[i2].cwMax);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.wmmApBcParams[i2].aifs);
- CsrUint16Ser(ptr, len, (u16) primitive->apMacConfig.wmmApBcParams[i2].txopLimit);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.wmmApBcParams[i2].admissionControlMandatory);
- }
- }
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.accessType);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.macAddressListCount);
- {
- u16 i2;
- for (i2 = 0; i2 < primitive->apMacConfig.macAddressListCount; i2++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->apMacConfig.macAddressList[i2].a, ((u16) (6)));
- }
- }
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.apHtParams.greenfieldSupported);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.apHtParams.shortGi20MHz);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.apHtParams.rxStbc);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.apHtParams.rifsModeAllowed);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.apHtParams.htProtection);
- CsrUint8Ser(ptr, len, (u8) primitive->apMacConfig.apHtParams.dualCtsProtection);
- return(ptr);
-}
-
-
-void* CsrWifiNmeApConfigSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiNmeApConfigSetReq *primitive = kmalloc(sizeof(CsrWifiNmeApConfigSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->apConfig.apGroupkeyTimeout, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apConfig.apStrictGtkRekey, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->apConfig.apGmkTimeout, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->apConfig.apResponseTimeout, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apConfig.apRetransLimit, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.phySupportedBitmap, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->apMacConfig.beaconInterval, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.dtimPeriod, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->apMacConfig.maxListenInterval, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.supportedRatesCount, buffer, &offset);
- CsrMemCpyDes(primitive->apMacConfig.supportedRates, buffer, &offset, ((u16) (20)));
- CsrUint8Des((u8 *) &primitive->apMacConfig.preamble, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.shortSlotTimeEnabled, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.ctsProtectionType, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.wmmEnabled, buffer, &offset);
- {
- u16 i2;
- for (i2 = 0; i2 < 4; i2++)
- {
- CsrUint8Des((u8 *) &primitive->apMacConfig.wmmApParams[i2].cwMin, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.wmmApParams[i2].cwMax, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.wmmApParams[i2].aifs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->apMacConfig.wmmApParams[i2].txopLimit, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.wmmApParams[i2].admissionControlMandatory, buffer, &offset);
- }
- }
- {
- u16 i2;
- for (i2 = 0; i2 < 4; i2++)
- {
- CsrUint8Des((u8 *) &primitive->apMacConfig.wmmApBcParams[i2].cwMin, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.wmmApBcParams[i2].cwMax, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.wmmApBcParams[i2].aifs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->apMacConfig.wmmApBcParams[i2].txopLimit, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.wmmApBcParams[i2].admissionControlMandatory, buffer, &offset);
- }
- }
- CsrUint8Des((u8 *) &primitive->apMacConfig.accessType, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.macAddressListCount, buffer, &offset);
- primitive->apMacConfig.macAddressList = NULL;
- if (primitive->apMacConfig.macAddressListCount)
- {
- primitive->apMacConfig.macAddressList = kmalloc(sizeof(CsrWifiMacAddress) * primitive->apMacConfig.macAddressListCount, GFP_KERNEL);
- }
- {
- u16 i2;
- for (i2 = 0; i2 < primitive->apMacConfig.macAddressListCount; i2++)
- {
- CsrMemCpyDes(primitive->apMacConfig.macAddressList[i2].a, buffer, &offset, ((u16) (6)));
- }
- }
- CsrUint8Des((u8 *) &primitive->apMacConfig.apHtParams.greenfieldSupported, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.apHtParams.shortGi20MHz, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.apHtParams.rxStbc, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.apHtParams.rifsModeAllowed, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.apHtParams.htProtection, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apMacConfig.apHtParams.dualCtsProtection, buffer, &offset);
-
- return primitive;
-}
-
-
-void CsrWifiNmeApConfigSetReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiNmeApConfigSetReq *primitive = (CsrWifiNmeApConfigSetReq *) voidPrimitivePointer;
- kfree(primitive->apMacConfig.macAddressList);
- kfree(primitive);
-}
-
-
-size_t CsrWifiNmeApWpsRegisterReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 17) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiSmeWpsDpid primitive->selectedDevicePasswordId */
- bufferSize += 2; /* CsrWifiSmeWpsConfigType primitive->selectedConfigMethod */
- bufferSize += 8; /* u8 primitive->pin[8] */
- return bufferSize;
-}
-
-
-u8* CsrWifiNmeApWpsRegisterReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiNmeApWpsRegisterReq *primitive = (CsrWifiNmeApWpsRegisterReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->selectedDevicePasswordId);
- CsrUint16Ser(ptr, len, (u16) primitive->selectedConfigMethod);
- CsrMemCpySer(ptr, len, (const void *) primitive->pin, ((u16) (8)));
- return(ptr);
-}
-
-
-void* CsrWifiNmeApWpsRegisterReqDes(u8 *buffer, size_t length)
-{
- CsrWifiNmeApWpsRegisterReq *primitive = kmalloc(sizeof(CsrWifiNmeApWpsRegisterReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->selectedDevicePasswordId, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->selectedConfigMethod, buffer, &offset);
- CsrMemCpyDes(primitive->pin, buffer, &offset, ((u16) (8)));
-
- return primitive;
-}
-
-
-size_t CsrWifiNmeApStartReqSizeof(void *msg)
-{
- CsrWifiNmeApStartReq *primitive = (CsrWifiNmeApStartReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 112) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiSmeApType primitive->apType */
- bufferSize += 1; /* u8 primitive->cloakSsid */
- bufferSize += 32; /* u8 primitive->ssid.ssid[32] */
- bufferSize += 1; /* u8 primitive->ssid.length */
- bufferSize += 1; /* CsrWifiSmeRadioIF primitive->ifIndex */
- bufferSize += 1; /* u8 primitive->channel */
- bufferSize += 1; /* CsrWifiSmeApAuthType primitive->apCredentials.authType */
- switch (primitive->apCredentials.authType)
- {
- case CSR_WIFI_SME_AP_AUTH_TYPE_OPEN_SYSTEM:
- bufferSize += 1; /* u8 primitive->apCredentials.nmeAuthType.openSystemEmpty.empty */
- break;
- case CSR_WIFI_SME_AP_AUTH_TYPE_WEP:
- bufferSize += 1; /* CsrWifiSmeWepCredentialType primitive->apCredentials.nmeAuthType.authwep.wepKeyType */
- switch (primitive->apCredentials.nmeAuthType.authwep.wepKeyType)
- {
- case CSR_WIFI_SME_CREDENTIAL_TYPE_WEP128:
- bufferSize += 1; /* CsrWifiSmeWepAuthMode primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.wepAuthType */
- bufferSize += 1; /* u8 primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.selectedWepKey */
- bufferSize += 13; /* u8 primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.key1[13] */
- bufferSize += 13; /* u8 primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.key2[13] */
- bufferSize += 13; /* u8 primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.key3[13] */
- bufferSize += 13; /* u8 primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.key4[13] */
- break;
- case CSR_WIFI_SME_CREDENTIAL_TYPE_WEP64:
- bufferSize += 1; /* CsrWifiSmeWepAuthMode primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.wepAuthType */
- bufferSize += 1; /* u8 primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.selectedWepKey */
- bufferSize += 5; /* u8 primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.key1[5] */
- bufferSize += 5; /* u8 primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.key2[5] */
- bufferSize += 5; /* u8 primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.key3[5] */
- bufferSize += 5; /* u8 primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.key4[5] */
- break;
- default:
- break;
- }
- break;
- case CSR_WIFI_SME_AP_AUTH_TYPE_PERSONAL:
- bufferSize += 1; /* CsrWifiSmeApAuthSupportMask primitive->apCredentials.nmeAuthType.authTypePersonal.authSupport */
- bufferSize += 2; /* CsrWifiSmeApRsnCapabilitiesMask primitive->apCredentials.nmeAuthType.authTypePersonal.rsnCapabilities */
- bufferSize += 2; /* CsrWifiSmeApWapiCapabilitiesMask primitive->apCredentials.nmeAuthType.authTypePersonal.wapiCapabilities */
- bufferSize += 1; /* CsrWifiNmeApPersCredentialType primitive->apCredentials.nmeAuthType.authTypePersonal.pskOrPassphrase */
- switch (primitive->apCredentials.nmeAuthType.authTypePersonal.pskOrPassphrase)
- {
- case CSR_WIFI_NME_AP_CREDENTIAL_TYPE_PSK:
- bufferSize += 2; /* u16 primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.psk.encryptionMode */
- bufferSize += 32; /* u8 primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.psk.psk[32] */
- break;
- case CSR_WIFI_NME_AP_CREDENTIAL_TYPE_PASSPHRASE:
- bufferSize += 2; /* u16 primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.passphrase.encryptionMode */
- bufferSize += (primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.passphrase.passphrase ? strlen(primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.passphrase.passphrase) : 0) + 1; /* char* primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.passphrase.passphrase (0 byte len + 1 for NULL Term) */
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- bufferSize += 1; /* u8 primitive->maxConnections */
- bufferSize += 1; /* CsrWifiSmeP2pGroupCapabilityMask primitive->p2pGoParam.groupCapability */
- bufferSize += 3; /* u8 primitive->p2pGoParam.operatingChanList.country[3] */
- bufferSize += 1; /* u8 primitive->p2pGoParam.operatingChanList.channelEntryListCount */
- {
- u16 i3;
- for (i3 = 0; i3 < primitive->p2pGoParam.operatingChanList.channelEntryListCount; i3++)
- {
- bufferSize += 1; /* u8 primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingClass */
- bufferSize += 1; /* u8 primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannelCount */
- bufferSize += primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannelCount; /* u8 primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannel */
- }
- }
- bufferSize += 1; /* u8 primitive->p2pGoParam.opPsEnabled */
- bufferSize += 1; /* u8 primitive->p2pGoParam.ctWindow */
- bufferSize += 1; /* CsrWifiSmeP2pNoaConfigMethod primitive->p2pGoParam.noaConfigMethod */
- bufferSize += 1; /* u8 primitive->p2pGoParam.allowNoaWithNonP2pDevices */
- bufferSize += 1; /* u8 primitive->wpsEnabled */
- return bufferSize;
-}
-
-
-u8* CsrWifiNmeApStartReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiNmeApStartReq *primitive = (CsrWifiNmeApStartReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->apType);
- CsrUint8Ser(ptr, len, (u8) primitive->cloakSsid);
- CsrMemCpySer(ptr, len, (const void *) primitive->ssid.ssid, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->ssid.length);
- CsrUint8Ser(ptr, len, (u8) primitive->ifIndex);
- CsrUint8Ser(ptr, len, (u8) primitive->channel);
- CsrUint8Ser(ptr, len, (u8) primitive->apCredentials.authType);
- switch (primitive->apCredentials.authType)
- {
- case CSR_WIFI_SME_AP_AUTH_TYPE_OPEN_SYSTEM:
- CsrUint8Ser(ptr, len, (u8) primitive->apCredentials.nmeAuthType.openSystemEmpty.empty);
- break;
- case CSR_WIFI_SME_AP_AUTH_TYPE_WEP:
- CsrUint8Ser(ptr, len, (u8) primitive->apCredentials.nmeAuthType.authwep.wepKeyType);
- switch (primitive->apCredentials.nmeAuthType.authwep.wepKeyType)
- {
- case CSR_WIFI_SME_CREDENTIAL_TYPE_WEP128:
- CsrUint8Ser(ptr, len, (u8) primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.wepAuthType);
- CsrUint8Ser(ptr, len, (u8) primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.selectedWepKey);
- CsrMemCpySer(ptr, len, (const void *) primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.key1, ((u16) (13)));
- CsrMemCpySer(ptr, len, (const void *) primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.key2, ((u16) (13)));
- CsrMemCpySer(ptr, len, (const void *) primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.key3, ((u16) (13)));
- CsrMemCpySer(ptr, len, (const void *) primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.key4, ((u16) (13)));
- break;
- case CSR_WIFI_SME_CREDENTIAL_TYPE_WEP64:
- CsrUint8Ser(ptr, len, (u8) primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.wepAuthType);
- CsrUint8Ser(ptr, len, (u8) primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.selectedWepKey);
- CsrMemCpySer(ptr, len, (const void *) primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.key1, ((u16) (5)));
- CsrMemCpySer(ptr, len, (const void *) primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.key2, ((u16) (5)));
- CsrMemCpySer(ptr, len, (const void *) primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.key3, ((u16) (5)));
- CsrMemCpySer(ptr, len, (const void *) primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.key4, ((u16) (5)));
- break;
- default:
- break;
- }
- break;
- case CSR_WIFI_SME_AP_AUTH_TYPE_PERSONAL:
- CsrUint8Ser(ptr, len, (u8) primitive->apCredentials.nmeAuthType.authTypePersonal.authSupport);
- CsrUint16Ser(ptr, len, (u16) primitive->apCredentials.nmeAuthType.authTypePersonal.rsnCapabilities);
- CsrUint16Ser(ptr, len, (u16) primitive->apCredentials.nmeAuthType.authTypePersonal.wapiCapabilities);
- CsrUint8Ser(ptr, len, (u8) primitive->apCredentials.nmeAuthType.authTypePersonal.pskOrPassphrase);
- switch (primitive->apCredentials.nmeAuthType.authTypePersonal.pskOrPassphrase)
- {
- case CSR_WIFI_NME_AP_CREDENTIAL_TYPE_PSK:
- CsrUint16Ser(ptr, len, (u16) primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.psk.encryptionMode);
- CsrMemCpySer(ptr, len, (const void *) primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.psk.psk, ((u16) (32)));
- break;
- case CSR_WIFI_NME_AP_CREDENTIAL_TYPE_PASSPHRASE:
- CsrUint16Ser(ptr, len, (u16) primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.passphrase.encryptionMode);
- CsrCharStringSer(ptr, len, primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.passphrase.passphrase);
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- CsrUint8Ser(ptr, len, (u8) primitive->maxConnections);
- CsrUint8Ser(ptr, len, (u8) primitive->p2pGoParam.groupCapability);
- CsrMemCpySer(ptr, len, (const void *) primitive->p2pGoParam.operatingChanList.country, ((u16) (3)));
- CsrUint8Ser(ptr, len, (u8) primitive->p2pGoParam.operatingChanList.channelEntryListCount);
- {
- u16 i3;
- for (i3 = 0; i3 < primitive->p2pGoParam.operatingChanList.channelEntryListCount; i3++)
- {
- CsrUint8Ser(ptr, len, (u8) primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingClass);
- CsrUint8Ser(ptr, len, (u8) primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannelCount);
- if (primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannelCount)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannel, ((u16) (primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannelCount)));
- }
- }
- }
- CsrUint8Ser(ptr, len, (u8) primitive->p2pGoParam.opPsEnabled);
- CsrUint8Ser(ptr, len, (u8) primitive->p2pGoParam.ctWindow);
- CsrUint8Ser(ptr, len, (u8) primitive->p2pGoParam.noaConfigMethod);
- CsrUint8Ser(ptr, len, (u8) primitive->p2pGoParam.allowNoaWithNonP2pDevices);
- CsrUint8Ser(ptr, len, (u8) primitive->wpsEnabled);
- return(ptr);
-}
-
-
-void* CsrWifiNmeApStartReqDes(u8 *buffer, size_t length)
-{
- CsrWifiNmeApStartReq *primitive = kmalloc(sizeof(CsrWifiNmeApStartReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apType, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->cloakSsid, buffer, &offset);
- CsrMemCpyDes(primitive->ssid.ssid, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->ssid.length, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->ifIndex, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->channel, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apCredentials.authType, buffer, &offset);
- switch (primitive->apCredentials.authType)
- {
- case CSR_WIFI_SME_AP_AUTH_TYPE_OPEN_SYSTEM:
- CsrUint8Des((u8 *) &primitive->apCredentials.nmeAuthType.openSystemEmpty.empty, buffer, &offset);
- break;
- case CSR_WIFI_SME_AP_AUTH_TYPE_WEP:
- CsrUint8Des((u8 *) &primitive->apCredentials.nmeAuthType.authwep.wepKeyType, buffer, &offset);
- switch (primitive->apCredentials.nmeAuthType.authwep.wepKeyType)
- {
- case CSR_WIFI_SME_CREDENTIAL_TYPE_WEP128:
- CsrUint8Des((u8 *) &primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.wepAuthType, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.selectedWepKey, buffer, &offset);
- CsrMemCpyDes(primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.key1, buffer, &offset, ((u16) (13)));
- CsrMemCpyDes(primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.key2, buffer, &offset, ((u16) (13)));
- CsrMemCpyDes(primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.key3, buffer, &offset, ((u16) (13)));
- CsrMemCpyDes(primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep128Key.key4, buffer, &offset, ((u16) (13)));
- break;
- case CSR_WIFI_SME_CREDENTIAL_TYPE_WEP64:
- CsrUint8Des((u8 *) &primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.wepAuthType, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.selectedWepKey, buffer, &offset);
- CsrMemCpyDes(primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.key1, buffer, &offset, ((u16) (5)));
- CsrMemCpyDes(primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.key2, buffer, &offset, ((u16) (5)));
- CsrMemCpyDes(primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.key3, buffer, &offset, ((u16) (5)));
- CsrMemCpyDes(primitive->apCredentials.nmeAuthType.authwep.wepCredentials.wep64Key.key4, buffer, &offset, ((u16) (5)));
- break;
- default:
- break;
- }
- break;
- case CSR_WIFI_SME_AP_AUTH_TYPE_PERSONAL:
- CsrUint8Des((u8 *) &primitive->apCredentials.nmeAuthType.authTypePersonal.authSupport, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->apCredentials.nmeAuthType.authTypePersonal.rsnCapabilities, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->apCredentials.nmeAuthType.authTypePersonal.wapiCapabilities, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apCredentials.nmeAuthType.authTypePersonal.pskOrPassphrase, buffer, &offset);
- switch (primitive->apCredentials.nmeAuthType.authTypePersonal.pskOrPassphrase)
- {
- case CSR_WIFI_NME_AP_CREDENTIAL_TYPE_PSK:
- CsrUint16Des((u16 *) &primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.psk.encryptionMode, buffer, &offset);
- CsrMemCpyDes(primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.psk.psk, buffer, &offset, ((u16) (32)));
- break;
- case CSR_WIFI_NME_AP_CREDENTIAL_TYPE_PASSPHRASE:
- CsrUint16Des((u16 *) &primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.passphrase.encryptionMode, buffer, &offset);
- CsrCharStringDes(&primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.passphrase.passphrase, buffer, &offset);
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- CsrUint8Des((u8 *) &primitive->maxConnections, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->p2pGoParam.groupCapability, buffer, &offset);
- CsrMemCpyDes(primitive->p2pGoParam.operatingChanList.country, buffer, &offset, ((u16) (3)));
- CsrUint8Des((u8 *) &primitive->p2pGoParam.operatingChanList.channelEntryListCount, buffer, &offset);
- primitive->p2pGoParam.operatingChanList.channelEntryList = NULL;
- if (primitive->p2pGoParam.operatingChanList.channelEntryListCount)
- {
- primitive->p2pGoParam.operatingChanList.channelEntryList = kmalloc(sizeof(CsrWifiSmeApP2pOperatingChanEntry) * primitive->p2pGoParam.operatingChanList.channelEntryListCount, GFP_KERNEL);
- }
- {
- u16 i3;
- for (i3 = 0; i3 < primitive->p2pGoParam.operatingChanList.channelEntryListCount; i3++)
- {
- CsrUint8Des((u8 *) &primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingClass, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannelCount, buffer, &offset);
- if (primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannelCount)
- {
- primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannel = kmalloc(primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannelCount, GFP_KERNEL);
- CsrMemCpyDes(primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannel, buffer, &offset, ((u16) (primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannelCount)));
- }
- else
- {
- primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannel = NULL;
- }
- }
- }
- CsrUint8Des((u8 *) &primitive->p2pGoParam.opPsEnabled, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->p2pGoParam.ctWindow, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->p2pGoParam.noaConfigMethod, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->p2pGoParam.allowNoaWithNonP2pDevices, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->wpsEnabled, buffer, &offset);
-
- return primitive;
-}
-
-
-void CsrWifiNmeApStartReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiNmeApStartReq *primitive = (CsrWifiNmeApStartReq *) voidPrimitivePointer;
- switch (primitive->apCredentials.authType)
- {
- case CSR_WIFI_SME_AP_AUTH_TYPE_PERSONAL:
- switch (primitive->apCredentials.nmeAuthType.authTypePersonal.pskOrPassphrase)
- {
- case CSR_WIFI_NME_AP_CREDENTIAL_TYPE_PASSPHRASE:
- kfree(primitive->apCredentials.nmeAuthType.authTypePersonal.authPers_credentials.passphrase.passphrase);
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- {
- u16 i3;
- for (i3 = 0; i3 < primitive->p2pGoParam.operatingChanList.channelEntryListCount; i3++)
- {
- kfree(primitive->p2pGoParam.operatingChanList.channelEntryList[i3].operatingChannel);
- }
- }
- kfree(primitive->p2pGoParam.operatingChanList.channelEntryList);
- kfree(primitive);
-}
-
-
-size_t CsrWifiNmeApWmmParamUpdateReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 51) */
- {
- u16 i1;
- for (i1 = 0; i1 < 4; i1++)
- {
- bufferSize += 1; /* u8 primitive->wmmApParams[i1].cwMin */
- bufferSize += 1; /* u8 primitive->wmmApParams[i1].cwMax */
- bufferSize += 1; /* u8 primitive->wmmApParams[i1].aifs */
- bufferSize += 2; /* u16 primitive->wmmApParams[i1].txopLimit */
- bufferSize += 1; /* u8 primitive->wmmApParams[i1].admissionControlMandatory */
- }
- }
- {
- u16 i1;
- for (i1 = 0; i1 < 4; i1++)
- {
- bufferSize += 1; /* u8 primitive->wmmApBcParams[i1].cwMin */
- bufferSize += 1; /* u8 primitive->wmmApBcParams[i1].cwMax */
- bufferSize += 1; /* u8 primitive->wmmApBcParams[i1].aifs */
- bufferSize += 2; /* u16 primitive->wmmApBcParams[i1].txopLimit */
- bufferSize += 1; /* u8 primitive->wmmApBcParams[i1].admissionControlMandatory */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiNmeApWmmParamUpdateReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiNmeApWmmParamUpdateReq *primitive = (CsrWifiNmeApWmmParamUpdateReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- {
- u16 i1;
- for (i1 = 0; i1 < 4; i1++)
- {
- CsrUint8Ser(ptr, len, (u8) primitive->wmmApParams[i1].cwMin);
- CsrUint8Ser(ptr, len, (u8) primitive->wmmApParams[i1].cwMax);
- CsrUint8Ser(ptr, len, (u8) primitive->wmmApParams[i1].aifs);
- CsrUint16Ser(ptr, len, (u16) primitive->wmmApParams[i1].txopLimit);
- CsrUint8Ser(ptr, len, (u8) primitive->wmmApParams[i1].admissionControlMandatory);
- }
- }
- {
- u16 i1;
- for (i1 = 0; i1 < 4; i1++)
- {
- CsrUint8Ser(ptr, len, (u8) primitive->wmmApBcParams[i1].cwMin);
- CsrUint8Ser(ptr, len, (u8) primitive->wmmApBcParams[i1].cwMax);
- CsrUint8Ser(ptr, len, (u8) primitive->wmmApBcParams[i1].aifs);
- CsrUint16Ser(ptr, len, (u16) primitive->wmmApBcParams[i1].txopLimit);
- CsrUint8Ser(ptr, len, (u8) primitive->wmmApBcParams[i1].admissionControlMandatory);
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiNmeApWmmParamUpdateReqDes(u8 *buffer, size_t length)
-{
- CsrWifiNmeApWmmParamUpdateReq *primitive = kmalloc(sizeof(CsrWifiNmeApWmmParamUpdateReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- {
- u16 i1;
- for (i1 = 0; i1 < 4; i1++)
- {
- CsrUint8Des((u8 *) &primitive->wmmApParams[i1].cwMin, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->wmmApParams[i1].cwMax, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->wmmApParams[i1].aifs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->wmmApParams[i1].txopLimit, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->wmmApParams[i1].admissionControlMandatory, buffer, &offset);
- }
- }
- {
- u16 i1;
- for (i1 = 0; i1 < 4; i1++)
- {
- CsrUint8Des((u8 *) &primitive->wmmApBcParams[i1].cwMin, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->wmmApBcParams[i1].cwMax, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->wmmApBcParams[i1].aifs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->wmmApBcParams[i1].txopLimit, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->wmmApBcParams[i1].admissionControlMandatory, buffer, &offset);
- }
- }
-
- return primitive;
-}
-
-
-size_t CsrWifiNmeApStaRemoveReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 12) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 6; /* u8 primitive->staMacAddress.a[6] */
- bufferSize += 1; /* u8 primitive->keepBlocking */
- return bufferSize;
-}
-
-
-u8* CsrWifiNmeApStaRemoveReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiNmeApStaRemoveReq *primitive = (CsrWifiNmeApStaRemoveReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrMemCpySer(ptr, len, (const void *) primitive->staMacAddress.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->keepBlocking);
- return(ptr);
-}
-
-
-void* CsrWifiNmeApStaRemoveReqDes(u8 *buffer, size_t length)
-{
- CsrWifiNmeApStaRemoveReq *primitive = kmalloc(sizeof(CsrWifiNmeApStaRemoveReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrMemCpyDes(primitive->staMacAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->keepBlocking, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiNmeApWpsRegisterCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiNmeApWpsRegisterCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiNmeApWpsRegisterCfm *primitive = (CsrWifiNmeApWpsRegisterCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiNmeApWpsRegisterCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiNmeApWpsRegisterCfm *primitive = kmalloc(sizeof(CsrWifiNmeApWpsRegisterCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiNmeApStartCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 40) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 32; /* u8 primitive->ssid.ssid[32] */
- bufferSize += 1; /* u8 primitive->ssid.length */
- return bufferSize;
-}
-
-
-u8* CsrWifiNmeApStartCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiNmeApStartCfm *primitive = (CsrWifiNmeApStartCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrMemCpySer(ptr, len, (const void *) primitive->ssid.ssid, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->ssid.length);
- return(ptr);
-}
-
-
-void* CsrWifiNmeApStartCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiNmeApStartCfm *primitive = kmalloc(sizeof(CsrWifiNmeApStartCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrMemCpyDes(primitive->ssid.ssid, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->ssid.length, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiNmeApStopCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiNmeApStopCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiNmeApStopCfm *primitive = (CsrWifiNmeApStopCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiNmeApStopCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiNmeApStopCfm *primitive = kmalloc(sizeof(CsrWifiNmeApStopCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiNmeApStopIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 8) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiSmeApType primitive->apType */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiNmeApStopIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiNmeApStopInd *primitive = (CsrWifiNmeApStopInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->apType);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiNmeApStopIndDes(u8 *buffer, size_t length)
-{
- CsrWifiNmeApStopInd *primitive = kmalloc(sizeof(CsrWifiNmeApStopInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->apType, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiNmeApStationIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 18) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiSmeMediaStatus primitive->mediaStatus */
- bufferSize += 6; /* u8 primitive->peerMacAddress.a[6] */
- bufferSize += 6; /* u8 primitive->peerDeviceAddress.a[6] */
- return bufferSize;
-}
-
-
-u8* CsrWifiNmeApStationIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiNmeApStationInd *primitive = (CsrWifiNmeApStationInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->mediaStatus);
- CsrMemCpySer(ptr, len, (const void *) primitive->peerMacAddress.a, ((u16) (6)));
- CsrMemCpySer(ptr, len, (const void *) primitive->peerDeviceAddress.a, ((u16) (6)));
- return(ptr);
-}
-
-
-void* CsrWifiNmeApStationIndDes(u8 *buffer, size_t length)
-{
- CsrWifiNmeApStationInd *primitive = kmalloc(sizeof(CsrWifiNmeApStationInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->mediaStatus, buffer, &offset);
- CsrMemCpyDes(primitive->peerMacAddress.a, buffer, &offset, ((u16) (6)));
- CsrMemCpyDes(primitive->peerDeviceAddress.a, buffer, &offset, ((u16) (6)));
-
- return primitive;
-}
-
-
-#endif /* CSR_WIFI_NME_ENABLE */
-#endif /* CSR_WIFI_AP_ENABLE */
diff --git a/drivers/staging/csr/csr_wifi_nme_ap_serialize.h b/drivers/staging/csr/csr_wifi_nme_ap_serialize.h
deleted file mode 100644
index c04585e72460..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_ap_serialize.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_NME_AP_SERIALIZE_H__
-#define CSR_WIFI_NME_AP_SERIALIZE_H__
-
-#include "csr_wifi_msgconv.h"
-
-#include "csr_wifi_nme_ap_prim.h"
-
-#ifndef CSR_WIFI_NME_ENABLE
-#error CSR_WIFI_NME_ENABLE MUST be defined inorder to use csr_wifi_nme_ap_serialize.h
-#endif
-#ifndef CSR_WIFI_AP_ENABLE
-#error CSR_WIFI_AP_ENABLE MUST be defined inorder to use csr_wifi_nme_ap_serialize.h
-#endif
-
-extern void CsrWifiNmeApPfree(void *ptr);
-
-extern u8* CsrWifiNmeApConfigSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeApConfigSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeApConfigSetReqSizeof(void *msg);
-extern void CsrWifiNmeApConfigSetReqSerFree(void *msg);
-
-extern u8* CsrWifiNmeApWpsRegisterReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeApWpsRegisterReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeApWpsRegisterReqSizeof(void *msg);
-#define CsrWifiNmeApWpsRegisterReqSerFree CsrWifiNmeApPfree
-
-extern u8* CsrWifiNmeApStartReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeApStartReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeApStartReqSizeof(void *msg);
-extern void CsrWifiNmeApStartReqSerFree(void *msg);
-
-#define CsrWifiNmeApStopReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiNmeApStopReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiNmeApStopReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiNmeApStopReqSerFree CsrWifiNmeApPfree
-
-extern u8* CsrWifiNmeApWmmParamUpdateReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeApWmmParamUpdateReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeApWmmParamUpdateReqSizeof(void *msg);
-#define CsrWifiNmeApWmmParamUpdateReqSerFree CsrWifiNmeApPfree
-
-extern u8* CsrWifiNmeApStaRemoveReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeApStaRemoveReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeApStaRemoveReqSizeof(void *msg);
-#define CsrWifiNmeApStaRemoveReqSerFree CsrWifiNmeApPfree
-
-#define CsrWifiNmeApConfigSetCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiNmeApConfigSetCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiNmeApConfigSetCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiNmeApConfigSetCfmSerFree CsrWifiNmeApPfree
-
-extern u8* CsrWifiNmeApWpsRegisterCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeApWpsRegisterCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeApWpsRegisterCfmSizeof(void *msg);
-#define CsrWifiNmeApWpsRegisterCfmSerFree CsrWifiNmeApPfree
-
-extern u8* CsrWifiNmeApStartCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeApStartCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeApStartCfmSizeof(void *msg);
-#define CsrWifiNmeApStartCfmSerFree CsrWifiNmeApPfree
-
-extern u8* CsrWifiNmeApStopCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeApStopCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeApStopCfmSizeof(void *msg);
-#define CsrWifiNmeApStopCfmSerFree CsrWifiNmeApPfree
-
-extern u8* CsrWifiNmeApStopIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeApStopIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeApStopIndSizeof(void *msg);
-#define CsrWifiNmeApStopIndSerFree CsrWifiNmeApPfree
-
-#define CsrWifiNmeApWmmParamUpdateCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiNmeApWmmParamUpdateCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiNmeApWmmParamUpdateCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiNmeApWmmParamUpdateCfmSerFree CsrWifiNmeApPfree
-
-extern u8* CsrWifiNmeApStationIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeApStationIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeApStationIndSizeof(void *msg);
-#define CsrWifiNmeApStationIndSerFree CsrWifiNmeApPfree
-
-#endif /* CSR_WIFI_NME_AP_SERIALIZE_H__ */
diff --git a/drivers/staging/csr/csr_wifi_nme_converter_init.h b/drivers/staging/csr/csr_wifi_nme_converter_init.h
deleted file mode 100644
index 85e6f5f57130..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_converter_init.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_NME_CONVERTER_INIT_H__
-#define CSR_WIFI_NME_CONVERTER_INIT_H__
-
-#ifndef CSR_WIFI_NME_ENABLE
-#error CSR_WIFI_NME_ENABLE MUST be defined inorder to use csr_wifi_nme_converter_init.h
-#endif
-
-#ifndef EXCLUDE_CSR_WIFI_NME_MODULE
-
-#include "csr_msgconv.h"
-
-#ifdef CSR_LOG_ENABLE
-#include "csr_log.h"
-
-extern const CsrLogPrimitiveInformation* CsrWifiNmeTechInfoGet(void);
-#endif /* CSR_LOG_ENABLE */
-
-extern void CsrWifiNmeConverterInit(void);
-
-#else /* EXCLUDE_CSR_WIFI_NME_MODULE */
-
-#define CsrWifiNmeConverterInit()
-
-#endif /* EXCLUDE_CSR_WIFI_NME_MODULE */
-
-#endif /* CSR_WIFI_NME_CONVERTER_INIT_H__ */
diff --git a/drivers/staging/csr/csr_wifi_nme_lib.h b/drivers/staging/csr/csr_wifi_nme_lib.h
deleted file mode 100644
index 5a1f132009bf..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_lib.h
+++ /dev/null
@@ -1,991 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_NME_LIB_H__
-#define CSR_WIFI_NME_LIB_H__
-
-#include "csr_sched.h"
-#include "csr_macro.h"
-#include "csr_msg_transport.h"
-
-#include "csr_wifi_lib.h"
-
-#include "csr_wifi_nme_prim.h"
-#include "csr_wifi_nme_task.h"
-
-
-#ifndef CSR_WIFI_NME_ENABLE
-#error CSR_WIFI_NME_ENABLE MUST be defined inorder to use csr_wifi_nme_lib.h
-#endif
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeConnectionStatusGetReqSend
-
- DESCRIPTION
- Requests the current connection status of the NME.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-#define CsrWifiNmeConnectionStatusGetReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeConnectionStatusGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_CONNECTION_STATUS_GET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiNmeConnectionStatusGetReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiNmeConnectionStatusGetReq *msg__; \
- CsrWifiNmeConnectionStatusGetReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeConnectionStatusGetReqSend(src__, interfaceTag__) \
- CsrWifiNmeConnectionStatusGetReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeConnectionStatusGetCfmSend
-
- DESCRIPTION
- Reports the connection status of the NME.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Indicates the success or otherwise of the requested
- operation.
- connectionStatus - NME current connection status
-
-*******************************************************************************/
-#define CsrWifiNmeConnectionStatusGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, connectionStatus__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeConnectionStatusGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_CONNECTION_STATUS_GET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->connectionStatus = (connectionStatus__);
-
-#define CsrWifiNmeConnectionStatusGetCfmSendTo(dst__, src__, interfaceTag__, status__, connectionStatus__) \
- { \
- CsrWifiNmeConnectionStatusGetCfm *msg__; \
- CsrWifiNmeConnectionStatusGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, connectionStatus__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeConnectionStatusGetCfmSend(dst__, interfaceTag__, status__, connectionStatus__) \
- CsrWifiNmeConnectionStatusGetCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, interfaceTag__, status__, connectionStatus__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeEventMaskSetReqSend
-
- DESCRIPTION
- The wireless manager application may register with the NME to receive
- notification of interesting events. Indications will be sent only if the
- wireless manager explicitly registers to be notified of that event.
- indMask is a bit mask of values defined in CsrWifiNmeIndicationsMask.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- indMask - Set mask with values from CsrWifiNmeIndications
-
-*******************************************************************************/
-#define CsrWifiNmeEventMaskSetReqCreate(msg__, dst__, src__, indMask__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeEventMaskSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_EVENT_MASK_SET_REQ, dst__, src__); \
- msg__->indMask = (indMask__);
-
-#define CsrWifiNmeEventMaskSetReqSendTo(dst__, src__, indMask__) \
- { \
- CsrWifiNmeEventMaskSetReq *msg__; \
- CsrWifiNmeEventMaskSetReqCreate(msg__, dst__, src__, indMask__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeEventMaskSetReqSend(src__, indMask__) \
- CsrWifiNmeEventMaskSetReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, indMask__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeEventMaskSetCfmSend
-
- DESCRIPTION
- The NME calls the primitive to report the result of the request
- primitive.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiNmeEventMaskSetCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeEventMaskSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_EVENT_MASK_SET_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiNmeEventMaskSetCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiNmeEventMaskSetCfm *msg__; \
- CsrWifiNmeEventMaskSetCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeEventMaskSetCfmSend(dst__, status__) \
- CsrWifiNmeEventMaskSetCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileConnectReqSend
-
- DESCRIPTION
- Requests the NME to attempt to connect to the specified profile.
- Overrides any current connection attempt.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- profileIdentity - Identity (BSSID, SSID) of profile to be connected to.
- It must match an existing profile in the NME.
-
-*******************************************************************************/
-#define CsrWifiNmeProfileConnectReqCreate(msg__, dst__, src__, interfaceTag__, profileIdentity__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeProfileConnectReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_PROFILE_CONNECT_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->profileIdentity = (profileIdentity__);
-
-#define CsrWifiNmeProfileConnectReqSendTo(dst__, src__, interfaceTag__, profileIdentity__) \
- { \
- CsrWifiNmeProfileConnectReq *msg__; \
- CsrWifiNmeProfileConnectReqCreate(msg__, dst__, src__, interfaceTag__, profileIdentity__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeProfileConnectReqSend(src__, interfaceTag__, profileIdentity__) \
- CsrWifiNmeProfileConnectReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, interfaceTag__, profileIdentity__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileConnectCfmSend
-
- DESCRIPTION
- Reports the status of the NME PROFILE CONNECT REQ. If unsuccessful the
- connectAttempt parameters contain details of the APs that the NME
- attempted to connect to before reporting the failure of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an
- interface
- status - Indicates the success or otherwise of the requested
- operation.
- connectAttemptsCount - This parameter is relevant only if
- status!=CSR_WIFI_NME_STATUS_SUCCESS.
- Number of connection attempt elements provided with
- this primitive
- connectAttempts - This parameter is relevant only if
- status!=CSR_WIFI_NME_STATUS_SUCCESS.
- Points to the list of connection attempt elements
- provided with this primitive
- Each element of the list provides information about
- an AP on which the connection attempt was made and
- the error that occurred during the attempt.
-
-*******************************************************************************/
-#define CsrWifiNmeProfileConnectCfmCreate(msg__, dst__, src__, interfaceTag__, status__, connectAttemptsCount__, connectAttempts__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeProfileConnectCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_PROFILE_CONNECT_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->connectAttemptsCount = (connectAttemptsCount__); \
- msg__->connectAttempts = (connectAttempts__);
-
-#define CsrWifiNmeProfileConnectCfmSendTo(dst__, src__, interfaceTag__, status__, connectAttemptsCount__, connectAttempts__) \
- { \
- CsrWifiNmeProfileConnectCfm *msg__; \
- CsrWifiNmeProfileConnectCfmCreate(msg__, dst__, src__, interfaceTag__, status__, connectAttemptsCount__, connectAttempts__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeProfileConnectCfmSend(dst__, interfaceTag__, status__, connectAttemptsCount__, connectAttempts__) \
- CsrWifiNmeProfileConnectCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, interfaceTag__, status__, connectAttemptsCount__, connectAttempts__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileDeleteAllReqSend
-
- DESCRIPTION
- Deletes all profiles present in the NME, but does NOT modify the
- preferred profile list.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiNmeProfileDeleteAllReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeProfileDeleteAllReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_PROFILE_DELETE_ALL_REQ, dst__, src__);
-
-#define CsrWifiNmeProfileDeleteAllReqSendTo(dst__, src__) \
- { \
- CsrWifiNmeProfileDeleteAllReq *msg__; \
- CsrWifiNmeProfileDeleteAllReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeProfileDeleteAllReqSend(src__) \
- CsrWifiNmeProfileDeleteAllReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileDeleteAllCfmSend
-
- DESCRIPTION
- Reports the status of the CSR_WIFI_NME_PROFILE_DELETE_ALL_REQ.
- Returns always CSR_WIFI_NME_STATUS_SUCCESS.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Indicates the success or otherwise of the requested operation, but
- in this case it always set to success.
-
-*******************************************************************************/
-#define CsrWifiNmeProfileDeleteAllCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeProfileDeleteAllCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_PROFILE_DELETE_ALL_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiNmeProfileDeleteAllCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiNmeProfileDeleteAllCfm *msg__; \
- CsrWifiNmeProfileDeleteAllCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeProfileDeleteAllCfmSend(dst__, status__) \
- CsrWifiNmeProfileDeleteAllCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileDeleteReqSend
-
- DESCRIPTION
- Will delete the profile with a matching identity, but does NOT modify the
- preferred profile list.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- profileIdentity - Identity (BSSID, SSID) of profile to be deleted.
-
-*******************************************************************************/
-#define CsrWifiNmeProfileDeleteReqCreate(msg__, dst__, src__, profileIdentity__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeProfileDeleteReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_PROFILE_DELETE_REQ, dst__, src__); \
- msg__->profileIdentity = (profileIdentity__);
-
-#define CsrWifiNmeProfileDeleteReqSendTo(dst__, src__, profileIdentity__) \
- { \
- CsrWifiNmeProfileDeleteReq *msg__; \
- CsrWifiNmeProfileDeleteReqCreate(msg__, dst__, src__, profileIdentity__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeProfileDeleteReqSend(src__, profileIdentity__) \
- CsrWifiNmeProfileDeleteReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, profileIdentity__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileDeleteCfmSend
-
- DESCRIPTION
- Reports the status of the CSR_WIFI_NME_PROFILE_DELETE_REQ.
- Returns CSR_WIFI_NME_STATUS_NOT_FOUND if there is no matching profile.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Indicates the success or otherwise of the requested operation.
-
-*******************************************************************************/
-#define CsrWifiNmeProfileDeleteCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeProfileDeleteCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_PROFILE_DELETE_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiNmeProfileDeleteCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiNmeProfileDeleteCfm *msg__; \
- CsrWifiNmeProfileDeleteCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeProfileDeleteCfmSend(dst__, status__) \
- CsrWifiNmeProfileDeleteCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileDisconnectIndSend
-
- DESCRIPTION
- Indication generated from the NME (if an application subscribes to
- receive it) that informs that application that the current profile
- connection has disconnected. The indication will contain information
- about APs that it attempted to maintain the connection via i.e. in the
- case of failed roaming.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an
- interface
- connectAttemptsCount - Number of connection attempt elements provided with
- this primitive
- connectAttempts - Points to the list of connection attempt elements
- provided with this primitive
- Each element of the list provides information about
- an AP on which the connection attempt was made and
- the error occurred during the attempt.
-
-*******************************************************************************/
-#define CsrWifiNmeProfileDisconnectIndCreate(msg__, dst__, src__, interfaceTag__, connectAttemptsCount__, connectAttempts__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeProfileDisconnectInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_PROFILE_DISCONNECT_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->connectAttemptsCount = (connectAttemptsCount__); \
- msg__->connectAttempts = (connectAttempts__);
-
-#define CsrWifiNmeProfileDisconnectIndSendTo(dst__, src__, interfaceTag__, connectAttemptsCount__, connectAttempts__) \
- { \
- CsrWifiNmeProfileDisconnectInd *msg__; \
- CsrWifiNmeProfileDisconnectIndCreate(msg__, dst__, src__, interfaceTag__, connectAttemptsCount__, connectAttempts__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeProfileDisconnectIndSend(dst__, interfaceTag__, connectAttemptsCount__, connectAttempts__) \
- CsrWifiNmeProfileDisconnectIndSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, interfaceTag__, connectAttemptsCount__, connectAttempts__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileOrderSetReqSend
-
- DESCRIPTION
- Defines the preferred order that profiles present in the NME should be
- used during the NME auto-connect behaviour.
- If profileIdentitysCount == 0, it removes any existing preferred profile
- list already present in the NME, effectively disabling the auto-connect
- behaviour.
- NOTE: Profile identities that do not match any profile stored in the NME
- are ignored during the auto-connect procedure.
- NOTE: during auto-connect the NME will only attempt to join an existing
- adhoc network and it will never attempt to host an adhoc network; for
- hosting and adhoc network, use CSR_WIFI_NME_PROFILE_CONNECT_REQ
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an
- interface
- profileIdentitysCount - The number of profiles identities in the list.
- profileIdentitys - Points to the list of profile identities.
-
-*******************************************************************************/
-#define CsrWifiNmeProfileOrderSetReqCreate(msg__, dst__, src__, interfaceTag__, profileIdentitysCount__, profileIdentitys__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeProfileOrderSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_PROFILE_ORDER_SET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->profileIdentitysCount = (profileIdentitysCount__); \
- msg__->profileIdentitys = (profileIdentitys__);
-
-#define CsrWifiNmeProfileOrderSetReqSendTo(dst__, src__, interfaceTag__, profileIdentitysCount__, profileIdentitys__) \
- { \
- CsrWifiNmeProfileOrderSetReq *msg__; \
- CsrWifiNmeProfileOrderSetReqCreate(msg__, dst__, src__, interfaceTag__, profileIdentitysCount__, profileIdentitys__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeProfileOrderSetReqSend(src__, interfaceTag__, profileIdentitysCount__, profileIdentitys__) \
- CsrWifiNmeProfileOrderSetReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, interfaceTag__, profileIdentitysCount__, profileIdentitys__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileOrderSetCfmSend
-
- DESCRIPTION
- Confirmation to UNIFI_NME_PROFILE_ORDER_SET.request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Indicates the success or otherwise of the requested
- operation.
-
-*******************************************************************************/
-#define CsrWifiNmeProfileOrderSetCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeProfileOrderSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_PROFILE_ORDER_SET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiNmeProfileOrderSetCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiNmeProfileOrderSetCfm *msg__; \
- CsrWifiNmeProfileOrderSetCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeProfileOrderSetCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiNmeProfileOrderSetCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileSetReqSend
-
- DESCRIPTION
- Creates or updates an existing profile in the NME that matches the unique
- identity of the profile. Each profile is identified by the combination of
- BSSID and SSID. The profile contains all the required credentials for
- attempting to connect to the network. Creating or updating a profile via
- the NME PROFILE SET REQ does NOT add the profile to the preferred profile
- list within the NME used for the NME auto-connect behaviour.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- profile - Specifies the identity and credentials of the network.
-
-*******************************************************************************/
-#define CsrWifiNmeProfileSetReqCreate(msg__, dst__, src__, profile__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeProfileSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_PROFILE_SET_REQ, dst__, src__); \
- msg__->profile = (profile__);
-
-#define CsrWifiNmeProfileSetReqSendTo(dst__, src__, profile__) \
- { \
- CsrWifiNmeProfileSetReq *msg__; \
- CsrWifiNmeProfileSetReqCreate(msg__, dst__, src__, profile__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeProfileSetReqSend(src__, profile__) \
- CsrWifiNmeProfileSetReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, profile__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileSetCfmSend
-
- DESCRIPTION
- Reports the status of the NME PROFILE SET REQ; the request will only fail
- if the details specified in the profile contains an invalid combination
- of parameters for example specifying the profile as cloaked but not
- specifying the SSID. The NME doesn't limit the number of profiles that
- may be created. The NME assumes that the entity configuring it is aware
- of the appropriate limits.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Indicates the success or otherwise of the requested operation.
-
-*******************************************************************************/
-#define CsrWifiNmeProfileSetCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeProfileSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_PROFILE_SET_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiNmeProfileSetCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiNmeProfileSetCfm *msg__; \
- CsrWifiNmeProfileSetCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeProfileSetCfmSend(dst__, status__) \
- CsrWifiNmeProfileSetCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileUpdateIndSend
-
- DESCRIPTION
- Indication generated from the NME (if an application subscribes to
- receive it) that informs that application that the contained profile has
- changed.
- For example, either the credentials EAP-FAST PAC file or the session data
- within the profile has changed.
- It is up to the application whether it stores this updated profile or
- not.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- profile - The identity and credentials of the network.
-
-*******************************************************************************/
-#define CsrWifiNmeProfileUpdateIndCreate(msg__, dst__, src__, interfaceTag__, profile__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeProfileUpdateInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_PROFILE_UPDATE_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->profile = (profile__);
-
-#define CsrWifiNmeProfileUpdateIndSendTo(dst__, src__, interfaceTag__, profile__) \
- { \
- CsrWifiNmeProfileUpdateInd *msg__; \
- CsrWifiNmeProfileUpdateIndCreate(msg__, dst__, src__, interfaceTag__, profile__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeProfileUpdateIndSend(dst__, interfaceTag__, profile__) \
- CsrWifiNmeProfileUpdateIndSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, interfaceTag__, profile__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeSimGsmAuthIndSend
-
- DESCRIPTION
- Indication generated from the NME (if an application subscribes to
- receive it) that requests the UICC Manager to perform a GSM
- authentication on behalf of the NME. This indication is generated when
- the NME is attempting to connect to a profile configured for EAP-SIM. An
- application MUST register to receive this indication for the NME to
- support the EAP-SIM credential types. Otherwise the NME has no route to
- obtain the information from the UICC. EAP-SIM authentication requires 2
- or 3 GSM authentication rounds and therefore 2 or 3 RANDS (GSM Random
- Challenges) are included.
-
- PARAMETERS
- queue - Destination Task Queue
- randsLength - GSM RAND is 16 bytes long hence valid values are 32 (2 RANDS)
- or 48 (3 RANDs).
- rands - 2 or 3 RANDs values.
-
-*******************************************************************************/
-#define CsrWifiNmeSimGsmAuthIndCreate(msg__, dst__, src__, randsLength__, rands__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeSimGsmAuthInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_SIM_GSM_AUTH_IND, dst__, src__); \
- msg__->randsLength = (randsLength__); \
- msg__->rands = (rands__);
-
-#define CsrWifiNmeSimGsmAuthIndSendTo(dst__, src__, randsLength__, rands__) \
- { \
- CsrWifiNmeSimGsmAuthInd *msg__; \
- CsrWifiNmeSimGsmAuthIndCreate(msg__, dst__, src__, randsLength__, rands__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeSimGsmAuthIndSend(dst__, randsLength__, rands__) \
- CsrWifiNmeSimGsmAuthIndSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, randsLength__, rands__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeSimGsmAuthResSend
-
- DESCRIPTION
- Response from the application that received the NME SIM GSM AUTH IND. For
- each GSM authentication round a GSM Ciphering key (Kc) and a signed
- response (SRES) are produced. Since 2 or 3 GSM authentication rounds are
- used the 2 or 3 Kc's obtained respectively are combined into one buffer
- and similarly the 2 or 3 SRES's obtained are combined into another
- buffer. The order of Kc values (SRES values respectively) in their buffer
- is the same as that of their corresponding RAND values in the incoming
- indication.
-
- PARAMETERS
- status - Indicates the outcome of the requested operation:
- STATUS_SUCCESS or STATUS_ERROR
- kcsLength - Length in Bytes of Kc buffer. Legal values are: 16 or 24.
- kcs - Kc buffer holding 2 or 3 Kc values.
- sresLength - Length in Bytes of SRES buffer. Legal values are: 8 or 12.
- sres - SRES buffer holding 2 or 3 SRES values.
-
-*******************************************************************************/
-#define CsrWifiNmeSimGsmAuthResCreate(msg__, dst__, src__, status__, kcsLength__, kcs__, sresLength__, sres__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeSimGsmAuthRes), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_SIM_GSM_AUTH_RES, dst__, src__); \
- msg__->status = (status__); \
- msg__->kcsLength = (kcsLength__); \
- msg__->kcs = (kcs__); \
- msg__->sresLength = (sresLength__); \
- msg__->sres = (sres__);
-
-#define CsrWifiNmeSimGsmAuthResSendTo(dst__, src__, status__, kcsLength__, kcs__, sresLength__, sres__) \
- { \
- CsrWifiNmeSimGsmAuthRes *msg__; \
- CsrWifiNmeSimGsmAuthResCreate(msg__, dst__, src__, status__, kcsLength__, kcs__, sresLength__, sres__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeSimGsmAuthResSend(src__, status__, kcsLength__, kcs__, sresLength__, sres__) \
- CsrWifiNmeSimGsmAuthResSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, status__, kcsLength__, kcs__, sresLength__, sres__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeSimImsiGetIndSend
-
- DESCRIPTION
- Indication generated from the NME (if an application subscribes to
- receive it) that requests the IMSI and UICC type from the UICC Manager.
- This indication is generated when the NME is attempting to connect to a
- profile configured for EAP-SIM/AKA. An application MUST register to
- receive this indication for the NME to support the EAP-SIM/AKA credential
- types. Otherwise the NME has no route to obtain the information from the
- UICC.
-
- PARAMETERS
- queue - Destination Task Queue
-
-*******************************************************************************/
-#define CsrWifiNmeSimImsiGetIndCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeSimImsiGetInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_SIM_IMSI_GET_IND, dst__, src__);
-
-#define CsrWifiNmeSimImsiGetIndSendTo(dst__, src__) \
- { \
- CsrWifiNmeSimImsiGetInd *msg__; \
- CsrWifiNmeSimImsiGetIndCreate(msg__, dst__, src__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeSimImsiGetIndSend(dst__) \
- CsrWifiNmeSimImsiGetIndSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeSimImsiGetResSend
-
- DESCRIPTION
- Response from the application that received the NME SIM IMSI GET IND.
-
- PARAMETERS
- status - Indicates the outcome of the requested operation: STATUS_SUCCESS
- or STATUS_ERROR.
- imsi - The value of the IMSI obtained from the UICC.
- cardType - The UICC type (GSM only (SIM), UMTS only (USIM), Both).
-
-*******************************************************************************/
-#define CsrWifiNmeSimImsiGetResCreate(msg__, dst__, src__, status__, imsi__, cardType__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeSimImsiGetRes), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_SIM_IMSI_GET_RES, dst__, src__); \
- msg__->status = (status__); \
- msg__->imsi = (imsi__); \
- msg__->cardType = (cardType__);
-
-#define CsrWifiNmeSimImsiGetResSendTo(dst__, src__, status__, imsi__, cardType__) \
- { \
- CsrWifiNmeSimImsiGetRes *msg__; \
- CsrWifiNmeSimImsiGetResCreate(msg__, dst__, src__, status__, imsi__, cardType__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeSimImsiGetResSend(src__, status__, imsi__, cardType__) \
- CsrWifiNmeSimImsiGetResSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, status__, imsi__, cardType__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeSimUmtsAuthIndSend
-
- DESCRIPTION
- Indication generated from the NME (if an application subscribes to
- receive it) that requests the UICC Manager to perform a UMTS
- authentication on behalf of the NME. This indication is generated when
- the NME is attempting to connect to a profile configured for EAP-AKA. An
- application MUST register to receive this indication for the NME to
- support the EAP-AKA credential types. Otherwise the NME has no route to
- obtain the information from the USIM. EAP-AKA requires one UMTS
- authentication round and therefore only one RAND and one AUTN values are
- included.
-
- PARAMETERS
- queue - Destination Task Queue
- rand - UMTS RAND value.
- autn - UMTS AUTN value.
-
-*******************************************************************************/
-#define CsrWifiNmeSimUmtsAuthIndCreate(msg__, dst__, src__, rand__, autn__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeSimUmtsAuthInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_SIM_UMTS_AUTH_IND, dst__, src__); \
- memcpy(msg__->rand, (rand__), sizeof(u8) * 16); \
- memcpy(msg__->autn, (autn__), sizeof(u8) * 16);
-
-#define CsrWifiNmeSimUmtsAuthIndSendTo(dst__, src__, rand__, autn__) \
- { \
- CsrWifiNmeSimUmtsAuthInd *msg__; \
- CsrWifiNmeSimUmtsAuthIndCreate(msg__, dst__, src__, rand__, autn__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeSimUmtsAuthIndSend(dst__, rand__, autn__) \
- CsrWifiNmeSimUmtsAuthIndSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, rand__, autn__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeSimUmtsAuthResSend
-
- DESCRIPTION
- Response from the application that received the NME SIM UMTS AUTH IND.
- The values of umtsCipherKey, umtsIntegrityKey, resParameterLength and
- resParameter are only meanigful when result = UMTS_AUTH_RESULT_SUCCESS.
- The value of auts is only meaningful when
- result=UMTS_AUTH_RESULT_SYNC_FAIL.
-
- PARAMETERS
- status - Indicates the outcome of the requested operation:
- STATUS_SUCCESS or STATUS_ERROR.
- result - The result of UMTS authentication as performed by the
- UICC which could be: Success, Authentication Reject or
- Synchronisation Failure. For all these 3 outcomes the
- value of status is success.
- umtsCipherKey - The UMTS Cipher Key as calculated and returned by the
- UICC.
- umtsIntegrityKey - The UMTS Integrity Key as calculated and returned by
- the UICC.
- resParameterLength - The length (in bytes) of the RES parameter (min=4; max
- = 16).
- resParameter - The RES parameter as calculated and returned by the
- UICC.
- auts - The AUTS parameter as calculated and returned by the
- UICC.
-
-*******************************************************************************/
-#define CsrWifiNmeSimUmtsAuthResCreate(msg__, dst__, src__, status__, result__, umtsCipherKey__, umtsIntegrityKey__, resParameterLength__, resParameter__, auts__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeSimUmtsAuthRes), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_SIM_UMTS_AUTH_RES, dst__, src__); \
- msg__->status = (status__); \
- msg__->result = (result__); \
- memcpy(msg__->umtsCipherKey, (umtsCipherKey__), sizeof(u8) * 16); \
- memcpy(msg__->umtsIntegrityKey, (umtsIntegrityKey__), sizeof(u8) * 16); \
- msg__->resParameterLength = (resParameterLength__); \
- msg__->resParameter = (resParameter__); \
- memcpy(msg__->auts, (auts__), sizeof(u8) * 14);
-
-#define CsrWifiNmeSimUmtsAuthResSendTo(dst__, src__, status__, result__, umtsCipherKey__, umtsIntegrityKey__, resParameterLength__, resParameter__, auts__) \
- { \
- CsrWifiNmeSimUmtsAuthRes *msg__; \
- CsrWifiNmeSimUmtsAuthResCreate(msg__, dst__, src__, status__, result__, umtsCipherKey__, umtsIntegrityKey__, resParameterLength__, resParameter__, auts__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeSimUmtsAuthResSend(src__, status__, result__, umtsCipherKey__, umtsIntegrityKey__, resParameterLength__, resParameter__, auts__) \
- CsrWifiNmeSimUmtsAuthResSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, status__, result__, umtsCipherKey__, umtsIntegrityKey__, resParameterLength__, resParameter__, auts__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWpsCancelReqSend
-
- DESCRIPTION
- Requests the NME to cancel any WPS procedure that it is currently
- performing. This includes WPS registrar activities started because of
- CSR_WIFI_NME_AP_REGISTER.request
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-#define CsrWifiNmeWpsCancelReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeWpsCancelReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_WPS_CANCEL_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiNmeWpsCancelReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiNmeWpsCancelReq *msg__; \
- CsrWifiNmeWpsCancelReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeWpsCancelReqSend(src__, interfaceTag__) \
- CsrWifiNmeWpsCancelReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWpsCancelCfmSend
-
- DESCRIPTION
- Reports the status of the NME WPS REQ, the request is always SUCCESSFUL.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Only returns CSR_WIFI_NME_STATUS_SUCCESS
-
-*******************************************************************************/
-#define CsrWifiNmeWpsCancelCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeWpsCancelCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_WPS_CANCEL_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiNmeWpsCancelCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiNmeWpsCancelCfm *msg__; \
- CsrWifiNmeWpsCancelCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeWpsCancelCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiNmeWpsCancelCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWpsCfmSend
-
- DESCRIPTION
- Reports the status of the NME WPS REQ.
- If CSR_WIFI_NME_STATUS_SUCCESS, the profile parameter contains the
- identity and credentials of the AP.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Indicates the success or otherwise of the requested
- operation.
- profile - This parameter is relevant only if
- status==CSR_WIFI_NME_STATUS_SUCCESS.
- The identity and credentials of the network.
-
-*******************************************************************************/
-#define CsrWifiNmeWpsCfmCreate(msg__, dst__, src__, interfaceTag__, status__, profile__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeWpsCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_WPS_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->profile = (profile__);
-
-#define CsrWifiNmeWpsCfmSendTo(dst__, src__, interfaceTag__, status__, profile__) \
- { \
- CsrWifiNmeWpsCfm *msg__; \
- CsrWifiNmeWpsCfmCreate(msg__, dst__, src__, interfaceTag__, status__, profile__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeWpsCfmSend(dst__, interfaceTag__, status__, profile__) \
- CsrWifiNmeWpsCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, interfaceTag__, status__, profile__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWpsConfigSetReqSend
-
- DESCRIPTION
- This primitive passes the WPS information for the device to NME. This may
- be accepted only if no interface is active.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- wpsConfig - WPS config.
-
-*******************************************************************************/
-#define CsrWifiNmeWpsConfigSetReqCreate(msg__, dst__, src__, wpsConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeWpsConfigSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_WPS_CONFIG_SET_REQ, dst__, src__); \
- msg__->wpsConfig = (wpsConfig__);
-
-#define CsrWifiNmeWpsConfigSetReqSendTo(dst__, src__, wpsConfig__) \
- { \
- CsrWifiNmeWpsConfigSetReq *msg__; \
- CsrWifiNmeWpsConfigSetReqCreate(msg__, dst__, src__, wpsConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeWpsConfigSetReqSend(src__, wpsConfig__) \
- CsrWifiNmeWpsConfigSetReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, wpsConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWpsConfigSetCfmSend
-
- DESCRIPTION
- Confirm.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Status of the request.
-
-*******************************************************************************/
-#define CsrWifiNmeWpsConfigSetCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeWpsConfigSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_WPS_CONFIG_SET_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiNmeWpsConfigSetCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiNmeWpsConfigSetCfm *msg__; \
- CsrWifiNmeWpsConfigSetCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeWpsConfigSetCfmSend(dst__, status__) \
- CsrWifiNmeWpsConfigSetCfmSendTo(dst__, CSR_WIFI_NME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWpsReqSend
-
- DESCRIPTION
- Requests the NME to look for WPS enabled APs and attempt to perform WPS
- to determine the appropriate security credentials to connect to the AP.
- If the PIN == '00000000' then 'push button mode' is indicated, otherwise
- the PIN has to match that of the AP. 4 digit pin is passed by sending the
- pin digits in pin[0]..pin[3] and rest of the contents filled with '-'.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- pin - PIN value.
- ssid - Service Set identifier
- bssid - ID of Basic Service Set for which a WPS connection attempt is
- being made.
-
-*******************************************************************************/
-#define CsrWifiNmeWpsReqCreate(msg__, dst__, src__, interfaceTag__, pin__, ssid__, bssid__) \
- msg__ = kmalloc(sizeof(CsrWifiNmeWpsReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_NME_PRIM, CSR_WIFI_NME_WPS_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- memcpy(msg__->pin, (pin__), sizeof(u8) * 8); \
- msg__->ssid = (ssid__); \
- msg__->bssid = (bssid__);
-
-#define CsrWifiNmeWpsReqSendTo(dst__, src__, interfaceTag__, pin__, ssid__, bssid__) \
- { \
- CsrWifiNmeWpsReq *msg__; \
- CsrWifiNmeWpsReqCreate(msg__, dst__, src__, interfaceTag__, pin__, ssid__, bssid__); \
- CsrMsgTransport(dst__, CSR_WIFI_NME_PRIM, msg__); \
- }
-
-#define CsrWifiNmeWpsReqSend(src__, interfaceTag__, pin__, ssid__, bssid__) \
- CsrWifiNmeWpsReqSendTo(CSR_WIFI_NME_IFACEQUEUE, src__, interfaceTag__, pin__, ssid__, bssid__)
-
-#endif /* CSR_WIFI_NME_LIB_H__ */
diff --git a/drivers/staging/csr/csr_wifi_nme_prim.h b/drivers/staging/csr/csr_wifi_nme_prim.h
deleted file mode 100644
index 9a7927a117ea..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_prim.h
+++ /dev/null
@@ -1,1657 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_NME_PRIM_H__
-#define CSR_WIFI_NME_PRIM_H__
-
-#include <linux/types.h>
-#include "csr_prim_defs.h"
-#include "csr_sched.h"
-#include "csr_wifi_common.h"
-#include "csr_result.h"
-#include "csr_wifi_fsm_event.h"
-#include "csr_wifi_sme_prim.h"
-
-#ifndef CSR_WIFI_NME_ENABLE
-#error CSR_WIFI_NME_ENABLE MUST be defined inorder to use csr_wifi_nme_prim.h
-#endif
-
-#define CSR_WIFI_NME_PRIM (0x0424)
-
-typedef CsrPrim CsrWifiNmePrim;
-
-typedef void (*CsrWifiNmeFrameFreeFunction)(void *frame);
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeAuthMode
-
- DESCRIPTION
- WiFi Authentication Mode
-
- VALUES
- CSR_WIFI_NME_AUTH_MODE_80211_OPEN
- - Connects to an open system network (i.e. no authentication,
- no encryption) or to a WEP enabled network.
- CSR_WIFI_NME_AUTH_MODE_80211_SHARED
- - Connect to a WEP enabled network.
- CSR_WIFI_NME_AUTH_MODE_8021X_WPA
- - Connects to a WPA Enterprise enabled network.
- CSR_WIFI_NME_AUTH_MODE_8021X_WPAPSK
- - Connects to a WPA with Pre-Shared Key enabled network.
- CSR_WIFI_NME_AUTH_MODE_8021X_WPA2
- - Connects to a WPA2 Enterprise enabled network.
- CSR_WIFI_NME_AUTH_MODE_8021X_WPA2PSK
- - Connects to a WPA2 with Pre-Shared Key enabled network.
- CSR_WIFI_NME_AUTH_MODE_8021X_CCKM
- - Connects to a CCKM enabled network.
- CSR_WIFI_NME_AUTH_MODE_WAPI_WAI
- - Connects to a WAPI Enterprise enabled network.
- CSR_WIFI_NME_AUTH_MODE_WAPI_WAIPSK
- - Connects to a WAPI with Pre-Shared Key enabled network.
- CSR_WIFI_NME_AUTH_MODE_8021X_OTHER1X
- - For future use.
-
-*******************************************************************************/
-typedef u16 CsrWifiNmeAuthMode;
-#define CSR_WIFI_NME_AUTH_MODE_80211_OPEN ((CsrWifiNmeAuthMode) 0x0001)
-#define CSR_WIFI_NME_AUTH_MODE_80211_SHARED ((CsrWifiNmeAuthMode) 0x0002)
-#define CSR_WIFI_NME_AUTH_MODE_8021X_WPA ((CsrWifiNmeAuthMode) 0x0004)
-#define CSR_WIFI_NME_AUTH_MODE_8021X_WPAPSK ((CsrWifiNmeAuthMode) 0x0008)
-#define CSR_WIFI_NME_AUTH_MODE_8021X_WPA2 ((CsrWifiNmeAuthMode) 0x0010)
-#define CSR_WIFI_NME_AUTH_MODE_8021X_WPA2PSK ((CsrWifiNmeAuthMode) 0x0020)
-#define CSR_WIFI_NME_AUTH_MODE_8021X_CCKM ((CsrWifiNmeAuthMode) 0x0040)
-#define CSR_WIFI_NME_AUTH_MODE_WAPI_WAI ((CsrWifiNmeAuthMode) 0x0080)
-#define CSR_WIFI_NME_AUTH_MODE_WAPI_WAIPSK ((CsrWifiNmeAuthMode) 0x0100)
-#define CSR_WIFI_NME_AUTH_MODE_8021X_OTHER1X ((CsrWifiNmeAuthMode) 0x0200)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeBssType
-
- DESCRIPTION
- Type of BSS
-
- VALUES
- CSR_WIFI_NME_BSS_TYPE_INFRASTRUCTURE
- - Infrastructure BSS type where access to the network is via
- one or several Access Points.
- CSR_WIFI_NME_BSS_TYPE_ADHOC
- - Adhoc or Independent BSS Type where one Station acts as a
- host and future stations can join the adhoc network without
- needing an access point.
- CSR_WIFI_NME_BSS_TYPE_RESERVED
- - To be in sync with SME.This is not used.
- CSR_WIFI_NME_BSS_TYPE_P2P
- - P2P mode of operation.
-
-*******************************************************************************/
-typedef u8 CsrWifiNmeBssType;
-#define CSR_WIFI_NME_BSS_TYPE_INFRASTRUCTURE ((CsrWifiNmeBssType) 0x00)
-#define CSR_WIFI_NME_BSS_TYPE_ADHOC ((CsrWifiNmeBssType) 0x01)
-#define CSR_WIFI_NME_BSS_TYPE_RESERVED ((CsrWifiNmeBssType) 0x02)
-#define CSR_WIFI_NME_BSS_TYPE_P2P ((CsrWifiNmeBssType) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeCcxOptionsMask
-
- DESCRIPTION
- Enumeration type defining possible mask values for setting CCX options.
-
- VALUES
- CSR_WIFI_NME_CCX_OPTION_NONE - No CCX option is set.
- CSR_WIFI_NME_CCX_OPTION_CCKM - CCX option cckm is set.
-
-*******************************************************************************/
-typedef u8 CsrWifiNmeCcxOptionsMask;
-#define CSR_WIFI_NME_CCX_OPTION_NONE ((CsrWifiNmeCcxOptionsMask) 0x00)
-#define CSR_WIFI_NME_CCX_OPTION_CCKM ((CsrWifiNmeCcxOptionsMask) 0x01)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeConfigAction
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_PIN_ENTRY_PUSH_BUTTON -
- CSR_WIFI_PIN_ENTRY_DISPLAY_PIN -
- CSR_WIFI_PIN_ENTRY_ENTER_PIN -
-
-*******************************************************************************/
-typedef u8 CsrWifiNmeConfigAction;
-#define CSR_WIFI_PIN_ENTRY_PUSH_BUTTON ((CsrWifiNmeConfigAction) 0x00)
-#define CSR_WIFI_PIN_ENTRY_DISPLAY_PIN ((CsrWifiNmeConfigAction) 0x01)
-#define CSR_WIFI_PIN_ENTRY_ENTER_PIN ((CsrWifiNmeConfigAction) 0x02)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeConnectionStatus
-
- DESCRIPTION
- Indicate the NME Connection Status when connecting or when disconnecting
-
- VALUES
- CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_DISCONNECTED
- - NME is disconnected.
- CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_CONNECTING
- - NME is in the process of connecting.
- CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_AUTHENTICATING
- - NME is in the authentication stage of a connection attempt.
- CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_CONNECTED
- - NME is connected.
- CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_DISCONNECTING
- - NME is in the process of disconnecting.
-
-*******************************************************************************/
-typedef u8 CsrWifiNmeConnectionStatus;
-#define CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_DISCONNECTED ((CsrWifiNmeConnectionStatus) 0x00)
-#define CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_CONNECTING ((CsrWifiNmeConnectionStatus) 0x01)
-#define CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_AUTHENTICATING ((CsrWifiNmeConnectionStatus) 0x02)
-#define CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_CONNECTED ((CsrWifiNmeConnectionStatus) 0x03)
-#define CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_DISCONNECTING ((CsrWifiNmeConnectionStatus) 0x04)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeCredentialType
-
- DESCRIPTION
- NME Credential Types
-
- VALUES
- CSR_WIFI_NME_CREDENTIAL_TYPE_OPEN_SYSTEM
- - Credential Type Open System.
- CSR_WIFI_NME_CREDENTIAL_TYPE_WEP64
- - Credential Type WEP-64
- CSR_WIFI_NME_CREDENTIAL_TYPE_WEP128
- - Credential Type WEP-128
- CSR_WIFI_NME_CREDENTIAL_TYPE_WPA_PSK
- - Credential Type WPA Pre-Shared Key
- CSR_WIFI_NME_CREDENTIAL_TYPE_WPA_PASSPHRASE
- - Credential Type WPA pass phrase
- CSR_WIFI_NME_CREDENTIAL_TYPE_WPA2_PSK
- - Credential Type WPA2 Pre-Shared Key.
- CSR_WIFI_NME_CREDENTIAL_TYPE_WPA2_PASSPHRASE
- - Credential Type WPA2 pass phrase
- CSR_WIFI_NME_CREDENTIAL_TYPE_WAPI_PSK
- - Credential Type WAPI Pre-Shared Key.
- CSR_WIFI_NME_CREDENTIAL_TYPE_WAPI_PASSPHRASE
- - Credential Type WAPI pass phrase
- CSR_WIFI_NME_CREDENTIAL_TYPE_WAPI
- - Credential Type WAPI certificates
- CSR_WIFI_NME_CREDENTIAL_TYPE_8021X
- - Credential Type 802.1X: the associated type supports
- FAST/LEAP/TLS/TTLS/PEAP/etc.
-
-*******************************************************************************/
-typedef u16 CsrWifiNmeCredentialType;
-#define CSR_WIFI_NME_CREDENTIAL_TYPE_OPEN_SYSTEM ((CsrWifiNmeCredentialType) 0x0000)
-#define CSR_WIFI_NME_CREDENTIAL_TYPE_WEP64 ((CsrWifiNmeCredentialType) 0x0001)
-#define CSR_WIFI_NME_CREDENTIAL_TYPE_WEP128 ((CsrWifiNmeCredentialType) 0x0002)
-#define CSR_WIFI_NME_CREDENTIAL_TYPE_WPA_PSK ((CsrWifiNmeCredentialType) 0x0003)
-#define CSR_WIFI_NME_CREDENTIAL_TYPE_WPA_PASSPHRASE ((CsrWifiNmeCredentialType) 0x0004)
-#define CSR_WIFI_NME_CREDENTIAL_TYPE_WPA2_PSK ((CsrWifiNmeCredentialType) 0x0005)
-#define CSR_WIFI_NME_CREDENTIAL_TYPE_WPA2_PASSPHRASE ((CsrWifiNmeCredentialType) 0x0006)
-#define CSR_WIFI_NME_CREDENTIAL_TYPE_WAPI_PSK ((CsrWifiNmeCredentialType) 0x0007)
-#define CSR_WIFI_NME_CREDENTIAL_TYPE_WAPI_PASSPHRASE ((CsrWifiNmeCredentialType) 0x0008)
-#define CSR_WIFI_NME_CREDENTIAL_TYPE_WAPI ((CsrWifiNmeCredentialType) 0x0009)
-#define CSR_WIFI_NME_CREDENTIAL_TYPE_8021X ((CsrWifiNmeCredentialType) 0x000A)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeEapMethod
-
- DESCRIPTION
- Outer EAP method with possibly inner method.
-
- VALUES
- CSR_WIFI_NME_EAP_METHOD_TLS
- - EAP-TLS Method.
- CSR_WIFI_NME_EAP_METHOD_TTLS_MSCHAPV2
- - EAP-TTLS Method with MSCHAPV2.
- CSR_WIFI_NME_EAP_METHOD_PEAP_GTC
- - EAP-PEAP Method with GTC.
- CSR_WIFI_NME_EAP_METHOD_PEAP_MSCHAPV2
- - EAP-PEAP Method with MSCHAPV2.
- CSR_WIFI_NME_EAP_METHOD_SIM
- - EAP-SIM Method.
- CSR_WIFI_NME_EAP_METHOD_AKA
- - EAP-AKA Method.
- CSR_WIFI_NME_EAP_METHOD_FAST_GTC
- - EAP-FAST Method with GTC.
- CSR_WIFI_NME_EAP_METHOD_FAST_MSCHAPV2
- - EAP-FAST Method with MSCHAPV2.
- CSR_WIFI_NME_EAP_METHOD_LEAP
- - EAP-LEAP Method.
-
-*******************************************************************************/
-typedef u16 CsrWifiNmeEapMethod;
-#define CSR_WIFI_NME_EAP_METHOD_TLS ((CsrWifiNmeEapMethod) 0x0001)
-#define CSR_WIFI_NME_EAP_METHOD_TTLS_MSCHAPV2 ((CsrWifiNmeEapMethod) 0x0002)
-#define CSR_WIFI_NME_EAP_METHOD_PEAP_GTC ((CsrWifiNmeEapMethod) 0x0004)
-#define CSR_WIFI_NME_EAP_METHOD_PEAP_MSCHAPV2 ((CsrWifiNmeEapMethod) 0x0008)
-#define CSR_WIFI_NME_EAP_METHOD_SIM ((CsrWifiNmeEapMethod) 0x0010)
-#define CSR_WIFI_NME_EAP_METHOD_AKA ((CsrWifiNmeEapMethod) 0x0020)
-#define CSR_WIFI_NME_EAP_METHOD_FAST_GTC ((CsrWifiNmeEapMethod) 0x0040)
-#define CSR_WIFI_NME_EAP_METHOD_FAST_MSCHAPV2 ((CsrWifiNmeEapMethod) 0x0080)
-#define CSR_WIFI_NME_EAP_METHOD_LEAP ((CsrWifiNmeEapMethod) 0x0100)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeEncryption
-
- DESCRIPTION
- WiFi Encryption method
-
- VALUES
- CSR_WIFI_NME_ENCRYPTION_CIPHER_NONE
- - No encryprion set.
- CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_WEP40
- - 40 bytes WEP key for peer to peer communication.
- CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_WEP104
- - 104 bytes WEP key for peer to peer communication.
- CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_TKIP
- - TKIP key for peer to peer communication.
- CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_CCMP
- - CCMP key for peer to peer communication.
- CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_SMS4
- - SMS4 key for peer to peer communication.
- CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_WEP40
- - 40 bytes WEP key for broadcast messages.
- CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_WEP104
- - 104 bytes WEP key for broadcast messages.
- CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_TKIP
- - TKIP key for broadcast messages.
- CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_CCMP
- - CCMP key for broadcast messages
- CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_SMS4
- - SMS4 key for broadcast messages.
-
-*******************************************************************************/
-typedef u16 CsrWifiNmeEncryption;
-#define CSR_WIFI_NME_ENCRYPTION_CIPHER_NONE ((CsrWifiNmeEncryption) 0x0000)
-#define CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_WEP40 ((CsrWifiNmeEncryption) 0x0001)
-#define CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_WEP104 ((CsrWifiNmeEncryption) 0x0002)
-#define CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_TKIP ((CsrWifiNmeEncryption) 0x0004)
-#define CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_CCMP ((CsrWifiNmeEncryption) 0x0008)
-#define CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_SMS4 ((CsrWifiNmeEncryption) 0x0010)
-#define CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_WEP40 ((CsrWifiNmeEncryption) 0x0020)
-#define CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_WEP104 ((CsrWifiNmeEncryption) 0x0040)
-#define CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_TKIP ((CsrWifiNmeEncryption) 0x0080)
-#define CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_CCMP ((CsrWifiNmeEncryption) 0x0100)
-#define CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_SMS4 ((CsrWifiNmeEncryption) 0x0200)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeIndications
-
- DESCRIPTION
- NME indications
-
- VALUES
- CSR_WIFI_NME_INDICATIONS_IND_AP_STATION
- - NME AP Station Indication.
- CSR_WIFI_NME_INDICATIONS_IND_AP_STOP
- - NME AP Stop Indication.
- CSR_WIFI_NME_INDICATIONS_IND_SIM_UMTS_AUTH
- - NME UMTS Authentication Indication.
- CSR_WIFI_NME_INDICATIONS_IND_P2P_GROUP_START
- - NME P2P Group Start Indication.
- CSR_WIFI_NME_INDICATIONS_IND_P2P_GROUP_STATUS
- - NME P2P Group Status Indication.
- CSR_WIFI_NME_INDICATIONS_IND_P2P_GROUP_ROLE
- - NME P2P Group Role Indication.
- CSR_WIFI_NME_INDICATIONS_IND_PROFILE_DISCONNECT
- - NME Profile Disconnect Indication.
- CSR_WIFI_NME_INDICATIONS_IND_PROFILE_UPDATE
- - NME Profile Update Indication.
- CSR_WIFI_NME_INDICATIONS_IND_SIM_IMSI_GET
- - NME GET IMSI Indication.
- CSR_WIFI_NME_INDICATIONS_IND_SIM_GSM_AUTH
- - NME GSM Authentication Indication.
- CSR_WIFI_NME_INDICATIONS_ALL
- - Used to register for all available indications
-
-*******************************************************************************/
-typedef u32 CsrWifiNmeIndications;
-#define CSR_WIFI_NME_INDICATIONS_IND_AP_STATION ((CsrWifiNmeIndications) 0x00100000)
-#define CSR_WIFI_NME_INDICATIONS_IND_AP_STOP ((CsrWifiNmeIndications) 0x00200000)
-#define CSR_WIFI_NME_INDICATIONS_IND_SIM_UMTS_AUTH ((CsrWifiNmeIndications) 0x01000000)
-#define CSR_WIFI_NME_INDICATIONS_IND_P2P_GROUP_START ((CsrWifiNmeIndications) 0x02000000)
-#define CSR_WIFI_NME_INDICATIONS_IND_P2P_GROUP_STATUS ((CsrWifiNmeIndications) 0x04000000)
-#define CSR_WIFI_NME_INDICATIONS_IND_P2P_GROUP_ROLE ((CsrWifiNmeIndications) 0x08000000)
-#define CSR_WIFI_NME_INDICATIONS_IND_PROFILE_DISCONNECT ((CsrWifiNmeIndications) 0x10000000)
-#define CSR_WIFI_NME_INDICATIONS_IND_PROFILE_UPDATE ((CsrWifiNmeIndications) 0x20000000)
-#define CSR_WIFI_NME_INDICATIONS_IND_SIM_IMSI_GET ((CsrWifiNmeIndications) 0x40000000)
-#define CSR_WIFI_NME_INDICATIONS_IND_SIM_GSM_AUTH ((CsrWifiNmeIndications) 0x80000000)
-#define CSR_WIFI_NME_INDICATIONS_ALL ((CsrWifiNmeIndications) 0xFFFFFFFF)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeSecError
-
- DESCRIPTION
- NME Security Errors
- place holder for the security library abort reason
-
- VALUES
- CSR_WIFI_NME_SEC_ERROR_SEC_ERROR_UNKNOWN
- - Unknown Security Error.
-
-*******************************************************************************/
-typedef u8 CsrWifiNmeSecError;
-#define CSR_WIFI_NME_SEC_ERROR_SEC_ERROR_UNKNOWN ((CsrWifiNmeSecError) 0x00)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeSimCardType
-
- DESCRIPTION
- (U)SIM Card (or UICC) types
-
- VALUES
- CSR_WIFI_NME_SIM_CARD_TYPE_2G - 2G SIM card, capable of performing GSM
- authentication only.
- CSR_WIFI_NME_SIM_CARD_TYPE_3G - UICC supporting USIM application, capable
- of performing UMTS authentication only.
- CSR_WIFI_NME_SIM_CARD_TYPE_2G3G - UICC supporting both USIM and SIM
- applications, capable of performing both
- UMTS and GSM authentications.
-
-*******************************************************************************/
-typedef u8 CsrWifiNmeSimCardType;
-#define CSR_WIFI_NME_SIM_CARD_TYPE_2G ((CsrWifiNmeSimCardType) 0x01)
-#define CSR_WIFI_NME_SIM_CARD_TYPE_3G ((CsrWifiNmeSimCardType) 0x02)
-#define CSR_WIFI_NME_SIM_CARD_TYPE_2G3G ((CsrWifiNmeSimCardType) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeUmtsAuthResult
-
- DESCRIPTION
- Only relevant for UMTS Authentication. It indicates if the UICC has
- successfully authenticated the network or otherwise.
-
- VALUES
- CSR_WIFI_NME_UMTS_AUTH_RESULT_SUCCESS
- - Successful outcome from USIM indicating that the card has
- successfully authenticated the network.
- CSR_WIFI_NME_UMTS_AUTH_RESULT_SYNC_FAIL
- - Unsuccessful outcome from USIM indicating that the card is
- requesting the network to synchronise and re-try again. If
- no further request is received an NME timer will expire and
- the authentication is aborted.
- CSR_WIFI_NME_UMTS_AUTH_RESULT_REJECT
- - Unsuccessful outcome from USIM indicating that the card has
- rejected the network and that the authentication is
- aborted.
-
-*******************************************************************************/
-typedef u8 CsrWifiNmeUmtsAuthResult;
-#define CSR_WIFI_NME_UMTS_AUTH_RESULT_SUCCESS ((CsrWifiNmeUmtsAuthResult) 0x00)
-#define CSR_WIFI_NME_UMTS_AUTH_RESULT_SYNC_FAIL ((CsrWifiNmeUmtsAuthResult) 0x01)
-#define CSR_WIFI_NME_UMTS_AUTH_RESULT_REJECT ((CsrWifiNmeUmtsAuthResult) 0x02)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWmmQosInfo
-
- DESCRIPTION
- Defines bits for the QoS Info octect as defined in the WMM specification.
- The values of this type are used across the NME/SME/Router API's and they
- must be kept consistent with the corresponding types in the .xml of the
- other interfaces
-
- VALUES
- CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_ALL
- - WMM AP may deliver all buffered frames.
- CSR_WIFI_NME_WMM_QOS_INFO_AC_VO
- - To enable the triggering and delivery of QoS Voice.
- CSR_WIFI_NME_WMM_QOS_INFO_AC_VI
- - To enable the triggering and delivery of QoS Video.
- CSR_WIFI_NME_WMM_QOS_INFO_AC_BK
- - To enable the triggering and delivery of QoS Background.
- CSR_WIFI_NME_WMM_QOS_INFO_AC_BE
- - To enable the triggering and delivery of QoS Best Effort.
- CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_TWO
- - WMM AP may deliver a maximum of 2 buffered frames per
- Unscheduled Service Period (USP).
- CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_FOUR
- - WMM AP may deliver a maximum of 4 buffered frames per USP.
- CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_SIX
- - WMM AP may deliver a maximum of 6 buffered frames per USP.
-
-*******************************************************************************/
-typedef u8 CsrWifiNmeWmmQosInfo;
-#define CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_ALL ((CsrWifiNmeWmmQosInfo) 0x00)
-#define CSR_WIFI_NME_WMM_QOS_INFO_AC_VO ((CsrWifiNmeWmmQosInfo) 0x01)
-#define CSR_WIFI_NME_WMM_QOS_INFO_AC_VI ((CsrWifiNmeWmmQosInfo) 0x02)
-#define CSR_WIFI_NME_WMM_QOS_INFO_AC_BK ((CsrWifiNmeWmmQosInfo) 0x04)
-#define CSR_WIFI_NME_WMM_QOS_INFO_AC_BE ((CsrWifiNmeWmmQosInfo) 0x08)
-#define CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_TWO ((CsrWifiNmeWmmQosInfo) 0x20)
-#define CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_FOUR ((CsrWifiNmeWmmQosInfo) 0x40)
-#define CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_SIX ((CsrWifiNmeWmmQosInfo) 0x60)
-
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeEapMethodMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiNmeEapMethod.
-
-*******************************************************************************/
-typedef u16 CsrWifiNmeEapMethodMask;
-/*******************************************************************************
-
- NAME
- CsrWifiNmeEncryptionMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiNmeEncryption
-
-*******************************************************************************/
-typedef u16 CsrWifiNmeEncryptionMask;
-/*******************************************************************************
-
- NAME
- CsrWifiNmeIndicationsMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiNmeIndications
-
-*******************************************************************************/
-typedef u32 CsrWifiNmeIndicationsMask;
-/*******************************************************************************
-
- NAME
- CsrWifiNmeNmeIndicationsMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiNmeNmeIndications.
- Used to overlap the unused portion of the unifi_IndicationsMask For NME
- specific indications
-
-*******************************************************************************/
-typedef u32 CsrWifiNmeNmeIndicationsMask;
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWmmQosInfoMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiNmeWmmQosInfo
-
-*******************************************************************************/
-typedef u8 CsrWifiNmeWmmQosInfoMask;
-
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeEmpty
-
- DESCRIPTION
- Empty Structure to indicate that no credentials are available.
-
- MEMBERS
- empty - Only element of the empty structure (always set to 0).
-
-*******************************************************************************/
-typedef struct
-{
- u8 empty;
-} CsrWifiNmeEmpty;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmePassphrase
-
- DESCRIPTION
- Structure holding the ASCII Pass Phrase data.
-
- MEMBERS
- encryptionMode - Encryption type as defined in CsrWifiSmeEncryption.
- passphrase - Pass phrase ASCII value.
-
-*******************************************************************************/
-typedef struct
-{
- u16 encryptionMode;
- char *passphrase;
-} CsrWifiNmePassphrase;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmePsk
-
- DESCRIPTION
- Structure holding the Pre-Shared Key data.
-
- MEMBERS
- encryptionMode - Encryption type as defined in CsrWifiSmeEncryption.
- psk - Pre-Shared Key value.
-
-*******************************************************************************/
-typedef struct
-{
- u16 encryptionMode;
- u8 psk[32];
-} CsrWifiNmePsk;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWapiCredentials
-
- DESCRIPTION
- Structure holding WAPI credentials data.
-
- MEMBERS
- certificateLength - Length in bytes of the following client certificate.
- certificate - The actual client certificate data (if present).
- DER/PEM format supported.
- privateKeyLength - Length in bytes of the following private key.
- privateKey - The actual private key. DER/PEM format.
- caCertificateLength - Length in bytes of the following certificate authority
- certificate.
- caCertificate - The actual certificate authority certificate data. If
- not supplied the received certificate authority
- certificate is assumed to be validate, if present the
- received certificate is validated against it. DER/PEM
- format supported.
-
-*******************************************************************************/
-typedef struct
-{
- u32 certificateLength;
- u8 *certificate;
- u16 privateKeyLength;
- u8 *privateKey;
- u32 caCertificateLength;
- u8 *caCertificate;
-} CsrWifiNmeWapiCredentials;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeConnectAttempt
-
- DESCRIPTION
- Structure holding Connection attempt data.
-
- MEMBERS
- bssid - Id of Basic Service Set connections attempt have been made
- to.
- status - Status returned to indicate the success or otherwise of the
- connection attempt.
- securityError - Security error status indicating the nature of the failure
- to connect.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiMacAddress bssid;
- CsrResult status;
- CsrWifiNmeSecError securityError;
-} CsrWifiNmeConnectAttempt;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeEapCredentials
-
- DESCRIPTION
- Supports the use of multiple EAP methods via a single structure. The
- methods required are indicated by the value set in the eapMethodMask
-
- MEMBERS
- eapMethodMask
- - Bit mask of supported EAP methods
- Currently only supports the setting of one bit.
- Required for all the EAP methods.
- authMode
- - Bit mask representing the authentication types that may be
- supported by a suitable AP. An AP must support at least one
- of the authentication types specified to be considered for
- connection. Required for all EAP methods.
- encryptionMode
- - Bit mask representing the encryption types that may be
- supported by a suitable AP. An AP must support a suitable
- mix of the pairwise and group encryption types requested to
- be considered for connection. Required for all EAP methods.
- userName
- - User name. Required for all EAP methods except: SIM or AKA.
- userPassword
- - User Password. Required for all EAP methods except: TLS,
- SIM or AKA.
- authServerUserIdentity
- - Authentication server user Identity. Required for all EAP
- methods except: TLS, SIM, AKA or FAST.
- clientCertificateLength
- - Length in bytes of the following client certificate (if
- present). Only required for TLS.
- clientCertificate
- - The actual client certificate data (if present). Only
- required for TLS. DER/PEM format supported.
- certificateAuthorityCertificateLength
- - Length in bytes of the following certificate authority
- certificate (if present). Optional for TLS, TTLS, PEAP.
- certificateAuthorityCertificate
- - The actual certificate authority certificate data (if
- present). If not supplied the received certificate
- authority certificate is assumed to be valid, if present
- the received certificate is validated against it. Optional
- for TLS, TTLS, PEAP. DER/PEM format supported.
- privateKeyLength
- - Length in bytes of the following private key (if present).
- Only required for TLS.
- privateKey
- - The actual private key (if present). Only required for TLS.
- DER/PEM format, maybe password protected.
- privateKeyPassword
- - Optional password to protect the private key.
- sessionLength
- - Length in bytes of the following session field Supported
- for all EAP methods except: SIM or AKA.
- session
- - Session information to support faster re-authentication.
- Supported for all EAP methods except: SIM or AKA.
- allowPacProvisioning
- - If TRUE: PAC provisioning is allowed 'over-the_air';
- If FALSE: a PAC must be supplied.
- Only required for FAST.
- pacLength
- - Length the following PAC field. If allowPacProvisioning is
- FALSE then the PAC MUST be supplied (i.e. non-zero). Only
- required for FAST.
- pac
- - The actual PAC data. If allowPacProvisioning is FALSE then
- the PAC MUST be supplied. Only required for FAST.
- pacPassword
- - Optional password to protect the PAC. Only required for
- FAST.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiNmeEapMethodMask eapMethodMask;
- CsrWifiSmeAuthModeMask authMode;
- CsrWifiNmeEncryptionMask encryptionMode;
- char *userName;
- char *userPassword;
- char *authServerUserIdentity;
- u32 clientCertificateLength;
- u8 *clientCertificate;
- u32 certificateAuthorityCertificateLength;
- u8 *certificateAuthorityCertificate;
- u16 privateKeyLength;
- u8 *privateKey;
- char *privateKeyPassword;
- u32 sessionLength;
- u8 *session;
- u8 allowPacProvisioning;
- u32 pacLength;
- u8 *pac;
- char *pacPassword;
-} CsrWifiNmeEapCredentials;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmePeerConfig
-
- DESCRIPTION
- Structure holding Peer Config data.
-
- MEMBERS
- p2pDeviceId -
- groupCapabilityMask -
- groupOwnerIntent -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiMacAddress p2pDeviceId;
- CsrWifiSmeP2pGroupCapabilityMask groupCapabilityMask;
- u8 groupOwnerIntent;
-} CsrWifiNmePeerConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileIdentity
-
- DESCRIPTION
- The identity of a profile is defined as the unique combination the BSSID
- and SSID.
-
- MEMBERS
- bssid - ID of Basic Service Set for or the P2pDevice address of the GO for
- which a connection attempt was made.
- ssid - Service Set Id.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiMacAddress bssid;
- CsrWifiSsid ssid;
-} CsrWifiNmeProfileIdentity;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWep128Keys
-
- DESCRIPTION
- Structure holding WEP Authentication Type and WEP keys that can be used
- when using WEP128.
-
- MEMBERS
- wepAuthType - Mask to select the WEP authentication type (Open or Shared)
- selectedWepKey - Index to one of the four keys below indicating the
- currently used WEP key.
- key1 - Value for key number 1.
- key2 - Value for key number 2.
- key3 - Value for key number 3.
- key4 - Value for key number 4.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeAuthModeMask wepAuthType;
- u8 selectedWepKey;
- u8 key1[13];
- u8 key2[13];
- u8 key3[13];
- u8 key4[13];
-} CsrWifiNmeWep128Keys;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWep64Keys
-
- DESCRIPTION
- Structure for holding WEP Authentication Type and WEP keys that can be
- used when using WEP64.
-
- MEMBERS
- wepAuthType - Mask to select the WEP authentication type (Open or Shared)
- selectedWepKey - Index to one of the four keys below indicating the
- currently used WEP key.
- key1 - Value for key number 1.
- key2 - Value for key number 2.
- key3 - Value for key number 3.
- key4 - Value for key number 4.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeAuthModeMask wepAuthType;
- u8 selectedWepKey;
- u8 key1[5];
- u8 key2[5];
- u8 key3[5];
- u8 key4[5];
-} CsrWifiNmeWep64Keys;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeCredentials
-
- DESCRIPTION
- Structure containing the Credentials data.
-
- MEMBERS
- credentialType - Credential type value (as defined in the
- enumeration type).
- credential - Union containing credentials which depends on
- credentialType parameter.
- credentialeap -
- credentialwapiPassphrase -
- credentialwpa2Passphrase -
- credentialwpa2Psk -
- credentialwapiPsk -
- credentialwpaPassphrase -
- credentialwapi -
- credentialwep128Key -
- credentialwpaPsk -
- credentialopenSystem -
- credentialwep64Key -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiNmeCredentialType credentialType;
- union {
- CsrWifiNmeEapCredentials eap;
- CsrWifiNmePassphrase wapiPassphrase;
- CsrWifiNmePassphrase wpa2Passphrase;
- CsrWifiNmePsk wpa2Psk;
- CsrWifiNmePsk wapiPsk;
- CsrWifiNmePassphrase wpaPassphrase;
- CsrWifiNmeWapiCredentials wapi;
- CsrWifiNmeWep128Keys wep128Key;
- CsrWifiNmePsk wpaPsk;
- CsrWifiNmeEmpty openSystem;
- CsrWifiNmeWep64Keys wep64Key;
- } credential;
-} CsrWifiNmeCredentials;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfile
-
- DESCRIPTION
- Structure containing the Profile data.
-
- MEMBERS
- profileIdentity - Profile Identity.
- wmmQosInfoMask - Mask for WMM QoS information.
- bssType - Type of BSS (Infrastructure or Adhoc).
- channelNo - Channel Number.
- ccxOptionsMask - Options mask for Cisco Compatible Extentions.
- cloakedSsid - Flag to decide whether the SSID is cloaked (not
- transmitted) or not.
- credentials - Credentials data.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiNmeProfileIdentity profileIdentity;
- CsrWifiNmeWmmQosInfoMask wmmQosInfoMask;
- CsrWifiNmeBssType bssType;
- u8 channelNo;
- u8 ccxOptionsMask;
- u8 cloakedSsid;
- CsrWifiNmeCredentials credentials;
-} CsrWifiNmeProfile;
-
-
-/* Downstream */
-#define CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST (0x0000)
-
-#define CSR_WIFI_NME_PROFILE_SET_REQ ((CsrWifiNmePrim) (0x0000 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_PROFILE_DELETE_REQ ((CsrWifiNmePrim) (0x0001 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_PROFILE_DELETE_ALL_REQ ((CsrWifiNmePrim) (0x0002 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_PROFILE_ORDER_SET_REQ ((CsrWifiNmePrim) (0x0003 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_PROFILE_CONNECT_REQ ((CsrWifiNmePrim) (0x0004 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_WPS_REQ ((CsrWifiNmePrim) (0x0005 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_WPS_CANCEL_REQ ((CsrWifiNmePrim) (0x0006 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_CONNECTION_STATUS_GET_REQ ((CsrWifiNmePrim) (0x0007 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_SIM_IMSI_GET_RES ((CsrWifiNmePrim) (0x0008 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_SIM_GSM_AUTH_RES ((CsrWifiNmePrim) (0x0009 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_SIM_UMTS_AUTH_RES ((CsrWifiNmePrim) (0x000A + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_WPS_CONFIG_SET_REQ ((CsrWifiNmePrim) (0x000B + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_NME_EVENT_MASK_SET_REQ ((CsrWifiNmePrim) (0x000C + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
-
-
-#define CSR_WIFI_NME_PRIM_DOWNSTREAM_HIGHEST (0x000C + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST)
-
-/* Upstream */
-#define CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST (0x0000 + CSR_PRIM_UPSTREAM)
-
-#define CSR_WIFI_NME_PROFILE_SET_CFM ((CsrWifiNmePrim)(0x0000 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_PROFILE_DELETE_CFM ((CsrWifiNmePrim)(0x0001 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_PROFILE_DELETE_ALL_CFM ((CsrWifiNmePrim)(0x0002 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_PROFILE_ORDER_SET_CFM ((CsrWifiNmePrim)(0x0003 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_PROFILE_CONNECT_CFM ((CsrWifiNmePrim)(0x0004 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_WPS_CFM ((CsrWifiNmePrim)(0x0005 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_WPS_CANCEL_CFM ((CsrWifiNmePrim)(0x0006 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_CONNECTION_STATUS_GET_CFM ((CsrWifiNmePrim)(0x0007 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_PROFILE_UPDATE_IND ((CsrWifiNmePrim)(0x0008 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_PROFILE_DISCONNECT_IND ((CsrWifiNmePrim)(0x0009 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_SIM_IMSI_GET_IND ((CsrWifiNmePrim)(0x000A + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_SIM_GSM_AUTH_IND ((CsrWifiNmePrim)(0x000B + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_SIM_UMTS_AUTH_IND ((CsrWifiNmePrim)(0x000C + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_WPS_CONFIG_SET_CFM ((CsrWifiNmePrim)(0x000D + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_NME_EVENT_MASK_SET_CFM ((CsrWifiNmePrim)(0x000E + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
-
-#define CSR_WIFI_NME_PRIM_UPSTREAM_HIGHEST (0x000E + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST)
-
-#define CSR_WIFI_NME_PRIM_DOWNSTREAM_COUNT (CSR_WIFI_NME_PRIM_DOWNSTREAM_HIGHEST + 1 - CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST)
-#define CSR_WIFI_NME_PRIM_UPSTREAM_COUNT (CSR_WIFI_NME_PRIM_UPSTREAM_HIGHEST + 1 - CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST)
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileSetReq
-
- DESCRIPTION
- Creates or updates an existing profile in the NME that matches the unique
- identity of the profile. Each profile is identified by the combination of
- BSSID and SSID. The profile contains all the required credentials for
- attempting to connect to the network. Creating or updating a profile via
- the NME PROFILE SET REQ does NOT add the profile to the preferred profile
- list within the NME used for the NME auto-connect behaviour.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- profile - Specifies the identity and credentials of the network.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiNmeProfile profile;
-} CsrWifiNmeProfileSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileDeleteReq
-
- DESCRIPTION
- Will delete the profile with a matching identity, but does NOT modify the
- preferred profile list.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- profileIdentity - Identity (BSSID, SSID) of profile to be deleted.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiNmeProfileIdentity profileIdentity;
-} CsrWifiNmeProfileDeleteReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileDeleteAllReq
-
- DESCRIPTION
- Deletes all profiles present in the NME, but does NOT modify the
- preferred profile list.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiNmeProfileDeleteAllReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileOrderSetReq
-
- DESCRIPTION
- Defines the preferred order that profiles present in the NME should be
- used during the NME auto-connect behaviour.
- If profileIdentitysCount == 0, it removes any existing preferred profile
- list already present in the NME, effectively disabling the auto-connect
- behaviour.
- NOTE: Profile identities that do not match any profile stored in the NME
- are ignored during the auto-connect procedure.
- NOTE: during auto-connect the NME will only attempt to join an existing
- adhoc network and it will never attempt to host an adhoc network; for
- hosting and adhoc network, use CSR_WIFI_NME_PROFILE_CONNECT_REQ
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an
- interface
- profileIdentitysCount - The number of profiles identities in the list.
- profileIdentitys - Points to the list of profile identities.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u8 profileIdentitysCount;
- CsrWifiNmeProfileIdentity *profileIdentitys;
-} CsrWifiNmeProfileOrderSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileConnectReq
-
- DESCRIPTION
- Requests the NME to attempt to connect to the specified profile.
- Overrides any current connection attempt.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- profileIdentity - Identity (BSSID, SSID) of profile to be connected to.
- It must match an existing profile in the NME.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiNmeProfileIdentity profileIdentity;
-} CsrWifiNmeProfileConnectReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWpsReq
-
- DESCRIPTION
- Requests the NME to look for WPS enabled APs and attempt to perform WPS
- to determine the appropriate security credentials to connect to the AP.
- If the PIN == '00000000' then 'push button mode' is indicated, otherwise
- the PIN has to match that of the AP. 4 digit pin is passed by sending the
- pin digits in pin[0]..pin[3] and rest of the contents filled with '-'.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- pin - PIN value.
- ssid - Service Set identifier
- bssid - ID of Basic Service Set for which a WPS connection attempt is
- being made.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u8 pin[8];
- CsrWifiSsid ssid;
- CsrWifiMacAddress bssid;
-} CsrWifiNmeWpsReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWpsCancelReq
-
- DESCRIPTION
- Requests the NME to cancel any WPS procedure that it is currently
- performing. This includes WPS registrar activities started because of
- CSR_WIFI_NME_AP_REGISTER.request
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiNmeWpsCancelReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeConnectionStatusGetReq
-
- DESCRIPTION
- Requests the current connection status of the NME.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiNmeConnectionStatusGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeSimImsiGetRes
-
- DESCRIPTION
- Response from the application that received the NME SIM IMSI GET IND.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Indicates the outcome of the requested operation: STATUS_SUCCESS
- or STATUS_ERROR.
- imsi - The value of the IMSI obtained from the UICC.
- cardType - The UICC type (GSM only (SIM), UMTS only (USIM), Both).
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- char *imsi;
- CsrWifiNmeSimCardType cardType;
-} CsrWifiNmeSimImsiGetRes;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeSimGsmAuthRes
-
- DESCRIPTION
- Response from the application that received the NME SIM GSM AUTH IND. For
- each GSM authentication round a GSM Ciphering key (Kc) and a signed
- response (SRES) are produced. Since 2 or 3 GSM authentication rounds are
- used the 2 or 3 Kc's obtained respectively are combined into one buffer
- and similarly the 2 or 3 SRES's obtained are combined into another
- buffer. The order of Kc values (SRES values respectively) in their buffer
- is the same as that of their corresponding RAND values in the incoming
- indication.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Indicates the outcome of the requested operation:
- STATUS_SUCCESS or STATUS_ERROR
- kcsLength - Length in Bytes of Kc buffer. Legal values are: 16 or 24.
- kcs - Kc buffer holding 2 or 3 Kc values.
- sresLength - Length in Bytes of SRES buffer. Legal values are: 8 or 12.
- sres - SRES buffer holding 2 or 3 SRES values.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- u8 kcsLength;
- u8 *kcs;
- u8 sresLength;
- u8 *sres;
-} CsrWifiNmeSimGsmAuthRes;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeSimUmtsAuthRes
-
- DESCRIPTION
- Response from the application that received the NME SIM UMTS AUTH IND.
- The values of umtsCipherKey, umtsIntegrityKey, resParameterLength and
- resParameter are only meanigful when result = UMTS_AUTH_RESULT_SUCCESS.
- The value of auts is only meaningful when
- result=UMTS_AUTH_RESULT_SYNC_FAIL.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Indicates the outcome of the requested operation:
- STATUS_SUCCESS or STATUS_ERROR.
- result - The result of UMTS authentication as performed by the
- UICC which could be: Success, Authentication Reject or
- Synchronisation Failure. For all these 3 outcomes the
- value of status is success.
- umtsCipherKey - The UMTS Cipher Key as calculated and returned by the
- UICC.
- umtsIntegrityKey - The UMTS Integrity Key as calculated and returned by
- the UICC.
- resParameterLength - The length (in bytes) of the RES parameter (min=4; max
- = 16).
- resParameter - The RES parameter as calculated and returned by the
- UICC.
- auts - The AUTS parameter as calculated and returned by the
- UICC.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- CsrWifiNmeUmtsAuthResult result;
- u8 umtsCipherKey[16];
- u8 umtsIntegrityKey[16];
- u8 resParameterLength;
- u8 *resParameter;
- u8 auts[14];
-} CsrWifiNmeSimUmtsAuthRes;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWpsConfigSetReq
-
- DESCRIPTION
- This primitive passes the WPS information for the device to NME. This may
- be accepted only if no interface is active.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- wpsConfig - WPS config.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiSmeWpsConfig wpsConfig;
-} CsrWifiNmeWpsConfigSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeEventMaskSetReq
-
- DESCRIPTION
- The wireless manager application may register with the NME to receive
- notification of interesting events. Indications will be sent only if the
- wireless manager explicitly registers to be notified of that event.
- indMask is a bit mask of values defined in CsrWifiNmeIndicationsMask.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- indMask - Set mask with values from CsrWifiNmeIndications
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiNmeIndicationsMask indMask;
-} CsrWifiNmeEventMaskSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileSetCfm
-
- DESCRIPTION
- Reports the status of the NME PROFILE SET REQ; the request will only fail
- if the details specified in the profile contains an invalid combination
- of parameters for example specifying the profile as cloaked but not
- specifying the SSID. The NME doesn't limit the number of profiles that
- may be created. The NME assumes that the entity configuring it is aware
- of the appropriate limits.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Indicates the success or otherwise of the requested operation.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiNmeProfileSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileDeleteCfm
-
- DESCRIPTION
- Reports the status of the CSR_WIFI_NME_PROFILE_DELETE_REQ.
- Returns CSR_WIFI_NME_STATUS_NOT_FOUND if there is no matching profile.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Indicates the success or otherwise of the requested operation.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiNmeProfileDeleteCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileDeleteAllCfm
-
- DESCRIPTION
- Reports the status of the CSR_WIFI_NME_PROFILE_DELETE_ALL_REQ.
- Returns always CSR_WIFI_NME_STATUS_SUCCESS.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Indicates the success or otherwise of the requested operation, but
- in this case it always set to success.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiNmeProfileDeleteAllCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileOrderSetCfm
-
- DESCRIPTION
- Confirmation to UNIFI_NME_PROFILE_ORDER_SET.request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Indicates the success or otherwise of the requested
- operation.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiNmeProfileOrderSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileConnectCfm
-
- DESCRIPTION
- Reports the status of the NME PROFILE CONNECT REQ. If unsuccessful the
- connectAttempt parameters contain details of the APs that the NME
- attempted to connect to before reporting the failure of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an
- interface
- status - Indicates the success or otherwise of the requested
- operation.
- connectAttemptsCount - This parameter is relevant only if
- status!=CSR_WIFI_NME_STATUS_SUCCESS.
- Number of connection attempt elements provided with
- this primitive
- connectAttempts - This parameter is relevant only if
- status!=CSR_WIFI_NME_STATUS_SUCCESS.
- Points to the list of connection attempt elements
- provided with this primitive
- Each element of the list provides information about
- an AP on which the connection attempt was made and
- the error that occurred during the attempt.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- u8 connectAttemptsCount;
- CsrWifiNmeConnectAttempt *connectAttempts;
-} CsrWifiNmeProfileConnectCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWpsCfm
-
- DESCRIPTION
- Reports the status of the NME WPS REQ.
- If CSR_WIFI_NME_STATUS_SUCCESS, the profile parameter contains the
- identity and credentials of the AP.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Indicates the success or otherwise of the requested
- operation.
- profile - This parameter is relevant only if
- status==CSR_WIFI_NME_STATUS_SUCCESS.
- The identity and credentials of the network.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiNmeProfile profile;
-} CsrWifiNmeWpsCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWpsCancelCfm
-
- DESCRIPTION
- Reports the status of the NME WPS REQ, the request is always SUCCESSFUL.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Only returns CSR_WIFI_NME_STATUS_SUCCESS
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiNmeWpsCancelCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeConnectionStatusGetCfm
-
- DESCRIPTION
- Reports the connection status of the NME.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Indicates the success or otherwise of the requested
- operation.
- connectionStatus - NME current connection status
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiNmeConnectionStatus connectionStatus;
-} CsrWifiNmeConnectionStatusGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileUpdateInd
-
- DESCRIPTION
- Indication generated from the NME (if an application subscribes to
- receive it) that informs that application that the contained profile has
- changed.
- For example, either the credentials EAP-FAST PAC file or the session data
- within the profile has changed.
- It is up to the application whether it stores this updated profile or
- not.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- profile - The identity and credentials of the network.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiNmeProfile profile;
-} CsrWifiNmeProfileUpdateInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeProfileDisconnectInd
-
- DESCRIPTION
- Indication generated from the NME (if an application subscribes to
- receive it) that informs that application that the current profile
- connection has disconnected. The indication will contain information
- about APs that it attempted to maintain the connection via i.e. in the
- case of failed roaming.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an
- interface
- connectAttemptsCount - Number of connection attempt elements provided with
- this primitive
- connectAttempts - Points to the list of connection attempt elements
- provided with this primitive
- Each element of the list provides information about
- an AP on which the connection attempt was made and
- the error occurred during the attempt.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u8 connectAttemptsCount;
- CsrWifiNmeConnectAttempt *connectAttempts;
-} CsrWifiNmeProfileDisconnectInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeSimImsiGetInd
-
- DESCRIPTION
- Indication generated from the NME (if an application subscribes to
- receive it) that requests the IMSI and UICC type from the UICC Manager.
- This indication is generated when the NME is attempting to connect to a
- profile configured for EAP-SIM/AKA. An application MUST register to
- receive this indication for the NME to support the EAP-SIM/AKA credential
- types. Otherwise the NME has no route to obtain the information from the
- UICC.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiNmeSimImsiGetInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeSimGsmAuthInd
-
- DESCRIPTION
- Indication generated from the NME (if an application subscribes to
- receive it) that requests the UICC Manager to perform a GSM
- authentication on behalf of the NME. This indication is generated when
- the NME is attempting to connect to a profile configured for EAP-SIM. An
- application MUST register to receive this indication for the NME to
- support the EAP-SIM credential types. Otherwise the NME has no route to
- obtain the information from the UICC. EAP-SIM authentication requires 2
- or 3 GSM authentication rounds and therefore 2 or 3 RANDS (GSM Random
- Challenges) are included.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- randsLength - GSM RAND is 16 bytes long hence valid values are 32 (2 RANDS)
- or 48 (3 RANDs).
- rands - 2 or 3 RANDs values.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u8 randsLength;
- u8 *rands;
-} CsrWifiNmeSimGsmAuthInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeSimUmtsAuthInd
-
- DESCRIPTION
- Indication generated from the NME (if an application subscribes to
- receive it) that requests the UICC Manager to perform a UMTS
- authentication on behalf of the NME. This indication is generated when
- the NME is attempting to connect to a profile configured for EAP-AKA. An
- application MUST register to receive this indication for the NME to
- support the EAP-AKA credential types. Otherwise the NME has no route to
- obtain the information from the USIM. EAP-AKA requires one UMTS
- authentication round and therefore only one RAND and one AUTN values are
- included.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- rand - UMTS RAND value.
- autn - UMTS AUTN value.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u8 rand[16];
- u8 autn[16];
-} CsrWifiNmeSimUmtsAuthInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeWpsConfigSetCfm
-
- DESCRIPTION
- Confirm.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Status of the request.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiNmeWpsConfigSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiNmeEventMaskSetCfm
-
- DESCRIPTION
- The NME calls the primitive to report the result of the request
- primitive.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiNmeEventMaskSetCfm;
-
-#endif /* CSR_WIFI_NME_PRIM_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_nme_serialize.h b/drivers/staging/csr/csr_wifi_nme_serialize.h
deleted file mode 100644
index ebac484419cf..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_serialize.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_NME_SERIALIZE_H__
-#define CSR_WIFI_NME_SERIALIZE_H__
-
-#include "csr_wifi_msgconv.h"
-#include "csr_wifi_nme_prim.h"
-
-#ifndef CSR_WIFI_NME_ENABLE
-#error CSR_WIFI_NME_ENABLE MUST be defined inorder to use csr_wifi_nme_serialize.h
-#endif
-
-extern void CsrWifiNmePfree(void *ptr);
-
-extern u8* CsrWifiNmeProfileSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeProfileSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeProfileSetReqSizeof(void *msg);
-extern void CsrWifiNmeProfileSetReqSerFree(void *msg);
-
-extern u8* CsrWifiNmeProfileDeleteReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeProfileDeleteReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeProfileDeleteReqSizeof(void *msg);
-#define CsrWifiNmeProfileDeleteReqSerFree CsrWifiNmePfree
-
-#define CsrWifiNmeProfileDeleteAllReqSer CsrWifiEventSer
-#define CsrWifiNmeProfileDeleteAllReqDes CsrWifiEventDes
-#define CsrWifiNmeProfileDeleteAllReqSizeof CsrWifiEventSizeof
-#define CsrWifiNmeProfileDeleteAllReqSerFree CsrWifiNmePfree
-
-extern u8* CsrWifiNmeProfileOrderSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeProfileOrderSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeProfileOrderSetReqSizeof(void *msg);
-extern void CsrWifiNmeProfileOrderSetReqSerFree(void *msg);
-
-extern u8* CsrWifiNmeProfileConnectReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeProfileConnectReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeProfileConnectReqSizeof(void *msg);
-#define CsrWifiNmeProfileConnectReqSerFree CsrWifiNmePfree
-
-extern u8* CsrWifiNmeWpsReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeWpsReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeWpsReqSizeof(void *msg);
-#define CsrWifiNmeWpsReqSerFree CsrWifiNmePfree
-
-#define CsrWifiNmeWpsCancelReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiNmeWpsCancelReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiNmeWpsCancelReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiNmeWpsCancelReqSerFree CsrWifiNmePfree
-
-#define CsrWifiNmeConnectionStatusGetReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiNmeConnectionStatusGetReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiNmeConnectionStatusGetReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiNmeConnectionStatusGetReqSerFree CsrWifiNmePfree
-
-extern u8* CsrWifiNmeSimImsiGetResSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeSimImsiGetResDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeSimImsiGetResSizeof(void *msg);
-extern void CsrWifiNmeSimImsiGetResSerFree(void *msg);
-
-extern u8* CsrWifiNmeSimGsmAuthResSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeSimGsmAuthResDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeSimGsmAuthResSizeof(void *msg);
-extern void CsrWifiNmeSimGsmAuthResSerFree(void *msg);
-
-extern u8* CsrWifiNmeSimUmtsAuthResSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeSimUmtsAuthResDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeSimUmtsAuthResSizeof(void *msg);
-extern void CsrWifiNmeSimUmtsAuthResSerFree(void *msg);
-
-extern u8* CsrWifiNmeWpsConfigSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeWpsConfigSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeWpsConfigSetReqSizeof(void *msg);
-extern void CsrWifiNmeWpsConfigSetReqSerFree(void *msg);
-
-#define CsrWifiNmeEventMaskSetReqSer CsrWifiEventCsrUint32Ser
-#define CsrWifiNmeEventMaskSetReqDes CsrWifiEventCsrUint32Des
-#define CsrWifiNmeEventMaskSetReqSizeof CsrWifiEventCsrUint32Sizeof
-#define CsrWifiNmeEventMaskSetReqSerFree CsrWifiNmePfree
-
-#define CsrWifiNmeProfileSetCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiNmeProfileSetCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiNmeProfileSetCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiNmeProfileSetCfmSerFree CsrWifiNmePfree
-
-#define CsrWifiNmeProfileDeleteCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiNmeProfileDeleteCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiNmeProfileDeleteCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiNmeProfileDeleteCfmSerFree CsrWifiNmePfree
-
-#define CsrWifiNmeProfileDeleteAllCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiNmeProfileDeleteAllCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiNmeProfileDeleteAllCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiNmeProfileDeleteAllCfmSerFree CsrWifiNmePfree
-
-extern u8* CsrWifiNmeProfileOrderSetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeProfileOrderSetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeProfileOrderSetCfmSizeof(void *msg);
-#define CsrWifiNmeProfileOrderSetCfmSerFree CsrWifiNmePfree
-
-extern u8* CsrWifiNmeProfileConnectCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeProfileConnectCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeProfileConnectCfmSizeof(void *msg);
-extern void CsrWifiNmeProfileConnectCfmSerFree(void *msg);
-
-extern u8* CsrWifiNmeWpsCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeWpsCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeWpsCfmSizeof(void *msg);
-extern void CsrWifiNmeWpsCfmSerFree(void *msg);
-
-extern u8* CsrWifiNmeWpsCancelCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeWpsCancelCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeWpsCancelCfmSizeof(void *msg);
-#define CsrWifiNmeWpsCancelCfmSerFree CsrWifiNmePfree
-
-extern u8* CsrWifiNmeConnectionStatusGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeConnectionStatusGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeConnectionStatusGetCfmSizeof(void *msg);
-#define CsrWifiNmeConnectionStatusGetCfmSerFree CsrWifiNmePfree
-
-extern u8* CsrWifiNmeProfileUpdateIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeProfileUpdateIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeProfileUpdateIndSizeof(void *msg);
-extern void CsrWifiNmeProfileUpdateIndSerFree(void *msg);
-
-extern u8* CsrWifiNmeProfileDisconnectIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeProfileDisconnectIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeProfileDisconnectIndSizeof(void *msg);
-extern void CsrWifiNmeProfileDisconnectIndSerFree(void *msg);
-
-#define CsrWifiNmeSimImsiGetIndSer CsrWifiEventSer
-#define CsrWifiNmeSimImsiGetIndDes CsrWifiEventDes
-#define CsrWifiNmeSimImsiGetIndSizeof CsrWifiEventSizeof
-#define CsrWifiNmeSimImsiGetIndSerFree CsrWifiNmePfree
-
-extern u8* CsrWifiNmeSimGsmAuthIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeSimGsmAuthIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeSimGsmAuthIndSizeof(void *msg);
-extern void CsrWifiNmeSimGsmAuthIndSerFree(void *msg);
-
-extern u8* CsrWifiNmeSimUmtsAuthIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiNmeSimUmtsAuthIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiNmeSimUmtsAuthIndSizeof(void *msg);
-#define CsrWifiNmeSimUmtsAuthIndSerFree CsrWifiNmePfree
-
-#define CsrWifiNmeWpsConfigSetCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiNmeWpsConfigSetCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiNmeWpsConfigSetCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiNmeWpsConfigSetCfmSerFree CsrWifiNmePfree
-
-#define CsrWifiNmeEventMaskSetCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiNmeEventMaskSetCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiNmeEventMaskSetCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiNmeEventMaskSetCfmSerFree CsrWifiNmePfree
-
-#endif /* CSR_WIFI_NME_SERIALIZE_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_nme_task.h b/drivers/staging/csr/csr_wifi_nme_task.h
deleted file mode 100644
index 84e973a59bb2..000000000000
--- a/drivers/staging/csr/csr_wifi_nme_task.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_NME_TASK_H__
-#define CSR_WIFI_NME_TASK_H__
-
-#include <linux/types.h>
-#include "csr_sched.h"
-
-#ifndef CSR_WIFI_NME_ENABLE
-#error CSR_WIFI_NME_ENABLE MUST be defined inorder to use csr_wifi_nme_task.h
-#endif
-
-#define CSR_WIFI_NME_LOG_ID 0x1203FFFF
-extern CsrSchedQid CSR_WIFI_NME_IFACEQUEUE;
-
-#endif /* CSR_WIFI_NME_TASK_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_private_common.h b/drivers/staging/csr/csr_wifi_private_common.h
deleted file mode 100644
index ee3bd51b934a..000000000000
--- a/drivers/staging/csr/csr_wifi_private_common.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#ifndef CSR_WIFI_PRIVATE_COMMON_H__
-#define CSR_WIFI_PRIVATE_COMMON_H__
-
-/**
- * @brief maximum number of STAs allowed to be connected
- *
- * @par Description
- * min & max Beacon Interval
- */
-#define CSR_WIFI_AP_MAX_ASSOC_STA 8
-
-/** Number of only b rates */
-#define CSR_WIFI_SME_AP_MAX_ONLY_B_RATES 4
-
-
-/** Number of mandatory b rates */
-#define CSR_WIFI_SME_AP_MAX_MANDATORY_B_RATES 2
-
-
-/** Number of mandatory bg rates */
-#define CSR_WIFI_SME_AP_MAX_MANDATORY_BG_RATES 4
-
-
-/** Number of bg rates */
-#define CSR_WIFI_SME_AP_MAX_BG_RATES 12
-
-
-/** Number of no b only g rates */
-#define CSR_WIFI_SME_AP_MAX_NO_B_ONLY_G_RATES 8
-
-
-/** Number of mandatory g rates */
-#define CSR_WIFI_SME_AP_MAX_MANDATORY_G_RATES 7
-
-
-/* Number of g mandatory rates */
-#define CSR_WIFI_SME_AP_G_MANDATORY_RATES_NUM 7
-
-
-/* Number of b mandatory rates */
-#define CSR_WIFI_SME_AP_B_MANDATORY_RATES_NUM 2
-
-
-/* Number of b/g mandatory rates */
-#define CSR_WIFI_SME_AP_BG_MANDATORY_RATES_NUM 4
-
-
-/* The maximum allowed length of SSID */
-#define CSR_WIFI_SME_AP_SSID_MAX_LENGTH 32
-
-/* Refer 8.4.2.27 RSN element - we support TKIP, WPA2, WAPI and PSK only, no pmkid, group cipher suite */
-#define CSR_WIFI_SME_RSN_PACKED_SIZE (1 + 1 + 2 + 4 + 2 + 4 * 2 + 2 + 4 * 1 + 2 + 24)
-
-/* Refer 7.3.2.9 (ISO/IEC 8802-11:2006) WAPI element - we support WAPI PSK only, no bkid, group cipher suite */
-#define CSR_WIFI_SME_WAPI_PACKED_SIZE (1 + 1 + 2 + 2 + 4 * 1 + 2 + 4 * 1 + 4 + 2 + 24)
-
-
-/* Common structure for NME and SME to maintain Interface mode*/
-typedef u8 CsrWifiInterfaceMode;
-#define CSR_WIFI_MODE_NONE ((CsrWifiInterfaceMode) 0xFF)
-#define CSR_WIFI_MODE_STA ((CsrWifiInterfaceMode) 0x00)
-#define CSR_WIFI_MODE_AP ((CsrWifiInterfaceMode) 0x01)
-#define CSR_WIFI_MODE_P2P_DEVICE ((CsrWifiInterfaceMode) 0x02)
-#define CSR_WIFI_MODE_P2P_CLI ((CsrWifiInterfaceMode) 0x03)
-#define CSR_WIFI_MODE_P2P_GO ((CsrWifiInterfaceMode) 0x04)
-#define CSR_WIFI_MODE_AMP ((CsrWifiInterfaceMode) 0x05)
-#define CSR_WIFI_MODE_WPS_ENROLLEE ((CsrWifiInterfaceMode) 0x06)
-#define CSR_WIFI_MODE_IBSS ((CsrWifiInterfaceMode) 0x07)
-
-#endif
-
diff --git a/drivers/staging/csr/csr_wifi_result.h b/drivers/staging/csr/csr_wifi_result.h
deleted file mode 100644
index 3c394c7e5fa9..000000000000
--- a/drivers/staging/csr/csr_wifi_result.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#ifndef CSR_WIFI_RESULT_H__
-#define CSR_WIFI_RESULT_H__
-
-#include "csr_result.h"
-
-/* THIS FILE SHOULD CONTAIN ONLY RESULT CODES */
-
-/* Result Codes */
-#define CSR_WIFI_HIP_RESULT_INVALID_VALUE ((CsrResult) 1) /* Invalid argument value */
-#define CSR_WIFI_HIP_RESULT_NO_DEVICE ((CsrResult) 2) /* The specified device is no longer present */
-#define CSR_WIFI_HIP_RESULT_NO_SPACE ((CsrResult) 3) /* A queue or buffer is full */
-#define CSR_WIFI_HIP_RESULT_NO_MEMORY ((CsrResult) 4) /* Fatal error, no memory */
-#define CSR_WIFI_HIP_RESULT_RANGE ((CsrResult) 5) /* Request exceeds the range of a file or a buffer */
-#define CSR_WIFI_HIP_RESULT_NOT_FOUND ((CsrResult) 6) /* A file (typically a f/w patch) is not found */
-
-#endif /* CSR_WIFI_RESULT_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_router_converter_init.c b/drivers/staging/csr/csr_wifi_router_converter_init.c
deleted file mode 100644
index 775c013d0514..000000000000
--- a/drivers/staging/csr/csr_wifi_router_converter_init.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#include "csr_msgconv.h"
-#include "csr_macro.h"
-
-
-#ifdef CSR_LOG_ENABLE
-#include "csr_log.h"
-#endif
-
-#ifndef EXCLUDE_CSR_WIFI_ROUTER_MODULE
-#include "csr_wifi_router_serialize.h"
-#include "csr_wifi_router_prim.h"
-
-static CsrMsgConvMsgEntry csrwifirouter_conv_lut[] = {
- { CSR_WIFI_ROUTER_MA_PACKET_SUBSCRIBE_REQ, CsrWifiRouterMaPacketSubscribeReqSizeof, CsrWifiRouterMaPacketSubscribeReqSer, CsrWifiRouterMaPacketSubscribeReqDes, CsrWifiRouterMaPacketSubscribeReqSerFree },
- { CSR_WIFI_ROUTER_MA_PACKET_UNSUBSCRIBE_REQ, CsrWifiRouterMaPacketUnsubscribeReqSizeof, CsrWifiRouterMaPacketUnsubscribeReqSer, CsrWifiRouterMaPacketUnsubscribeReqDes, CsrWifiRouterMaPacketUnsubscribeReqSerFree },
- { CSR_WIFI_ROUTER_MA_PACKET_REQ, CsrWifiRouterMaPacketReqSizeof, CsrWifiRouterMaPacketReqSer, CsrWifiRouterMaPacketReqDes, CsrWifiRouterMaPacketReqSerFree },
- { CSR_WIFI_ROUTER_MA_PACKET_RES, CsrWifiRouterMaPacketResSizeof, CsrWifiRouterMaPacketResSer, CsrWifiRouterMaPacketResDes, CsrWifiRouterMaPacketResSerFree },
- { CSR_WIFI_ROUTER_MA_PACKET_CANCEL_REQ, CsrWifiRouterMaPacketCancelReqSizeof, CsrWifiRouterMaPacketCancelReqSer, CsrWifiRouterMaPacketCancelReqDes, CsrWifiRouterMaPacketCancelReqSerFree },
- { CSR_WIFI_ROUTER_MA_PACKET_SUBSCRIBE_CFM, CsrWifiRouterMaPacketSubscribeCfmSizeof, CsrWifiRouterMaPacketSubscribeCfmSer, CsrWifiRouterMaPacketSubscribeCfmDes, CsrWifiRouterMaPacketSubscribeCfmSerFree },
- { CSR_WIFI_ROUTER_MA_PACKET_UNSUBSCRIBE_CFM, CsrWifiRouterMaPacketUnsubscribeCfmSizeof, CsrWifiRouterMaPacketUnsubscribeCfmSer, CsrWifiRouterMaPacketUnsubscribeCfmDes, CsrWifiRouterMaPacketUnsubscribeCfmSerFree },
- { CSR_WIFI_ROUTER_MA_PACKET_CFM, CsrWifiRouterMaPacketCfmSizeof, CsrWifiRouterMaPacketCfmSer, CsrWifiRouterMaPacketCfmDes, CsrWifiRouterMaPacketCfmSerFree },
- { CSR_WIFI_ROUTER_MA_PACKET_IND, CsrWifiRouterMaPacketIndSizeof, CsrWifiRouterMaPacketIndSer, CsrWifiRouterMaPacketIndDes, CsrWifiRouterMaPacketIndSerFree },
-
- { 0, NULL, NULL, NULL, NULL },
-};
-
-CsrMsgConvMsgEntry* CsrWifiRouterConverterLookup(CsrMsgConvMsgEntry *ce, u16 msgType)
-{
- if (msgType & CSR_PRIM_UPSTREAM)
- {
- u16 idx = (msgType & ~CSR_PRIM_UPSTREAM) + CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_COUNT;
- if (idx < (CSR_WIFI_ROUTER_PRIM_UPSTREAM_COUNT + CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_COUNT) &&
- csrwifirouter_conv_lut[idx].msgType == msgType)
- {
- return &csrwifirouter_conv_lut[idx];
- }
- }
- else
- {
- if (msgType < CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_COUNT &&
- csrwifirouter_conv_lut[msgType].msgType == msgType)
- {
- return &csrwifirouter_conv_lut[msgType];
- }
- }
- return NULL;
-}
-
-
-void CsrWifiRouterConverterInit(void)
-{
- CsrMsgConvInsert(CSR_WIFI_ROUTER_PRIM, csrwifirouter_conv_lut);
- CsrMsgConvCustomLookupRegister(CSR_WIFI_ROUTER_PRIM, CsrWifiRouterConverterLookup);
-}
-
-
-#ifdef CSR_LOG_ENABLE
-static const CsrLogPrimitiveInformation csrwifirouter_conv_info = {
- CSR_WIFI_ROUTER_PRIM,
- (char *)"CSR_WIFI_ROUTER_PRIM",
- csrwifirouter_conv_lut
-};
-const CsrLogPrimitiveInformation* CsrWifiRouterTechInfoGet(void)
-{
- return &csrwifirouter_conv_info;
-}
-
-
-#endif /* CSR_LOG_ENABLE */
-#endif /* EXCLUDE_CSR_WIFI_ROUTER_MODULE */
diff --git a/drivers/staging/csr/csr_wifi_router_converter_init.h b/drivers/staging/csr/csr_wifi_router_converter_init.h
deleted file mode 100644
index 478327b75c18..000000000000
--- a/drivers/staging/csr/csr_wifi_router_converter_init.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_ROUTER_CONVERTER_INIT_H__
-#define CSR_WIFI_ROUTER_CONVERTER_INIT_H__
-
-#ifndef EXCLUDE_CSR_WIFI_ROUTER_MODULE
-
-#include "csr_msgconv.h"
-
-#ifdef CSR_LOG_ENABLE
-#include "csr_log.h"
-
-extern const CsrLogPrimitiveInformation* CsrWifiRouterTechInfoGet(void);
-#endif /* CSR_LOG_ENABLE */
-
-extern void CsrWifiRouterConverterInit(void);
-
-#else /* EXCLUDE_CSR_WIFI_ROUTER_MODULE */
-
-#define CsrWifiRouterConverterInit()
-
-#endif /* EXCLUDE_CSR_WIFI_ROUTER_MODULE */
-
-#endif /* CSR_WIFI_ROUTER_CONVERTER_INIT_H__ */
diff --git a/drivers/staging/csr/csr_wifi_router_ctrl_converter_init.c b/drivers/staging/csr/csr_wifi_router_ctrl_converter_init.c
deleted file mode 100644
index a02e307e5a88..000000000000
--- a/drivers/staging/csr/csr_wifi_router_ctrl_converter_init.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#include "csr_msgconv.h"
-#include "csr_macro.h"
-
-#ifdef CSR_LOG_ENABLE
-#include "csr_log.h"
-#endif
-
-#ifndef EXCLUDE_CSR_WIFI_ROUTER_CTRL_MODULE
-#include "csr_wifi_router_ctrl_serialize.h"
-#include "csr_wifi_router_ctrl_prim.h"
-
-static CsrMsgConvMsgEntry csrwifirouterctrl_conv_lut[] = {
- { CSR_WIFI_ROUTER_CTRL_CONFIGURE_POWER_MODE_REQ, CsrWifiRouterCtrlConfigurePowerModeReqSizeof, CsrWifiRouterCtrlConfigurePowerModeReqSer, CsrWifiRouterCtrlConfigurePowerModeReqDes, CsrWifiRouterCtrlConfigurePowerModeReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_HIP_REQ, CsrWifiRouterCtrlHipReqSizeof, CsrWifiRouterCtrlHipReqSer, CsrWifiRouterCtrlHipReqDes, CsrWifiRouterCtrlHipReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_MEDIA_STATUS_REQ, CsrWifiRouterCtrlMediaStatusReqSizeof, CsrWifiRouterCtrlMediaStatusReqSer, CsrWifiRouterCtrlMediaStatusReqDes, CsrWifiRouterCtrlMediaStatusReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_MULTICAST_ADDRESS_RES, CsrWifiRouterCtrlMulticastAddressResSizeof, CsrWifiRouterCtrlMulticastAddressResSer, CsrWifiRouterCtrlMulticastAddressResDes, CsrWifiRouterCtrlMulticastAddressResSerFree },
- { CSR_WIFI_ROUTER_CTRL_PORT_CONFIGURE_REQ, CsrWifiRouterCtrlPortConfigureReqSizeof, CsrWifiRouterCtrlPortConfigureReqSer, CsrWifiRouterCtrlPortConfigureReqDes, CsrWifiRouterCtrlPortConfigureReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_QOS_CONTROL_REQ, CsrWifiRouterCtrlQosControlReqSizeof, CsrWifiRouterCtrlQosControlReqSer, CsrWifiRouterCtrlQosControlReqDes, CsrWifiRouterCtrlQosControlReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_SUSPEND_RES, CsrWifiRouterCtrlSuspendResSizeof, CsrWifiRouterCtrlSuspendResSer, CsrWifiRouterCtrlSuspendResDes, CsrWifiRouterCtrlSuspendResSerFree },
- { CSR_WIFI_ROUTER_CTRL_TCLAS_ADD_REQ, CsrWifiRouterCtrlTclasAddReqSizeof, CsrWifiRouterCtrlTclasAddReqSer, CsrWifiRouterCtrlTclasAddReqDes, CsrWifiRouterCtrlTclasAddReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_RESUME_RES, CsrWifiRouterCtrlResumeResSizeof, CsrWifiRouterCtrlResumeResSer, CsrWifiRouterCtrlResumeResDes, CsrWifiRouterCtrlResumeResSerFree },
- { CSR_WIFI_ROUTER_CTRL_RAW_SDIO_DEINITIALISE_REQ, CsrWifiRouterCtrlRawSdioDeinitialiseReqSizeof, CsrWifiRouterCtrlRawSdioDeinitialiseReqSer, CsrWifiRouterCtrlRawSdioDeinitialiseReqDes, CsrWifiRouterCtrlRawSdioDeinitialiseReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_RAW_SDIO_INITIALISE_REQ, CsrWifiRouterCtrlRawSdioInitialiseReqSizeof, CsrWifiRouterCtrlRawSdioInitialiseReqSer, CsrWifiRouterCtrlRawSdioInitialiseReqDes, CsrWifiRouterCtrlRawSdioInitialiseReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_TCLAS_DEL_REQ, CsrWifiRouterCtrlTclasDelReqSizeof, CsrWifiRouterCtrlTclasDelReqSer, CsrWifiRouterCtrlTclasDelReqDes, CsrWifiRouterCtrlTclasDelReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_TRAFFIC_CLASSIFICATION_REQ, CsrWifiRouterCtrlTrafficClassificationReqSizeof, CsrWifiRouterCtrlTrafficClassificationReqSer, CsrWifiRouterCtrlTrafficClassificationReqDes, CsrWifiRouterCtrlTrafficClassificationReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_TRAFFIC_CONFIG_REQ, CsrWifiRouterCtrlTrafficConfigReqSizeof, CsrWifiRouterCtrlTrafficConfigReqSer, CsrWifiRouterCtrlTrafficConfigReqDes, CsrWifiRouterCtrlTrafficConfigReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_WIFI_OFF_REQ, CsrWifiRouterCtrlWifiOffReqSizeof, CsrWifiRouterCtrlWifiOffReqSer, CsrWifiRouterCtrlWifiOffReqDes, CsrWifiRouterCtrlWifiOffReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_WIFI_OFF_RES, CsrWifiRouterCtrlWifiOffResSizeof, CsrWifiRouterCtrlWifiOffResSer, CsrWifiRouterCtrlWifiOffResDes, CsrWifiRouterCtrlWifiOffResSerFree },
- { CSR_WIFI_ROUTER_CTRL_WIFI_ON_REQ, CsrWifiRouterCtrlWifiOnReqSizeof, CsrWifiRouterCtrlWifiOnReqSer, CsrWifiRouterCtrlWifiOnReqDes, CsrWifiRouterCtrlWifiOnReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_WIFI_ON_RES, CsrWifiRouterCtrlWifiOnResSizeof, CsrWifiRouterCtrlWifiOnResSer, CsrWifiRouterCtrlWifiOnResDes, CsrWifiRouterCtrlWifiOnResSerFree },
- { CSR_WIFI_ROUTER_CTRL_M4_TRANSMIT_REQ, CsrWifiRouterCtrlM4TransmitReqSizeof, CsrWifiRouterCtrlM4TransmitReqSer, CsrWifiRouterCtrlM4TransmitReqDes, CsrWifiRouterCtrlM4TransmitReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_MODE_SET_REQ, CsrWifiRouterCtrlModeSetReqSizeof, CsrWifiRouterCtrlModeSetReqSer, CsrWifiRouterCtrlModeSetReqDes, CsrWifiRouterCtrlModeSetReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_PEER_ADD_REQ, CsrWifiRouterCtrlPeerAddReqSizeof, CsrWifiRouterCtrlPeerAddReqSer, CsrWifiRouterCtrlPeerAddReqDes, CsrWifiRouterCtrlPeerAddReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_PEER_DEL_REQ, CsrWifiRouterCtrlPeerDelReqSizeof, CsrWifiRouterCtrlPeerDelReqSer, CsrWifiRouterCtrlPeerDelReqDes, CsrWifiRouterCtrlPeerDelReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_PEER_UPDATE_REQ, CsrWifiRouterCtrlPeerUpdateReqSizeof, CsrWifiRouterCtrlPeerUpdateReqSer, CsrWifiRouterCtrlPeerUpdateReqDes, CsrWifiRouterCtrlPeerUpdateReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_CAPABILITIES_REQ, CsrWifiRouterCtrlCapabilitiesReqSizeof, CsrWifiRouterCtrlCapabilitiesReqSer, CsrWifiRouterCtrlCapabilitiesReqDes, CsrWifiRouterCtrlCapabilitiesReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ENABLE_REQ, CsrWifiRouterCtrlBlockAckEnableReqSizeof, CsrWifiRouterCtrlBlockAckEnableReqSer, CsrWifiRouterCtrlBlockAckEnableReqDes, CsrWifiRouterCtrlBlockAckEnableReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_DISABLE_REQ, CsrWifiRouterCtrlBlockAckDisableReqSizeof, CsrWifiRouterCtrlBlockAckDisableReqSer, CsrWifiRouterCtrlBlockAckDisableReqDes, CsrWifiRouterCtrlBlockAckDisableReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_WAPI_RX_PKT_REQ, CsrWifiRouterCtrlWapiRxPktReqSizeof, CsrWifiRouterCtrlWapiRxPktReqSer, CsrWifiRouterCtrlWapiRxPktReqDes, CsrWifiRouterCtrlWapiRxPktReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_WAPI_MULTICAST_FILTER_REQ, CsrWifiRouterCtrlWapiMulticastFilterReqSizeof, CsrWifiRouterCtrlWapiMulticastFilterReqSer, CsrWifiRouterCtrlWapiMulticastFilterReqDes, CsrWifiRouterCtrlWapiMulticastFilterReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_WAPI_UNICAST_FILTER_REQ, CsrWifiRouterCtrlWapiUnicastFilterReqSizeof, CsrWifiRouterCtrlWapiUnicastFilterReqSer, CsrWifiRouterCtrlWapiUnicastFilterReqDes, CsrWifiRouterCtrlWapiUnicastFilterReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_WAPI_UNICAST_TX_PKT_REQ, CsrWifiRouterCtrlWapiUnicastTxPktReqSizeof, CsrWifiRouterCtrlWapiUnicastTxPktReqSer, CsrWifiRouterCtrlWapiUnicastTxPktReqDes, CsrWifiRouterCtrlWapiUnicastTxPktReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_WAPI_FILTER_REQ, CsrWifiRouterCtrlWapiFilterReqSizeof, CsrWifiRouterCtrlWapiFilterReqSer, CsrWifiRouterCtrlWapiFilterReqDes, CsrWifiRouterCtrlWapiFilterReqSerFree },
- { CSR_WIFI_ROUTER_CTRL_HIP_IND, CsrWifiRouterCtrlHipIndSizeof, CsrWifiRouterCtrlHipIndSer, CsrWifiRouterCtrlHipIndDes, CsrWifiRouterCtrlHipIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_MULTICAST_ADDRESS_IND, CsrWifiRouterCtrlMulticastAddressIndSizeof, CsrWifiRouterCtrlMulticastAddressIndSer, CsrWifiRouterCtrlMulticastAddressIndDes, CsrWifiRouterCtrlMulticastAddressIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_PORT_CONFIGURE_CFM, CsrWifiRouterCtrlPortConfigureCfmSizeof, CsrWifiRouterCtrlPortConfigureCfmSer, CsrWifiRouterCtrlPortConfigureCfmDes, CsrWifiRouterCtrlPortConfigureCfmSerFree },
- { CSR_WIFI_ROUTER_CTRL_RESUME_IND, CsrWifiRouterCtrlResumeIndSizeof, CsrWifiRouterCtrlResumeIndSer, CsrWifiRouterCtrlResumeIndDes, CsrWifiRouterCtrlResumeIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_SUSPEND_IND, CsrWifiRouterCtrlSuspendIndSizeof, CsrWifiRouterCtrlSuspendIndSer, CsrWifiRouterCtrlSuspendIndDes, CsrWifiRouterCtrlSuspendIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_TCLAS_ADD_CFM, CsrWifiRouterCtrlTclasAddCfmSizeof, CsrWifiRouterCtrlTclasAddCfmSer, CsrWifiRouterCtrlTclasAddCfmDes, CsrWifiRouterCtrlTclasAddCfmSerFree },
- { CSR_WIFI_ROUTER_CTRL_RAW_SDIO_DEINITIALISE_CFM, CsrWifiRouterCtrlRawSdioDeinitialiseCfmSizeof, CsrWifiRouterCtrlRawSdioDeinitialiseCfmSer, CsrWifiRouterCtrlRawSdioDeinitialiseCfmDes, CsrWifiRouterCtrlRawSdioDeinitialiseCfmSerFree },
- { CSR_WIFI_ROUTER_CTRL_RAW_SDIO_INITIALISE_CFM, CsrWifiRouterCtrlRawSdioInitialiseCfmSizeof, CsrWifiRouterCtrlRawSdioInitialiseCfmSer, CsrWifiRouterCtrlRawSdioInitialiseCfmDes, CsrWifiRouterCtrlRawSdioInitialiseCfmSerFree },
- { CSR_WIFI_ROUTER_CTRL_TCLAS_DEL_CFM, CsrWifiRouterCtrlTclasDelCfmSizeof, CsrWifiRouterCtrlTclasDelCfmSer, CsrWifiRouterCtrlTclasDelCfmDes, CsrWifiRouterCtrlTclasDelCfmSerFree },
- { CSR_WIFI_ROUTER_CTRL_TRAFFIC_PROTOCOL_IND, CsrWifiRouterCtrlTrafficProtocolIndSizeof, CsrWifiRouterCtrlTrafficProtocolIndSer, CsrWifiRouterCtrlTrafficProtocolIndDes, CsrWifiRouterCtrlTrafficProtocolIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_TRAFFIC_SAMPLE_IND, CsrWifiRouterCtrlTrafficSampleIndSizeof, CsrWifiRouterCtrlTrafficSampleIndSer, CsrWifiRouterCtrlTrafficSampleIndDes, CsrWifiRouterCtrlTrafficSampleIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_WIFI_OFF_IND, CsrWifiRouterCtrlWifiOffIndSizeof, CsrWifiRouterCtrlWifiOffIndSer, CsrWifiRouterCtrlWifiOffIndDes, CsrWifiRouterCtrlWifiOffIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_WIFI_OFF_CFM, CsrWifiRouterCtrlWifiOffCfmSizeof, CsrWifiRouterCtrlWifiOffCfmSer, CsrWifiRouterCtrlWifiOffCfmDes, CsrWifiRouterCtrlWifiOffCfmSerFree },
- { CSR_WIFI_ROUTER_CTRL_WIFI_ON_IND, CsrWifiRouterCtrlWifiOnIndSizeof, CsrWifiRouterCtrlWifiOnIndSer, CsrWifiRouterCtrlWifiOnIndDes, CsrWifiRouterCtrlWifiOnIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_WIFI_ON_CFM, CsrWifiRouterCtrlWifiOnCfmSizeof, CsrWifiRouterCtrlWifiOnCfmSer, CsrWifiRouterCtrlWifiOnCfmDes, CsrWifiRouterCtrlWifiOnCfmSerFree },
- { CSR_WIFI_ROUTER_CTRL_M4_READY_TO_SEND_IND, CsrWifiRouterCtrlM4ReadyToSendIndSizeof, CsrWifiRouterCtrlM4ReadyToSendIndSer, CsrWifiRouterCtrlM4ReadyToSendIndDes, CsrWifiRouterCtrlM4ReadyToSendIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_M4_TRANSMITTED_IND, CsrWifiRouterCtrlM4TransmittedIndSizeof, CsrWifiRouterCtrlM4TransmittedIndSer, CsrWifiRouterCtrlM4TransmittedIndDes, CsrWifiRouterCtrlM4TransmittedIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_MIC_FAILURE_IND, CsrWifiRouterCtrlMicFailureIndSizeof, CsrWifiRouterCtrlMicFailureIndSer, CsrWifiRouterCtrlMicFailureIndDes, CsrWifiRouterCtrlMicFailureIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_CONNECTED_IND, CsrWifiRouterCtrlConnectedIndSizeof, CsrWifiRouterCtrlConnectedIndSer, CsrWifiRouterCtrlConnectedIndDes, CsrWifiRouterCtrlConnectedIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_PEER_ADD_CFM, CsrWifiRouterCtrlPeerAddCfmSizeof, CsrWifiRouterCtrlPeerAddCfmSer, CsrWifiRouterCtrlPeerAddCfmDes, CsrWifiRouterCtrlPeerAddCfmSerFree },
- { CSR_WIFI_ROUTER_CTRL_PEER_DEL_CFM, CsrWifiRouterCtrlPeerDelCfmSizeof, CsrWifiRouterCtrlPeerDelCfmSer, CsrWifiRouterCtrlPeerDelCfmDes, CsrWifiRouterCtrlPeerDelCfmSerFree },
- { CSR_WIFI_ROUTER_CTRL_UNEXPECTED_FRAME_IND, CsrWifiRouterCtrlUnexpectedFrameIndSizeof, CsrWifiRouterCtrlUnexpectedFrameIndSer, CsrWifiRouterCtrlUnexpectedFrameIndDes, CsrWifiRouterCtrlUnexpectedFrameIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_PEER_UPDATE_CFM, CsrWifiRouterCtrlPeerUpdateCfmSizeof, CsrWifiRouterCtrlPeerUpdateCfmSer, CsrWifiRouterCtrlPeerUpdateCfmDes, CsrWifiRouterCtrlPeerUpdateCfmSerFree },
- { CSR_WIFI_ROUTER_CTRL_CAPABILITIES_CFM, CsrWifiRouterCtrlCapabilitiesCfmSizeof, CsrWifiRouterCtrlCapabilitiesCfmSer, CsrWifiRouterCtrlCapabilitiesCfmDes, CsrWifiRouterCtrlCapabilitiesCfmSerFree },
- { CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ENABLE_CFM, CsrWifiRouterCtrlBlockAckEnableCfmSizeof, CsrWifiRouterCtrlBlockAckEnableCfmSer, CsrWifiRouterCtrlBlockAckEnableCfmDes, CsrWifiRouterCtrlBlockAckEnableCfmSerFree },
- { CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_DISABLE_CFM, CsrWifiRouterCtrlBlockAckDisableCfmSizeof, CsrWifiRouterCtrlBlockAckDisableCfmSer, CsrWifiRouterCtrlBlockAckDisableCfmDes, CsrWifiRouterCtrlBlockAckDisableCfmSerFree },
- { CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ERROR_IND, CsrWifiRouterCtrlBlockAckErrorIndSizeof, CsrWifiRouterCtrlBlockAckErrorIndSer, CsrWifiRouterCtrlBlockAckErrorIndDes, CsrWifiRouterCtrlBlockAckErrorIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_STA_INACTIVE_IND, CsrWifiRouterCtrlStaInactiveIndSizeof, CsrWifiRouterCtrlStaInactiveIndSer, CsrWifiRouterCtrlStaInactiveIndDes, CsrWifiRouterCtrlStaInactiveIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_WAPI_RX_MIC_CHECK_IND, CsrWifiRouterCtrlWapiRxMicCheckIndSizeof, CsrWifiRouterCtrlWapiRxMicCheckIndSer, CsrWifiRouterCtrlWapiRxMicCheckIndDes, CsrWifiRouterCtrlWapiRxMicCheckIndSerFree },
- { CSR_WIFI_ROUTER_CTRL_MODE_SET_CFM, CsrWifiRouterCtrlModeSetCfmSizeof, CsrWifiRouterCtrlModeSetCfmSer, CsrWifiRouterCtrlModeSetCfmDes, CsrWifiRouterCtrlModeSetCfmSerFree },
- { CSR_WIFI_ROUTER_CTRL_WAPI_UNICAST_TX_ENCRYPT_IND, CsrWifiRouterCtrlWapiUnicastTxEncryptIndSizeof, CsrWifiRouterCtrlWapiUnicastTxEncryptIndSer, CsrWifiRouterCtrlWapiUnicastTxEncryptIndDes, CsrWifiRouterCtrlWapiUnicastTxEncryptIndSerFree },
-
- { 0, NULL, NULL, NULL, NULL },
-};
-
-CsrMsgConvMsgEntry* CsrWifiRouterCtrlConverterLookup(CsrMsgConvMsgEntry *ce, u16 msgType)
-{
- if (msgType & CSR_PRIM_UPSTREAM)
- {
- u16 idx = (msgType & ~CSR_PRIM_UPSTREAM) + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_COUNT;
- if (idx < (CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_COUNT + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_COUNT) &&
- csrwifirouterctrl_conv_lut[idx].msgType == msgType)
- {
- return &csrwifirouterctrl_conv_lut[idx];
- }
- }
- else
- {
- if (msgType < CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_COUNT &&
- csrwifirouterctrl_conv_lut[msgType].msgType == msgType)
- {
- return &csrwifirouterctrl_conv_lut[msgType];
- }
- }
- return NULL;
-}
-
-
-void CsrWifiRouterCtrlConverterInit(void)
-{
- CsrMsgConvInsert(CSR_WIFI_ROUTER_CTRL_PRIM, csrwifirouterctrl_conv_lut);
- CsrMsgConvCustomLookupRegister(CSR_WIFI_ROUTER_CTRL_PRIM, CsrWifiRouterCtrlConverterLookup);
-}
-
-
-#ifdef CSR_LOG_ENABLE
-static const CsrLogPrimitiveInformation csrwifirouterctrl_conv_info = {
- CSR_WIFI_ROUTER_CTRL_PRIM,
- (char *)"CSR_WIFI_ROUTER_CTRL_PRIM",
- csrwifirouterctrl_conv_lut
-};
-const CsrLogPrimitiveInformation* CsrWifiRouterCtrlTechInfoGet(void)
-{
- return &csrwifirouterctrl_conv_info;
-}
-
-
-#endif /* CSR_LOG_ENABLE */
-#endif /* EXCLUDE_CSR_WIFI_ROUTER_CTRL_MODULE */
diff --git a/drivers/staging/csr/csr_wifi_router_ctrl_converter_init.h b/drivers/staging/csr/csr_wifi_router_ctrl_converter_init.h
deleted file mode 100644
index c98458912825..000000000000
--- a/drivers/staging/csr/csr_wifi_router_ctrl_converter_init.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_ROUTER_CTRL_CONVERTER_INIT_H__
-#define CSR_WIFI_ROUTER_CTRL_CONVERTER_INIT_H__
-
-#ifndef EXCLUDE_CSR_WIFI_ROUTER_CTRL_MODULE
-
-#include "csr_msgconv.h"
-
-#ifdef CSR_LOG_ENABLE
-#include "csr_log.h"
-
-extern const CsrLogPrimitiveInformation* CsrWifiRouterCtrlTechInfoGet(void);
-#endif /* CSR_LOG_ENABLE */
-
-extern void CsrWifiRouterCtrlConverterInit(void);
-
-#else /* EXCLUDE_CSR_WIFI_ROUTER_CTRL_MODULE */
-
-#define CsrWifiRouterCtrlConverterInit()
-
-#endif /* EXCLUDE_CSR_WIFI_ROUTER_CTRL_MODULE */
-
-#endif /* CSR_WIFI_ROUTER_CTRL_CONVERTER_INIT_H__ */
diff --git a/drivers/staging/csr/csr_wifi_router_ctrl_free_downstream_contents.c b/drivers/staging/csr/csr_wifi_router_ctrl_free_downstream_contents.c
deleted file mode 100644
index 7fa85fb4d6c0..000000000000
--- a/drivers/staging/csr/csr_wifi_router_ctrl_free_downstream_contents.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-#include <linux/slab.h>
-#include "csr_wifi_router_ctrl_prim.h"
-#include "csr_wifi_router_ctrl_lib.h"
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrWifiRouterCtrlFreeDownstreamMessageContents
- *
- * DESCRIPTION
- *
- *
- * PARAMETERS
- * eventClass: only the value CSR_WIFI_ROUTER_CTRL_PRIM will be handled
- * message: the message to free
- *----------------------------------------------------------------------------*/
-void CsrWifiRouterCtrlFreeDownstreamMessageContents(u16 eventClass, void *message)
-{
- if (eventClass != CSR_WIFI_ROUTER_CTRL_PRIM)
- {
- return;
- }
- if (NULL == message)
- {
- return;
- }
-
- switch (*((CsrWifiRouterCtrlPrim *) message))
- {
- case CSR_WIFI_ROUTER_CTRL_HIP_REQ:
- {
- CsrWifiRouterCtrlHipReq *p = (CsrWifiRouterCtrlHipReq *)message;
- kfree(p->mlmeCommand);
- p->mlmeCommand = NULL;
- kfree(p->dataRef1);
- p->dataRef1 = NULL;
- kfree(p->dataRef2);
- p->dataRef2 = NULL;
- break;
- }
- case CSR_WIFI_ROUTER_CTRL_MULTICAST_ADDRESS_RES:
- {
- CsrWifiRouterCtrlMulticastAddressRes *p = (CsrWifiRouterCtrlMulticastAddressRes *)message;
- kfree(p->getAddresses);
- p->getAddresses = NULL;
- break;
- }
- case CSR_WIFI_ROUTER_CTRL_TCLAS_ADD_REQ:
- {
- CsrWifiRouterCtrlTclasAddReq *p = (CsrWifiRouterCtrlTclasAddReq *)message;
- kfree(p->tclas);
- p->tclas = NULL;
- break;
- }
- case CSR_WIFI_ROUTER_CTRL_TCLAS_DEL_REQ:
- {
- CsrWifiRouterCtrlTclasDelReq *p = (CsrWifiRouterCtrlTclasDelReq *)message;
- kfree(p->tclas);
- p->tclas = NULL;
- break;
- }
- case CSR_WIFI_ROUTER_CTRL_WIFI_ON_REQ:
- {
- CsrWifiRouterCtrlWifiOnReq *p = (CsrWifiRouterCtrlWifiOnReq *)message;
- kfree(p->data);
- p->data = NULL;
- break;
- }
- case CSR_WIFI_ROUTER_CTRL_WIFI_ON_RES:
- {
- CsrWifiRouterCtrlWifiOnRes *p = (CsrWifiRouterCtrlWifiOnRes *)message;
- kfree(p->smeVersions.smeBuild);
- p->smeVersions.smeBuild = NULL;
- break;
- }
- case CSR_WIFI_ROUTER_CTRL_WAPI_RX_PKT_REQ:
- {
- CsrWifiRouterCtrlWapiRxPktReq *p = (CsrWifiRouterCtrlWapiRxPktReq *)message;
- kfree(p->signal);
- p->signal = NULL;
- kfree(p->data);
- p->data = NULL;
- break;
- }
- case CSR_WIFI_ROUTER_CTRL_WAPI_UNICAST_TX_PKT_REQ:
- {
- CsrWifiRouterCtrlWapiUnicastTxPktReq *p = (CsrWifiRouterCtrlWapiUnicastTxPktReq *)message;
- kfree(p->data);
- p->data = NULL;
- break;
- }
-
- default:
- break;
- }
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_router_ctrl_free_upstream_contents.c b/drivers/staging/csr/csr_wifi_router_ctrl_free_upstream_contents.c
deleted file mode 100644
index 954b3defc49c..000000000000
--- a/drivers/staging/csr/csr_wifi_router_ctrl_free_upstream_contents.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-#include <linux/slab.h>
-#include "csr_wifi_router_ctrl_prim.h"
-#include "csr_wifi_router_ctrl_lib.h"
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrWifiRouterCtrlFreeUpstreamMessageContents
- *
- * DESCRIPTION
- *
- *
- * PARAMETERS
- * eventClass: only the value CSR_WIFI_ROUTER_CTRL_PRIM will be handled
- * message: the message to free
- *----------------------------------------------------------------------------*/
-void CsrWifiRouterCtrlFreeUpstreamMessageContents(u16 eventClass, void *message)
-{
- if (eventClass != CSR_WIFI_ROUTER_CTRL_PRIM)
- {
- return;
- }
- if (NULL == message)
- {
- return;
- }
-
- switch (*((CsrWifiRouterCtrlPrim *) message))
- {
- case CSR_WIFI_ROUTER_CTRL_HIP_IND:
- {
- CsrWifiRouterCtrlHipInd *p = (CsrWifiRouterCtrlHipInd *)message;
- kfree(p->mlmeCommand);
- p->mlmeCommand = NULL;
- kfree(p->dataRef1);
- p->dataRef1 = NULL;
- kfree(p->dataRef2);
- p->dataRef2 = NULL;
- break;
- }
- case CSR_WIFI_ROUTER_CTRL_MULTICAST_ADDRESS_IND:
- {
- CsrWifiRouterCtrlMulticastAddressInd *p = (CsrWifiRouterCtrlMulticastAddressInd *)message;
- kfree(p->setAddresses);
- p->setAddresses = NULL;
- break;
- }
- case CSR_WIFI_ROUTER_CTRL_WIFI_ON_IND:
- {
- CsrWifiRouterCtrlWifiOnInd *p = (CsrWifiRouterCtrlWifiOnInd *)message;
- kfree(p->versions.routerBuild);
- p->versions.routerBuild = NULL;
- break;
- }
- case CSR_WIFI_ROUTER_CTRL_WAPI_RX_MIC_CHECK_IND:
- {
- CsrWifiRouterCtrlWapiRxMicCheckInd *p = (CsrWifiRouterCtrlWapiRxMicCheckInd *)message;
- kfree(p->signal);
- p->signal = NULL;
- kfree(p->data);
- p->data = NULL;
- break;
- }
- case CSR_WIFI_ROUTER_CTRL_WAPI_UNICAST_TX_ENCRYPT_IND:
- {
- CsrWifiRouterCtrlWapiUnicastTxEncryptInd *p = (CsrWifiRouterCtrlWapiUnicastTxEncryptInd *)message;
- kfree(p->data);
- p->data = NULL;
- break;
- }
-
- default:
- break;
- }
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_router_ctrl_lib.h b/drivers/staging/csr/csr_wifi_router_ctrl_lib.h
deleted file mode 100644
index f235153c42af..000000000000
--- a/drivers/staging/csr/csr_wifi_router_ctrl_lib.h
+++ /dev/null
@@ -1,2082 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_ROUTER_CTRL_LIB_H__
-#define CSR_WIFI_ROUTER_CTRL_LIB_H__
-
-#include "csr_sched.h"
-#include "csr_macro.h"
-#include "csr_msg_transport.h"
-
-#include "csr_wifi_lib.h"
-
-#include "csr_wifi_router_ctrl_prim.h"
-#include "csr_wifi_router_task.h"
-
-/*----------------------------------------------------------------------------*
- * CsrWifiRouterCtrlFreeUpstreamMessageContents
- *
- * DESCRIPTION
- * Free the allocated memory in a CSR_WIFI_ROUTER_CTRL upstream message. Does not
- * free the message itself, and can only be used for upstream messages.
- *
- * PARAMETERS
- * Deallocates the resources in a CSR_WIFI_ROUTER_CTRL upstream message
- *----------------------------------------------------------------------------*/
-void CsrWifiRouterCtrlFreeUpstreamMessageContents(u16 eventClass, void *message);
-
-/*----------------------------------------------------------------------------*
- * CsrWifiRouterCtrlFreeDownstreamMessageContents
- *
- * DESCRIPTION
- * Free the allocated memory in a CSR_WIFI_ROUTER_CTRL downstream message. Does not
- * free the message itself, and can only be used for downstream messages.
- *
- * PARAMETERS
- * Deallocates the resources in a CSR_WIFI_ROUTER_CTRL downstream message
- *----------------------------------------------------------------------------*/
-void CsrWifiRouterCtrlFreeDownstreamMessageContents(u16 eventClass, void *message);
-
-/*----------------------------------------------------------------------------*
- * Enum to string functions
- *----------------------------------------------------------------------------*/
-const char* CsrWifiRouterCtrlBlockAckRoleToString(CsrWifiRouterCtrlBlockAckRole value);
-const char* CsrWifiRouterCtrlControlIndicationToString(CsrWifiRouterCtrlControlIndication value);
-const char* CsrWifiRouterCtrlListActionToString(CsrWifiRouterCtrlListAction value);
-const char* CsrWifiRouterCtrlLowPowerModeToString(CsrWifiRouterCtrlLowPowerMode value);
-const char* CsrWifiRouterCtrlMediaStatusToString(CsrWifiRouterCtrlMediaStatus value);
-const char* CsrWifiRouterCtrlModeToString(CsrWifiRouterCtrlMode value);
-const char* CsrWifiRouterCtrlPeerStatusToString(CsrWifiRouterCtrlPeerStatus value);
-const char* CsrWifiRouterCtrlPortActionToString(CsrWifiRouterCtrlPortAction value);
-const char* CsrWifiRouterCtrlPowersaveTypeToString(CsrWifiRouterCtrlPowersaveType value);
-const char* CsrWifiRouterCtrlProtocolDirectionToString(CsrWifiRouterCtrlProtocolDirection value);
-const char* CsrWifiRouterCtrlQoSControlToString(CsrWifiRouterCtrlQoSControl value);
-const char* CsrWifiRouterCtrlQueueConfigToString(CsrWifiRouterCtrlQueueConfig value);
-const char* CsrWifiRouterCtrlTrafficConfigTypeToString(CsrWifiRouterCtrlTrafficConfigType value);
-const char* CsrWifiRouterCtrlTrafficPacketTypeToString(CsrWifiRouterCtrlTrafficPacketType value);
-const char* CsrWifiRouterCtrlTrafficTypeToString(CsrWifiRouterCtrlTrafficType value);
-
-
-/*----------------------------------------------------------------------------*
- * CsrPrim Type toString function.
- * Converts a message type to the String name of the Message
- *----------------------------------------------------------------------------*/
-const char* CsrWifiRouterCtrlPrimTypeToString(CsrPrim msgType);
-
-/*----------------------------------------------------------------------------*
- * Lookup arrays for PrimType name Strings
- *----------------------------------------------------------------------------*/
-extern const char *CsrWifiRouterCtrlUpstreamPrimNames[CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_COUNT];
-extern const char *CsrWifiRouterCtrlDownstreamPrimNames[CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_COUNT];
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlBlockAckDisableReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- clientData -
- macAddress -
- trafficStreamID -
- role -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlBlockAckDisableReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, macAddress__, trafficStreamID__, role__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlBlockAckDisableReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_DISABLE_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__); \
- msg__->macAddress = (macAddress__); \
- msg__->trafficStreamID = (trafficStreamID__); \
- msg__->role = (role__);
-
-#define CsrWifiRouterCtrlBlockAckDisableReqSendTo(dst__, src__, interfaceTag__, clientData__, macAddress__, trafficStreamID__, role__) \
- { \
- CsrWifiRouterCtrlBlockAckDisableReq *msg__; \
- CsrWifiRouterCtrlBlockAckDisableReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, macAddress__, trafficStreamID__, role__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlBlockAckDisableReqSend(src__, interfaceTag__, clientData__, macAddress__, trafficStreamID__, role__) \
- CsrWifiRouterCtrlBlockAckDisableReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__, macAddress__, trafficStreamID__, role__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlBlockAckDisableCfmSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlBlockAckDisableCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlBlockAckDisableCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_DISABLE_CFM, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlBlockAckDisableCfmSendTo(dst__, src__, clientData__, interfaceTag__, status__) \
- { \
- CsrWifiRouterCtrlBlockAckDisableCfm *msg__; \
- CsrWifiRouterCtrlBlockAckDisableCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlBlockAckDisableCfmSend(dst__, clientData__, interfaceTag__, status__) \
- CsrWifiRouterCtrlBlockAckDisableCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlBlockAckEnableReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- clientData -
- macAddress -
- trafficStreamID -
- role -
- bufferSize -
- timeout -
- ssn -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlBlockAckEnableReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, macAddress__, trafficStreamID__, role__, bufferSize__, timeout__, ssn__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlBlockAckEnableReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ENABLE_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__); \
- msg__->macAddress = (macAddress__); \
- msg__->trafficStreamID = (trafficStreamID__); \
- msg__->role = (role__); \
- msg__->bufferSize = (bufferSize__); \
- msg__->timeout = (timeout__); \
- msg__->ssn = (ssn__);
-
-#define CsrWifiRouterCtrlBlockAckEnableReqSendTo(dst__, src__, interfaceTag__, clientData__, macAddress__, trafficStreamID__, role__, bufferSize__, timeout__, ssn__) \
- { \
- CsrWifiRouterCtrlBlockAckEnableReq *msg__; \
- CsrWifiRouterCtrlBlockAckEnableReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, macAddress__, trafficStreamID__, role__, bufferSize__, timeout__, ssn__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlBlockAckEnableReqSend(src__, interfaceTag__, clientData__, macAddress__, trafficStreamID__, role__, bufferSize__, timeout__, ssn__) \
- CsrWifiRouterCtrlBlockAckEnableReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__, macAddress__, trafficStreamID__, role__, bufferSize__, timeout__, ssn__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlBlockAckEnableCfmSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlBlockAckEnableCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlBlockAckEnableCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ENABLE_CFM, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlBlockAckEnableCfmSendTo(dst__, src__, clientData__, interfaceTag__, status__) \
- { \
- CsrWifiRouterCtrlBlockAckEnableCfm *msg__; \
- CsrWifiRouterCtrlBlockAckEnableCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlBlockAckEnableCfmSend(dst__, clientData__, interfaceTag__, status__) \
- CsrWifiRouterCtrlBlockAckEnableCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlBlockAckErrorIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- trafficStreamID -
- peerMacAddress -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlBlockAckErrorIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, trafficStreamID__, peerMacAddress__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlBlockAckErrorInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ERROR_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->trafficStreamID = (trafficStreamID__); \
- msg__->peerMacAddress = (peerMacAddress__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlBlockAckErrorIndSendTo(dst__, src__, clientData__, interfaceTag__, trafficStreamID__, peerMacAddress__, status__) \
- { \
- CsrWifiRouterCtrlBlockAckErrorInd *msg__; \
- CsrWifiRouterCtrlBlockAckErrorIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, trafficStreamID__, peerMacAddress__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlBlockAckErrorIndSend(dst__, clientData__, interfaceTag__, trafficStreamID__, peerMacAddress__, status__) \
- CsrWifiRouterCtrlBlockAckErrorIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, trafficStreamID__, peerMacAddress__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlCapabilitiesReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- clientData -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlCapabilitiesReqCreate(msg__, dst__, src__, clientData__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlCapabilitiesReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_CAPABILITIES_REQ, dst__, src__); \
- msg__->clientData = (clientData__);
-
-#define CsrWifiRouterCtrlCapabilitiesReqSendTo(dst__, src__, clientData__) \
- { \
- CsrWifiRouterCtrlCapabilitiesReq *msg__; \
- CsrWifiRouterCtrlCapabilitiesReqCreate(msg__, dst__, src__, clientData__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlCapabilitiesReqSend(src__, clientData__) \
- CsrWifiRouterCtrlCapabilitiesReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, clientData__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlCapabilitiesCfmSend
-
- DESCRIPTION
- The router sends this primitive to confirm the size of the queues of the
- HIP.
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- commandQueueSize - Size of command queue
- trafficQueueSize - Size of traffic queue (per AC)
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlCapabilitiesCfmCreate(msg__, dst__, src__, clientData__, commandQueueSize__, trafficQueueSize__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlCapabilitiesCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_CAPABILITIES_CFM, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->commandQueueSize = (commandQueueSize__); \
- msg__->trafficQueueSize = (trafficQueueSize__);
-
-#define CsrWifiRouterCtrlCapabilitiesCfmSendTo(dst__, src__, clientData__, commandQueueSize__, trafficQueueSize__) \
- { \
- CsrWifiRouterCtrlCapabilitiesCfm *msg__; \
- CsrWifiRouterCtrlCapabilitiesCfmCreate(msg__, dst__, src__, clientData__, commandQueueSize__, trafficQueueSize__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlCapabilitiesCfmSend(dst__, clientData__, commandQueueSize__, trafficQueueSize__) \
- CsrWifiRouterCtrlCapabilitiesCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, commandQueueSize__, trafficQueueSize__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlConfigurePowerModeReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- clientData -
- mode -
- wakeHost -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlConfigurePowerModeReqCreate(msg__, dst__, src__, clientData__, mode__, wakeHost__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlConfigurePowerModeReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_CONFIGURE_POWER_MODE_REQ, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->mode = (mode__); \
- msg__->wakeHost = (wakeHost__);
-
-#define CsrWifiRouterCtrlConfigurePowerModeReqSendTo(dst__, src__, clientData__, mode__, wakeHost__) \
- { \
- CsrWifiRouterCtrlConfigurePowerModeReq *msg__; \
- CsrWifiRouterCtrlConfigurePowerModeReqCreate(msg__, dst__, src__, clientData__, mode__, wakeHost__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlConfigurePowerModeReqSend(src__, clientData__, mode__, wakeHost__) \
- CsrWifiRouterCtrlConfigurePowerModeReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, clientData__, mode__, wakeHost__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlConnectedIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- peerMacAddress -
- peerStatus -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlConnectedIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, peerMacAddress__, peerStatus__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlConnectedInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_CONNECTED_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->peerMacAddress = (peerMacAddress__); \
- msg__->peerStatus = (peerStatus__);
-
-#define CsrWifiRouterCtrlConnectedIndSendTo(dst__, src__, clientData__, interfaceTag__, peerMacAddress__, peerStatus__) \
- { \
- CsrWifiRouterCtrlConnectedInd *msg__; \
- CsrWifiRouterCtrlConnectedIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, peerMacAddress__, peerStatus__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlConnectedIndSend(dst__, clientData__, interfaceTag__, peerMacAddress__, peerStatus__) \
- CsrWifiRouterCtrlConnectedIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, peerMacAddress__, peerStatus__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlHipReqSend
-
- DESCRIPTION
- This primitive is used for transferring MLME messages to the HIP.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- mlmeCommandLength - Length of the MLME signal
- mlmeCommand - Pointer to the MLME signal
- dataRef1Length - Length of the dataRef1 bulk data
- dataRef1 - Pointer to the bulk data 1
- dataRef2Length - Length of the dataRef2 bulk data
- dataRef2 - Pointer to the bulk data 2
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlHipReqCreate(msg__, dst__, src__, mlmeCommandLength__, mlmeCommand__, dataRef1Length__, dataRef1__, dataRef2Length__, dataRef2__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlHipReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_HIP_REQ, dst__, src__); \
- msg__->mlmeCommandLength = (mlmeCommandLength__); \
- msg__->mlmeCommand = (mlmeCommand__); \
- msg__->dataRef1Length = (dataRef1Length__); \
- msg__->dataRef1 = (dataRef1__); \
- msg__->dataRef2Length = (dataRef2Length__); \
- msg__->dataRef2 = (dataRef2__);
-
-#define CsrWifiRouterCtrlHipReqSendTo(dst__, src__, mlmeCommandLength__, mlmeCommand__, dataRef1Length__, dataRef1__, dataRef2Length__, dataRef2__) \
- { \
- CsrWifiRouterCtrlHipReq *msg__; \
- CsrWifiRouterCtrlHipReqCreate(msg__, dst__, src__, mlmeCommandLength__, mlmeCommand__, dataRef1Length__, dataRef1__, dataRef2Length__, dataRef2__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlHipReqSend(src__, mlmeCommandLength__, mlmeCommand__, dataRef1Length__, dataRef1__, dataRef2Length__, dataRef2__) \
- CsrWifiRouterCtrlHipReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, mlmeCommandLength__, mlmeCommand__, dataRef1Length__, dataRef1__, dataRef2Length__, dataRef2__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlHipIndSend
-
- DESCRIPTION
- This primitive is used for transferring MLME messages from the HIP.
-
- PARAMETERS
- queue - Destination Task Queue
- mlmeCommandLength - Length of the MLME signal
- mlmeCommand - Pointer to the MLME signal
- dataRef1Length - Length of the dataRef1 bulk data
- dataRef1 - Pointer to the bulk data 1
- dataRef2Length - Length of the dataRef2 bulk data
- dataRef2 - Pointer to the bulk data 2
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlHipIndCreate(msg__, dst__, src__, mlmeCommandLength__, mlmeCommand__, dataRef1Length__, dataRef1__, dataRef2Length__, dataRef2__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlHipInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_HIP_IND, dst__, src__); \
- msg__->mlmeCommandLength = (mlmeCommandLength__); \
- msg__->mlmeCommand = (mlmeCommand__); \
- msg__->dataRef1Length = (dataRef1Length__); \
- msg__->dataRef1 = (dataRef1__); \
- msg__->dataRef2Length = (dataRef2Length__); \
- msg__->dataRef2 = (dataRef2__);
-
-#define CsrWifiRouterCtrlHipIndSendTo(dst__, src__, mlmeCommandLength__, mlmeCommand__, dataRef1Length__, dataRef1__, dataRef2Length__, dataRef2__) \
- { \
- CsrWifiRouterCtrlHipInd *msg__; \
- CsrWifiRouterCtrlHipIndCreate(msg__, dst__, src__, mlmeCommandLength__, mlmeCommand__, dataRef1Length__, dataRef1__, dataRef2Length__, dataRef2__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlHipIndSend(dst__, mlmeCommandLength__, mlmeCommand__, dataRef1Length__, dataRef1__, dataRef2Length__, dataRef2__) \
- CsrWifiRouterCtrlHipIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, mlmeCommandLength__, mlmeCommand__, dataRef1Length__, dataRef1__, dataRef2Length__, dataRef2__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlM4ReadyToSendIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- peerMacAddress -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlM4ReadyToSendIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, peerMacAddress__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlM4ReadyToSendInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_M4_READY_TO_SEND_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->peerMacAddress = (peerMacAddress__);
-
-#define CsrWifiRouterCtrlM4ReadyToSendIndSendTo(dst__, src__, clientData__, interfaceTag__, peerMacAddress__) \
- { \
- CsrWifiRouterCtrlM4ReadyToSendInd *msg__; \
- CsrWifiRouterCtrlM4ReadyToSendIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, peerMacAddress__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlM4ReadyToSendIndSend(dst__, clientData__, interfaceTag__, peerMacAddress__) \
- CsrWifiRouterCtrlM4ReadyToSendIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, peerMacAddress__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlM4TransmitReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- clientData -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlM4TransmitReqCreate(msg__, dst__, src__, interfaceTag__, clientData__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlM4TransmitReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_M4_TRANSMIT_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__);
-
-#define CsrWifiRouterCtrlM4TransmitReqSendTo(dst__, src__, interfaceTag__, clientData__) \
- { \
- CsrWifiRouterCtrlM4TransmitReq *msg__; \
- CsrWifiRouterCtrlM4TransmitReqCreate(msg__, dst__, src__, interfaceTag__, clientData__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlM4TransmitReqSend(src__, interfaceTag__, clientData__) \
- CsrWifiRouterCtrlM4TransmitReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlM4TransmittedIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- peerMacAddress -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlM4TransmittedIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, peerMacAddress__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlM4TransmittedInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_M4_TRANSMITTED_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->peerMacAddress = (peerMacAddress__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlM4TransmittedIndSendTo(dst__, src__, clientData__, interfaceTag__, peerMacAddress__, status__) \
- { \
- CsrWifiRouterCtrlM4TransmittedInd *msg__; \
- CsrWifiRouterCtrlM4TransmittedIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, peerMacAddress__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlM4TransmittedIndSend(dst__, clientData__, interfaceTag__, peerMacAddress__, status__) \
- CsrWifiRouterCtrlM4TransmittedIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, peerMacAddress__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlMediaStatusReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- clientData -
- mediaStatus -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlMediaStatusReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, mediaStatus__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlMediaStatusReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_MEDIA_STATUS_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__); \
- msg__->mediaStatus = (mediaStatus__);
-
-#define CsrWifiRouterCtrlMediaStatusReqSendTo(dst__, src__, interfaceTag__, clientData__, mediaStatus__) \
- { \
- CsrWifiRouterCtrlMediaStatusReq *msg__; \
- CsrWifiRouterCtrlMediaStatusReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, mediaStatus__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlMediaStatusReqSend(src__, interfaceTag__, clientData__, mediaStatus__) \
- CsrWifiRouterCtrlMediaStatusReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__, mediaStatus__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlMicFailureIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- peerMacAddress -
- unicastPdu -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlMicFailureIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, peerMacAddress__, unicastPdu__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlMicFailureInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_MIC_FAILURE_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->peerMacAddress = (peerMacAddress__); \
- msg__->unicastPdu = (unicastPdu__);
-
-#define CsrWifiRouterCtrlMicFailureIndSendTo(dst__, src__, clientData__, interfaceTag__, peerMacAddress__, unicastPdu__) \
- { \
- CsrWifiRouterCtrlMicFailureInd *msg__; \
- CsrWifiRouterCtrlMicFailureIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, peerMacAddress__, unicastPdu__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlMicFailureIndSend(dst__, clientData__, interfaceTag__, peerMacAddress__, unicastPdu__) \
- CsrWifiRouterCtrlMicFailureIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, peerMacAddress__, unicastPdu__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlModeSetReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- clientData -
- mode -
- bssid - BSSID of the network the device is going to be a part
- of
- protection - Set to TRUE if encryption is enabled for the
- connection/broadcast frames
- intraBssDistEnabled - If set to TRUE, intra BSS destribution will be
- enabled. If set to FALSE, any unicast PDU which does
- not have the RA as the the local MAC address, shall be
- ignored. This field is interpreted by the receive if
- mode is set to CSR_WIFI_ROUTER_CTRL_MODE_P2PGO
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlModeSetReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, mode__, bssid__, protection__, intraBssDistEnabled__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlModeSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_MODE_SET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__); \
- msg__->mode = (mode__); \
- msg__->bssid = (bssid__); \
- msg__->protection = (protection__); \
- msg__->intraBssDistEnabled = (intraBssDistEnabled__);
-
-#define CsrWifiRouterCtrlModeSetReqSendTo(dst__, src__, interfaceTag__, clientData__, mode__, bssid__, protection__, intraBssDistEnabled__) \
- { \
- CsrWifiRouterCtrlModeSetReq *msg__; \
- CsrWifiRouterCtrlModeSetReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, mode__, bssid__, protection__, intraBssDistEnabled__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlModeSetReqSend(src__, interfaceTag__, clientData__, mode__, bssid__, protection__, intraBssDistEnabled__) \
- CsrWifiRouterCtrlModeSetReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__, mode__, bssid__, protection__, intraBssDistEnabled__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlModeSetCfmSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- mode -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlModeSetCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, mode__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlModeSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_MODE_SET_CFM, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->mode = (mode__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlModeSetCfmSendTo(dst__, src__, clientData__, interfaceTag__, mode__, status__) \
- { \
- CsrWifiRouterCtrlModeSetCfm *msg__; \
- CsrWifiRouterCtrlModeSetCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, mode__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlModeSetCfmSend(dst__, clientData__, interfaceTag__, mode__, status__) \
- CsrWifiRouterCtrlModeSetCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, mode__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlMulticastAddressIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- action -
- setAddressesCount -
- setAddresses -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlMulticastAddressIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, action__, setAddressesCount__, setAddresses__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlMulticastAddressInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_MULTICAST_ADDRESS_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->action = (action__); \
- msg__->setAddressesCount = (setAddressesCount__); \
- msg__->setAddresses = (setAddresses__);
-
-#define CsrWifiRouterCtrlMulticastAddressIndSendTo(dst__, src__, clientData__, interfaceTag__, action__, setAddressesCount__, setAddresses__) \
- { \
- CsrWifiRouterCtrlMulticastAddressInd *msg__; \
- CsrWifiRouterCtrlMulticastAddressIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, action__, setAddressesCount__, setAddresses__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlMulticastAddressIndSend(dst__, clientData__, interfaceTag__, action__, setAddressesCount__, setAddresses__) \
- CsrWifiRouterCtrlMulticastAddressIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, action__, setAddressesCount__, setAddresses__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlMulticastAddressResSend
-
- DESCRIPTION
-
- PARAMETERS
- interfaceTag -
- clientData -
- status -
- action -
- getAddressesCount -
- getAddresses -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlMulticastAddressResCreate(msg__, dst__, src__, interfaceTag__, clientData__, status__, action__, getAddressesCount__, getAddresses__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlMulticastAddressRes), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_MULTICAST_ADDRESS_RES, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__); \
- msg__->status = (status__); \
- msg__->action = (action__); \
- msg__->getAddressesCount = (getAddressesCount__); \
- msg__->getAddresses = (getAddresses__);
-
-#define CsrWifiRouterCtrlMulticastAddressResSendTo(dst__, src__, interfaceTag__, clientData__, status__, action__, getAddressesCount__, getAddresses__) \
- { \
- CsrWifiRouterCtrlMulticastAddressRes *msg__; \
- CsrWifiRouterCtrlMulticastAddressResCreate(msg__, dst__, src__, interfaceTag__, clientData__, status__, action__, getAddressesCount__, getAddresses__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlMulticastAddressResSend(src__, interfaceTag__, clientData__, status__, action__, getAddressesCount__, getAddresses__) \
- CsrWifiRouterCtrlMulticastAddressResSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__, status__, action__, getAddressesCount__, getAddresses__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPeerAddReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- clientData -
- peerMacAddress -
- associationId -
- staInfo -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlPeerAddReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, peerMacAddress__, associationId__, staInfo__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlPeerAddReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_PEER_ADD_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__); \
- msg__->peerMacAddress = (peerMacAddress__); \
- msg__->associationId = (associationId__); \
- msg__->staInfo = (staInfo__);
-
-#define CsrWifiRouterCtrlPeerAddReqSendTo(dst__, src__, interfaceTag__, clientData__, peerMacAddress__, associationId__, staInfo__) \
- { \
- CsrWifiRouterCtrlPeerAddReq *msg__; \
- CsrWifiRouterCtrlPeerAddReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, peerMacAddress__, associationId__, staInfo__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlPeerAddReqSend(src__, interfaceTag__, clientData__, peerMacAddress__, associationId__, staInfo__) \
- CsrWifiRouterCtrlPeerAddReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__, peerMacAddress__, associationId__, staInfo__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPeerAddCfmSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- peerMacAddress -
- peerRecordHandle -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlPeerAddCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, peerMacAddress__, peerRecordHandle__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlPeerAddCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_PEER_ADD_CFM, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->peerMacAddress = (peerMacAddress__); \
- msg__->peerRecordHandle = (peerRecordHandle__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlPeerAddCfmSendTo(dst__, src__, clientData__, interfaceTag__, peerMacAddress__, peerRecordHandle__, status__) \
- { \
- CsrWifiRouterCtrlPeerAddCfm *msg__; \
- CsrWifiRouterCtrlPeerAddCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, peerMacAddress__, peerRecordHandle__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlPeerAddCfmSend(dst__, clientData__, interfaceTag__, peerMacAddress__, peerRecordHandle__, status__) \
- CsrWifiRouterCtrlPeerAddCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, peerMacAddress__, peerRecordHandle__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPeerDelReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- clientData -
- peerRecordHandle -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlPeerDelReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, peerRecordHandle__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlPeerDelReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_PEER_DEL_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__); \
- msg__->peerRecordHandle = (peerRecordHandle__);
-
-#define CsrWifiRouterCtrlPeerDelReqSendTo(dst__, src__, interfaceTag__, clientData__, peerRecordHandle__) \
- { \
- CsrWifiRouterCtrlPeerDelReq *msg__; \
- CsrWifiRouterCtrlPeerDelReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, peerRecordHandle__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlPeerDelReqSend(src__, interfaceTag__, clientData__, peerRecordHandle__) \
- CsrWifiRouterCtrlPeerDelReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__, peerRecordHandle__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPeerDelCfmSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlPeerDelCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlPeerDelCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_PEER_DEL_CFM, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlPeerDelCfmSendTo(dst__, src__, clientData__, interfaceTag__, status__) \
- { \
- CsrWifiRouterCtrlPeerDelCfm *msg__; \
- CsrWifiRouterCtrlPeerDelCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlPeerDelCfmSend(dst__, clientData__, interfaceTag__, status__) \
- CsrWifiRouterCtrlPeerDelCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPeerUpdateReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- clientData -
- peerRecordHandle -
- powersaveMode -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlPeerUpdateReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, peerRecordHandle__, powersaveMode__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlPeerUpdateReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_PEER_UPDATE_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__); \
- msg__->peerRecordHandle = (peerRecordHandle__); \
- msg__->powersaveMode = (powersaveMode__);
-
-#define CsrWifiRouterCtrlPeerUpdateReqSendTo(dst__, src__, interfaceTag__, clientData__, peerRecordHandle__, powersaveMode__) \
- { \
- CsrWifiRouterCtrlPeerUpdateReq *msg__; \
- CsrWifiRouterCtrlPeerUpdateReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, peerRecordHandle__, powersaveMode__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlPeerUpdateReqSend(src__, interfaceTag__, clientData__, peerRecordHandle__, powersaveMode__) \
- CsrWifiRouterCtrlPeerUpdateReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__, peerRecordHandle__, powersaveMode__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPeerUpdateCfmSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlPeerUpdateCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlPeerUpdateCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_PEER_UPDATE_CFM, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlPeerUpdateCfmSendTo(dst__, src__, clientData__, interfaceTag__, status__) \
- { \
- CsrWifiRouterCtrlPeerUpdateCfm *msg__; \
- CsrWifiRouterCtrlPeerUpdateCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlPeerUpdateCfmSend(dst__, clientData__, interfaceTag__, status__) \
- CsrWifiRouterCtrlPeerUpdateCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPortConfigureReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- clientData -
- uncontrolledPortAction -
- controlledPortAction -
- macAddress -
- setProtection -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlPortConfigureReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, uncontrolledPortAction__, controlledPortAction__, macAddress__, setProtection__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlPortConfigureReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_PORT_CONFIGURE_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__); \
- msg__->uncontrolledPortAction = (uncontrolledPortAction__); \
- msg__->controlledPortAction = (controlledPortAction__); \
- msg__->macAddress = (macAddress__); \
- msg__->setProtection = (setProtection__);
-
-#define CsrWifiRouterCtrlPortConfigureReqSendTo(dst__, src__, interfaceTag__, clientData__, uncontrolledPortAction__, controlledPortAction__, macAddress__, setProtection__) \
- { \
- CsrWifiRouterCtrlPortConfigureReq *msg__; \
- CsrWifiRouterCtrlPortConfigureReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, uncontrolledPortAction__, controlledPortAction__, macAddress__, setProtection__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlPortConfigureReqSend(src__, interfaceTag__, clientData__, uncontrolledPortAction__, controlledPortAction__, macAddress__, setProtection__) \
- CsrWifiRouterCtrlPortConfigureReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__, uncontrolledPortAction__, controlledPortAction__, macAddress__, setProtection__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPortConfigureCfmSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- status -
- macAddress -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlPortConfigureCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, status__, macAddress__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlPortConfigureCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_PORT_CONFIGURE_CFM, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->macAddress = (macAddress__);
-
-#define CsrWifiRouterCtrlPortConfigureCfmSendTo(dst__, src__, clientData__, interfaceTag__, status__, macAddress__) \
- { \
- CsrWifiRouterCtrlPortConfigureCfm *msg__; \
- CsrWifiRouterCtrlPortConfigureCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, status__, macAddress__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlPortConfigureCfmSend(dst__, clientData__, interfaceTag__, status__, macAddress__) \
- CsrWifiRouterCtrlPortConfigureCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, status__, macAddress__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlQosControlReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- clientData -
- control -
- queueConfig -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlQosControlReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, control__, queueConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlQosControlReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_QOS_CONTROL_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__); \
- msg__->control = (control__); \
- msg__->queueConfig = (queueConfig__);
-
-#define CsrWifiRouterCtrlQosControlReqSendTo(dst__, src__, interfaceTag__, clientData__, control__, queueConfig__) \
- { \
- CsrWifiRouterCtrlQosControlReq *msg__; \
- CsrWifiRouterCtrlQosControlReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, control__, queueConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlQosControlReqSend(src__, interfaceTag__, clientData__, control__, queueConfig__) \
- CsrWifiRouterCtrlQosControlReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__, control__, queueConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlRawSdioDeinitialiseReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- clientData -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlRawSdioDeinitialiseReqCreate(msg__, dst__, src__, clientData__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlRawSdioDeinitialiseReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_RAW_SDIO_DEINITIALISE_REQ, dst__, src__); \
- msg__->clientData = (clientData__);
-
-#define CsrWifiRouterCtrlRawSdioDeinitialiseReqSendTo(dst__, src__, clientData__) \
- { \
- CsrWifiRouterCtrlRawSdioDeinitialiseReq *msg__; \
- CsrWifiRouterCtrlRawSdioDeinitialiseReqCreate(msg__, dst__, src__, clientData__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlRawSdioDeinitialiseReqSend(src__, clientData__) \
- CsrWifiRouterCtrlRawSdioDeinitialiseReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, clientData__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlRawSdioDeinitialiseCfmSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- result -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlRawSdioDeinitialiseCfmCreate(msg__, dst__, src__, clientData__, result__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlRawSdioDeinitialiseCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_RAW_SDIO_DEINITIALISE_CFM, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->result = (result__);
-
-#define CsrWifiRouterCtrlRawSdioDeinitialiseCfmSendTo(dst__, src__, clientData__, result__) \
- { \
- CsrWifiRouterCtrlRawSdioDeinitialiseCfm *msg__; \
- CsrWifiRouterCtrlRawSdioDeinitialiseCfmCreate(msg__, dst__, src__, clientData__, result__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlRawSdioDeinitialiseCfmSend(dst__, clientData__, result__) \
- CsrWifiRouterCtrlRawSdioDeinitialiseCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, result__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlRawSdioInitialiseReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- clientData -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlRawSdioInitialiseReqCreate(msg__, dst__, src__, clientData__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlRawSdioInitialiseReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_RAW_SDIO_INITIALISE_REQ, dst__, src__); \
- msg__->clientData = (clientData__);
-
-#define CsrWifiRouterCtrlRawSdioInitialiseReqSendTo(dst__, src__, clientData__) \
- { \
- CsrWifiRouterCtrlRawSdioInitialiseReq *msg__; \
- CsrWifiRouterCtrlRawSdioInitialiseReqCreate(msg__, dst__, src__, clientData__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlRawSdioInitialiseReqSend(src__, clientData__) \
- CsrWifiRouterCtrlRawSdioInitialiseReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, clientData__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlRawSdioInitialiseCfmSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- result -
- byteRead -
- byteWrite -
- firmwareDownload -
- reset -
- coreDumpPrepare -
- byteBlockRead -
- gpRead16 -
- gpWrite16 -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlRawSdioInitialiseCfmCreate(msg__, dst__, src__, clientData__, result__, byteRead__, byteWrite__, firmwareDownload__, reset__, coreDumpPrepare__, byteBlockRead__, gpRead16__, gpWrite16__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlRawSdioInitialiseCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_RAW_SDIO_INITIALISE_CFM, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->result = (result__); \
- msg__->byteRead = (byteRead__); \
- msg__->byteWrite = (byteWrite__); \
- msg__->firmwareDownload = (firmwareDownload__); \
- msg__->reset = (reset__); \
- msg__->coreDumpPrepare = (coreDumpPrepare__); \
- msg__->byteBlockRead = (byteBlockRead__); \
- msg__->gpRead16 = (gpRead16__); \
- msg__->gpWrite16 = (gpWrite16__);
-
-#define CsrWifiRouterCtrlRawSdioInitialiseCfmSendTo(dst__, src__, clientData__, result__, byteRead__, byteWrite__, firmwareDownload__, reset__, coreDumpPrepare__, byteBlockRead__, gpRead16__, gpWrite16__) \
- { \
- CsrWifiRouterCtrlRawSdioInitialiseCfm *msg__; \
- CsrWifiRouterCtrlRawSdioInitialiseCfmCreate(msg__, dst__, src__, clientData__, result__, byteRead__, byteWrite__, firmwareDownload__, reset__, coreDumpPrepare__, byteBlockRead__, gpRead16__, gpWrite16__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlRawSdioInitialiseCfmSend(dst__, clientData__, result__, byteRead__, byteWrite__, firmwareDownload__, reset__, coreDumpPrepare__, byteBlockRead__, gpRead16__, gpWrite16__) \
- CsrWifiRouterCtrlRawSdioInitialiseCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, result__, byteRead__, byteWrite__, firmwareDownload__, reset__, coreDumpPrepare__, byteBlockRead__, gpRead16__, gpWrite16__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlResumeIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- powerMaintained -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlResumeIndCreate(msg__, dst__, src__, clientData__, powerMaintained__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlResumeInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_RESUME_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->powerMaintained = (powerMaintained__);
-
-#define CsrWifiRouterCtrlResumeIndSendTo(dst__, src__, clientData__, powerMaintained__) \
- { \
- CsrWifiRouterCtrlResumeInd *msg__; \
- CsrWifiRouterCtrlResumeIndCreate(msg__, dst__, src__, clientData__, powerMaintained__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlResumeIndSend(dst__, clientData__, powerMaintained__) \
- CsrWifiRouterCtrlResumeIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, powerMaintained__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlResumeResSend
-
- DESCRIPTION
-
- PARAMETERS
- clientData -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlResumeResCreate(msg__, dst__, src__, clientData__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlResumeRes), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_RESUME_RES, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlResumeResSendTo(dst__, src__, clientData__, status__) \
- { \
- CsrWifiRouterCtrlResumeRes *msg__; \
- CsrWifiRouterCtrlResumeResCreate(msg__, dst__, src__, clientData__, status__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlResumeResSend(src__, clientData__, status__) \
- CsrWifiRouterCtrlResumeResSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, clientData__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlStaInactiveIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- staAddress -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlStaInactiveIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, staAddress__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlStaInactiveInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_STA_INACTIVE_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->staAddress = (staAddress__);
-
-#define CsrWifiRouterCtrlStaInactiveIndSendTo(dst__, src__, clientData__, interfaceTag__, staAddress__) \
- { \
- CsrWifiRouterCtrlStaInactiveInd *msg__; \
- CsrWifiRouterCtrlStaInactiveIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, staAddress__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlStaInactiveIndSend(dst__, clientData__, interfaceTag__, staAddress__) \
- CsrWifiRouterCtrlStaInactiveIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, staAddress__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlSuspendIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- hardSuspend -
- d3Suspend -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlSuspendIndCreate(msg__, dst__, src__, clientData__, hardSuspend__, d3Suspend__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlSuspendInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_SUSPEND_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->hardSuspend = (hardSuspend__); \
- msg__->d3Suspend = (d3Suspend__);
-
-#define CsrWifiRouterCtrlSuspendIndSendTo(dst__, src__, clientData__, hardSuspend__, d3Suspend__) \
- { \
- CsrWifiRouterCtrlSuspendInd *msg__; \
- CsrWifiRouterCtrlSuspendIndCreate(msg__, dst__, src__, clientData__, hardSuspend__, d3Suspend__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlSuspendIndSend(dst__, clientData__, hardSuspend__, d3Suspend__) \
- CsrWifiRouterCtrlSuspendIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, hardSuspend__, d3Suspend__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlSuspendResSend
-
- DESCRIPTION
-
- PARAMETERS
- clientData -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlSuspendResCreate(msg__, dst__, src__, clientData__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlSuspendRes), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_SUSPEND_RES, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlSuspendResSendTo(dst__, src__, clientData__, status__) \
- { \
- CsrWifiRouterCtrlSuspendRes *msg__; \
- CsrWifiRouterCtrlSuspendResCreate(msg__, dst__, src__, clientData__, status__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlSuspendResSend(src__, clientData__, status__) \
- CsrWifiRouterCtrlSuspendResSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, clientData__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTclasAddReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- clientData -
- tclasLength -
- tclas -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlTclasAddReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, tclasLength__, tclas__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlTclasAddReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_TCLAS_ADD_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__); \
- msg__->tclasLength = (tclasLength__); \
- msg__->tclas = (tclas__);
-
-#define CsrWifiRouterCtrlTclasAddReqSendTo(dst__, src__, interfaceTag__, clientData__, tclasLength__, tclas__) \
- { \
- CsrWifiRouterCtrlTclasAddReq *msg__; \
- CsrWifiRouterCtrlTclasAddReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, tclasLength__, tclas__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlTclasAddReqSend(src__, interfaceTag__, clientData__, tclasLength__, tclas__) \
- CsrWifiRouterCtrlTclasAddReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__, tclasLength__, tclas__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTclasAddCfmSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlTclasAddCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlTclasAddCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_TCLAS_ADD_CFM, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlTclasAddCfmSendTo(dst__, src__, clientData__, interfaceTag__, status__) \
- { \
- CsrWifiRouterCtrlTclasAddCfm *msg__; \
- CsrWifiRouterCtrlTclasAddCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlTclasAddCfmSend(dst__, clientData__, interfaceTag__, status__) \
- CsrWifiRouterCtrlTclasAddCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTclasDelReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- clientData -
- tclasLength -
- tclas -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlTclasDelReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, tclasLength__, tclas__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlTclasDelReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_TCLAS_DEL_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__); \
- msg__->tclasLength = (tclasLength__); \
- msg__->tclas = (tclas__);
-
-#define CsrWifiRouterCtrlTclasDelReqSendTo(dst__, src__, interfaceTag__, clientData__, tclasLength__, tclas__) \
- { \
- CsrWifiRouterCtrlTclasDelReq *msg__; \
- CsrWifiRouterCtrlTclasDelReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, tclasLength__, tclas__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlTclasDelReqSend(src__, interfaceTag__, clientData__, tclasLength__, tclas__) \
- CsrWifiRouterCtrlTclasDelReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__, tclasLength__, tclas__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTclasDelCfmSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlTclasDelCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlTclasDelCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_TCLAS_DEL_CFM, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlTclasDelCfmSendTo(dst__, src__, clientData__, interfaceTag__, status__) \
- { \
- CsrWifiRouterCtrlTclasDelCfm *msg__; \
- CsrWifiRouterCtrlTclasDelCfmCreate(msg__, dst__, src__, clientData__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlTclasDelCfmSend(dst__, clientData__, interfaceTag__, status__) \
- CsrWifiRouterCtrlTclasDelCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficClassificationReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- clientData -
- trafficType -
- period -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlTrafficClassificationReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, trafficType__, period__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlTrafficClassificationReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_TRAFFIC_CLASSIFICATION_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__); \
- msg__->trafficType = (trafficType__); \
- msg__->period = (period__);
-
-#define CsrWifiRouterCtrlTrafficClassificationReqSendTo(dst__, src__, interfaceTag__, clientData__, trafficType__, period__) \
- { \
- CsrWifiRouterCtrlTrafficClassificationReq *msg__; \
- CsrWifiRouterCtrlTrafficClassificationReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, trafficType__, period__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlTrafficClassificationReqSend(src__, interfaceTag__, clientData__, trafficType__, period__) \
- CsrWifiRouterCtrlTrafficClassificationReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__, trafficType__, period__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficConfigReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- clientData -
- trafficConfigType -
- config -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlTrafficConfigReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, trafficConfigType__, config__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlTrafficConfigReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_TRAFFIC_CONFIG_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->clientData = (clientData__); \
- msg__->trafficConfigType = (trafficConfigType__); \
- msg__->config = (config__);
-
-#define CsrWifiRouterCtrlTrafficConfigReqSendTo(dst__, src__, interfaceTag__, clientData__, trafficConfigType__, config__) \
- { \
- CsrWifiRouterCtrlTrafficConfigReq *msg__; \
- CsrWifiRouterCtrlTrafficConfigReqCreate(msg__, dst__, src__, interfaceTag__, clientData__, trafficConfigType__, config__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlTrafficConfigReqSend(src__, interfaceTag__, clientData__, trafficConfigType__, config__) \
- CsrWifiRouterCtrlTrafficConfigReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, clientData__, trafficConfigType__, config__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficProtocolIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- packetType -
- direction -
- srcAddress -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlTrafficProtocolIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, packetType__, direction__, srcAddress__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlTrafficProtocolInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_TRAFFIC_PROTOCOL_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->packetType = (packetType__); \
- msg__->direction = (direction__); \
- msg__->srcAddress = (srcAddress__);
-
-#define CsrWifiRouterCtrlTrafficProtocolIndSendTo(dst__, src__, clientData__, interfaceTag__, packetType__, direction__, srcAddress__) \
- { \
- CsrWifiRouterCtrlTrafficProtocolInd *msg__; \
- CsrWifiRouterCtrlTrafficProtocolIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, packetType__, direction__, srcAddress__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlTrafficProtocolIndSend(dst__, clientData__, interfaceTag__, packetType__, direction__, srcAddress__) \
- CsrWifiRouterCtrlTrafficProtocolIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, packetType__, direction__, srcAddress__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficSampleIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- stats -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlTrafficSampleIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, stats__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlTrafficSampleInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_TRAFFIC_SAMPLE_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->stats = (stats__);
-
-#define CsrWifiRouterCtrlTrafficSampleIndSendTo(dst__, src__, clientData__, interfaceTag__, stats__) \
- { \
- CsrWifiRouterCtrlTrafficSampleInd *msg__; \
- CsrWifiRouterCtrlTrafficSampleIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, stats__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlTrafficSampleIndSend(dst__, clientData__, interfaceTag__, stats__) \
- CsrWifiRouterCtrlTrafficSampleIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, stats__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlUnexpectedFrameIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- peerMacAddress -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlUnexpectedFrameIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, peerMacAddress__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlUnexpectedFrameInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_UNEXPECTED_FRAME_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->peerMacAddress = (peerMacAddress__);
-
-#define CsrWifiRouterCtrlUnexpectedFrameIndSendTo(dst__, src__, clientData__, interfaceTag__, peerMacAddress__) \
- { \
- CsrWifiRouterCtrlUnexpectedFrameInd *msg__; \
- CsrWifiRouterCtrlUnexpectedFrameIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, peerMacAddress__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlUnexpectedFrameIndSend(dst__, clientData__, interfaceTag__, peerMacAddress__) \
- CsrWifiRouterCtrlUnexpectedFrameIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, peerMacAddress__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWapiFilterReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- isWapiConnected -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWapiFilterReqCreate(msg__, dst__, src__, interfaceTag__, isWapiConnected__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWapiFilterReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WAPI_FILTER_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->isWapiConnected = (isWapiConnected__);
-
-#define CsrWifiRouterCtrlWapiFilterReqSendTo(dst__, src__, interfaceTag__, isWapiConnected__) \
- { \
- CsrWifiRouterCtrlWapiFilterReq *msg__; \
- CsrWifiRouterCtrlWapiFilterReqCreate(msg__, dst__, src__, interfaceTag__, isWapiConnected__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWapiFilterReqSend(src__, interfaceTag__, isWapiConnected__) \
- CsrWifiRouterCtrlWapiFilterReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, isWapiConnected__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWapiMulticastFilterReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWapiMulticastFilterReqCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWapiMulticastFilterReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WAPI_MULTICAST_FILTER_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlWapiMulticastFilterReqSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiRouterCtrlWapiMulticastFilterReq *msg__; \
- CsrWifiRouterCtrlWapiMulticastFilterReqCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWapiMulticastFilterReqSend(src__, interfaceTag__, status__) \
- CsrWifiRouterCtrlWapiMulticastFilterReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWapiRxMicCheckIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- signalLength -
- signal -
- dataLength -
- data -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWapiRxMicCheckIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, signalLength__, signal__, dataLength__, data__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWapiRxMicCheckInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WAPI_RX_MIC_CHECK_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->signalLength = (signalLength__); \
- msg__->signal = (signal__); \
- msg__->dataLength = (dataLength__); \
- msg__->data = (data__);
-
-#define CsrWifiRouterCtrlWapiRxMicCheckIndSendTo(dst__, src__, clientData__, interfaceTag__, signalLength__, signal__, dataLength__, data__) \
- { \
- CsrWifiRouterCtrlWapiRxMicCheckInd *msg__; \
- CsrWifiRouterCtrlWapiRxMicCheckIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, signalLength__, signal__, dataLength__, data__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWapiRxMicCheckIndSend(dst__, clientData__, interfaceTag__, signalLength__, signal__, dataLength__, data__) \
- CsrWifiRouterCtrlWapiRxMicCheckIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, signalLength__, signal__, dataLength__, data__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWapiRxPktReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- signalLength -
- signal -
- dataLength -
- data -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWapiRxPktReqCreate(msg__, dst__, src__, interfaceTag__, signalLength__, signal__, dataLength__, data__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWapiRxPktReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WAPI_RX_PKT_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->signalLength = (signalLength__); \
- msg__->signal = (signal__); \
- msg__->dataLength = (dataLength__); \
- msg__->data = (data__);
-
-#define CsrWifiRouterCtrlWapiRxPktReqSendTo(dst__, src__, interfaceTag__, signalLength__, signal__, dataLength__, data__) \
- { \
- CsrWifiRouterCtrlWapiRxPktReq *msg__; \
- CsrWifiRouterCtrlWapiRxPktReqCreate(msg__, dst__, src__, interfaceTag__, signalLength__, signal__, dataLength__, data__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWapiRxPktReqSend(src__, interfaceTag__, signalLength__, signal__, dataLength__, data__) \
- CsrWifiRouterCtrlWapiRxPktReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, signalLength__, signal__, dataLength__, data__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWapiUnicastFilterReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWapiUnicastFilterReqCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWapiUnicastFilterReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WAPI_UNICAST_FILTER_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlWapiUnicastFilterReqSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiRouterCtrlWapiUnicastFilterReq *msg__; \
- CsrWifiRouterCtrlWapiUnicastFilterReqCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWapiUnicastFilterReqSend(src__, interfaceTag__, status__) \
- CsrWifiRouterCtrlWapiUnicastFilterReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWapiUnicastTxEncryptIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- interfaceTag -
- dataLength -
- data -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWapiUnicastTxEncryptIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, dataLength__, data__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWapiUnicastTxEncryptInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WAPI_UNICAST_TX_ENCRYPT_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->dataLength = (dataLength__); \
- msg__->data = (data__);
-
-#define CsrWifiRouterCtrlWapiUnicastTxEncryptIndSendTo(dst__, src__, clientData__, interfaceTag__, dataLength__, data__) \
- { \
- CsrWifiRouterCtrlWapiUnicastTxEncryptInd *msg__; \
- CsrWifiRouterCtrlWapiUnicastTxEncryptIndCreate(msg__, dst__, src__, clientData__, interfaceTag__, dataLength__, data__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWapiUnicastTxEncryptIndSend(dst__, clientData__, interfaceTag__, dataLength__, data__) \
- CsrWifiRouterCtrlWapiUnicastTxEncryptIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, interfaceTag__, dataLength__, data__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWapiUnicastTxPktReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- dataLength -
- data -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWapiUnicastTxPktReqCreate(msg__, dst__, src__, interfaceTag__, dataLength__, data__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWapiUnicastTxPktReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WAPI_UNICAST_TX_PKT_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->dataLength = (dataLength__); \
- msg__->data = (data__);
-
-#define CsrWifiRouterCtrlWapiUnicastTxPktReqSendTo(dst__, src__, interfaceTag__, dataLength__, data__) \
- { \
- CsrWifiRouterCtrlWapiUnicastTxPktReq *msg__; \
- CsrWifiRouterCtrlWapiUnicastTxPktReqCreate(msg__, dst__, src__, interfaceTag__, dataLength__, data__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWapiUnicastTxPktReqSend(src__, interfaceTag__, dataLength__, data__) \
- CsrWifiRouterCtrlWapiUnicastTxPktReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, dataLength__, data__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOffReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- clientData -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWifiOffReqCreate(msg__, dst__, src__, clientData__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWifiOffReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WIFI_OFF_REQ, dst__, src__); \
- msg__->clientData = (clientData__);
-
-#define CsrWifiRouterCtrlWifiOffReqSendTo(dst__, src__, clientData__) \
- { \
- CsrWifiRouterCtrlWifiOffReq *msg__; \
- CsrWifiRouterCtrlWifiOffReqCreate(msg__, dst__, src__, clientData__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWifiOffReqSend(src__, clientData__) \
- CsrWifiRouterCtrlWifiOffReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, clientData__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOffIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- controlIndication -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWifiOffIndCreate(msg__, dst__, src__, clientData__, controlIndication__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWifiOffInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WIFI_OFF_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->controlIndication = (controlIndication__);
-
-#define CsrWifiRouterCtrlWifiOffIndSendTo(dst__, src__, clientData__, controlIndication__) \
- { \
- CsrWifiRouterCtrlWifiOffInd *msg__; \
- CsrWifiRouterCtrlWifiOffIndCreate(msg__, dst__, src__, clientData__, controlIndication__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWifiOffIndSend(dst__, clientData__, controlIndication__) \
- CsrWifiRouterCtrlWifiOffIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, controlIndication__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOffResSend
-
- DESCRIPTION
-
- PARAMETERS
- clientData -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWifiOffResCreate(msg__, dst__, src__, clientData__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWifiOffRes), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WIFI_OFF_RES, dst__, src__); \
- msg__->clientData = (clientData__);
-
-#define CsrWifiRouterCtrlWifiOffResSendTo(dst__, src__, clientData__) \
- { \
- CsrWifiRouterCtrlWifiOffRes *msg__; \
- CsrWifiRouterCtrlWifiOffResCreate(msg__, dst__, src__, clientData__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWifiOffResSend(src__, clientData__) \
- CsrWifiRouterCtrlWifiOffResSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, clientData__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOffCfmSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWifiOffCfmCreate(msg__, dst__, src__, clientData__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWifiOffCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WIFI_OFF_CFM, dst__, src__); \
- msg__->clientData = (clientData__);
-
-#define CsrWifiRouterCtrlWifiOffCfmSendTo(dst__, src__, clientData__) \
- { \
- CsrWifiRouterCtrlWifiOffCfm *msg__; \
- CsrWifiRouterCtrlWifiOffCfmCreate(msg__, dst__, src__, clientData__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWifiOffCfmSend(dst__, clientData__) \
- CsrWifiRouterCtrlWifiOffCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOnReqSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- clientData -
- dataLength - Number of bytes in the buffer pointed to by 'data'
- data - Pointer to the buffer containing 'dataLength' bytes
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWifiOnReqCreate(msg__, dst__, src__, clientData__, dataLength__, data__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWifiOnReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WIFI_ON_REQ, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->dataLength = (dataLength__); \
- msg__->data = (data__);
-
-#define CsrWifiRouterCtrlWifiOnReqSendTo(dst__, src__, clientData__, dataLength__, data__) \
- { \
- CsrWifiRouterCtrlWifiOnReq *msg__; \
- CsrWifiRouterCtrlWifiOnReqCreate(msg__, dst__, src__, clientData__, dataLength__, data__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWifiOnReqSend(src__, clientData__, dataLength__, data__) \
- CsrWifiRouterCtrlWifiOnReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, clientData__, dataLength__, data__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOnIndSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- status -
- versions -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWifiOnIndCreate(msg__, dst__, src__, clientData__, status__, versions__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWifiOnInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WIFI_ON_IND, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->status = (status__); \
- msg__->versions = (versions__);
-
-#define CsrWifiRouterCtrlWifiOnIndSendTo(dst__, src__, clientData__, status__, versions__) \
- { \
- CsrWifiRouterCtrlWifiOnInd *msg__; \
- CsrWifiRouterCtrlWifiOnIndCreate(msg__, dst__, src__, clientData__, status__, versions__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWifiOnIndSend(dst__, clientData__, status__, versions__) \
- CsrWifiRouterCtrlWifiOnIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, status__, versions__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOnResSend
-
- DESCRIPTION
-
- PARAMETERS
- clientData -
- status -
- numInterfaceAddress -
- stationMacAddress - array size 1 MUST match CSR_WIFI_NUM_INTERFACES
- smeVersions -
- scheduledInterrupt -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWifiOnResCreate(msg__, dst__, src__, clientData__, status__, numInterfaceAddress__, stationMacAddress__, smeVersions__, scheduledInterrupt__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWifiOnRes), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WIFI_ON_RES, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->status = (status__); \
- msg__->numInterfaceAddress = (numInterfaceAddress__); \
- memcpy(msg__->stationMacAddress, (stationMacAddress__), sizeof(CsrWifiMacAddress) * 2); \
- msg__->smeVersions = (smeVersions__); \
- msg__->scheduledInterrupt = (scheduledInterrupt__);
-
-#define CsrWifiRouterCtrlWifiOnResSendTo(dst__, src__, clientData__, status__, numInterfaceAddress__, stationMacAddress__, smeVersions__, scheduledInterrupt__) \
- { \
- CsrWifiRouterCtrlWifiOnRes *msg__; \
- CsrWifiRouterCtrlWifiOnResCreate(msg__, dst__, src__, clientData__, status__, numInterfaceAddress__, stationMacAddress__, smeVersions__, scheduledInterrupt__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWifiOnResSend(src__, clientData__, status__, numInterfaceAddress__, stationMacAddress__, smeVersions__, scheduledInterrupt__) \
- CsrWifiRouterCtrlWifiOnResSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, clientData__, status__, numInterfaceAddress__, stationMacAddress__, smeVersions__, scheduledInterrupt__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOnCfmSend
-
- DESCRIPTION
-
- PARAMETERS
- queue - Destination Task Queue
- clientData -
- status -
-
-*******************************************************************************/
-#define CsrWifiRouterCtrlWifiOnCfmCreate(msg__, dst__, src__, clientData__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterCtrlWifiOnCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_CTRL_PRIM, CSR_WIFI_ROUTER_CTRL_WIFI_ON_CFM, dst__, src__); \
- msg__->clientData = (clientData__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterCtrlWifiOnCfmSendTo(dst__, src__, clientData__, status__) \
- { \
- CsrWifiRouterCtrlWifiOnCfm *msg__; \
- CsrWifiRouterCtrlWifiOnCfmCreate(msg__, dst__, src__, clientData__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_CTRL_PRIM, msg__); \
- }
-
-#define CsrWifiRouterCtrlWifiOnCfmSend(dst__, clientData__, status__) \
- CsrWifiRouterCtrlWifiOnCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, clientData__, status__)
-
-#endif /* CSR_WIFI_ROUTER_CTRL_LIB_H__ */
diff --git a/drivers/staging/csr/csr_wifi_router_ctrl_prim.h b/drivers/staging/csr/csr_wifi_router_ctrl_prim.h
deleted file mode 100644
index 1312a335dd76..000000000000
--- a/drivers/staging/csr/csr_wifi_router_ctrl_prim.h
+++ /dev/null
@@ -1,2113 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_ROUTER_CTRL_PRIM_H__
-#define CSR_WIFI_ROUTER_CTRL_PRIM_H__
-
-#include <linux/types.h>
-#include "csr_prim_defs.h"
-#include "csr_sched.h"
-#include "csr_wifi_common.h"
-#include "csr_result.h"
-#include "csr_wifi_fsm_event.h"
-
-#define CSR_WIFI_ROUTER_CTRL_PRIM (0x0401)
-
-typedef CsrPrim CsrWifiRouterCtrlPrim;
-
-typedef CsrResult (*CsrWifiRouterCtrlRawSdioByteWrite)(u8 func, u32 address, u8 data);
-typedef CsrResult (*CsrWifiRouterCtrlRawSdioByteRead)(u8 func, u32 address, u8 *pdata);
-typedef CsrResult (*CsrWifiRouterCtrlRawSdioFirmwareDownload)(u32 length, const u8 *pdata);
-typedef CsrResult (*CsrWifiRouterCtrlRawSdioReset)(void);
-typedef CsrResult (*CsrWifiRouterCtrlRawSdioCoreDumpPrepare)(u8 suspendSme);
-typedef CsrResult (*CsrWifiRouterCtrlRawSdioByteBlockRead)(u8 func, u32 address, u8 *pdata, u32 length);
-typedef CsrResult (*CsrWifiRouterCtrlRawSdioGpRead16)(u8 func, u32 address, u16 *pdata);
-typedef CsrResult (*CsrWifiRouterCtrlRawSdioGpWrite16)(u8 func, u32 address, u16 data);
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlBlockAckRole
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ORIGINATOR
- -
- CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_RECIPIENT
- -
-
-*******************************************************************************/
-typedef u8 CsrWifiRouterCtrlBlockAckRole;
-#define CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ORIGINATOR ((CsrWifiRouterCtrlBlockAckRole) 0x00)
-#define CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_RECIPIENT ((CsrWifiRouterCtrlBlockAckRole) 0x01)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlControlIndication
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_CONTROL_INDICATION_ERROR
- -
- CSR_WIFI_ROUTER_CTRL_CONTROL_INDICATION_EXIT
- -
- CSR_WIFI_ROUTER_CTRL_CONTROL_INDICATION_USER_REQUESTED
- -
-
-*******************************************************************************/
-typedef u8 CsrWifiRouterCtrlControlIndication;
-#define CSR_WIFI_ROUTER_CTRL_CONTROL_INDICATION_ERROR ((CsrWifiRouterCtrlControlIndication) 0x01)
-#define CSR_WIFI_ROUTER_CTRL_CONTROL_INDICATION_EXIT ((CsrWifiRouterCtrlControlIndication) 0x02)
-#define CSR_WIFI_ROUTER_CTRL_CONTROL_INDICATION_USER_REQUESTED ((CsrWifiRouterCtrlControlIndication) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlListAction
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_LIST_ACTION_GET
- -
- CSR_WIFI_ROUTER_CTRL_LIST_ACTION_ADD
- -
- CSR_WIFI_ROUTER_CTRL_LIST_ACTION_REMOVE
- -
- CSR_WIFI_ROUTER_CTRL_LIST_ACTION_FLUSH
- -
-
-*******************************************************************************/
-typedef u8 CsrWifiRouterCtrlListAction;
-#define CSR_WIFI_ROUTER_CTRL_LIST_ACTION_GET ((CsrWifiRouterCtrlListAction) 0x00)
-#define CSR_WIFI_ROUTER_CTRL_LIST_ACTION_ADD ((CsrWifiRouterCtrlListAction) 0x01)
-#define CSR_WIFI_ROUTER_CTRL_LIST_ACTION_REMOVE ((CsrWifiRouterCtrlListAction) 0x02)
-#define CSR_WIFI_ROUTER_CTRL_LIST_ACTION_FLUSH ((CsrWifiRouterCtrlListAction) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlLowPowerMode
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_LOW_POWER_MODE_DISABLED
- -
- CSR_WIFI_ROUTER_CTRL_LOW_POWER_MODE_ENABLED
- -
-
-*******************************************************************************/
-typedef u16 CsrWifiRouterCtrlLowPowerMode;
-#define CSR_WIFI_ROUTER_CTRL_LOW_POWER_MODE_DISABLED ((CsrWifiRouterCtrlLowPowerMode) 0x0000)
-#define CSR_WIFI_ROUTER_CTRL_LOW_POWER_MODE_ENABLED ((CsrWifiRouterCtrlLowPowerMode) 0x0001)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlMediaStatus
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_MEDIA_STATUS_CONNECTED
- -
- CSR_WIFI_ROUTER_CTRL_MEDIA_STATUS_DISCONNECTED
- -
-
-*******************************************************************************/
-typedef u8 CsrWifiRouterCtrlMediaStatus;
-#define CSR_WIFI_ROUTER_CTRL_MEDIA_STATUS_CONNECTED ((CsrWifiRouterCtrlMediaStatus) 0x00)
-#define CSR_WIFI_ROUTER_CTRL_MEDIA_STATUS_DISCONNECTED ((CsrWifiRouterCtrlMediaStatus) 0x01)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlMode
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_MODE_NONE -
- CSR_WIFI_ROUTER_CTRL_MODE_IBSS -
- CSR_WIFI_ROUTER_CTRL_MODE_STA -
- CSR_WIFI_ROUTER_CTRL_MODE_AP -
- CSR_WIFI_ROUTER_CTRL_MODE_MONITOR -
- CSR_WIFI_ROUTER_CTRL_MODE_AMP -
- CSR_WIFI_ROUTER_CTRL_MODE_P2P -
- CSR_WIFI_ROUTER_CTRL_MODE_P2PGO -
- CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI -
-
-*******************************************************************************/
-typedef u8 CsrWifiRouterCtrlMode;
-#define CSR_WIFI_ROUTER_CTRL_MODE_NONE ((CsrWifiRouterCtrlMode) 0x00)
-#define CSR_WIFI_ROUTER_CTRL_MODE_IBSS ((CsrWifiRouterCtrlMode) 0x01)
-#define CSR_WIFI_ROUTER_CTRL_MODE_STA ((CsrWifiRouterCtrlMode) 0x02)
-#define CSR_WIFI_ROUTER_CTRL_MODE_AP ((CsrWifiRouterCtrlMode) 0x03)
-#define CSR_WIFI_ROUTER_CTRL_MODE_MONITOR ((CsrWifiRouterCtrlMode) 0x04)
-#define CSR_WIFI_ROUTER_CTRL_MODE_AMP ((CsrWifiRouterCtrlMode) 0x05)
-#define CSR_WIFI_ROUTER_CTRL_MODE_P2P ((CsrWifiRouterCtrlMode) 0x06)
-#define CSR_WIFI_ROUTER_CTRL_MODE_P2PGO ((CsrWifiRouterCtrlMode) 0x07)
-#define CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI ((CsrWifiRouterCtrlMode) 0x08)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPeerStatus
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_ACTIVE
- -
- CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_POWER_SAVE
- -
- CSR_WIFI_ROUTER_CTRL_PEER_DISCONNECTED
- -
-
-*******************************************************************************/
-typedef u8 CsrWifiRouterCtrlPeerStatus;
-#define CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_ACTIVE ((CsrWifiRouterCtrlPeerStatus) 0x00)
-#define CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_POWER_SAVE ((CsrWifiRouterCtrlPeerStatus) 0x01)
-#define CSR_WIFI_ROUTER_CTRL_PEER_DISCONNECTED ((CsrWifiRouterCtrlPeerStatus) 0x02)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPortAction
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN
- -
- CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD
- -
- CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_BLOCK
- -
-
-*******************************************************************************/
-typedef u16 CsrWifiRouterCtrlPortAction;
-#define CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN ((CsrWifiRouterCtrlPortAction) 0x0000)
-#define CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD ((CsrWifiRouterCtrlPortAction) 0x0001)
-#define CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_BLOCK ((CsrWifiRouterCtrlPortAction) 0x0002)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPowersaveType
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_AC_BK_PS_INFO_PRESENT
- - If set, AC BK PS info is present in b4 and b5
- CSR_WIFI_ROUTER_CTRL_AC_BE_PS_INFO_PRESENT
- - If set, AC BE PS info is present in b6 and b7
- CSR_WIFI_ROUTER_CTRL_AC_VI_PS_INFO_PRESENT
- - If set, AC VI PS info is present in b8 and b9
- CSR_WIFI_ROUTER_CTRL_AC_VO_PS_INFO_PRESENT
- - If set, AC VO PS info is present in b10 and b11
- CSR_WIFI_ROUTER_CTRL_AC_BK_TRIGGER_ENABLED
- -
- CSR_WIFI_ROUTER_CTRL_AC_BK_DELIVERY_ENABLED
- -
- CSR_WIFI_ROUTER_CTRL_AC_BE_TRIGGER_ENABLED
- -
- CSR_WIFI_ROUTER_CTRL_AC_BE_DELIVERY_ENABLED
- -
- CSR_WIFI_ROUTER_CTRL_AC_VI_TRIGGER_ENABLED
- -
- CSR_WIFI_ROUTER_CTRL_AC_VI_DELIVERY_ENABLED
- -
- CSR_WIFI_ROUTER_CTRL_AC_VO_TRIGGER_ENABLED
- -
- CSR_WIFI_ROUTER_CTRL_AC_VO_DELIVERY_ENABLED
- -
-
-*******************************************************************************/
-typedef u16 CsrWifiRouterCtrlPowersaveType;
-#define CSR_WIFI_ROUTER_CTRL_AC_BK_PS_INFO_PRESENT ((CsrWifiRouterCtrlPowersaveType) 0x0001)
-#define CSR_WIFI_ROUTER_CTRL_AC_BE_PS_INFO_PRESENT ((CsrWifiRouterCtrlPowersaveType) 0x0002)
-#define CSR_WIFI_ROUTER_CTRL_AC_VI_PS_INFO_PRESENT ((CsrWifiRouterCtrlPowersaveType) 0x0004)
-#define CSR_WIFI_ROUTER_CTRL_AC_VO_PS_INFO_PRESENT ((CsrWifiRouterCtrlPowersaveType) 0x0008)
-#define CSR_WIFI_ROUTER_CTRL_AC_BK_TRIGGER_ENABLED ((CsrWifiRouterCtrlPowersaveType) 0x0010)
-#define CSR_WIFI_ROUTER_CTRL_AC_BK_DELIVERY_ENABLED ((CsrWifiRouterCtrlPowersaveType) 0x0020)
-#define CSR_WIFI_ROUTER_CTRL_AC_BE_TRIGGER_ENABLED ((CsrWifiRouterCtrlPowersaveType) 0x0040)
-#define CSR_WIFI_ROUTER_CTRL_AC_BE_DELIVERY_ENABLED ((CsrWifiRouterCtrlPowersaveType) 0x0080)
-#define CSR_WIFI_ROUTER_CTRL_AC_VI_TRIGGER_ENABLED ((CsrWifiRouterCtrlPowersaveType) 0x0100)
-#define CSR_WIFI_ROUTER_CTRL_AC_VI_DELIVERY_ENABLED ((CsrWifiRouterCtrlPowersaveType) 0x0200)
-#define CSR_WIFI_ROUTER_CTRL_AC_VO_TRIGGER_ENABLED ((CsrWifiRouterCtrlPowersaveType) 0x0400)
-#define CSR_WIFI_ROUTER_CTRL_AC_VO_DELIVERY_ENABLED ((CsrWifiRouterCtrlPowersaveType) 0x0800)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlProtocolDirection
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_PROTOCOL_DIRECTION_RX
- -
- CSR_WIFI_ROUTER_CTRL_PROTOCOL_DIRECTION_TX
- -
-
-*******************************************************************************/
-typedef u16 CsrWifiRouterCtrlProtocolDirection;
-#define CSR_WIFI_ROUTER_CTRL_PROTOCOL_DIRECTION_RX ((CsrWifiRouterCtrlProtocolDirection) 0x0000)
-#define CSR_WIFI_ROUTER_CTRL_PROTOCOL_DIRECTION_TX ((CsrWifiRouterCtrlProtocolDirection) 0x0001)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlQoSControl
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_QOS_CONTROL_OFF
- -
- CSR_WIFI_ROUTER_CTRL_QOS_CONTROL_WMM_ON
- -
- CSR_WIFI_ROUTER_CTRL_QOS_CONTROL_80211_ON
- -
-
-*******************************************************************************/
-typedef u16 CsrWifiRouterCtrlQoSControl;
-#define CSR_WIFI_ROUTER_CTRL_QOS_CONTROL_OFF ((CsrWifiRouterCtrlQoSControl) 0x0000)
-#define CSR_WIFI_ROUTER_CTRL_QOS_CONTROL_WMM_ON ((CsrWifiRouterCtrlQoSControl) 0x0001)
-#define CSR_WIFI_ROUTER_CTRL_QOS_CONTROL_80211_ON ((CsrWifiRouterCtrlQoSControl) 0x0002)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlQueueConfig
-
- DESCRIPTION
- Defines which Queues are enabled for use.
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_QUEUE_BE_ENABLE
- -
- CSR_WIFI_ROUTER_CTRL_QUEUE_BK_ENABLE
- -
- CSR_WIFI_ROUTER_CTRL_QUEUE_VI_ENABLE
- -
- CSR_WIFI_ROUTER_CTRL_QUEUE_VO_ENABLE
- -
-
-*******************************************************************************/
-typedef u8 CsrWifiRouterCtrlQueueConfig;
-#define CSR_WIFI_ROUTER_CTRL_QUEUE_BE_ENABLE ((CsrWifiRouterCtrlQueueConfig) 0x01)
-#define CSR_WIFI_ROUTER_CTRL_QUEUE_BK_ENABLE ((CsrWifiRouterCtrlQueueConfig) 0x02)
-#define CSR_WIFI_ROUTER_CTRL_QUEUE_VI_ENABLE ((CsrWifiRouterCtrlQueueConfig) 0x04)
-#define CSR_WIFI_ROUTER_CTRL_QUEUE_VO_ENABLE ((CsrWifiRouterCtrlQueueConfig) 0x08)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficConfigType
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_CONFIG_TYPE_RESET
- -
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_CONFIG_TYPE_FILTER
- -
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_CONFIG_TYPE_CLS
- -
-
-*******************************************************************************/
-typedef u16 CsrWifiRouterCtrlTrafficConfigType;
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_CONFIG_TYPE_RESET ((CsrWifiRouterCtrlTrafficConfigType) 0x0000)
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_CONFIG_TYPE_FILTER ((CsrWifiRouterCtrlTrafficConfigType) 0x0001)
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_CONFIG_TYPE_CLS ((CsrWifiRouterCtrlTrafficConfigType) 0x0002)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficPacketType
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_NONE
- -
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_EAPOL
- -
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_DHCP
- -
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_DHCP_ACK
- -
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_ARP
- -
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_AIRONET
- -
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_CUSTOM
- -
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_ALL
- -
-
-*******************************************************************************/
-typedef u16 CsrWifiRouterCtrlTrafficPacketType;
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_NONE ((CsrWifiRouterCtrlTrafficPacketType) 0x0000)
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_EAPOL ((CsrWifiRouterCtrlTrafficPacketType) 0x0001)
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_DHCP ((CsrWifiRouterCtrlTrafficPacketType) 0x0002)
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_DHCP_ACK ((CsrWifiRouterCtrlTrafficPacketType) 0x0004)
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_ARP ((CsrWifiRouterCtrlTrafficPacketType) 0x0008)
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_AIRONET ((CsrWifiRouterCtrlTrafficPacketType) 0x0010)
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_CUSTOM ((CsrWifiRouterCtrlTrafficPacketType) 0x0020)
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_ALL ((CsrWifiRouterCtrlTrafficPacketType) 0x00FF)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficType
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_TYPE_OCCASIONAL
- -
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_TYPE_BURSTY
- -
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_TYPE_PERIODIC
- -
- CSR_WIFI_ROUTER_CTRL_TRAFFIC_TYPE_CONTINUOUS
- -
-
-*******************************************************************************/
-typedef u8 CsrWifiRouterCtrlTrafficType;
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_TYPE_OCCASIONAL ((CsrWifiRouterCtrlTrafficType) 0x00)
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_TYPE_BURSTY ((CsrWifiRouterCtrlTrafficType) 0x01)
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_TYPE_PERIODIC ((CsrWifiRouterCtrlTrafficType) 0x02)
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_TYPE_CONTINUOUS ((CsrWifiRouterCtrlTrafficType) 0x03)
-
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPeerRecordHandle
-
- DESCRIPTION
-
-*******************************************************************************/
-typedef u32 CsrWifiRouterCtrlPeerRecordHandle;
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPowersaveTypeMask
-
- DESCRIPTION
- Mask type for use with the values defined by
- CsrWifiRouterCtrlPowersaveType
-
-*******************************************************************************/
-typedef u16 CsrWifiRouterCtrlPowersaveTypeMask;
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlQueueConfigMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiRouterCtrlQueueConfig
-
-*******************************************************************************/
-typedef u8 CsrWifiRouterCtrlQueueConfigMask;
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlRequestorInfo
-
- DESCRIPTION
-
-*******************************************************************************/
-typedef u16 CsrWifiRouterCtrlRequestorInfo;
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficStreamId
-
- DESCRIPTION
-
-*******************************************************************************/
-typedef u8 CsrWifiRouterCtrlTrafficStreamId;
-
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlSmeVersions
-
- DESCRIPTION
-
- MEMBERS
- firmwarePatch -
- smeBuild -
- smeHip -
-
-*******************************************************************************/
-typedef struct
-{
- u32 firmwarePatch;
- char *smeBuild;
- u32 smeHip;
-} CsrWifiRouterCtrlSmeVersions;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlStaInfo
-
- DESCRIPTION
-
- MEMBERS
- wmmOrQosEnabled -
- powersaveMode -
- maxSpLength -
- listenIntervalInTus -
-
-*******************************************************************************/
-typedef struct
-{
- u8 wmmOrQosEnabled;
- CsrWifiRouterCtrlPowersaveTypeMask powersaveMode;
- u8 maxSpLength;
- u16 listenIntervalInTus;
-} CsrWifiRouterCtrlStaInfo;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficFilter
-
- DESCRIPTION
-
- MEMBERS
- etherType -
- ipType -
- udpSourcePort -
- udpDestPort -
-
-*******************************************************************************/
-typedef struct
-{
- u32 etherType;
- u8 ipType;
- u32 udpSourcePort;
- u32 udpDestPort;
-} CsrWifiRouterCtrlTrafficFilter;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficStats
-
- DESCRIPTION
-
- MEMBERS
- rxMeanRate - Mean rx data rate over the interval
- rxFramesNum - Keep number of Rx frames per second, for CYCLE_3.
- txFramesNum - Keep number of Tx frames per second, for CYCLE_3.
- rxBytesCount - Keep calculated Rx throughput per second, for CYCLE_2.
- txBytesCount - Keep calculated Tx throughput per second, for CYCLE_2.
- intervals - array size 11 MUST match TA_INTERVALS_NUM
-
-*******************************************************************************/
-typedef struct
-{
- u32 rxMeanRate;
- u32 rxFramesNum;
- u32 txFramesNum;
- u32 rxBytesCount;
- u32 txBytesCount;
- u8 intervals[11];
-} CsrWifiRouterCtrlTrafficStats;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlVersions
-
- DESCRIPTION
-
- MEMBERS
- chipId -
- chipVersion -
- firmwareBuild -
- firmwareHip -
- routerBuild -
- routerHip -
-
-*******************************************************************************/
-typedef struct
-{
- u32 chipId;
- u32 chipVersion;
- u32 firmwareBuild;
- u32 firmwareHip;
- char *routerBuild;
- u32 routerHip;
-} CsrWifiRouterCtrlVersions;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficConfig
-
- DESCRIPTION
-
- MEMBERS
- packetFilter -
- customFilter -
-
-*******************************************************************************/
-typedef struct
-{
- u16 packetFilter;
- CsrWifiRouterCtrlTrafficFilter customFilter;
-} CsrWifiRouterCtrlTrafficConfig;
-
-
-/* Downstream */
-#define CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST (0x0000)
-
-#define CSR_WIFI_ROUTER_CTRL_CONFIGURE_POWER_MODE_REQ ((CsrWifiRouterCtrlPrim) (0x0000 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_HIP_REQ ((CsrWifiRouterCtrlPrim) (0x0001 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_MEDIA_STATUS_REQ ((CsrWifiRouterCtrlPrim) (0x0002 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_MULTICAST_ADDRESS_RES ((CsrWifiRouterCtrlPrim) (0x0003 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_PORT_CONFIGURE_REQ ((CsrWifiRouterCtrlPrim) (0x0004 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_QOS_CONTROL_REQ ((CsrWifiRouterCtrlPrim) (0x0005 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_SUSPEND_RES ((CsrWifiRouterCtrlPrim) (0x0006 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_TCLAS_ADD_REQ ((CsrWifiRouterCtrlPrim) (0x0007 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_RESUME_RES ((CsrWifiRouterCtrlPrim) (0x0008 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_RAW_SDIO_DEINITIALISE_REQ ((CsrWifiRouterCtrlPrim) (0x0009 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_RAW_SDIO_INITIALISE_REQ ((CsrWifiRouterCtrlPrim) (0x000A + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_TCLAS_DEL_REQ ((CsrWifiRouterCtrlPrim) (0x000B + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_CLASSIFICATION_REQ ((CsrWifiRouterCtrlPrim) (0x000C + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_CONFIG_REQ ((CsrWifiRouterCtrlPrim) (0x000D + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WIFI_OFF_REQ ((CsrWifiRouterCtrlPrim) (0x000E + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WIFI_OFF_RES ((CsrWifiRouterCtrlPrim) (0x000F + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WIFI_ON_REQ ((CsrWifiRouterCtrlPrim) (0x0010 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WIFI_ON_RES ((CsrWifiRouterCtrlPrim) (0x0011 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_M4_TRANSMIT_REQ ((CsrWifiRouterCtrlPrim) (0x0012 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_MODE_SET_REQ ((CsrWifiRouterCtrlPrim) (0x0013 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_PEER_ADD_REQ ((CsrWifiRouterCtrlPrim) (0x0014 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_PEER_DEL_REQ ((CsrWifiRouterCtrlPrim) (0x0015 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_PEER_UPDATE_REQ ((CsrWifiRouterCtrlPrim) (0x0016 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_CAPABILITIES_REQ ((CsrWifiRouterCtrlPrim) (0x0017 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ENABLE_REQ ((CsrWifiRouterCtrlPrim) (0x0018 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_DISABLE_REQ ((CsrWifiRouterCtrlPrim) (0x0019 + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WAPI_RX_PKT_REQ ((CsrWifiRouterCtrlPrim) (0x001A + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WAPI_MULTICAST_FILTER_REQ ((CsrWifiRouterCtrlPrim) (0x001B + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WAPI_UNICAST_FILTER_REQ ((CsrWifiRouterCtrlPrim) (0x001C + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WAPI_UNICAST_TX_PKT_REQ ((CsrWifiRouterCtrlPrim) (0x001D + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WAPI_FILTER_REQ ((CsrWifiRouterCtrlPrim) (0x001E + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST))
-
-
-#define CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_HIGHEST (0x001E + CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST)
-
-/* Upstream */
-#define CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST (0x0000 + CSR_PRIM_UPSTREAM)
-
-#define CSR_WIFI_ROUTER_CTRL_HIP_IND ((CsrWifiRouterCtrlPrim)(0x0000 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_MULTICAST_ADDRESS_IND ((CsrWifiRouterCtrlPrim)(0x0001 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_PORT_CONFIGURE_CFM ((CsrWifiRouterCtrlPrim)(0x0002 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_RESUME_IND ((CsrWifiRouterCtrlPrim)(0x0003 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_SUSPEND_IND ((CsrWifiRouterCtrlPrim)(0x0004 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_TCLAS_ADD_CFM ((CsrWifiRouterCtrlPrim)(0x0005 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_RAW_SDIO_DEINITIALISE_CFM ((CsrWifiRouterCtrlPrim)(0x0006 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_RAW_SDIO_INITIALISE_CFM ((CsrWifiRouterCtrlPrim)(0x0007 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_TCLAS_DEL_CFM ((CsrWifiRouterCtrlPrim)(0x0008 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_PROTOCOL_IND ((CsrWifiRouterCtrlPrim)(0x0009 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_TRAFFIC_SAMPLE_IND ((CsrWifiRouterCtrlPrim)(0x000A + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WIFI_OFF_IND ((CsrWifiRouterCtrlPrim)(0x000B + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WIFI_OFF_CFM ((CsrWifiRouterCtrlPrim)(0x000C + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WIFI_ON_IND ((CsrWifiRouterCtrlPrim)(0x000D + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WIFI_ON_CFM ((CsrWifiRouterCtrlPrim)(0x000E + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_M4_READY_TO_SEND_IND ((CsrWifiRouterCtrlPrim)(0x000F + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_M4_TRANSMITTED_IND ((CsrWifiRouterCtrlPrim)(0x0010 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_MIC_FAILURE_IND ((CsrWifiRouterCtrlPrim)(0x0011 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_CONNECTED_IND ((CsrWifiRouterCtrlPrim)(0x0012 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_PEER_ADD_CFM ((CsrWifiRouterCtrlPrim)(0x0013 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_PEER_DEL_CFM ((CsrWifiRouterCtrlPrim)(0x0014 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_UNEXPECTED_FRAME_IND ((CsrWifiRouterCtrlPrim)(0x0015 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_PEER_UPDATE_CFM ((CsrWifiRouterCtrlPrim)(0x0016 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_CAPABILITIES_CFM ((CsrWifiRouterCtrlPrim)(0x0017 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ENABLE_CFM ((CsrWifiRouterCtrlPrim)(0x0018 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_DISABLE_CFM ((CsrWifiRouterCtrlPrim)(0x0019 + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ERROR_IND ((CsrWifiRouterCtrlPrim)(0x001A + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_STA_INACTIVE_IND ((CsrWifiRouterCtrlPrim)(0x001B + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WAPI_RX_MIC_CHECK_IND ((CsrWifiRouterCtrlPrim)(0x001C + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_MODE_SET_CFM ((CsrWifiRouterCtrlPrim)(0x001D + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_CTRL_WAPI_UNICAST_TX_ENCRYPT_IND ((CsrWifiRouterCtrlPrim)(0x001E + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST))
-
-#define CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_HIGHEST (0x001E + CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST)
-
-#define CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_COUNT (CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_HIGHEST + 1 - CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST)
-#define CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_COUNT (CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_HIGHEST + 1 - CSR_WIFI_ROUTER_CTRL_PRIM_UPSTREAM_LOWEST)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlConfigurePowerModeReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- mode -
- wakeHost -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrWifiRouterCtrlLowPowerMode mode;
- u8 wakeHost;
-} CsrWifiRouterCtrlConfigurePowerModeReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlHipReq
-
- DESCRIPTION
- This primitive is used for transferring MLME messages to the HIP.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- mlmeCommandLength - Length of the MLME signal
- mlmeCommand - Pointer to the MLME signal
- dataRef1Length - Length of the dataRef1 bulk data
- dataRef1 - Pointer to the bulk data 1
- dataRef2Length - Length of the dataRef2 bulk data
- dataRef2 - Pointer to the bulk data 2
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 mlmeCommandLength;
- u8 *mlmeCommand;
- u16 dataRef1Length;
- u8 *dataRef1;
- u16 dataRef2Length;
- u8 *dataRef2;
-} CsrWifiRouterCtrlHipReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlMediaStatusReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
- mediaStatus -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrWifiRouterCtrlMediaStatus mediaStatus;
-} CsrWifiRouterCtrlMediaStatusReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlMulticastAddressRes
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
- status -
- action -
- getAddressesCount -
- getAddresses -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrResult status;
- CsrWifiRouterCtrlListAction action;
- u8 getAddressesCount;
- CsrWifiMacAddress *getAddresses;
-} CsrWifiRouterCtrlMulticastAddressRes;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPortConfigureReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
- uncontrolledPortAction -
- controlledPortAction -
- macAddress -
- setProtection -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrWifiRouterCtrlPortAction uncontrolledPortAction;
- CsrWifiRouterCtrlPortAction controlledPortAction;
- CsrWifiMacAddress macAddress;
- u8 setProtection;
-} CsrWifiRouterCtrlPortConfigureReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlQosControlReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
- control -
- queueConfig -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrWifiRouterCtrlQoSControl control;
- CsrWifiRouterCtrlQueueConfigMask queueConfig;
-} CsrWifiRouterCtrlQosControlReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlSuspendRes
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrResult status;
-} CsrWifiRouterCtrlSuspendRes;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTclasAddReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
- tclasLength -
- tclas -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 tclasLength;
- u8 *tclas;
-} CsrWifiRouterCtrlTclasAddReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlResumeRes
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrResult status;
-} CsrWifiRouterCtrlResumeRes;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlRawSdioDeinitialiseReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
-} CsrWifiRouterCtrlRawSdioDeinitialiseReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlRawSdioInitialiseReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
-} CsrWifiRouterCtrlRawSdioInitialiseReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTclasDelReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
- tclasLength -
- tclas -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 tclasLength;
- u8 *tclas;
-} CsrWifiRouterCtrlTclasDelReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficClassificationReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
- trafficType -
- period -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrWifiRouterCtrlTrafficType trafficType;
- u16 period;
-} CsrWifiRouterCtrlTrafficClassificationReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficConfigReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
- trafficConfigType -
- config -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrWifiRouterCtrlTrafficConfigType trafficConfigType;
- CsrWifiRouterCtrlTrafficConfig config;
-} CsrWifiRouterCtrlTrafficConfigReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOffReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
-} CsrWifiRouterCtrlWifiOffReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOffRes
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
-} CsrWifiRouterCtrlWifiOffRes;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOnReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- dataLength - Number of bytes in the buffer pointed to by 'data'
- data - Pointer to the buffer containing 'dataLength' bytes
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u32 dataLength;
- u8 *data;
-} CsrWifiRouterCtrlWifiOnReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOnRes
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- status -
- numInterfaceAddress -
- stationMacAddress - array size 1 MUST match CSR_WIFI_NUM_INTERFACES
- smeVersions -
- scheduledInterrupt -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrResult status;
- u16 numInterfaceAddress;
- CsrWifiMacAddress stationMacAddress[2];
- CsrWifiRouterCtrlSmeVersions smeVersions;
- u8 scheduledInterrupt;
-} CsrWifiRouterCtrlWifiOnRes;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlM4TransmitReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
-} CsrWifiRouterCtrlM4TransmitReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlModeSetReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
- mode -
- bssid - BSSID of the network the device is going to be a part
- of
- protection - Set to TRUE if encryption is enabled for the
- connection/broadcast frames
- intraBssDistEnabled - If set to TRUE, intra BSS destribution will be
- enabled. If set to FALSE, any unicast PDU which does
- not have the RA as the the local MAC address, shall be
- ignored. This field is interpreted by the receive if
- mode is set to CSR_WIFI_ROUTER_CTRL_MODE_P2PGO
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrWifiRouterCtrlMode mode;
- CsrWifiMacAddress bssid;
- u8 protection;
- u8 intraBssDistEnabled;
-} CsrWifiRouterCtrlModeSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPeerAddReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
- peerMacAddress -
- associationId -
- staInfo -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrWifiMacAddress peerMacAddress;
- u16 associationId;
- CsrWifiRouterCtrlStaInfo staInfo;
-} CsrWifiRouterCtrlPeerAddReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPeerDelReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
- peerRecordHandle -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrWifiRouterCtrlPeerRecordHandle peerRecordHandle;
-} CsrWifiRouterCtrlPeerDelReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPeerUpdateReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
- peerRecordHandle -
- powersaveMode -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrWifiRouterCtrlPeerRecordHandle peerRecordHandle;
- CsrWifiRouterCtrlPowersaveTypeMask powersaveMode;
-} CsrWifiRouterCtrlPeerUpdateReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlCapabilitiesReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
-} CsrWifiRouterCtrlCapabilitiesReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlBlockAckEnableReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
- macAddress -
- trafficStreamID -
- role -
- bufferSize -
- timeout -
- ssn -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrWifiMacAddress macAddress;
- CsrWifiRouterCtrlTrafficStreamId trafficStreamID;
- CsrWifiRouterCtrlBlockAckRole role;
- u16 bufferSize;
- u16 timeout;
- u16 ssn;
-} CsrWifiRouterCtrlBlockAckEnableReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlBlockAckDisableReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- clientData -
- macAddress -
- trafficStreamID -
- role -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrWifiMacAddress macAddress;
- CsrWifiRouterCtrlTrafficStreamId trafficStreamID;
- CsrWifiRouterCtrlBlockAckRole role;
-} CsrWifiRouterCtrlBlockAckDisableReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWapiRxPktReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- signalLength -
- signal -
- dataLength -
- data -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u16 signalLength;
- u8 *signal;
- u16 dataLength;
- u8 *data;
-} CsrWifiRouterCtrlWapiRxPktReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWapiMulticastFilterReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u8 status;
-} CsrWifiRouterCtrlWapiMulticastFilterReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWapiUnicastFilterReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u8 status;
-} CsrWifiRouterCtrlWapiUnicastFilterReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWapiUnicastTxPktReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- dataLength -
- data -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u16 dataLength;
- u8 *data;
-} CsrWifiRouterCtrlWapiUnicastTxPktReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWapiFilterReq
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- isWapiConnected -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u8 isWapiConnected;
-} CsrWifiRouterCtrlWapiFilterReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlHipInd
-
- DESCRIPTION
- This primitive is used for transferring MLME messages from the HIP.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- mlmeCommandLength - Length of the MLME signal
- mlmeCommand - Pointer to the MLME signal
- dataRef1Length - Length of the dataRef1 bulk data
- dataRef1 - Pointer to the bulk data 1
- dataRef2Length - Length of the dataRef2 bulk data
- dataRef2 - Pointer to the bulk data 2
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 mlmeCommandLength;
- u8 *mlmeCommand;
- u16 dataRef1Length;
- u8 *dataRef1;
- u16 dataRef2Length;
- u8 *dataRef2;
-} CsrWifiRouterCtrlHipInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlMulticastAddressInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- action -
- setAddressesCount -
- setAddresses -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrWifiRouterCtrlListAction action;
- u8 setAddressesCount;
- CsrWifiMacAddress *setAddresses;
-} CsrWifiRouterCtrlMulticastAddressInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPortConfigureCfm
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- status -
- macAddress -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiMacAddress macAddress;
-} CsrWifiRouterCtrlPortConfigureCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlResumeInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- powerMaintained -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u8 powerMaintained;
-} CsrWifiRouterCtrlResumeInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlSuspendInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- hardSuspend -
- d3Suspend -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u8 hardSuspend;
- u8 d3Suspend;
-} CsrWifiRouterCtrlSuspendInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTclasAddCfm
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiRouterCtrlTclasAddCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlRawSdioDeinitialiseCfm
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- result -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrResult result;
-} CsrWifiRouterCtrlRawSdioDeinitialiseCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlRawSdioInitialiseCfm
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- result -
- byteRead -
- byteWrite -
- firmwareDownload -
- reset -
- coreDumpPrepare -
- byteBlockRead -
- gpRead16 -
- gpWrite16 -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrResult result;
- CsrWifiRouterCtrlRawSdioByteRead byteRead;
- CsrWifiRouterCtrlRawSdioByteWrite byteWrite;
- CsrWifiRouterCtrlRawSdioFirmwareDownload firmwareDownload;
- CsrWifiRouterCtrlRawSdioReset reset;
- CsrWifiRouterCtrlRawSdioCoreDumpPrepare coreDumpPrepare;
- CsrWifiRouterCtrlRawSdioByteBlockRead byteBlockRead;
- CsrWifiRouterCtrlRawSdioGpRead16 gpRead16;
- CsrWifiRouterCtrlRawSdioGpWrite16 gpWrite16;
-} CsrWifiRouterCtrlRawSdioInitialiseCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTclasDelCfm
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiRouterCtrlTclasDelCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficProtocolInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- packetType -
- direction -
- srcAddress -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrWifiRouterCtrlTrafficPacketType packetType;
- CsrWifiRouterCtrlProtocolDirection direction;
- CsrWifiMacAddress srcAddress;
-} CsrWifiRouterCtrlTrafficProtocolInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlTrafficSampleInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- stats -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrWifiRouterCtrlTrafficStats stats;
-} CsrWifiRouterCtrlTrafficSampleInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOffInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- controlIndication -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrWifiRouterCtrlControlIndication controlIndication;
-} CsrWifiRouterCtrlWifiOffInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOffCfm
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
-} CsrWifiRouterCtrlWifiOffCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOnInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- status -
- versions -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrResult status;
- CsrWifiRouterCtrlVersions versions;
-} CsrWifiRouterCtrlWifiOnInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWifiOnCfm
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- CsrResult status;
-} CsrWifiRouterCtrlWifiOnCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlM4ReadyToSendInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- peerMacAddress -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrWifiMacAddress peerMacAddress;
-} CsrWifiRouterCtrlM4ReadyToSendInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlM4TransmittedInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- peerMacAddress -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrWifiMacAddress peerMacAddress;
- CsrResult status;
-} CsrWifiRouterCtrlM4TransmittedInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlMicFailureInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- peerMacAddress -
- unicastPdu -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrWifiMacAddress peerMacAddress;
- u8 unicastPdu;
-} CsrWifiRouterCtrlMicFailureInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlConnectedInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- peerMacAddress -
- peerStatus -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrWifiMacAddress peerMacAddress;
- CsrWifiRouterCtrlPeerStatus peerStatus;
-} CsrWifiRouterCtrlConnectedInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPeerAddCfm
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- peerMacAddress -
- peerRecordHandle -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrWifiMacAddress peerMacAddress;
- CsrWifiRouterCtrlPeerRecordHandle peerRecordHandle;
- CsrResult status;
-} CsrWifiRouterCtrlPeerAddCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPeerDelCfm
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiRouterCtrlPeerDelCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlUnexpectedFrameInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- peerMacAddress -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrWifiMacAddress peerMacAddress;
-} CsrWifiRouterCtrlUnexpectedFrameInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlPeerUpdateCfm
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiRouterCtrlPeerUpdateCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlCapabilitiesCfm
-
- DESCRIPTION
- The router sends this primitive to confirm the size of the queues of the
- HIP.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- commandQueueSize - Size of command queue
- trafficQueueSize - Size of traffic queue (per AC)
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 commandQueueSize;
- u16 trafficQueueSize;
-} CsrWifiRouterCtrlCapabilitiesCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlBlockAckEnableCfm
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiRouterCtrlBlockAckEnableCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlBlockAckDisableCfm
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiRouterCtrlBlockAckDisableCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlBlockAckErrorInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- trafficStreamID -
- peerMacAddress -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrWifiRouterCtrlTrafficStreamId trafficStreamID;
- CsrWifiMacAddress peerMacAddress;
- CsrResult status;
-} CsrWifiRouterCtrlBlockAckErrorInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlStaInactiveInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- staAddress -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrWifiMacAddress staAddress;
-} CsrWifiRouterCtrlStaInactiveInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWapiRxMicCheckInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- signalLength -
- signal -
- dataLength -
- data -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- u16 signalLength;
- u8 *signal;
- u16 dataLength;
- u8 *data;
-} CsrWifiRouterCtrlWapiRxMicCheckInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlModeSetCfm
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- mode -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- CsrWifiRouterCtrlMode mode;
- CsrResult status;
-} CsrWifiRouterCtrlModeSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterCtrlWapiUnicastTxEncryptInd
-
- DESCRIPTION
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- clientData -
- interfaceTag -
- dataLength -
- data -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiRouterCtrlRequestorInfo clientData;
- u16 interfaceTag;
- u16 dataLength;
- u8 *data;
-} CsrWifiRouterCtrlWapiUnicastTxEncryptInd;
-
-#endif /* CSR_WIFI_ROUTER_CTRL_PRIM_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_router_ctrl_sef.c b/drivers/staging/csr/csr_wifi_router_ctrl_sef.c
deleted file mode 100644
index 99cf93061d1b..000000000000
--- a/drivers/staging/csr/csr_wifi_router_ctrl_sef.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- Confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
- *****************************************************************************/
-#include "csr_wifi_router_ctrl_sef.h"
-
-const CsrWifiRouterCtrlStateHandlerType
- CsrWifiRouterCtrlDownstreamStateHandlers
- [CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_COUNT] = {
- /* 0x0000 */ CsrWifiRouterCtrlConfigurePowerModeReqHandler,
- /* 0x0001 */ CsrWifiRouterCtrlHipReqHandler,
- /* 0x0002 */ CsrWifiRouterCtrlMediaStatusReqHandler,
- /* 0x0003 */ CsrWifiRouterCtrlMulticastAddressResHandler,
- /* 0x0004 */ CsrWifiRouterCtrlPortConfigureReqHandler,
- /* 0x0005 */ CsrWifiRouterCtrlQosControlReqHandler,
- /* 0x0006 */ CsrWifiRouterCtrlSuspendResHandler,
- /* 0x0007 */ CsrWifiRouterCtrlTclasAddReqHandler,
- /* 0x0008 */ CsrWifiRouterCtrlResumeResHandler,
- /* 0x0009 */ CsrWifiRouterCtrlRawSdioDeinitialiseReqHandler,
- /* 0x000A */ CsrWifiRouterCtrlRawSdioInitialiseReqHandler,
- /* 0x000B */ CsrWifiRouterCtrlTclasDelReqHandler,
- /* 0x000C */ CsrWifiRouterCtrlTrafficClassificationReqHandler,
- /* 0x000D */ CsrWifiRouterCtrlTrafficConfigReqHandler,
- /* 0x000E */ CsrWifiRouterCtrlWifiOffReqHandler,
- /* 0x000F */ CsrWifiRouterCtrlWifiOffResHandler,
- /* 0x0010 */ CsrWifiRouterCtrlWifiOnReqHandler,
- /* 0x0011 */ CsrWifiRouterCtrlWifiOnResHandler,
- /* 0x0012 */ CsrWifiRouterCtrlM4TransmitReqHandler,
- /* 0x0013 */ CsrWifiRouterCtrlModeSetReqHandler,
- /* 0x0014 */ CsrWifiRouterCtrlPeerAddReqHandler,
- /* 0x0015 */ CsrWifiRouterCtrlPeerDelReqHandler,
- /* 0x0016 */ CsrWifiRouterCtrlPeerUpdateReqHandler,
- /* 0x0017 */ CsrWifiRouterCtrlCapabilitiesReqHandler,
- /* 0x0018 */ CsrWifiRouterCtrlBlockAckEnableReqHandler,
- /* 0x0019 */ CsrWifiRouterCtrlBlockAckDisableReqHandler,
- /* 0x001A */ CsrWifiRouterCtrlWapiRxPktReqHandler,
- /* 0x001B */ CsrWifiRouterCtrlWapiMulticastFilterReqHandler,
- /* 0x001C */ CsrWifiRouterCtrlWapiUnicastFilterReqHandler,
- /* 0x001D */ CsrWifiRouterCtrlWapiUnicastTxPktReqHandler,
- /* 0x001E */ CsrWifiRouterCtrlWapiFilterReqHandler,
-};
diff --git a/drivers/staging/csr/csr_wifi_router_ctrl_sef.h b/drivers/staging/csr/csr_wifi_router_ctrl_sef.h
deleted file mode 100644
index 2fb4937bc909..000000000000
--- a/drivers/staging/csr/csr_wifi_router_ctrl_sef.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- Confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
- *****************************************************************************/
-#ifndef CSR_WIFI_ROUTER_SEF_CSR_WIFI_ROUTER_CTRL_H__
-#define CSR_WIFI_ROUTER_SEF_CSR_WIFI_ROUTER_CTRL_H__
-
-#include "csr_wifi_router_ctrl_prim.h"
-
- typedef void (*CsrWifiRouterCtrlStateHandlerType)(void* drvpriv, CsrWifiFsmEvent* msg);
-
- extern const CsrWifiRouterCtrlStateHandlerType CsrWifiRouterCtrlDownstreamStateHandlers[CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_COUNT];
-
- extern void CsrWifiRouterCtrlConfigurePowerModeReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlHipReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlMediaStatusReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlMulticastAddressResHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlPortConfigureReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlQosControlReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlSuspendResHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlTclasAddReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlResumeResHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlRawSdioDeinitialiseReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlRawSdioInitialiseReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlTclasDelReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlTrafficClassificationReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlTrafficConfigReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlWifiOffReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlWifiOffResHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlWifiOnReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlWifiOnResHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlM4TransmitReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlModeSetReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlPeerAddReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlPeerDelReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlPeerUpdateReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlCapabilitiesReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlBlockAckEnableReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlBlockAckDisableReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlWapiMulticastFilterReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlWapiRxPktReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlWapiUnicastTxPktReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlWapiUnicastFilterReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterCtrlWapiFilterReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
-
-#endif /* CSR_WIFI_ROUTER_SEF_CSR_WIFI_ROUTER_CTRL_H__ */
diff --git a/drivers/staging/csr/csr_wifi_router_ctrl_serialize.c b/drivers/staging/csr/csr_wifi_router_ctrl_serialize.c
deleted file mode 100644
index 3eda1b66b336..000000000000
--- a/drivers/staging/csr/csr_wifi_router_ctrl_serialize.c
+++ /dev/null
@@ -1,2591 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-#include <linux/string.h>
-#include <linux/slab.h>
-#include "csr_msgconv.h"
-#include "csr_wifi_router_ctrl_prim.h"
-#include "csr_wifi_router_ctrl_serialize.h"
-
-void CsrWifiRouterCtrlPfree(void *ptr)
-{
- kfree(ptr);
-}
-
-
-size_t CsrWifiRouterCtrlConfigurePowerModeReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 8) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* CsrWifiRouterCtrlLowPowerMode primitive->mode */
- bufferSize += 1; /* u8 primitive->wakeHost */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlConfigurePowerModeReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlConfigurePowerModeReq *primitive = (CsrWifiRouterCtrlConfigurePowerModeReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->mode);
- CsrUint8Ser(ptr, len, (u8) primitive->wakeHost);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlConfigurePowerModeReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlConfigurePowerModeReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlConfigurePowerModeReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->mode, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->wakeHost, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlHipReqSizeof(void *msg)
-{
- CsrWifiRouterCtrlHipReq *primitive = (CsrWifiRouterCtrlHipReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 12) */
- bufferSize += 2; /* u16 primitive->mlmeCommandLength */
- bufferSize += primitive->mlmeCommandLength; /* u8 primitive->mlmeCommand */
- bufferSize += 2; /* u16 primitive->dataRef1Length */
- bufferSize += primitive->dataRef1Length; /* u8 primitive->dataRef1 */
- bufferSize += 2; /* u16 primitive->dataRef2Length */
- bufferSize += primitive->dataRef2Length; /* u8 primitive->dataRef2 */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlHipReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlHipReq *primitive = (CsrWifiRouterCtrlHipReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->mlmeCommandLength);
- if (primitive->mlmeCommandLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->mlmeCommand, ((u16) (primitive->mlmeCommandLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->dataRef1Length);
- if (primitive->dataRef1Length)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->dataRef1, ((u16) (primitive->dataRef1Length)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->dataRef2Length);
- if (primitive->dataRef2Length)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->dataRef2, ((u16) (primitive->dataRef2Length)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlHipReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlHipReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlHipReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->mlmeCommandLength, buffer, &offset);
- if (primitive->mlmeCommandLength)
- {
- primitive->mlmeCommand = kmalloc(primitive->mlmeCommandLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->mlmeCommand, buffer, &offset, ((u16) (primitive->mlmeCommandLength)));
- }
- else
- {
- primitive->mlmeCommand = NULL;
- }
- CsrUint16Des((u16 *) &primitive->dataRef1Length, buffer, &offset);
- if (primitive->dataRef1Length)
- {
- primitive->dataRef1 = kmalloc(primitive->dataRef1Length, GFP_KERNEL);
- CsrMemCpyDes(primitive->dataRef1, buffer, &offset, ((u16) (primitive->dataRef1Length)));
- }
- else
- {
- primitive->dataRef1 = NULL;
- }
- CsrUint16Des((u16 *) &primitive->dataRef2Length, buffer, &offset);
- if (primitive->dataRef2Length)
- {
- primitive->dataRef2 = kmalloc(primitive->dataRef2Length, GFP_KERNEL);
- CsrMemCpyDes(primitive->dataRef2, buffer, &offset, ((u16) (primitive->dataRef2Length)));
- }
- else
- {
- primitive->dataRef2 = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiRouterCtrlHipReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterCtrlHipReq *primitive = (CsrWifiRouterCtrlHipReq *) voidPrimitivePointer;
- kfree(primitive->mlmeCommand);
- kfree(primitive->dataRef1);
- kfree(primitive->dataRef2);
- kfree(primitive);
-}
-
-
-size_t CsrWifiRouterCtrlMediaStatusReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 8) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 1; /* CsrWifiRouterCtrlMediaStatus primitive->mediaStatus */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlMediaStatusReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlMediaStatusReq *primitive = (CsrWifiRouterCtrlMediaStatusReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint8Ser(ptr, len, (u8) primitive->mediaStatus);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlMediaStatusReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlMediaStatusReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlMediaStatusReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->mediaStatus, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlMulticastAddressResSizeof(void *msg)
-{
- CsrWifiRouterCtrlMulticastAddressRes *primitive = (CsrWifiRouterCtrlMulticastAddressRes *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 17) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* CsrWifiRouterCtrlListAction primitive->action */
- bufferSize += 1; /* u8 primitive->getAddressesCount */
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->getAddressesCount; i1++)
- {
- bufferSize += 6; /* u8 primitive->getAddresses[i1].a[6] */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlMulticastAddressResSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlMulticastAddressRes *primitive = (CsrWifiRouterCtrlMulticastAddressRes *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->action);
- CsrUint8Ser(ptr, len, (u8) primitive->getAddressesCount);
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->getAddressesCount; i1++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->getAddresses[i1].a, ((u16) (6)));
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlMulticastAddressResDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlMulticastAddressRes *primitive = kmalloc(sizeof(CsrWifiRouterCtrlMulticastAddressRes), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->action, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->getAddressesCount, buffer, &offset);
- primitive->getAddresses = NULL;
- if (primitive->getAddressesCount)
- {
- primitive->getAddresses = kmalloc(sizeof(CsrWifiMacAddress) * primitive->getAddressesCount, GFP_KERNEL);
- }
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->getAddressesCount; i1++)
- {
- CsrMemCpyDes(primitive->getAddresses[i1].a, buffer, &offset, ((u16) (6)));
- }
- }
-
- return primitive;
-}
-
-
-void CsrWifiRouterCtrlMulticastAddressResSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterCtrlMulticastAddressRes *primitive = (CsrWifiRouterCtrlMulticastAddressRes *) voidPrimitivePointer;
- kfree(primitive->getAddresses);
- kfree(primitive);
-}
-
-
-size_t CsrWifiRouterCtrlPortConfigureReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 18) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* CsrWifiRouterCtrlPortAction primitive->uncontrolledPortAction */
- bufferSize += 2; /* CsrWifiRouterCtrlPortAction primitive->controlledPortAction */
- bufferSize += 6; /* u8 primitive->macAddress.a[6] */
- bufferSize += 1; /* u8 primitive->setProtection */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlPortConfigureReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlPortConfigureReq *primitive = (CsrWifiRouterCtrlPortConfigureReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->uncontrolledPortAction);
- CsrUint16Ser(ptr, len, (u16) primitive->controlledPortAction);
- CsrMemCpySer(ptr, len, (const void *) primitive->macAddress.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->setProtection);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlPortConfigureReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlPortConfigureReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlPortConfigureReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->uncontrolledPortAction, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->controlledPortAction, buffer, &offset);
- CsrMemCpyDes(primitive->macAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->setProtection, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlQosControlReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 10) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* CsrWifiRouterCtrlQoSControl primitive->control */
- bufferSize += 1; /* CsrWifiRouterCtrlQueueConfigMask primitive->queueConfig */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlQosControlReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlQosControlReq *primitive = (CsrWifiRouterCtrlQosControlReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->control);
- CsrUint8Ser(ptr, len, (u8) primitive->queueConfig);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlQosControlReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlQosControlReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlQosControlReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->control, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->queueConfig, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlSuspendResSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlSuspendResSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlSuspendRes *primitive = (CsrWifiRouterCtrlSuspendRes *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlSuspendResDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlSuspendRes *primitive = kmalloc(sizeof(CsrWifiRouterCtrlSuspendRes), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlTclasAddReqSizeof(void *msg)
-{
- CsrWifiRouterCtrlTclasAddReq *primitive = (CsrWifiRouterCtrlTclasAddReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 10) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->tclasLength */
- bufferSize += primitive->tclasLength; /* u8 primitive->tclas */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlTclasAddReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlTclasAddReq *primitive = (CsrWifiRouterCtrlTclasAddReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->tclasLength);
- if (primitive->tclasLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->tclas, ((u16) (primitive->tclasLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlTclasAddReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlTclasAddReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlTclasAddReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->tclasLength, buffer, &offset);
- if (primitive->tclasLength)
- {
- primitive->tclas = kmalloc(primitive->tclasLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->tclas, buffer, &offset, ((u16) (primitive->tclasLength)));
- }
- else
- {
- primitive->tclas = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiRouterCtrlTclasAddReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterCtrlTclasAddReq *primitive = (CsrWifiRouterCtrlTclasAddReq *) voidPrimitivePointer;
- kfree(primitive->tclas);
- kfree(primitive);
-}
-
-
-size_t CsrWifiRouterCtrlResumeResSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlResumeResSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlResumeRes *primitive = (CsrWifiRouterCtrlResumeRes *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlResumeResDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlResumeRes *primitive = kmalloc(sizeof(CsrWifiRouterCtrlResumeRes), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlTclasDelReqSizeof(void *msg)
-{
- CsrWifiRouterCtrlTclasDelReq *primitive = (CsrWifiRouterCtrlTclasDelReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 10) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->tclasLength */
- bufferSize += primitive->tclasLength; /* u8 primitive->tclas */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlTclasDelReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlTclasDelReq *primitive = (CsrWifiRouterCtrlTclasDelReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->tclasLength);
- if (primitive->tclasLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->tclas, ((u16) (primitive->tclasLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlTclasDelReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlTclasDelReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlTclasDelReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->tclasLength, buffer, &offset);
- if (primitive->tclasLength)
- {
- primitive->tclas = kmalloc(primitive->tclasLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->tclas, buffer, &offset, ((u16) (primitive->tclasLength)));
- }
- else
- {
- primitive->tclas = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiRouterCtrlTclasDelReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterCtrlTclasDelReq *primitive = (CsrWifiRouterCtrlTclasDelReq *) voidPrimitivePointer;
- kfree(primitive->tclas);
- kfree(primitive);
-}
-
-
-size_t CsrWifiRouterCtrlTrafficClassificationReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 10) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 1; /* CsrWifiRouterCtrlTrafficType primitive->trafficType */
- bufferSize += 2; /* u16 primitive->period */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlTrafficClassificationReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlTrafficClassificationReq *primitive = (CsrWifiRouterCtrlTrafficClassificationReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint8Ser(ptr, len, (u8) primitive->trafficType);
- CsrUint16Ser(ptr, len, (u16) primitive->period);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlTrafficClassificationReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlTrafficClassificationReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlTrafficClassificationReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->trafficType, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->period, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlTrafficConfigReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 24) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* CsrWifiRouterCtrlTrafficConfigType primitive->trafficConfigType */
- bufferSize += 2; /* u16 primitive->config.packetFilter */
- bufferSize += 4; /* u32 primitive->config.customFilter.etherType */
- bufferSize += 1; /* u8 primitive->config.customFilter.ipType */
- bufferSize += 4; /* u32 primitive->config.customFilter.udpSourcePort */
- bufferSize += 4; /* u32 primitive->config.customFilter.udpDestPort */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlTrafficConfigReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlTrafficConfigReq *primitive = (CsrWifiRouterCtrlTrafficConfigReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->trafficConfigType);
- CsrUint16Ser(ptr, len, (u16) primitive->config.packetFilter);
- CsrUint32Ser(ptr, len, (u32) primitive->config.customFilter.etherType);
- CsrUint8Ser(ptr, len, (u8) primitive->config.customFilter.ipType);
- CsrUint32Ser(ptr, len, (u32) primitive->config.customFilter.udpSourcePort);
- CsrUint32Ser(ptr, len, (u32) primitive->config.customFilter.udpDestPort);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlTrafficConfigReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlTrafficConfigReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlTrafficConfigReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->trafficConfigType, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->config.packetFilter, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->config.customFilter.etherType, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->config.customFilter.ipType, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->config.customFilter.udpSourcePort, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->config.customFilter.udpDestPort, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlWifiOnReqSizeof(void *msg)
-{
- CsrWifiRouterCtrlWifiOnReq *primitive = (CsrWifiRouterCtrlWifiOnReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 10) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 4; /* u32 primitive->dataLength */
- bufferSize += primitive->dataLength; /* u8 primitive->data */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlWifiOnReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlWifiOnReq *primitive = (CsrWifiRouterCtrlWifiOnReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint32Ser(ptr, len, (u32) primitive->dataLength);
- if (primitive->dataLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->data, ((u16) (primitive->dataLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlWifiOnReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlWifiOnReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlWifiOnReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->dataLength, buffer, &offset);
- if (primitive->dataLength)
- {
- primitive->data = kmalloc(primitive->dataLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->data, buffer, &offset, ((u16) (primitive->dataLength)));
- }
- else
- {
- primitive->data = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiRouterCtrlWifiOnReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterCtrlWifiOnReq *primitive = (CsrWifiRouterCtrlWifiOnReq *) voidPrimitivePointer;
- kfree(primitive->data);
- kfree(primitive);
-}
-
-
-size_t CsrWifiRouterCtrlWifiOnResSizeof(void *msg)
-{
- CsrWifiRouterCtrlWifiOnRes *primitive = (CsrWifiRouterCtrlWifiOnRes *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 30) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 2; /* u16 primitive->numInterfaceAddress */
- {
- u16 i1;
- for (i1 = 0; i1 < 2; i1++)
- {
- bufferSize += 6; /* u8 primitive->stationMacAddress[i1].a[6] */
- }
- }
- bufferSize += 4; /* u32 primitive->smeVersions.firmwarePatch */
- bufferSize += (primitive->smeVersions.smeBuild ? strlen(primitive->smeVersions.smeBuild) : 0) + 1; /* char* primitive->smeVersions.smeBuild (0 byte len + 1 for NULL Term) */
- bufferSize += 4; /* u32 primitive->smeVersions.smeHip */
- bufferSize += 1; /* u8 primitive->scheduledInterrupt */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlWifiOnResSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlWifiOnRes *primitive = (CsrWifiRouterCtrlWifiOnRes *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint16Ser(ptr, len, (u16) primitive->numInterfaceAddress);
- {
- u16 i1;
- for (i1 = 0; i1 < 2; i1++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->stationMacAddress[i1].a, ((u16) (6)));
- }
- }
- CsrUint32Ser(ptr, len, (u32) primitive->smeVersions.firmwarePatch);
- CsrCharStringSer(ptr, len, primitive->smeVersions.smeBuild);
- CsrUint32Ser(ptr, len, (u32) primitive->smeVersions.smeHip);
- CsrUint8Ser(ptr, len, (u8) primitive->scheduledInterrupt);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlWifiOnResDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlWifiOnRes *primitive = kmalloc(sizeof(CsrWifiRouterCtrlWifiOnRes), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->numInterfaceAddress, buffer, &offset);
- {
- u16 i1;
- for (i1 = 0; i1 < 2; i1++)
- {
- CsrMemCpyDes(primitive->stationMacAddress[i1].a, buffer, &offset, ((u16) (6)));
- }
- }
- CsrUint32Des((u32 *) &primitive->smeVersions.firmwarePatch, buffer, &offset);
- CsrCharStringDes(&primitive->smeVersions.smeBuild, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->smeVersions.smeHip, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scheduledInterrupt, buffer, &offset);
-
- return primitive;
-}
-
-
-void CsrWifiRouterCtrlWifiOnResSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterCtrlWifiOnRes *primitive = (CsrWifiRouterCtrlWifiOnRes *) voidPrimitivePointer;
- kfree(primitive->smeVersions.smeBuild);
- kfree(primitive);
-}
-
-
-size_t CsrWifiRouterCtrlM4TransmitReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlM4TransmitReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlM4TransmitReq *primitive = (CsrWifiRouterCtrlM4TransmitReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlM4TransmitReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlM4TransmitReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlM4TransmitReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlModeSetReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 16) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 1; /* CsrWifiRouterCtrlMode primitive->mode */
- bufferSize += 6; /* u8 primitive->bssid.a[6] */
- bufferSize += 1; /* u8 primitive->protection */
- bufferSize += 1; /* u8 primitive->intraBssDistEnabled */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlModeSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlModeSetReq *primitive = (CsrWifiRouterCtrlModeSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint8Ser(ptr, len, (u8) primitive->mode);
- CsrMemCpySer(ptr, len, (const void *) primitive->bssid.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->protection);
- CsrUint8Ser(ptr, len, (u8) primitive->intraBssDistEnabled);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlModeSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlModeSetReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlModeSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->mode, buffer, &offset);
- CsrMemCpyDes(primitive->bssid.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->protection, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->intraBssDistEnabled, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlPeerAddReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 21) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 6; /* u8 primitive->peerMacAddress.a[6] */
- bufferSize += 2; /* u16 primitive->associationId */
- bufferSize += 1; /* u8 primitive->staInfo.wmmOrQosEnabled */
- bufferSize += 2; /* CsrWifiRouterCtrlPowersaveTypeMask primitive->staInfo.powersaveMode */
- bufferSize += 1; /* u8 primitive->staInfo.maxSpLength */
- bufferSize += 2; /* u16 primitive->staInfo.listenIntervalInTus */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlPeerAddReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlPeerAddReq *primitive = (CsrWifiRouterCtrlPeerAddReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrMemCpySer(ptr, len, (const void *) primitive->peerMacAddress.a, ((u16) (6)));
- CsrUint16Ser(ptr, len, (u16) primitive->associationId);
- CsrUint8Ser(ptr, len, (u8) primitive->staInfo.wmmOrQosEnabled);
- CsrUint16Ser(ptr, len, (u16) primitive->staInfo.powersaveMode);
- CsrUint8Ser(ptr, len, (u8) primitive->staInfo.maxSpLength);
- CsrUint16Ser(ptr, len, (u16) primitive->staInfo.listenIntervalInTus);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlPeerAddReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlPeerAddReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlPeerAddReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrMemCpyDes(primitive->peerMacAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint16Des((u16 *) &primitive->associationId, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->staInfo.wmmOrQosEnabled, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->staInfo.powersaveMode, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->staInfo.maxSpLength, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->staInfo.listenIntervalInTus, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlPeerDelReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 11) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 4; /* CsrWifiRouterCtrlPeerRecordHandle primitive->peerRecordHandle */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlPeerDelReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlPeerDelReq *primitive = (CsrWifiRouterCtrlPeerDelReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint32Ser(ptr, len, (u32) primitive->peerRecordHandle);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlPeerDelReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlPeerDelReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlPeerDelReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->peerRecordHandle, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlPeerUpdateReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 4; /* CsrWifiRouterCtrlPeerRecordHandle primitive->peerRecordHandle */
- bufferSize += 2; /* CsrWifiRouterCtrlPowersaveTypeMask primitive->powersaveMode */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlPeerUpdateReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlPeerUpdateReq *primitive = (CsrWifiRouterCtrlPeerUpdateReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint32Ser(ptr, len, (u32) primitive->peerRecordHandle);
- CsrUint16Ser(ptr, len, (u16) primitive->powersaveMode);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlPeerUpdateReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlPeerUpdateReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlPeerUpdateReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->peerRecordHandle, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->powersaveMode, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlBlockAckEnableReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 21) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 6; /* u8 primitive->macAddress.a[6] */
- bufferSize += 1; /* CsrWifiRouterCtrlTrafficStreamId primitive->trafficStreamID */
- bufferSize += 1; /* CsrWifiRouterCtrlBlockAckRole primitive->role */
- bufferSize += 2; /* u16 primitive->bufferSize */
- bufferSize += 2; /* u16 primitive->timeout */
- bufferSize += 2; /* u16 primitive->ssn */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlBlockAckEnableReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlBlockAckEnableReq *primitive = (CsrWifiRouterCtrlBlockAckEnableReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrMemCpySer(ptr, len, (const void *) primitive->macAddress.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->trafficStreamID);
- CsrUint8Ser(ptr, len, (u8) primitive->role);
- CsrUint16Ser(ptr, len, (u16) primitive->bufferSize);
- CsrUint16Ser(ptr, len, (u16) primitive->timeout);
- CsrUint16Ser(ptr, len, (u16) primitive->ssn);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlBlockAckEnableReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlBlockAckEnableReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlBlockAckEnableReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrMemCpyDes(primitive->macAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->trafficStreamID, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->role, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->bufferSize, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->timeout, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->ssn, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlBlockAckDisableReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 15) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 6; /* u8 primitive->macAddress.a[6] */
- bufferSize += 1; /* CsrWifiRouterCtrlTrafficStreamId primitive->trafficStreamID */
- bufferSize += 1; /* CsrWifiRouterCtrlBlockAckRole primitive->role */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlBlockAckDisableReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlBlockAckDisableReq *primitive = (CsrWifiRouterCtrlBlockAckDisableReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrMemCpySer(ptr, len, (const void *) primitive->macAddress.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->trafficStreamID);
- CsrUint8Ser(ptr, len, (u8) primitive->role);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlBlockAckDisableReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlBlockAckDisableReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlBlockAckDisableReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrMemCpyDes(primitive->macAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->trafficStreamID, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->role, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlWapiRxPktReqSizeof(void *msg)
-{
- CsrWifiRouterCtrlWapiRxPktReq *primitive = (CsrWifiRouterCtrlWapiRxPktReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 11) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* u16 primitive->signalLength */
- bufferSize += primitive->signalLength; /* u8 primitive->signal */
- bufferSize += 2; /* u16 primitive->dataLength */
- bufferSize += primitive->dataLength; /* u8 primitive->data */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlWapiRxPktReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlWapiRxPktReq *primitive = (CsrWifiRouterCtrlWapiRxPktReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->signalLength);
- if (primitive->signalLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->signal, ((u16) (primitive->signalLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->dataLength);
- if (primitive->dataLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->data, ((u16) (primitive->dataLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlWapiRxPktReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlWapiRxPktReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlWapiRxPktReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->signalLength, buffer, &offset);
- if (primitive->signalLength)
- {
- primitive->signal = kmalloc(primitive->signalLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->signal, buffer, &offset, ((u16) (primitive->signalLength)));
- }
- else
- {
- primitive->signal = NULL;
- }
- CsrUint16Des((u16 *) &primitive->dataLength, buffer, &offset);
- if (primitive->dataLength)
- {
- primitive->data = kmalloc(primitive->dataLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->data, buffer, &offset, ((u16) (primitive->dataLength)));
- }
- else
- {
- primitive->data = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiRouterCtrlWapiRxPktReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterCtrlWapiRxPktReq *primitive = (CsrWifiRouterCtrlWapiRxPktReq *) voidPrimitivePointer;
- kfree(primitive->signal);
- kfree(primitive->data);
- kfree(primitive);
-}
-
-
-size_t CsrWifiRouterCtrlWapiUnicastTxPktReqSizeof(void *msg)
-{
- CsrWifiRouterCtrlWapiUnicastTxPktReq *primitive = (CsrWifiRouterCtrlWapiUnicastTxPktReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 8) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* u16 primitive->dataLength */
- bufferSize += primitive->dataLength; /* u8 primitive->data */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlWapiUnicastTxPktReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlWapiUnicastTxPktReq *primitive = (CsrWifiRouterCtrlWapiUnicastTxPktReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->dataLength);
- if (primitive->dataLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->data, ((u16) (primitive->dataLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlWapiUnicastTxPktReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlWapiUnicastTxPktReq *primitive = kmalloc(sizeof(CsrWifiRouterCtrlWapiUnicastTxPktReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->dataLength, buffer, &offset);
- if (primitive->dataLength)
- {
- primitive->data = kmalloc(primitive->dataLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->data, buffer, &offset, ((u16) (primitive->dataLength)));
- }
- else
- {
- primitive->data = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiRouterCtrlWapiUnicastTxPktReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterCtrlWapiUnicastTxPktReq *primitive = (CsrWifiRouterCtrlWapiUnicastTxPktReq *) voidPrimitivePointer;
- kfree(primitive->data);
- kfree(primitive);
-}
-
-
-size_t CsrWifiRouterCtrlHipIndSizeof(void *msg)
-{
- CsrWifiRouterCtrlHipInd *primitive = (CsrWifiRouterCtrlHipInd *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 12) */
- bufferSize += 2; /* u16 primitive->mlmeCommandLength */
- bufferSize += primitive->mlmeCommandLength; /* u8 primitive->mlmeCommand */
- bufferSize += 2; /* u16 primitive->dataRef1Length */
- bufferSize += primitive->dataRef1Length; /* u8 primitive->dataRef1 */
- bufferSize += 2; /* u16 primitive->dataRef2Length */
- bufferSize += primitive->dataRef2Length; /* u8 primitive->dataRef2 */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlHipIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlHipInd *primitive = (CsrWifiRouterCtrlHipInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->mlmeCommandLength);
- if (primitive->mlmeCommandLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->mlmeCommand, ((u16) (primitive->mlmeCommandLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->dataRef1Length);
- if (primitive->dataRef1Length)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->dataRef1, ((u16) (primitive->dataRef1Length)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->dataRef2Length);
- if (primitive->dataRef2Length)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->dataRef2, ((u16) (primitive->dataRef2Length)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlHipIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlHipInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlHipInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->mlmeCommandLength, buffer, &offset);
- if (primitive->mlmeCommandLength)
- {
- primitive->mlmeCommand = kmalloc(primitive->mlmeCommandLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->mlmeCommand, buffer, &offset, ((u16) (primitive->mlmeCommandLength)));
- }
- else
- {
- primitive->mlmeCommand = NULL;
- }
- CsrUint16Des((u16 *) &primitive->dataRef1Length, buffer, &offset);
- if (primitive->dataRef1Length)
- {
- primitive->dataRef1 = kmalloc(primitive->dataRef1Length, GFP_KERNEL);
- CsrMemCpyDes(primitive->dataRef1, buffer, &offset, ((u16) (primitive->dataRef1Length)));
- }
- else
- {
- primitive->dataRef1 = NULL;
- }
- CsrUint16Des((u16 *) &primitive->dataRef2Length, buffer, &offset);
- if (primitive->dataRef2Length)
- {
- primitive->dataRef2 = kmalloc(primitive->dataRef2Length, GFP_KERNEL);
- CsrMemCpyDes(primitive->dataRef2, buffer, &offset, ((u16) (primitive->dataRef2Length)));
- }
- else
- {
- primitive->dataRef2 = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiRouterCtrlHipIndSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterCtrlHipInd *primitive = (CsrWifiRouterCtrlHipInd *) voidPrimitivePointer;
- kfree(primitive->mlmeCommand);
- kfree(primitive->dataRef1);
- kfree(primitive->dataRef2);
- kfree(primitive);
-}
-
-
-size_t CsrWifiRouterCtrlMulticastAddressIndSizeof(void *msg)
-{
- CsrWifiRouterCtrlMulticastAddressInd *primitive = (CsrWifiRouterCtrlMulticastAddressInd *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 15) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiRouterCtrlListAction primitive->action */
- bufferSize += 1; /* u8 primitive->setAddressesCount */
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->setAddressesCount; i1++)
- {
- bufferSize += 6; /* u8 primitive->setAddresses[i1].a[6] */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlMulticastAddressIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlMulticastAddressInd *primitive = (CsrWifiRouterCtrlMulticastAddressInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->action);
- CsrUint8Ser(ptr, len, (u8) primitive->setAddressesCount);
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->setAddressesCount; i1++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->setAddresses[i1].a, ((u16) (6)));
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlMulticastAddressIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlMulticastAddressInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlMulticastAddressInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->action, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->setAddressesCount, buffer, &offset);
- primitive->setAddresses = NULL;
- if (primitive->setAddressesCount)
- {
- primitive->setAddresses = kmalloc(sizeof(CsrWifiMacAddress) * primitive->setAddressesCount, GFP_KERNEL);
- }
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->setAddressesCount; i1++)
- {
- CsrMemCpyDes(primitive->setAddresses[i1].a, buffer, &offset, ((u16) (6)));
- }
- }
-
- return primitive;
-}
-
-
-void CsrWifiRouterCtrlMulticastAddressIndSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterCtrlMulticastAddressInd *primitive = (CsrWifiRouterCtrlMulticastAddressInd *) voidPrimitivePointer;
- kfree(primitive->setAddresses);
- kfree(primitive);
-}
-
-
-size_t CsrWifiRouterCtrlPortConfigureCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 15) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 6; /* u8 primitive->macAddress.a[6] */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlPortConfigureCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlPortConfigureCfm *primitive = (CsrWifiRouterCtrlPortConfigureCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrMemCpySer(ptr, len, (const void *) primitive->macAddress.a, ((u16) (6)));
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlPortConfigureCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlPortConfigureCfm *primitive = kmalloc(sizeof(CsrWifiRouterCtrlPortConfigureCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrMemCpyDes(primitive->macAddress.a, buffer, &offset, ((u16) (6)));
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlSuspendIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 1; /* u8 primitive->hardSuspend */
- bufferSize += 1; /* u8 primitive->d3Suspend */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlSuspendIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlSuspendInd *primitive = (CsrWifiRouterCtrlSuspendInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint8Ser(ptr, len, (u8) primitive->hardSuspend);
- CsrUint8Ser(ptr, len, (u8) primitive->d3Suspend);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlSuspendIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlSuspendInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlSuspendInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->hardSuspend, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->d3Suspend, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlTclasAddCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 9) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlTclasAddCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlTclasAddCfm *primitive = (CsrWifiRouterCtrlTclasAddCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlTclasAddCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlTclasAddCfm *primitive = kmalloc(sizeof(CsrWifiRouterCtrlTclasAddCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlRawSdioDeinitialiseCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* CsrResult primitive->result */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlRawSdioDeinitialiseCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlRawSdioDeinitialiseCfm *primitive = (CsrWifiRouterCtrlRawSdioDeinitialiseCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->result);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlRawSdioDeinitialiseCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlRawSdioDeinitialiseCfm *primitive = kmalloc(sizeof(CsrWifiRouterCtrlRawSdioDeinitialiseCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->result, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlRawSdioInitialiseCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 39) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* CsrResult primitive->result */
- bufferSize += 4; /* CsrWifiRouterCtrlRawSdioByteRead primitive->byteRead */
- bufferSize += 4; /* CsrWifiRouterCtrlRawSdioByteWrite primitive->byteWrite */
- bufferSize += 4; /* CsrWifiRouterCtrlRawSdioFirmwareDownload primitive->firmwareDownload */
- bufferSize += 4; /* CsrWifiRouterCtrlRawSdioReset primitive->reset */
- bufferSize += 4; /* CsrWifiRouterCtrlRawSdioCoreDumpPrepare primitive->coreDumpPrepare */
- bufferSize += 4; /* CsrWifiRouterCtrlRawSdioByteBlockRead primitive->byteBlockRead */
- bufferSize += 4; /* CsrWifiRouterCtrlRawSdioGpRead16 primitive->gpRead16 */
- bufferSize += 4; /* CsrWifiRouterCtrlRawSdioGpWrite16 primitive->gpWrite16 */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlRawSdioInitialiseCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlRawSdioInitialiseCfm *primitive = (CsrWifiRouterCtrlRawSdioInitialiseCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->result);
- CsrUint32Ser(ptr, len, 0); /* Special for Function Pointers... primitive->byteRead */
- CsrUint32Ser(ptr, len, 0); /* Special for Function Pointers... primitive->byteWrite */
- CsrUint32Ser(ptr, len, 0); /* Special for Function Pointers... primitive->firmwareDownload */
- CsrUint32Ser(ptr, len, 0); /* Special for Function Pointers... primitive->reset */
- CsrUint32Ser(ptr, len, 0); /* Special for Function Pointers... primitive->coreDumpPrepare */
- CsrUint32Ser(ptr, len, 0); /* Special for Function Pointers... primitive->byteBlockRead */
- CsrUint32Ser(ptr, len, 0); /* Special for Function Pointers... primitive->gpRead16 */
- CsrUint32Ser(ptr, len, 0); /* Special for Function Pointers... primitive->gpWrite16 */
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlRawSdioInitialiseCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlRawSdioInitialiseCfm *primitive = kmalloc(sizeof(CsrWifiRouterCtrlRawSdioInitialiseCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->result, buffer, &offset);
- primitive->byteRead = NULL; /* Special for Function Pointers... */
- offset += 4;
- primitive->byteWrite = NULL; /* Special for Function Pointers... */
- offset += 4;
- primitive->firmwareDownload = NULL; /* Special for Function Pointers... */
- offset += 4;
- primitive->reset = NULL; /* Special for Function Pointers... */
- offset += 4;
- primitive->coreDumpPrepare = NULL; /* Special for Function Pointers... */
- offset += 4;
- primitive->byteBlockRead = NULL; /* Special for Function Pointers... */
- offset += 4;
- primitive->gpRead16 = NULL; /* Special for Function Pointers... */
- offset += 4;
- primitive->gpWrite16 = NULL; /* Special for Function Pointers... */
- offset += 4;
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlTclasDelCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 9) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlTclasDelCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlTclasDelCfm *primitive = (CsrWifiRouterCtrlTclasDelCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlTclasDelCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlTclasDelCfm *primitive = kmalloc(sizeof(CsrWifiRouterCtrlTclasDelCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlTrafficProtocolIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 17) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrWifiRouterCtrlTrafficPacketType primitive->packetType */
- bufferSize += 2; /* CsrWifiRouterCtrlProtocolDirection primitive->direction */
- bufferSize += 6; /* u8 primitive->srcAddress.a[6] */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlTrafficProtocolIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlTrafficProtocolInd *primitive = (CsrWifiRouterCtrlTrafficProtocolInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->packetType);
- CsrUint16Ser(ptr, len, (u16) primitive->direction);
- CsrMemCpySer(ptr, len, (const void *) primitive->srcAddress.a, ((u16) (6)));
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlTrafficProtocolIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlTrafficProtocolInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlTrafficProtocolInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->packetType, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->direction, buffer, &offset);
- CsrMemCpyDes(primitive->srcAddress.a, buffer, &offset, ((u16) (6)));
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlTrafficSampleIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 38) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 4; /* u32 primitive->stats.rxMeanRate */
- bufferSize += 4; /* u32 primitive->stats.rxFramesNum */
- bufferSize += 4; /* u32 primitive->stats.txFramesNum */
- bufferSize += 4; /* u32 primitive->stats.rxBytesCount */
- bufferSize += 4; /* u32 primitive->stats.txBytesCount */
- bufferSize += 11; /* u8 primitive->stats.intervals[11] */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlTrafficSampleIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlTrafficSampleInd *primitive = (CsrWifiRouterCtrlTrafficSampleInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint32Ser(ptr, len, (u32) primitive->stats.rxMeanRate);
- CsrUint32Ser(ptr, len, (u32) primitive->stats.rxFramesNum);
- CsrUint32Ser(ptr, len, (u32) primitive->stats.txFramesNum);
- CsrUint32Ser(ptr, len, (u32) primitive->stats.rxBytesCount);
- CsrUint32Ser(ptr, len, (u32) primitive->stats.txBytesCount);
- CsrMemCpySer(ptr, len, (const void *) primitive->stats.intervals, ((u16) (11)));
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlTrafficSampleIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlTrafficSampleInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlTrafficSampleInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->stats.rxMeanRate, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->stats.rxFramesNum, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->stats.txFramesNum, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->stats.rxBytesCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->stats.txBytesCount, buffer, &offset);
- CsrMemCpyDes(primitive->stats.intervals, buffer, &offset, ((u16) (11)));
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlWifiOnIndSizeof(void *msg)
-{
- CsrWifiRouterCtrlWifiOnInd *primitive = (CsrWifiRouterCtrlWifiOnInd *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 27) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 4; /* u32 primitive->versions.chipId */
- bufferSize += 4; /* u32 primitive->versions.chipVersion */
- bufferSize += 4; /* u32 primitive->versions.firmwareBuild */
- bufferSize += 4; /* u32 primitive->versions.firmwareHip */
- bufferSize += (primitive->versions.routerBuild ? strlen(primitive->versions.routerBuild) : 0) + 1; /* char* primitive->versions.routerBuild (0 byte len + 1 for NULL Term) */
- bufferSize += 4; /* u32 primitive->versions.routerHip */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlWifiOnIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlWifiOnInd *primitive = (CsrWifiRouterCtrlWifiOnInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint32Ser(ptr, len, (u32) primitive->versions.chipId);
- CsrUint32Ser(ptr, len, (u32) primitive->versions.chipVersion);
- CsrUint32Ser(ptr, len, (u32) primitive->versions.firmwareBuild);
- CsrUint32Ser(ptr, len, (u32) primitive->versions.firmwareHip);
- CsrCharStringSer(ptr, len, primitive->versions.routerBuild);
- CsrUint32Ser(ptr, len, (u32) primitive->versions.routerHip);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlWifiOnIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlWifiOnInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlWifiOnInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->versions.chipId, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->versions.chipVersion, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->versions.firmwareBuild, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->versions.firmwareHip, buffer, &offset);
- CsrCharStringDes(&primitive->versions.routerBuild, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->versions.routerHip, buffer, &offset);
-
- return primitive;
-}
-
-
-void CsrWifiRouterCtrlWifiOnIndSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterCtrlWifiOnInd *primitive = (CsrWifiRouterCtrlWifiOnInd *) voidPrimitivePointer;
- kfree(primitive->versions.routerBuild);
- kfree(primitive);
-}
-
-
-size_t CsrWifiRouterCtrlWifiOnCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlWifiOnCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlWifiOnCfm *primitive = (CsrWifiRouterCtrlWifiOnCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlWifiOnCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlWifiOnCfm *primitive = kmalloc(sizeof(CsrWifiRouterCtrlWifiOnCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlM4ReadyToSendIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 6; /* u8 primitive->peerMacAddress.a[6] */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlM4ReadyToSendIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlM4ReadyToSendInd *primitive = (CsrWifiRouterCtrlM4ReadyToSendInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrMemCpySer(ptr, len, (const void *) primitive->peerMacAddress.a, ((u16) (6)));
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlM4ReadyToSendIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlM4ReadyToSendInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlM4ReadyToSendInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrMemCpyDes(primitive->peerMacAddress.a, buffer, &offset, ((u16) (6)));
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlM4TransmittedIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 15) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 6; /* u8 primitive->peerMacAddress.a[6] */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlM4TransmittedIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlM4TransmittedInd *primitive = (CsrWifiRouterCtrlM4TransmittedInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrMemCpySer(ptr, len, (const void *) primitive->peerMacAddress.a, ((u16) (6)));
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlM4TransmittedIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlM4TransmittedInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlM4TransmittedInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrMemCpyDes(primitive->peerMacAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlMicFailureIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 14) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 6; /* u8 primitive->peerMacAddress.a[6] */
- bufferSize += 1; /* u8 primitive->unicastPdu */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlMicFailureIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlMicFailureInd *primitive = (CsrWifiRouterCtrlMicFailureInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrMemCpySer(ptr, len, (const void *) primitive->peerMacAddress.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->unicastPdu);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlMicFailureIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlMicFailureInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlMicFailureInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrMemCpyDes(primitive->peerMacAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->unicastPdu, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlConnectedIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 14) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 6; /* u8 primitive->peerMacAddress.a[6] */
- bufferSize += 1; /* CsrWifiRouterCtrlPeerStatus primitive->peerStatus */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlConnectedIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlConnectedInd *primitive = (CsrWifiRouterCtrlConnectedInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrMemCpySer(ptr, len, (const void *) primitive->peerMacAddress.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->peerStatus);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlConnectedIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlConnectedInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlConnectedInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrMemCpyDes(primitive->peerMacAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->peerStatus, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlPeerAddCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 19) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 6; /* u8 primitive->peerMacAddress.a[6] */
- bufferSize += 4; /* CsrWifiRouterCtrlPeerRecordHandle primitive->peerRecordHandle */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlPeerAddCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlPeerAddCfm *primitive = (CsrWifiRouterCtrlPeerAddCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrMemCpySer(ptr, len, (const void *) primitive->peerMacAddress.a, ((u16) (6)));
- CsrUint32Ser(ptr, len, (u32) primitive->peerRecordHandle);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlPeerAddCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlPeerAddCfm *primitive = kmalloc(sizeof(CsrWifiRouterCtrlPeerAddCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrMemCpyDes(primitive->peerMacAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint32Des((u32 *) &primitive->peerRecordHandle, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlPeerDelCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 9) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlPeerDelCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlPeerDelCfm *primitive = (CsrWifiRouterCtrlPeerDelCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlPeerDelCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlPeerDelCfm *primitive = kmalloc(sizeof(CsrWifiRouterCtrlPeerDelCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlUnexpectedFrameIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 6; /* u8 primitive->peerMacAddress.a[6] */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlUnexpectedFrameIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlUnexpectedFrameInd *primitive = (CsrWifiRouterCtrlUnexpectedFrameInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrMemCpySer(ptr, len, (const void *) primitive->peerMacAddress.a, ((u16) (6)));
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlUnexpectedFrameIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlUnexpectedFrameInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlUnexpectedFrameInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrMemCpyDes(primitive->peerMacAddress.a, buffer, &offset, ((u16) (6)));
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlPeerUpdateCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 9) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlPeerUpdateCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlPeerUpdateCfm *primitive = (CsrWifiRouterCtrlPeerUpdateCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlPeerUpdateCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlPeerUpdateCfm *primitive = kmalloc(sizeof(CsrWifiRouterCtrlPeerUpdateCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlCapabilitiesCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 9) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->commandQueueSize */
- bufferSize += 2; /* u16 primitive->trafficQueueSize */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlCapabilitiesCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlCapabilitiesCfm *primitive = (CsrWifiRouterCtrlCapabilitiesCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->commandQueueSize);
- CsrUint16Ser(ptr, len, (u16) primitive->trafficQueueSize);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlCapabilitiesCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlCapabilitiesCfm *primitive = kmalloc(sizeof(CsrWifiRouterCtrlCapabilitiesCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->commandQueueSize, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->trafficQueueSize, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlBlockAckEnableCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 9) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlBlockAckEnableCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlBlockAckEnableCfm *primitive = (CsrWifiRouterCtrlBlockAckEnableCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlBlockAckEnableCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlBlockAckEnableCfm *primitive = kmalloc(sizeof(CsrWifiRouterCtrlBlockAckEnableCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlBlockAckDisableCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 9) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlBlockAckDisableCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlBlockAckDisableCfm *primitive = (CsrWifiRouterCtrlBlockAckDisableCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlBlockAckDisableCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlBlockAckDisableCfm *primitive = kmalloc(sizeof(CsrWifiRouterCtrlBlockAckDisableCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlBlockAckErrorIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 16) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiRouterCtrlTrafficStreamId primitive->trafficStreamID */
- bufferSize += 6; /* u8 primitive->peerMacAddress.a[6] */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlBlockAckErrorIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlBlockAckErrorInd *primitive = (CsrWifiRouterCtrlBlockAckErrorInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->trafficStreamID);
- CsrMemCpySer(ptr, len, (const void *) primitive->peerMacAddress.a, ((u16) (6)));
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlBlockAckErrorIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlBlockAckErrorInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlBlockAckErrorInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->trafficStreamID, buffer, &offset);
- CsrMemCpyDes(primitive->peerMacAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlStaInactiveIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 6; /* u8 primitive->staAddress.a[6] */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlStaInactiveIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlStaInactiveInd *primitive = (CsrWifiRouterCtrlStaInactiveInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrMemCpySer(ptr, len, (const void *) primitive->staAddress.a, ((u16) (6)));
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlStaInactiveIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlStaInactiveInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlStaInactiveInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrMemCpyDes(primitive->staAddress.a, buffer, &offset, ((u16) (6)));
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlWapiRxMicCheckIndSizeof(void *msg)
-{
- CsrWifiRouterCtrlWapiRxMicCheckInd *primitive = (CsrWifiRouterCtrlWapiRxMicCheckInd *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* u16 primitive->signalLength */
- bufferSize += primitive->signalLength; /* u8 primitive->signal */
- bufferSize += 2; /* u16 primitive->dataLength */
- bufferSize += primitive->dataLength; /* u8 primitive->data */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlWapiRxMicCheckIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlWapiRxMicCheckInd *primitive = (CsrWifiRouterCtrlWapiRxMicCheckInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->signalLength);
- if (primitive->signalLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->signal, ((u16) (primitive->signalLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->dataLength);
- if (primitive->dataLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->data, ((u16) (primitive->dataLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlWapiRxMicCheckIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlWapiRxMicCheckInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlWapiRxMicCheckInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->signalLength, buffer, &offset);
- if (primitive->signalLength)
- {
- primitive->signal = kmalloc(primitive->signalLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->signal, buffer, &offset, ((u16) (primitive->signalLength)));
- }
- else
- {
- primitive->signal = NULL;
- }
- CsrUint16Des((u16 *) &primitive->dataLength, buffer, &offset);
- if (primitive->dataLength)
- {
- primitive->data = kmalloc(primitive->dataLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->data, buffer, &offset, ((u16) (primitive->dataLength)));
- }
- else
- {
- primitive->data = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiRouterCtrlWapiRxMicCheckIndSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterCtrlWapiRxMicCheckInd *primitive = (CsrWifiRouterCtrlWapiRxMicCheckInd *) voidPrimitivePointer;
- kfree(primitive->signal);
- kfree(primitive->data);
- kfree(primitive);
-}
-
-
-size_t CsrWifiRouterCtrlModeSetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 10) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiRouterCtrlMode primitive->mode */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlModeSetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlModeSetCfm *primitive = (CsrWifiRouterCtrlModeSetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->mode);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlModeSetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlModeSetCfm *primitive = kmalloc(sizeof(CsrWifiRouterCtrlModeSetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->mode, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterCtrlWapiUnicastTxEncryptIndSizeof(void *msg)
-{
- CsrWifiRouterCtrlWapiUnicastTxEncryptInd *primitive = (CsrWifiRouterCtrlWapiUnicastTxEncryptInd *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 10) */
- bufferSize += 2; /* CsrWifiRouterCtrlRequestorInfo primitive->clientData */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* u16 primitive->dataLength */
- bufferSize += primitive->dataLength; /* u8 primitive->data */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterCtrlWapiUnicastTxEncryptIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterCtrlWapiUnicastTxEncryptInd *primitive = (CsrWifiRouterCtrlWapiUnicastTxEncryptInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->clientData);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->dataLength);
- if (primitive->dataLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->data, ((u16) (primitive->dataLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiRouterCtrlWapiUnicastTxEncryptIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterCtrlWapiUnicastTxEncryptInd *primitive = kmalloc(sizeof(CsrWifiRouterCtrlWapiUnicastTxEncryptInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->clientData, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->dataLength, buffer, &offset);
- if (primitive->dataLength)
- {
- primitive->data = kmalloc(primitive->dataLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->data, buffer, &offset, ((u16) (primitive->dataLength)));
- }
- else
- {
- primitive->data = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiRouterCtrlWapiUnicastTxEncryptIndSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterCtrlWapiUnicastTxEncryptInd *primitive = (CsrWifiRouterCtrlWapiUnicastTxEncryptInd *) voidPrimitivePointer;
- kfree(primitive->data);
- kfree(primitive);
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_router_ctrl_serialize.h b/drivers/staging/csr/csr_wifi_router_ctrl_serialize.h
deleted file mode 100644
index c9048386cfcb..000000000000
--- a/drivers/staging/csr/csr_wifi_router_ctrl_serialize.h
+++ /dev/null
@@ -1,333 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_ROUTER_CTRL_SERIALIZE_H__
-#define CSR_WIFI_ROUTER_CTRL_SERIALIZE_H__
-
-#include "csr_wifi_msgconv.h"
-
-#include "csr_wifi_router_ctrl_prim.h"
-
-extern void CsrWifiRouterCtrlPfree(void *ptr);
-
-extern u8* CsrWifiRouterCtrlConfigurePowerModeReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlConfigurePowerModeReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlConfigurePowerModeReqSizeof(void *msg);
-#define CsrWifiRouterCtrlConfigurePowerModeReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlHipReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlHipReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlHipReqSizeof(void *msg);
-extern void CsrWifiRouterCtrlHipReqSerFree(void *msg);
-
-extern u8* CsrWifiRouterCtrlMediaStatusReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlMediaStatusReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlMediaStatusReqSizeof(void *msg);
-#define CsrWifiRouterCtrlMediaStatusReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlMulticastAddressResSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlMulticastAddressResDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlMulticastAddressResSizeof(void *msg);
-extern void CsrWifiRouterCtrlMulticastAddressResSerFree(void *msg);
-
-extern u8* CsrWifiRouterCtrlPortConfigureReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlPortConfigureReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlPortConfigureReqSizeof(void *msg);
-#define CsrWifiRouterCtrlPortConfigureReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlQosControlReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlQosControlReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlQosControlReqSizeof(void *msg);
-#define CsrWifiRouterCtrlQosControlReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlSuspendResSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlSuspendResDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlSuspendResSizeof(void *msg);
-#define CsrWifiRouterCtrlSuspendResSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlTclasAddReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlTclasAddReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlTclasAddReqSizeof(void *msg);
-extern void CsrWifiRouterCtrlTclasAddReqSerFree(void *msg);
-
-extern u8* CsrWifiRouterCtrlResumeResSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlResumeResDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlResumeResSizeof(void *msg);
-#define CsrWifiRouterCtrlResumeResSerFree CsrWifiRouterCtrlPfree
-
-#define CsrWifiRouterCtrlRawSdioDeinitialiseReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiRouterCtrlRawSdioDeinitialiseReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiRouterCtrlRawSdioDeinitialiseReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiRouterCtrlRawSdioDeinitialiseReqSerFree CsrWifiRouterCtrlPfree
-
-#define CsrWifiRouterCtrlRawSdioInitialiseReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiRouterCtrlRawSdioInitialiseReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiRouterCtrlRawSdioInitialiseReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiRouterCtrlRawSdioInitialiseReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlTclasDelReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlTclasDelReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlTclasDelReqSizeof(void *msg);
-extern void CsrWifiRouterCtrlTclasDelReqSerFree(void *msg);
-
-extern u8* CsrWifiRouterCtrlTrafficClassificationReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlTrafficClassificationReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlTrafficClassificationReqSizeof(void *msg);
-#define CsrWifiRouterCtrlTrafficClassificationReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlTrafficConfigReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlTrafficConfigReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlTrafficConfigReqSizeof(void *msg);
-#define CsrWifiRouterCtrlTrafficConfigReqSerFree CsrWifiRouterCtrlPfree
-
-#define CsrWifiRouterCtrlWifiOffReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiRouterCtrlWifiOffReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiRouterCtrlWifiOffReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiRouterCtrlWifiOffReqSerFree CsrWifiRouterCtrlPfree
-
-#define CsrWifiRouterCtrlWifiOffResSer CsrWifiEventCsrUint16Ser
-#define CsrWifiRouterCtrlWifiOffResDes CsrWifiEventCsrUint16Des
-#define CsrWifiRouterCtrlWifiOffResSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiRouterCtrlWifiOffResSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlWifiOnReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlWifiOnReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlWifiOnReqSizeof(void *msg);
-extern void CsrWifiRouterCtrlWifiOnReqSerFree(void *msg);
-
-extern u8* CsrWifiRouterCtrlWifiOnResSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlWifiOnResDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlWifiOnResSizeof(void *msg);
-extern void CsrWifiRouterCtrlWifiOnResSerFree(void *msg);
-
-extern u8* CsrWifiRouterCtrlM4TransmitReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlM4TransmitReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlM4TransmitReqSizeof(void *msg);
-#define CsrWifiRouterCtrlM4TransmitReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlModeSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlModeSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlModeSetReqSizeof(void *msg);
-#define CsrWifiRouterCtrlModeSetReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlPeerAddReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlPeerAddReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlPeerAddReqSizeof(void *msg);
-#define CsrWifiRouterCtrlPeerAddReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlPeerDelReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlPeerDelReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlPeerDelReqSizeof(void *msg);
-#define CsrWifiRouterCtrlPeerDelReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlPeerUpdateReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlPeerUpdateReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlPeerUpdateReqSizeof(void *msg);
-#define CsrWifiRouterCtrlPeerUpdateReqSerFree CsrWifiRouterCtrlPfree
-
-#define CsrWifiRouterCtrlCapabilitiesReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiRouterCtrlCapabilitiesReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiRouterCtrlCapabilitiesReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiRouterCtrlCapabilitiesReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlBlockAckEnableReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlBlockAckEnableReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlBlockAckEnableReqSizeof(void *msg);
-#define CsrWifiRouterCtrlBlockAckEnableReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlBlockAckDisableReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlBlockAckDisableReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlBlockAckDisableReqSizeof(void *msg);
-#define CsrWifiRouterCtrlBlockAckDisableReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlWapiRxPktReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlWapiRxPktReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlWapiRxPktReqSizeof(void *msg);
-extern void CsrWifiRouterCtrlWapiRxPktReqSerFree(void *msg);
-
-#define CsrWifiRouterCtrlWapiMulticastFilterReqSer CsrWifiEventCsrUint16CsrUint8Ser
-#define CsrWifiRouterCtrlWapiMulticastFilterReqDes CsrWifiEventCsrUint16CsrUint8Des
-#define CsrWifiRouterCtrlWapiMulticastFilterReqSizeof CsrWifiEventCsrUint16CsrUint8Sizeof
-#define CsrWifiRouterCtrlWapiMulticastFilterReqSerFree CsrWifiRouterCtrlPfree
-
-#define CsrWifiRouterCtrlWapiUnicastFilterReqSer CsrWifiEventCsrUint16CsrUint8Ser
-#define CsrWifiRouterCtrlWapiUnicastFilterReqDes CsrWifiEventCsrUint16CsrUint8Des
-#define CsrWifiRouterCtrlWapiUnicastFilterReqSizeof CsrWifiEventCsrUint16CsrUint8Sizeof
-#define CsrWifiRouterCtrlWapiUnicastFilterReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlWapiUnicastTxPktReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlWapiUnicastTxPktReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlWapiUnicastTxPktReqSizeof(void *msg);
-extern void CsrWifiRouterCtrlWapiUnicastTxPktReqSerFree(void *msg);
-
-#define CsrWifiRouterCtrlWapiFilterReqSer CsrWifiEventCsrUint16CsrUint8Ser
-#define CsrWifiRouterCtrlWapiFilterReqDes CsrWifiEventCsrUint16CsrUint8Des
-#define CsrWifiRouterCtrlWapiFilterReqSizeof CsrWifiEventCsrUint16CsrUint8Sizeof
-#define CsrWifiRouterCtrlWapiFilterReqSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlHipIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlHipIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlHipIndSizeof(void *msg);
-extern void CsrWifiRouterCtrlHipIndSerFree(void *msg);
-
-extern u8* CsrWifiRouterCtrlMulticastAddressIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlMulticastAddressIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlMulticastAddressIndSizeof(void *msg);
-extern void CsrWifiRouterCtrlMulticastAddressIndSerFree(void *msg);
-
-extern u8* CsrWifiRouterCtrlPortConfigureCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlPortConfigureCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlPortConfigureCfmSizeof(void *msg);
-#define CsrWifiRouterCtrlPortConfigureCfmSerFree CsrWifiRouterCtrlPfree
-
-#define CsrWifiRouterCtrlResumeIndSer CsrWifiEventCsrUint16CsrUint8Ser
-#define CsrWifiRouterCtrlResumeIndDes CsrWifiEventCsrUint16CsrUint8Des
-#define CsrWifiRouterCtrlResumeIndSizeof CsrWifiEventCsrUint16CsrUint8Sizeof
-#define CsrWifiRouterCtrlResumeIndSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlSuspendIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlSuspendIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlSuspendIndSizeof(void *msg);
-#define CsrWifiRouterCtrlSuspendIndSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlTclasAddCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlTclasAddCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlTclasAddCfmSizeof(void *msg);
-#define CsrWifiRouterCtrlTclasAddCfmSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlRawSdioDeinitialiseCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlRawSdioDeinitialiseCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlRawSdioDeinitialiseCfmSizeof(void *msg);
-#define CsrWifiRouterCtrlRawSdioDeinitialiseCfmSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlRawSdioInitialiseCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlRawSdioInitialiseCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlRawSdioInitialiseCfmSizeof(void *msg);
-#define CsrWifiRouterCtrlRawSdioInitialiseCfmSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlTclasDelCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlTclasDelCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlTclasDelCfmSizeof(void *msg);
-#define CsrWifiRouterCtrlTclasDelCfmSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlTrafficProtocolIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlTrafficProtocolIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlTrafficProtocolIndSizeof(void *msg);
-#define CsrWifiRouterCtrlTrafficProtocolIndSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlTrafficSampleIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlTrafficSampleIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlTrafficSampleIndSizeof(void *msg);
-#define CsrWifiRouterCtrlTrafficSampleIndSerFree CsrWifiRouterCtrlPfree
-
-#define CsrWifiRouterCtrlWifiOffIndSer CsrWifiEventCsrUint16CsrUint8Ser
-#define CsrWifiRouterCtrlWifiOffIndDes CsrWifiEventCsrUint16CsrUint8Des
-#define CsrWifiRouterCtrlWifiOffIndSizeof CsrWifiEventCsrUint16CsrUint8Sizeof
-#define CsrWifiRouterCtrlWifiOffIndSerFree CsrWifiRouterCtrlPfree
-
-#define CsrWifiRouterCtrlWifiOffCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiRouterCtrlWifiOffCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiRouterCtrlWifiOffCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiRouterCtrlWifiOffCfmSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlWifiOnIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlWifiOnIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlWifiOnIndSizeof(void *msg);
-extern void CsrWifiRouterCtrlWifiOnIndSerFree(void *msg);
-
-extern u8* CsrWifiRouterCtrlWifiOnCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlWifiOnCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlWifiOnCfmSizeof(void *msg);
-#define CsrWifiRouterCtrlWifiOnCfmSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlM4ReadyToSendIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlM4ReadyToSendIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlM4ReadyToSendIndSizeof(void *msg);
-#define CsrWifiRouterCtrlM4ReadyToSendIndSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlM4TransmittedIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlM4TransmittedIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlM4TransmittedIndSizeof(void *msg);
-#define CsrWifiRouterCtrlM4TransmittedIndSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlMicFailureIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlMicFailureIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlMicFailureIndSizeof(void *msg);
-#define CsrWifiRouterCtrlMicFailureIndSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlConnectedIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlConnectedIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlConnectedIndSizeof(void *msg);
-#define CsrWifiRouterCtrlConnectedIndSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlPeerAddCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlPeerAddCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlPeerAddCfmSizeof(void *msg);
-#define CsrWifiRouterCtrlPeerAddCfmSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlPeerDelCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlPeerDelCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlPeerDelCfmSizeof(void *msg);
-#define CsrWifiRouterCtrlPeerDelCfmSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlUnexpectedFrameIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlUnexpectedFrameIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlUnexpectedFrameIndSizeof(void *msg);
-#define CsrWifiRouterCtrlUnexpectedFrameIndSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlPeerUpdateCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlPeerUpdateCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlPeerUpdateCfmSizeof(void *msg);
-#define CsrWifiRouterCtrlPeerUpdateCfmSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlCapabilitiesCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlCapabilitiesCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlCapabilitiesCfmSizeof(void *msg);
-#define CsrWifiRouterCtrlCapabilitiesCfmSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlBlockAckEnableCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlBlockAckEnableCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlBlockAckEnableCfmSizeof(void *msg);
-#define CsrWifiRouterCtrlBlockAckEnableCfmSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlBlockAckDisableCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlBlockAckDisableCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlBlockAckDisableCfmSizeof(void *msg);
-#define CsrWifiRouterCtrlBlockAckDisableCfmSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlBlockAckErrorIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlBlockAckErrorIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlBlockAckErrorIndSizeof(void *msg);
-#define CsrWifiRouterCtrlBlockAckErrorIndSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlStaInactiveIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlStaInactiveIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlStaInactiveIndSizeof(void *msg);
-#define CsrWifiRouterCtrlStaInactiveIndSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlWapiRxMicCheckIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlWapiRxMicCheckIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlWapiRxMicCheckIndSizeof(void *msg);
-extern void CsrWifiRouterCtrlWapiRxMicCheckIndSerFree(void *msg);
-
-extern u8* CsrWifiRouterCtrlModeSetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlModeSetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlModeSetCfmSizeof(void *msg);
-#define CsrWifiRouterCtrlModeSetCfmSerFree CsrWifiRouterCtrlPfree
-
-extern u8* CsrWifiRouterCtrlWapiUnicastTxEncryptIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterCtrlWapiUnicastTxEncryptIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterCtrlWapiUnicastTxEncryptIndSizeof(void *msg);
-extern void CsrWifiRouterCtrlWapiUnicastTxEncryptIndSerFree(void *msg);
-
-#endif /* CSR_WIFI_ROUTER_CTRL_SERIALIZE_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_router_free_downstream_contents.c b/drivers/staging/csr/csr_wifi_router_free_downstream_contents.c
deleted file mode 100644
index c4badc565a91..000000000000
--- a/drivers/staging/csr/csr_wifi_router_free_downstream_contents.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-#include <linux/slab.h>
-#include "csr_wifi_router_prim.h"
-#include "csr_wifi_router_lib.h"
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrWifiRouterFreeDownstreamMessageContents
- *
- * DESCRIPTION
- *
- *
- * PARAMETERS
- * eventClass: only the value CSR_WIFI_ROUTER_PRIM will be handled
- * message: the message to free
- *----------------------------------------------------------------------------*/
-void CsrWifiRouterFreeDownstreamMessageContents(u16 eventClass, void *message)
-{
- if (eventClass != CSR_WIFI_ROUTER_PRIM)
- {
- return;
- }
- if (NULL == message)
- {
- return;
- }
-
- switch (*((CsrWifiRouterPrim *) message))
- {
- case CSR_WIFI_ROUTER_MA_PACKET_REQ:
- {
- CsrWifiRouterMaPacketReq *p = (CsrWifiRouterMaPacketReq *)message;
- kfree(p->frame);
- p->frame = NULL;
- break;
- }
-
- default:
- break;
- }
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_router_free_upstream_contents.c b/drivers/staging/csr/csr_wifi_router_free_upstream_contents.c
deleted file mode 100644
index 4cd126338e27..000000000000
--- a/drivers/staging/csr/csr_wifi_router_free_upstream_contents.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-#include <linux/slab.h>
-#include "csr_wifi_router_prim.h"
-#include "csr_wifi_router_lib.h"
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrWifiRouterFreeUpstreamMessageContents
- *
- * DESCRIPTION
- *
- *
- * PARAMETERS
- * eventClass: only the value CSR_WIFI_ROUTER_PRIM will be handled
- * message: the message to free
- *----------------------------------------------------------------------------*/
-void CsrWifiRouterFreeUpstreamMessageContents(u16 eventClass, void *message)
-{
- if (eventClass != CSR_WIFI_ROUTER_PRIM)
- return;
- if (NULL == message)
- return;
- switch (*((CsrWifiRouterPrim *) message)) {
- case CSR_WIFI_ROUTER_MA_PACKET_IND:
- {
- CsrWifiRouterMaPacketInd *p =
- (CsrWifiRouterMaPacketInd *) message;
- kfree(p->frame);
- p->frame = NULL;
- break;
- }
- default:
- break;
- }
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_router_lib.h b/drivers/staging/csr/csr_wifi_router_lib.h
deleted file mode 100644
index b0477c413aae..000000000000
--- a/drivers/staging/csr/csr_wifi_router_lib.h
+++ /dev/null
@@ -1,417 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_ROUTER_LIB_H__
-#define CSR_WIFI_ROUTER_LIB_H__
-
-#include "csr_sched.h"
-#include "csr_macro.h"
-#include "csr_msg_transport.h"
-
-#include "csr_wifi_lib.h"
-
-#include "csr_wifi_router_prim.h"
-#include "csr_wifi_router_task.h"
-
-/*----------------------------------------------------------------------------*
- * CsrWifiRouterFreeUpstreamMessageContents
- *
- * DESCRIPTION
- * Free the allocated memory in a CSR_WIFI_ROUTER upstream message. Does not
- * free the message itself, and can only be used for upstream messages.
- *
- * PARAMETERS
- * Deallocates the resources in a CSR_WIFI_ROUTER upstream message
- *----------------------------------------------------------------------------*/
-void CsrWifiRouterFreeUpstreamMessageContents(u16 eventClass, void *message);
-
-/*----------------------------------------------------------------------------*
- * CsrWifiRouterFreeDownstreamMessageContents
- *
- * DESCRIPTION
- * Free the allocated memory in a CSR_WIFI_ROUTER downstream message. Does not
- * free the message itself, and can only be used for downstream messages.
- *
- * PARAMETERS
- * Deallocates the resources in a CSR_WIFI_ROUTER downstream message
- *----------------------------------------------------------------------------*/
-void CsrWifiRouterFreeDownstreamMessageContents(u16 eventClass, void *message);
-
-/*----------------------------------------------------------------------------*
- * Enum to string functions
- *----------------------------------------------------------------------------*/
-const char* CsrWifiRouterAppTypeToString(CsrWifiRouterAppType value);
-const char* CsrWifiRouterEncapsulationToString(CsrWifiRouterEncapsulation value);
-const char* CsrWifiRouterOuiToString(CsrWifiRouterOui value);
-const char* CsrWifiRouterPriorityToString(CsrWifiRouterPriority value);
-
-
-/*----------------------------------------------------------------------------*
- * CsrPrim Type toString function.
- * Converts a message type to the String name of the Message
- *----------------------------------------------------------------------------*/
-const char* CsrWifiRouterPrimTypeToString(CsrPrim msgType);
-
-/*----------------------------------------------------------------------------*
- * Lookup arrays for PrimType name Strings
- *----------------------------------------------------------------------------*/
-extern const char *CsrWifiRouterUpstreamPrimNames[CSR_WIFI_ROUTER_PRIM_UPSTREAM_COUNT];
-extern const char *CsrWifiRouterDownstreamPrimNames[CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_COUNT];
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketCancelReqSend
-
- DESCRIPTION
- This primitive is used to request cancellation of a previously send
- CsrWifiRouterMaPacketReq.
- The frame may already have been transmitted so there is no guarantees
- that the CsrWifiRouterMaPacketCancelReq actually cancels the transmission
- of the frame in question.
- If the cancellation fails, the Router will send, if required,
- CsrWifiRouterMaPacketCfm.
- If the cancellation succeeds, the Router will not send
- CsrWifiRouterMaPacketCfm.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- hostTag - The hostTag for the frame, which should be cancelled.
- priority - Priority of the frame, which should be cancelled
- peerMacAddress - Destination MAC address of the frame, which should be
- cancelled
-
-*******************************************************************************/
-#define CsrWifiRouterMaPacketCancelReqCreate(msg__, dst__, src__, interfaceTag__, hostTag__, priority__, peerMacAddress__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketCancelReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_CANCEL_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->hostTag = (hostTag__); \
- msg__->priority = (priority__); \
- msg__->peerMacAddress = (peerMacAddress__);
-
-#define CsrWifiRouterMaPacketCancelReqSendTo(dst__, src__, interfaceTag__, hostTag__, priority__, peerMacAddress__) \
- { \
- CsrWifiRouterMaPacketCancelReq *msg__; \
- CsrWifiRouterMaPacketCancelReqCreate(msg__, dst__, src__, interfaceTag__, hostTag__, priority__, peerMacAddress__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
- }
-
-#define CsrWifiRouterMaPacketCancelReqSend(src__, interfaceTag__, hostTag__, priority__, peerMacAddress__) \
- CsrWifiRouterMaPacketCancelReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, hostTag__, priority__, peerMacAddress__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketReqSend
-
- DESCRIPTION
- A task sends this primitive to transmit a frame.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- subscriptionHandle - The handle of the subscription
- frameLength - Length of the frame to be sent in bytes
- frame - Pointer to the frame to be sent
- freeFunction - Pointer to function to be used to free the frame
- priority - Priority of the frame, which should be sent
- hostTag - An application shall set the bits b31..b28 using one of
- the CSR_WIFI_ROUTER_APP_TYPE_* masks. Bits b0..b27 can
- be used by the requestor without any restrictions, but
- the hostTag shall be unique so the hostTag for
- CSR_WIFI_ROUTER_APP _TYPE_OTHER should be constructured
- in the following way [ CSR_WIFI_ROUTER_APP_TYPE_OTHER
- (4 bits) | SubscriptionHandle (8 bits) | Sequence no.
- (20 bits) ]. If the hostTag is not unique, the
- behaviour of the system is unpredicatable with respect
- to data/management frame transfer.
- cfmRequested - Indicates if the requestor needs a confirm for packet
- requests sent under this subscription. If set to TRUE,
- the router will send a confirm, else it will not send
- any confirm
-
-*******************************************************************************/
-#define CsrWifiRouterMaPacketReqCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, frameLength__, frame__, freeFunction__, priority__, hostTag__, cfmRequested__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->subscriptionHandle = (subscriptionHandle__); \
- msg__->frameLength = (frameLength__); \
- msg__->frame = (frame__); \
- msg__->freeFunction = (freeFunction__); \
- msg__->priority = (priority__); \
- msg__->hostTag = (hostTag__); \
- msg__->cfmRequested = (cfmRequested__);
-
-#define CsrWifiRouterMaPacketReqSendTo(dst__, src__, interfaceTag__, subscriptionHandle__, frameLength__, frame__, freeFunction__, priority__, hostTag__, cfmRequested__) \
- { \
- CsrWifiRouterMaPacketReq *msg__; \
- CsrWifiRouterMaPacketReqCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, frameLength__, frame__, freeFunction__, priority__, hostTag__, cfmRequested__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
- }
-
-#define CsrWifiRouterMaPacketReqSend(src__, interfaceTag__, subscriptionHandle__, frameLength__, frame__, freeFunction__, priority__, hostTag__, cfmRequested__) \
- CsrWifiRouterMaPacketReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, subscriptionHandle__, frameLength__, frame__, freeFunction__, priority__, hostTag__, cfmRequested__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketIndSend
-
- DESCRIPTION
- The router sends the primitive to a subscribed task when it receives a
- frame matching the subscription.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- subscriptionHandle - The handle of the subscription
- result - Status of the operation
- frameLength - Length of the received frame in bytes
- frame - Pointer to the received frame
- freeFunction - Pointer to function to be used to free the frame
- rssi - Received signal strength indication in dBm
- snr - Signal to Noise Ratio
- rate - Transmission/Reception rate
-
-*******************************************************************************/
-#define CsrWifiRouterMaPacketIndCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, result__, frameLength__, frame__, freeFunction__, rssi__, snr__, rate__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->subscriptionHandle = (subscriptionHandle__); \
- msg__->result = (result__); \
- msg__->frameLength = (frameLength__); \
- msg__->frame = (frame__); \
- msg__->freeFunction = (freeFunction__); \
- msg__->rssi = (rssi__); \
- msg__->snr = (snr__); \
- msg__->rate = (rate__);
-
-#define CsrWifiRouterMaPacketIndSendTo(dst__, src__, interfaceTag__, subscriptionHandle__, result__, frameLength__, frame__, freeFunction__, rssi__, snr__, rate__) \
- { \
- CsrWifiRouterMaPacketInd *msg__; \
- CsrWifiRouterMaPacketIndCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, result__, frameLength__, frame__, freeFunction__, rssi__, snr__, rate__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
- }
-
-#define CsrWifiRouterMaPacketIndSend(dst__, interfaceTag__, subscriptionHandle__, result__, frameLength__, frame__, freeFunction__, rssi__, snr__, rate__) \
- CsrWifiRouterMaPacketIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, interfaceTag__, subscriptionHandle__, result__, frameLength__, frame__, freeFunction__, rssi__, snr__, rate__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketResSend
-
- DESCRIPTION
- A task send this primitive to confirm the reception of the received
- frame.
-
- PARAMETERS
- interfaceTag - Interface Identifier; unique identifier of an interface
- subscriptionHandle - The handle of the subscription
- result - Status of the operation
-
-*******************************************************************************/
-#define CsrWifiRouterMaPacketResCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, result__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketRes), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_RES, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->subscriptionHandle = (subscriptionHandle__); \
- msg__->result = (result__);
-
-#define CsrWifiRouterMaPacketResSendTo(dst__, src__, interfaceTag__, subscriptionHandle__, result__) \
- { \
- CsrWifiRouterMaPacketRes *msg__; \
- CsrWifiRouterMaPacketResCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, result__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
- }
-
-#define CsrWifiRouterMaPacketResSend(src__, interfaceTag__, subscriptionHandle__, result__) \
- CsrWifiRouterMaPacketResSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, subscriptionHandle__, result__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketCfmSend
-
- DESCRIPTION
- The router sends the primitive to confirm the result of the transmission
- of the packet of the corresponding CSR_WIFI_ROUTER MA_PACKET_REQ request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- result - Status of the operation
- hostTag - The hostTrag will match the hostTag sent in the request.
- rate - Transmission/Reception rate
-
-*******************************************************************************/
-#define CsrWifiRouterMaPacketCfmCreate(msg__, dst__, src__, interfaceTag__, result__, hostTag__, rate__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->result = (result__); \
- msg__->hostTag = (hostTag__); \
- msg__->rate = (rate__);
-
-#define CsrWifiRouterMaPacketCfmSendTo(dst__, src__, interfaceTag__, result__, hostTag__, rate__) \
- { \
- CsrWifiRouterMaPacketCfm *msg__; \
- CsrWifiRouterMaPacketCfmCreate(msg__, dst__, src__, interfaceTag__, result__, hostTag__, rate__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
- }
-
-#define CsrWifiRouterMaPacketCfmSend(dst__, interfaceTag__, result__, hostTag__, rate__) \
- CsrWifiRouterMaPacketCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, interfaceTag__, result__, hostTag__, rate__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketSubscribeReqSend
-
- DESCRIPTION
- A task can use this primitive to subscribe for a particular OUI/protocol
- and transmit and receive frames matching the subscription.
- NOTE: Multiple subscriptions for a given protocol and OUI will result in
- the first subscription receiving the data and not the subsequent
- subscriptions.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- encapsulation - Specifies the encapsulation type, which will be used for the
- subscription
- protocol - Together with the OUI, specifies the protocol, which a task
- wants to subscribe to
- oui - Specifies the OUI for the protocol, which a task wants to
- subscribe to
-
-*******************************************************************************/
-#define CsrWifiRouterMaPacketSubscribeReqCreate(msg__, dst__, src__, interfaceTag__, encapsulation__, protocol__, oui__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketSubscribeReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_SUBSCRIBE_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->encapsulation = (encapsulation__); \
- msg__->protocol = (protocol__); \
- msg__->oui = (oui__);
-
-#define CsrWifiRouterMaPacketSubscribeReqSendTo(dst__, src__, interfaceTag__, encapsulation__, protocol__, oui__) \
- { \
- CsrWifiRouterMaPacketSubscribeReq *msg__; \
- CsrWifiRouterMaPacketSubscribeReqCreate(msg__, dst__, src__, interfaceTag__, encapsulation__, protocol__, oui__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
- }
-
-#define CsrWifiRouterMaPacketSubscribeReqSend(src__, interfaceTag__, encapsulation__, protocol__, oui__) \
- CsrWifiRouterMaPacketSubscribeReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, encapsulation__, protocol__, oui__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketSubscribeCfmSend
-
- DESCRIPTION
- The router sends this primitive to confirm the result of the
- subscription.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- subscriptionHandle - Handle to the subscription
- This handle must be used in all subsequent requests
- status - Status of the operation
- allocOffset - Size of the offset for the frames of the subscription
-
-*******************************************************************************/
-#define CsrWifiRouterMaPacketSubscribeCfmCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, status__, allocOffset__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketSubscribeCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_SUBSCRIBE_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->subscriptionHandle = (subscriptionHandle__); \
- msg__->status = (status__); \
- msg__->allocOffset = (allocOffset__);
-
-#define CsrWifiRouterMaPacketSubscribeCfmSendTo(dst__, src__, interfaceTag__, subscriptionHandle__, status__, allocOffset__) \
- { \
- CsrWifiRouterMaPacketSubscribeCfm *msg__; \
- CsrWifiRouterMaPacketSubscribeCfmCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, status__, allocOffset__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
- }
-
-#define CsrWifiRouterMaPacketSubscribeCfmSend(dst__, interfaceTag__, subscriptionHandle__, status__, allocOffset__) \
- CsrWifiRouterMaPacketSubscribeCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, interfaceTag__, subscriptionHandle__, status__, allocOffset__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketUnsubscribeReqSend
-
- DESCRIPTION
- A task sends this primitive to unsubscribe a subscription
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- subscriptionHandle - The handle of the subscription
-
-*******************************************************************************/
-#define CsrWifiRouterMaPacketUnsubscribeReqCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketUnsubscribeReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_UNSUBSCRIBE_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->subscriptionHandle = (subscriptionHandle__);
-
-#define CsrWifiRouterMaPacketUnsubscribeReqSendTo(dst__, src__, interfaceTag__, subscriptionHandle__) \
- { \
- CsrWifiRouterMaPacketUnsubscribeReq *msg__; \
- CsrWifiRouterMaPacketUnsubscribeReqCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__); \
- CsrMsgTransport(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
- }
-
-#define CsrWifiRouterMaPacketUnsubscribeReqSend(src__, interfaceTag__, subscriptionHandle__) \
- CsrWifiRouterMaPacketUnsubscribeReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, subscriptionHandle__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketUnsubscribeCfmSend
-
- DESCRIPTION
- The router sends this primitive to confirm the result of the
- unsubscription.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Status of the operation
-
-*******************************************************************************/
-#define CsrWifiRouterMaPacketUnsubscribeCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketUnsubscribeCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_UNSUBSCRIBE_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiRouterMaPacketUnsubscribeCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiRouterMaPacketUnsubscribeCfm *msg__; \
- CsrWifiRouterMaPacketUnsubscribeCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
- }
-
-#define CsrWifiRouterMaPacketUnsubscribeCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiRouterMaPacketUnsubscribeCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, interfaceTag__, status__)
-
-#endif /* CSR_WIFI_ROUTER_LIB_H__ */
diff --git a/drivers/staging/csr/csr_wifi_router_prim.h b/drivers/staging/csr/csr_wifi_router_prim.h
deleted file mode 100644
index c52344b51f2f..000000000000
--- a/drivers/staging/csr/csr_wifi_router_prim.h
+++ /dev/null
@@ -1,421 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_ROUTER_PRIM_H__
-#define CSR_WIFI_ROUTER_PRIM_H__
-
-#include <linux/types.h>
-#include "csr_prim_defs.h"
-#include "csr_sched.h"
-#include "csr_wifi_common.h"
-#include "csr_result.h"
-#include "csr_wifi_fsm_event.h"
-
-#define CSR_WIFI_ROUTER_PRIM (0x0400)
-
-typedef CsrPrim CsrWifiRouterPrim;
-
-typedef void (*CsrWifiRouterFrameFreeFunction)(void *frame);
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterAppType
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_APP_TYPE_SME -
- CSR_WIFI_ROUTER_APP_TYPE_PAL -
- CSR_WIFI_ROUTER_APP_TYPE_NME -
- CSR_WIFI_ROUTER_APP_TYPE_OTHER -
-
-*******************************************************************************/
-typedef u8 CsrWifiRouterAppType;
-#define CSR_WIFI_ROUTER_APP_TYPE_SME ((CsrWifiRouterAppType) 0x0)
-#define CSR_WIFI_ROUTER_APP_TYPE_PAL ((CsrWifiRouterAppType) 0x1)
-#define CSR_WIFI_ROUTER_APP_TYPE_NME ((CsrWifiRouterAppType) 0x2)
-#define CSR_WIFI_ROUTER_APP_TYPE_OTHER ((CsrWifiRouterAppType) 0x3)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterEncapsulation
-
- DESCRIPTION
- Indicates the type of encapsulation used for the subscription
-
- VALUES
- CSR_WIFI_ROUTER_ENCAPSULATION_ETHERNET
- - Ethernet encapsulation
- CSR_WIFI_ROUTER_ENCAPSULATION_LLC_SNAP
- - LLC/SNAP encapsulation
-
-*******************************************************************************/
-typedef u8 CsrWifiRouterEncapsulation;
-#define CSR_WIFI_ROUTER_ENCAPSULATION_ETHERNET ((CsrWifiRouterEncapsulation) 0x00)
-#define CSR_WIFI_ROUTER_ENCAPSULATION_LLC_SNAP ((CsrWifiRouterEncapsulation) 0x01)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterOui
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_ROUTER_OUI_RFC_1042 -
- CSR_WIFI_ROUTER_OUI_BT -
-
-*******************************************************************************/
-typedef u32 CsrWifiRouterOui;
-#define CSR_WIFI_ROUTER_OUI_RFC_1042 ((CsrWifiRouterOui) 0x000000)
-#define CSR_WIFI_ROUTER_OUI_BT ((CsrWifiRouterOui) 0x001958)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterPriority
-
- DESCRIPTION
- As defined in the IEEE 802.11 standards
-
- VALUES
- CSR_WIFI_ROUTER_PRIORITY_QOS_UP0
- - See IEEE 802.11 Standard
- CSR_WIFI_ROUTER_PRIORITY_QOS_UP1
- - See IEEE 802.11 Standard
- CSR_WIFI_ROUTER_PRIORITY_QOS_UP2
- - See IEEE 802.11 Standard
- CSR_WIFI_ROUTER_PRIORITY_QOS_UP3
- - See IEEE 802.11 Standard
- CSR_WIFI_ROUTER_PRIORITY_QOS_UP4
- - See IEEE 802.11 Standard
- CSR_WIFI_ROUTER_PRIORITY_QOS_UP5
- - See IEEE 802.11 Standard
- CSR_WIFI_ROUTER_PRIORITY_QOS_UP6
- - See IEEE 802.11 Standard
- CSR_WIFI_ROUTER_PRIORITY_QOS_UP7
- - See IEEE 802.11 Standard
- CSR_WIFI_ROUTER_PRIORITY_CONTENTION
- - See IEEE 802.11 Standard
- CSR_WIFI_ROUTER_PRIORITY_MANAGEMENT
- - See IEEE 802.11 Standard
-
-*******************************************************************************/
-typedef u16 CsrWifiRouterPriority;
-#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP0 ((CsrWifiRouterPriority) 0x0000)
-#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP1 ((CsrWifiRouterPriority) 0x0001)
-#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP2 ((CsrWifiRouterPriority) 0x0002)
-#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP3 ((CsrWifiRouterPriority) 0x0003)
-#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP4 ((CsrWifiRouterPriority) 0x0004)
-#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP5 ((CsrWifiRouterPriority) 0x0005)
-#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP6 ((CsrWifiRouterPriority) 0x0006)
-#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP7 ((CsrWifiRouterPriority) 0x0007)
-#define CSR_WIFI_ROUTER_PRIORITY_CONTENTION ((CsrWifiRouterPriority) 0x8000)
-#define CSR_WIFI_ROUTER_PRIORITY_MANAGEMENT ((CsrWifiRouterPriority) 0x8010)
-
-
-/* Downstream */
-#define CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST (0x0000)
-
-#define CSR_WIFI_ROUTER_MA_PACKET_SUBSCRIBE_REQ ((CsrWifiRouterPrim) (0x0000 + CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_MA_PACKET_UNSUBSCRIBE_REQ ((CsrWifiRouterPrim) (0x0001 + CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_MA_PACKET_REQ ((CsrWifiRouterPrim) (0x0002 + CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_MA_PACKET_RES ((CsrWifiRouterPrim) (0x0003 + CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_MA_PACKET_CANCEL_REQ ((CsrWifiRouterPrim) (0x0004 + CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST))
-
-
-#define CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_HIGHEST (0x0004 + CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST)
-
-/* Upstream */
-#define CSR_WIFI_ROUTER_PRIM_UPSTREAM_LOWEST (0x0000 + CSR_PRIM_UPSTREAM)
-
-#define CSR_WIFI_ROUTER_MA_PACKET_SUBSCRIBE_CFM ((CsrWifiRouterPrim)(0x0000 + CSR_WIFI_ROUTER_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_MA_PACKET_UNSUBSCRIBE_CFM ((CsrWifiRouterPrim)(0x0001 + CSR_WIFI_ROUTER_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_MA_PACKET_CFM ((CsrWifiRouterPrim)(0x0002 + CSR_WIFI_ROUTER_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_ROUTER_MA_PACKET_IND ((CsrWifiRouterPrim)(0x0003 + CSR_WIFI_ROUTER_PRIM_UPSTREAM_LOWEST))
-
-#define CSR_WIFI_ROUTER_PRIM_UPSTREAM_HIGHEST (0x0003 + CSR_WIFI_ROUTER_PRIM_UPSTREAM_LOWEST)
-
-#define CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_COUNT (CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_HIGHEST + 1 - CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST)
-#define CSR_WIFI_ROUTER_PRIM_UPSTREAM_COUNT (CSR_WIFI_ROUTER_PRIM_UPSTREAM_HIGHEST + 1 - CSR_WIFI_ROUTER_PRIM_UPSTREAM_LOWEST)
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketSubscribeReq
-
- DESCRIPTION
- A task can use this primitive to subscribe for a particular OUI/protocol
- and transmit and receive frames matching the subscription.
- NOTE: Multiple subscriptions for a given protocol and OUI will result in
- the first subscription receiving the data and not the subsequent
- subscriptions.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- encapsulation - Specifies the encapsulation type, which will be used for the
- subscription
- protocol - Together with the OUI, specifies the protocol, which a task
- wants to subscribe to
- oui - Specifies the OUI for the protocol, which a task wants to
- subscribe to
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiRouterEncapsulation encapsulation;
- u16 protocol;
- u32 oui;
-} CsrWifiRouterMaPacketSubscribeReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketUnsubscribeReq
-
- DESCRIPTION
- A task sends this primitive to unsubscribe a subscription
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- subscriptionHandle - The handle of the subscription
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u8 subscriptionHandle;
-} CsrWifiRouterMaPacketUnsubscribeReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketReq
-
- DESCRIPTION
- A task sends this primitive to transmit a frame.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- subscriptionHandle - The handle of the subscription
- frameLength - Length of the frame to be sent in bytes
- frame - Pointer to the frame to be sent
- freeFunction - Pointer to function to be used to free the frame
- priority - Priority of the frame, which should be sent
- hostTag - An application shall set the bits b31..b28 using one of
- the CSR_WIFI_ROUTER_APP_TYPE_* masks. Bits b0..b27 can
- be used by the requestor without any restrictions, but
- the hostTag shall be unique so the hostTag for
- CSR_WIFI_ROUTER_APP _TYPE_OTHER should be constructured
- in the following way [ CSR_WIFI_ROUTER_APP_TYPE_OTHER
- (4 bits) | SubscriptionHandle (8 bits) | Sequence no.
- (20 bits) ]. If the hostTag is not unique, the
- behaviour of the system is unpredicatable with respect
- to data/management frame transfer.
- cfmRequested - Indicates if the requestor needs a confirm for packet
- requests sent under this subscription. If set to TRUE,
- the router will send a confirm, else it will not send
- any confirm
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u8 subscriptionHandle;
- u16 frameLength;
- u8 *frame;
- CsrWifiRouterFrameFreeFunction freeFunction;
- CsrWifiRouterPriority priority;
- u32 hostTag;
- u8 cfmRequested;
-} CsrWifiRouterMaPacketReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketRes
-
- DESCRIPTION
- A task send this primitive to confirm the reception of the received
- frame.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- subscriptionHandle - The handle of the subscription
- result - Status of the operation
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u8 subscriptionHandle;
- CsrResult result;
-} CsrWifiRouterMaPacketRes;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketCancelReq
-
- DESCRIPTION
- This primitive is used to request cancellation of a previously send
- CsrWifiRouterMaPacketReq.
- The frame may already have been transmitted so there is no guarantees
- that the CsrWifiRouterMaPacketCancelReq actually cancels the transmission
- of the frame in question.
- If the cancellation fails, the Router will send, if required,
- CsrWifiRouterMaPacketCfm.
- If the cancellation succeeds, the Router will not send
- CsrWifiRouterMaPacketCfm.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- hostTag - The hostTag for the frame, which should be cancelled.
- priority - Priority of the frame, which should be cancelled
- peerMacAddress - Destination MAC address of the frame, which should be
- cancelled
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u32 hostTag;
- CsrWifiRouterPriority priority;
- CsrWifiMacAddress peerMacAddress;
-} CsrWifiRouterMaPacketCancelReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketSubscribeCfm
-
- DESCRIPTION
- The router sends this primitive to confirm the result of the
- subscription.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- subscriptionHandle - Handle to the subscription
- This handle must be used in all subsequent requests
- status - Status of the operation
- allocOffset - Size of the offset for the frames of the subscription
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u8 subscriptionHandle;
- CsrResult status;
- u16 allocOffset;
-} CsrWifiRouterMaPacketSubscribeCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketUnsubscribeCfm
-
- DESCRIPTION
- The router sends this primitive to confirm the result of the
- unsubscription.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Status of the operation
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiRouterMaPacketUnsubscribeCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketCfm
-
- DESCRIPTION
- The router sends the primitive to confirm the result of the transmission
- of the packet of the corresponding CSR_WIFI_ROUTER MA_PACKET_REQ request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- result - Status of the operation
- hostTag - The hostTrag will match the hostTag sent in the request.
- rate - Transmission/Reception rate
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult result;
- u32 hostTag;
- u16 rate;
-} CsrWifiRouterMaPacketCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiRouterMaPacketInd
-
- DESCRIPTION
- The router sends the primitive to a subscribed task when it receives a
- frame matching the subscription.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- subscriptionHandle - The handle of the subscription
- result - Status of the operation
- frameLength - Length of the received frame in bytes
- frame - Pointer to the received frame
- freeFunction - Pointer to function to be used to free the frame
- rssi - Received signal strength indication in dBm
- snr - Signal to Noise Ratio
- rate - Transmission/Reception rate
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u8 subscriptionHandle;
- CsrResult result;
- u16 frameLength;
- u8 *frame;
- CsrWifiRouterFrameFreeFunction freeFunction;
- s16 rssi;
- s16 snr;
- u16 rate;
-} CsrWifiRouterMaPacketInd;
-
-#endif /* CSR_WIFI_ROUTER_PRIM_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_router_sef.c b/drivers/staging/csr/csr_wifi_router_sef.c
deleted file mode 100644
index 45a10fb77296..000000000000
--- a/drivers/staging/csr/csr_wifi_router_sef.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- Confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
- *****************************************************************************/
-#include "csr_wifi_router_sef.h"
-
-const CsrWifiRouterStateHandlerType CsrWifiRouterDownstreamStateHandlers[CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_COUNT] =
-{
- /* 0x0000 */ CsrWifiRouterMaPacketSubscribeReqHandler,
- /* 0x0001 */ CsrWifiRouterMaPacketUnsubscribeReqHandler,
- /* 0x0002 */ CsrWifiRouterMaPacketReqHandler,
- /* 0x0003 */ CsrWifiRouterMaPacketResHandler,
- /* 0x0004 */ CsrWifiRouterMaPacketCancelReqHandler,
-};
diff --git a/drivers/staging/csr/csr_wifi_router_sef.h b/drivers/staging/csr/csr_wifi_router_sef.h
deleted file mode 100644
index 86692c7780c9..000000000000
--- a/drivers/staging/csr/csr_wifi_router_sef.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- Confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
- *****************************************************************************/
-#ifndef CSR_WIFI_ROUTER_SEF_CSR_WIFI_ROUTER_H__
-#define CSR_WIFI_ROUTER_SEF_CSR_WIFI_ROUTER_H__
-
-#include "csr_wifi_router_prim.h"
-
- typedef void (*CsrWifiRouterStateHandlerType)(void* drvpriv, CsrWifiFsmEvent* msg);
-
- extern const CsrWifiRouterStateHandlerType CsrWifiRouterDownstreamStateHandlers[CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_COUNT];
-
- extern void CsrWifiRouterMaPacketSubscribeReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterMaPacketUnsubscribeReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterMaPacketReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterMaPacketResHandler(void* drvpriv, CsrWifiFsmEvent* msg);
- extern void CsrWifiRouterMaPacketCancelReqHandler(void* drvpriv, CsrWifiFsmEvent* msg);
-
-#endif /* CSR_WIFI_ROUTER_SEF_CSR_WIFI_ROUTER_H__ */
diff --git a/drivers/staging/csr/csr_wifi_router_serialize.c b/drivers/staging/csr/csr_wifi_router_serialize.c
deleted file mode 100644
index 4eccf5d6c289..000000000000
--- a/drivers/staging/csr/csr_wifi_router_serialize.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-#include <linux/slab.h>
-#include "csr_msgconv.h"
-#include "csr_wifi_router_prim.h"
-#include "csr_wifi_router_serialize.h"
-
-void CsrWifiRouterPfree(void *ptr)
-{
- kfree(ptr);
-}
-
-
-size_t CsrWifiRouterMaPacketSubscribeReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 12) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiRouterEncapsulation primitive->encapsulation */
- bufferSize += 2; /* u16 primitive->protocol */
- bufferSize += 4; /* u32 primitive->oui */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterMaPacketSubscribeReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterMaPacketSubscribeReq *primitive = (CsrWifiRouterMaPacketSubscribeReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->encapsulation);
- CsrUint16Ser(ptr, len, (u16) primitive->protocol);
- CsrUint32Ser(ptr, len, (u32) primitive->oui);
- return(ptr);
-}
-
-
-void* CsrWifiRouterMaPacketSubscribeReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterMaPacketSubscribeReq *primitive = kmalloc(sizeof(CsrWifiRouterMaPacketSubscribeReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->encapsulation, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->protocol, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->oui, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterMaPacketReqSizeof(void *msg)
-{
- CsrWifiRouterMaPacketReq *primitive = (CsrWifiRouterMaPacketReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 20) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* u8 primitive->subscriptionHandle */
- bufferSize += 2; /* u16 primitive->frameLength */
- bufferSize += primitive->frameLength; /* u8 primitive->frame */
- bufferSize += 4; /* CsrWifiRouterFrameFreeFunction primitive->freeFunction */
- bufferSize += 2; /* CsrWifiRouterPriority primitive->priority */
- bufferSize += 4; /* u32 primitive->hostTag */
- bufferSize += 1; /* u8 primitive->cfmRequested */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterMaPacketReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterMaPacketReq *primitive = (CsrWifiRouterMaPacketReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->subscriptionHandle);
- CsrUint16Ser(ptr, len, (u16) primitive->frameLength);
- if (primitive->frameLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->frame, ((u16) (primitive->frameLength)));
- }
- CsrUint32Ser(ptr, len, 0); /* Special for Function Pointers... primitive->freeFunction */
- CsrUint16Ser(ptr, len, (u16) primitive->priority);
- CsrUint32Ser(ptr, len, (u32) primitive->hostTag);
- CsrUint8Ser(ptr, len, (u8) primitive->cfmRequested);
- return(ptr);
-}
-
-
-void* CsrWifiRouterMaPacketReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterMaPacketReq *primitive = kmalloc(sizeof(CsrWifiRouterMaPacketReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->subscriptionHandle, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->frameLength, buffer, &offset);
- if (primitive->frameLength)
- {
- primitive->frame = kmalloc(primitive->frameLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->frame, buffer, &offset, ((u16) (primitive->frameLength)));
- }
- else
- {
- primitive->frame = NULL;
- }
- primitive->freeFunction = NULL; /* Special for Function Pointers... */
- offset += 4;
- CsrUint16Des((u16 *) &primitive->priority, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->hostTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->cfmRequested, buffer, &offset);
-
- return primitive;
-}
-
-
-void CsrWifiRouterMaPacketReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterMaPacketReq *primitive = (CsrWifiRouterMaPacketReq *) voidPrimitivePointer;
- kfree(primitive->frame);
- kfree(primitive);
-}
-
-
-size_t CsrWifiRouterMaPacketResSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 8) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* u8 primitive->subscriptionHandle */
- bufferSize += 2; /* CsrResult primitive->result */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterMaPacketResSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterMaPacketRes *primitive = (CsrWifiRouterMaPacketRes *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->subscriptionHandle);
- CsrUint16Ser(ptr, len, (u16) primitive->result);
- return(ptr);
-}
-
-
-void* CsrWifiRouterMaPacketResDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterMaPacketRes *primitive = kmalloc(sizeof(CsrWifiRouterMaPacketRes), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->subscriptionHandle, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->result, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterMaPacketCancelReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 17) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 4; /* u32 primitive->hostTag */
- bufferSize += 2; /* CsrWifiRouterPriority primitive->priority */
- bufferSize += 6; /* u8 primitive->peerMacAddress.a[6] */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterMaPacketCancelReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterMaPacketCancelReq *primitive = (CsrWifiRouterMaPacketCancelReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint32Ser(ptr, len, (u32) primitive->hostTag);
- CsrUint16Ser(ptr, len, (u16) primitive->priority);
- CsrMemCpySer(ptr, len, (const void *) primitive->peerMacAddress.a, ((u16) (6)));
- return(ptr);
-}
-
-
-void* CsrWifiRouterMaPacketCancelReqDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterMaPacketCancelReq *primitive = kmalloc(sizeof(CsrWifiRouterMaPacketCancelReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->hostTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->priority, buffer, &offset);
- CsrMemCpyDes(primitive->peerMacAddress.a, buffer, &offset, ((u16) (6)));
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterMaPacketSubscribeCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 10) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* u8 primitive->subscriptionHandle */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 2; /* u16 primitive->allocOffset */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterMaPacketSubscribeCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterMaPacketSubscribeCfm *primitive = (CsrWifiRouterMaPacketSubscribeCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->subscriptionHandle);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint16Ser(ptr, len, (u16) primitive->allocOffset);
- return(ptr);
-}
-
-
-void* CsrWifiRouterMaPacketSubscribeCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterMaPacketSubscribeCfm *primitive = kmalloc(sizeof(CsrWifiRouterMaPacketSubscribeCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->subscriptionHandle, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->allocOffset, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterMaPacketUnsubscribeCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterMaPacketUnsubscribeCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterMaPacketUnsubscribeCfm *primitive = (CsrWifiRouterMaPacketUnsubscribeCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiRouterMaPacketUnsubscribeCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterMaPacketUnsubscribeCfm *primitive = kmalloc(sizeof(CsrWifiRouterMaPacketUnsubscribeCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterMaPacketCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->result */
- bufferSize += 4; /* u32 primitive->hostTag */
- bufferSize += 2; /* u16 primitive->rate */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterMaPacketCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterMaPacketCfm *primitive = (CsrWifiRouterMaPacketCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->result);
- CsrUint32Ser(ptr, len, (u32) primitive->hostTag);
- CsrUint16Ser(ptr, len, (u16) primitive->rate);
- return(ptr);
-}
-
-
-void* CsrWifiRouterMaPacketCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterMaPacketCfm *primitive = kmalloc(sizeof(CsrWifiRouterMaPacketCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->result, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->hostTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->rate, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiRouterMaPacketIndSizeof(void *msg)
-{
- CsrWifiRouterMaPacketInd *primitive = (CsrWifiRouterMaPacketInd *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 21) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* u8 primitive->subscriptionHandle */
- bufferSize += 2; /* CsrResult primitive->result */
- bufferSize += 2; /* u16 primitive->frameLength */
- bufferSize += primitive->frameLength; /* u8 primitive->frame */
- bufferSize += 4; /* CsrWifiRouterFrameFreeFunction primitive->freeFunction */
- bufferSize += 2; /* s16 primitive->rssi */
- bufferSize += 2; /* s16 primitive->snr */
- bufferSize += 2; /* u16 primitive->rate */
- return bufferSize;
-}
-
-
-u8* CsrWifiRouterMaPacketIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiRouterMaPacketInd *primitive = (CsrWifiRouterMaPacketInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->subscriptionHandle);
- CsrUint16Ser(ptr, len, (u16) primitive->result);
- CsrUint16Ser(ptr, len, (u16) primitive->frameLength);
- if (primitive->frameLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->frame, ((u16) (primitive->frameLength)));
- }
- CsrUint32Ser(ptr, len, 0); /* Special for Function Pointers... primitive->freeFunction */
- CsrUint16Ser(ptr, len, (u16) primitive->rssi);
- CsrUint16Ser(ptr, len, (u16) primitive->snr);
- CsrUint16Ser(ptr, len, (u16) primitive->rate);
- return(ptr);
-}
-
-
-void* CsrWifiRouterMaPacketIndDes(u8 *buffer, size_t length)
-{
- CsrWifiRouterMaPacketInd *primitive = kmalloc(sizeof(CsrWifiRouterMaPacketInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->subscriptionHandle, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->result, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->frameLength, buffer, &offset);
- if (primitive->frameLength)
- {
- primitive->frame = kmalloc(primitive->frameLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->frame, buffer, &offset, ((u16) (primitive->frameLength)));
- }
- else
- {
- primitive->frame = NULL;
- }
- primitive->freeFunction = NULL; /* Special for Function Pointers... */
- offset += 4;
- CsrUint16Des((u16 *) &primitive->rssi, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->snr, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->rate, buffer, &offset);
-
- return primitive;
-}
-
-
-void CsrWifiRouterMaPacketIndSerFree(void *voidPrimitivePointer)
-{
- CsrWifiRouterMaPacketInd *primitive = (CsrWifiRouterMaPacketInd *) voidPrimitivePointer;
- kfree(primitive->frame);
- kfree(primitive);
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_router_serialize.h b/drivers/staging/csr/csr_wifi_router_serialize.h
deleted file mode 100644
index 94ccdac5606f..000000000000
--- a/drivers/staging/csr/csr_wifi_router_serialize.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_ROUTER_SERIALIZE_H__
-#define CSR_WIFI_ROUTER_SERIALIZE_H__
-
-#include "csr_wifi_msgconv.h"
-#include "csr_wifi_router_prim.h"
-
-extern void CsrWifiRouterPfree(void *ptr);
-
-extern u8* CsrWifiRouterMaPacketSubscribeReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterMaPacketSubscribeReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterMaPacketSubscribeReqSizeof(void *msg);
-#define CsrWifiRouterMaPacketSubscribeReqSerFree CsrWifiRouterPfree
-
-#define CsrWifiRouterMaPacketUnsubscribeReqSer CsrWifiEventCsrUint16CsrUint8Ser
-#define CsrWifiRouterMaPacketUnsubscribeReqDes CsrWifiEventCsrUint16CsrUint8Des
-#define CsrWifiRouterMaPacketUnsubscribeReqSizeof CsrWifiEventCsrUint16CsrUint8Sizeof
-#define CsrWifiRouterMaPacketUnsubscribeReqSerFree CsrWifiRouterPfree
-
-extern u8* CsrWifiRouterMaPacketReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterMaPacketReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterMaPacketReqSizeof(void *msg);
-extern void CsrWifiRouterMaPacketReqSerFree(void *msg);
-
-extern u8* CsrWifiRouterMaPacketResSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterMaPacketResDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterMaPacketResSizeof(void *msg);
-#define CsrWifiRouterMaPacketResSerFree CsrWifiRouterPfree
-
-extern u8* CsrWifiRouterMaPacketCancelReqSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterMaPacketCancelReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterMaPacketCancelReqSizeof(void *msg);
-#define CsrWifiRouterMaPacketCancelReqSerFree CsrWifiRouterPfree
-
-extern u8* CsrWifiRouterMaPacketSubscribeCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterMaPacketSubscribeCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterMaPacketSubscribeCfmSizeof(void *msg);
-#define CsrWifiRouterMaPacketSubscribeCfmSerFree CsrWifiRouterPfree
-
-extern u8* CsrWifiRouterMaPacketUnsubscribeCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterMaPacketUnsubscribeCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterMaPacketUnsubscribeCfmSizeof(void *msg);
-#define CsrWifiRouterMaPacketUnsubscribeCfmSerFree CsrWifiRouterPfree
-
-extern u8* CsrWifiRouterMaPacketCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterMaPacketCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterMaPacketCfmSizeof(void *msg);
-#define CsrWifiRouterMaPacketCfmSerFree CsrWifiRouterPfree
-
-extern u8* CsrWifiRouterMaPacketIndSer(u8 *ptr, size_t *len, void *msg);
-extern void* CsrWifiRouterMaPacketIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiRouterMaPacketIndSizeof(void *msg);
-extern void CsrWifiRouterMaPacketIndSerFree(void *msg);
-
-#endif /* CSR_WIFI_ROUTER_SERIALIZE_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_router_task.h b/drivers/staging/csr/csr_wifi_router_task.h
deleted file mode 100644
index 9ba892f34e6d..000000000000
--- a/drivers/staging/csr/csr_wifi_router_task.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_ROUTER_TASK_H__
-#define CSR_WIFI_ROUTER_TASK_H__
-
-#include "csr_sched.h"
-
-#define CSR_WIFI_ROUTER_LOG_ID 0x1201FFFF
-extern CsrSchedQid CSR_WIFI_ROUTER_IFACEQUEUE;
-void CsrWifiRouterInit(void **gash);
-void CsrWifiRouterDeinit(void **gash);
-void CsrWifiRouterHandler(void **gash);
-
-#endif /* CSR_WIFI_ROUTER_TASK_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_router_transport.c b/drivers/staging/csr/csr_wifi_router_transport.c
deleted file mode 100644
index e905ead9389b..000000000000
--- a/drivers/staging/csr/csr_wifi_router_transport.c
+++ /dev/null
@@ -1,199 +0,0 @@
-/** @file router_transport.c
- *
- *
- * Copyright (C) Cambridge Silicon Radio Ltd 2006-2010. All rights reserved.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- ****************************************************************************/
-
-#include "unifi_priv.h"
-
-#include "csr_sched.h"
-#include "csr_msgconv.h"
-
-#include "sme_userspace.h"
-
-#include "csr_wifi_hostio_prim.h"
-#include "csr_wifi_router_lib.h"
-#include "csr_wifi_router_sef.h"
-#include "csr_wifi_router_converter_init.h"
-#include "csr_wifi_router_ctrl_lib.h"
-#include "csr_wifi_router_ctrl_sef.h"
-#include "csr_wifi_router_ctrl_converter_init.h"
-#include "csr_wifi_sme_prim.h"
-#include "csr_wifi_sme_sef.h"
-#include "csr_wifi_sme_converter_init.h"
-#ifdef CSR_SUPPORT_WEXT
-#ifdef CSR_SUPPORT_WEXT_AP
-#include "csr_wifi_nme_ap_prim.h"
-#include "csr_wifi_nme_ap_sef.h"
-#include "csr_wifi_nme_ap_converter_init.h"
-#endif
-#endif
-
-static unifi_priv_t *drvpriv = NULL;
-void CsrWifiRouterTransportInit(unifi_priv_t *priv)
-{
- unifi_trace(priv, UDBG1, "CsrWifiRouterTransportInit: \n");
-
- drvpriv = priv;
- (void)CsrMsgConvInit();
- CsrWifiRouterConverterInit();
- CsrWifiRouterCtrlConverterInit();
- CsrWifiSmeConverterInit();
-#ifdef CSR_SUPPORT_WEXT
-#ifdef CSR_SUPPORT_WEXT_AP
- CsrWifiNmeApConverterInit();
-#endif
-#endif
-}
-
-void CsrWifiRouterTransportRecv(unifi_priv_t *priv, u8* buffer, size_t bufferLength)
-{
- CsrMsgConvMsgEntry* msgEntry;
- u16 primType;
- CsrSchedQid src;
- CsrSchedQid dest;
- u16 msgType;
- size_t offset = 0;
- CsrWifiFsmEvent* msg;
-
- /* Decode the prim and message type */
- CsrUint16Des(&primType, buffer, &offset);
- CsrUint16Des(&src, buffer, &offset);
- CsrUint16Des(&dest, buffer, &offset);
- CsrUint16Des(&msgType, buffer, &offset);
- offset -= 2; /* Adjust as the Deserialise Function will read this as well */
-
- unifi_trace(priv, UDBG4, "CsrWifiRouterTransportRecv: primType=0x%.4X, msgType=0x%.4X, bufferLength=%d\n",
- primType, msgType, bufferLength);
-
- /* Special handling for HOSTIO messages.... */
- if (primType == CSR_WIFI_HOSTIO_PRIM)
- {
- CsrWifiRouterCtrlHipReq req = {{CSR_WIFI_ROUTER_CTRL_HIP_REQ, CSR_WIFI_ROUTER_CTRL_PRIM, dest, src, NULL}, 0, NULL, 0, NULL, 0, NULL};
-
- req.mlmeCommandLength = bufferLength;
- req.mlmeCommand = buffer;
-
- offset += 8;/* Skip the id, src, dest and slot number */
- CsrUint16Des(&req.dataRef1Length, buffer, &offset);
- offset += 2; /* Skip the slot number */
- CsrUint16Des(&req.dataRef2Length, buffer, &offset);
-
- if (req.dataRef1Length)
- {
- u16 dr1Offset = (bufferLength - req.dataRef2Length) - req.dataRef1Length;
- req.dataRef1 = &buffer[dr1Offset];
- }
-
- if (req.dataRef2Length)
- {
- u16 dr2Offset = bufferLength - req.dataRef2Length;
- req.dataRef2 = &buffer[dr2Offset];
- }
-
- /* Copy the hip data but strip off the prim type */
- req.mlmeCommandLength -= (req.dataRef1Length + req.dataRef2Length + 6);
- req.mlmeCommand = &buffer[6];
-
- CsrWifiRouterCtrlHipReqHandler(priv, &req.common);
- return;
- }
-
- msgEntry = CsrMsgConvFindEntry(primType, msgType);
- if (!msgEntry)
- {
- unifi_error(priv, "CsrWifiRouterTransportDeserialiseAndSend can not process the message. primType=0x%.4X, msgType=0x%.4X\n",
- primType, msgType);
- dump(buffer, bufferLength);
- return;
- }
-
- msg = (CsrWifiFsmEvent*)(msgEntry->deserFunc)(&buffer[offset], bufferLength - offset);
-
- msg->primtype = primType;
- msg->type = msgType;
- msg->source = src;
- msg->destination = dest;
-
- switch(primType)
- {
- case CSR_WIFI_ROUTER_CTRL_PRIM:
- CsrWifiRouterCtrlDownstreamStateHandlers[msg->type - CSR_WIFI_ROUTER_CTRL_PRIM_DOWNSTREAM_LOWEST](priv, msg);
- CsrWifiRouterCtrlFreeDownstreamMessageContents(CSR_WIFI_ROUTER_CTRL_PRIM, msg);
- break;
- case CSR_WIFI_ROUTER_PRIM:
- CsrWifiRouterDownstreamStateHandlers[msg->type - CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST](priv, msg);
- CsrWifiRouterFreeDownstreamMessageContents(CSR_WIFI_ROUTER_PRIM, msg);
- break;
- case CSR_WIFI_SME_PRIM:
- CsrWifiSmeUpstreamStateHandlers[msg->type - CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST](priv, msg);
- CsrWifiSmeFreeUpstreamMessageContents(CSR_WIFI_SME_PRIM, msg);
- break;
-#ifdef CSR_SUPPORT_WEXT
-#ifdef CSR_SUPPORT_WEXT_AP
- case CSR_WIFI_NME_AP_PRIM:
- CsrWifiNmeApUpstreamStateHandlers(priv, msg);
- CsrWifiNmeApFreeUpstreamMessageContents(CSR_WIFI_NME_AP_PRIM, msg);
- break;
-#endif
-#endif
- default:
- unifi_error(priv, "CsrWifiRouterTransportDeserialiseAndSend unhandled prim type 0x%.4X\n", primType);
- break;
- }
- kfree(msg);
-}
-
-static void CsrWifiRouterTransportSerialiseAndSend(u16 primType, void* msg)
-{
- CsrWifiFsmEvent* evt = (CsrWifiFsmEvent*)msg;
- CsrMsgConvMsgEntry* msgEntry;
- size_t msgSize;
- size_t encodeBufferLen = 0;
- size_t offset = 0;
- u8* encodeBuffer;
-
- unifi_trace(drvpriv, UDBG4, "CsrWifiRouterTransportSerialiseAndSend: primType=0x%.4X, msgType=0x%.4X\n",
- primType, evt->type);
-
- msgEntry = CsrMsgConvFindEntry(primType, evt->type);
- if (!msgEntry)
- {
- unifi_error(drvpriv, "CsrWifiRouterTransportSerialiseAndSend can not process the message. primType=0x%.4X, msgType=0x%.4X\n",
- primType, evt->type);
- return;
- }
-
- msgSize = 6 + (msgEntry->sizeofFunc)((void*)msg);
-
- encodeBuffer = kmalloc(msgSize, GFP_KERNEL);
-
- /* Encode PrimType */
- CsrUint16Ser(encodeBuffer, &encodeBufferLen, primType);
- CsrUint16Ser(encodeBuffer, &encodeBufferLen, evt->source);
- CsrUint16Ser(encodeBuffer, &encodeBufferLen, evt->destination);
-
- (void)(msgEntry->serFunc)(&encodeBuffer[encodeBufferLen], &offset, msg);
- encodeBufferLen += offset;
-
- uf_sme_queue_message(drvpriv, encodeBuffer, encodeBufferLen);
-
- /* Do not use msgEntry->freeFunc because the memory is owned by the driver */
- kfree(msg);
-}
-
-#if defined(CSR_LOG_ENABLE) && defined(CSR_LOG_INCLUDE_FILE_NAME_AND_LINE_NUMBER)
-void CsrSchedMessagePutStringLog(CsrSchedQid q, u16 mi, void *mv, u32 line, char *file)
-#else
-void CsrSchedMessagePut(CsrSchedQid q, u16 mi, void *mv)
-#endif
-{
- CsrWifiFsmEvent* evt = (CsrWifiFsmEvent*)mv;
- evt->destination = q;
- CsrWifiRouterTransportSerialiseAndSend(mi, mv);
-}
-
diff --git a/drivers/staging/csr/csr_wifi_serialize_primitive_types.c b/drivers/staging/csr/csr_wifi_serialize_primitive_types.c
deleted file mode 100644
index dd93d0061190..000000000000
--- a/drivers/staging/csr/csr_wifi_serialize_primitive_types.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#include <linux/module.h>
-#include <linux/slab.h>
-#include "csr_macro.h"
-#include "csr_msgconv.h"
-#include "csr_wifi_msgconv.h"
-#include "csr_wifi_lib.h"
-
-void CsrUint24Des(u32 *v, u8 *buffer, size_t *offset)
-{
- u32 val;
-
- val = ((buffer[(*offset) + 2] << 16) |
- (buffer[(*offset) + 1] << 8) |
- (buffer[(*offset)]));
-
- *offset += 3;
- *v = val;
-}
-
-
-/* Big endian :e.g WSC, TCLAS */
-void CsrUint16DesBigEndian(u16 *v, u8 *buffer, size_t *offset)
-{
- u16 val;
-
- val = (buffer[(*offset)] << 8) | (buffer[(*offset) + 1]);
- *offset += 2;
-
- *v = val;
-}
-
-
-void CsrUint24DesBigEndian(u32 *v, u8 *buffer, size_t *offset)
-{
- u32 val;
-
- val = ((buffer[(*offset)] << 16) |
- (buffer[(*offset) + 1] << 8) |
- (buffer[(*offset) + 2]));
-
- *offset += 3;
- *v = val;
-}
-
-
-void CsrUint32DesBigEndian(u32 *v, u8 *buffer, size_t *offset)
-{
- u32 val;
-
- val = ((buffer[(*offset)] << 24) |
- (buffer[(*offset) + 1] << 16) |
- (buffer[(*offset) + 2] << 8) |
- (buffer[(*offset) + 3]));
-
- *offset += 4;
- *v = val;
-}
-
-
-void CsrUint24Ser(u8 *ptr, size_t *len, u32 v)
-{
- ptr[(*len) + 2] = (u8)((v & 0x00ff0000) >> 16);
- ptr[(*len) + 1] = (u8)((v & 0x0000ff00) >> 8);
- ptr[(*len)] = (u8)((v & 0x000000ff));
-
- *len += 3;
-}
-
-
-/* Big endian :e.g WSC, TCLAS */
-void CsrUint16SerBigEndian(u8 *ptr, size_t *len, u16 v)
-{
- ptr[(*len)] = (u8)((v & 0xff00) >> 8);
- ptr[(*len) + 1] = (u8)((v & 0x00ff));
-
- *len += 2;
-}
-
-
-void CsrUint32SerBigEndian(u8 *ptr, size_t *len, u32 v)
-{
- ptr[(*len)] = (u8)((v & 0xff000000) >> 24);
- ptr[(*len) + 1] = (u8)((v & 0x00ff0000) >> 16);
- ptr[(*len) + 2] = (u8)((v & 0x0000ff00) >> 8);
- ptr[(*len) + 3] = (u8)((v & 0x000000ff));
-
- *len += 4;
-}
-
-
-void CsrUint24SerBigEndian(u8 *ptr, size_t *len, u32 v)
-{
- ptr[(*len)] = (u8)((v & 0x00ff0000) >> 16);
- ptr[(*len) + 1] = (u8)((v & 0x0000ff00) >> 8);
- ptr[(*len) + 2] = (u8)((v & 0x000000ff));
-
- *len += 3;
-}
-
-
-size_t CsrWifiEventSizeof(void *msg)
-{
- return 2;
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventSizeof);
-
-u8* CsrWifiEventSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiFsmEvent *primitive = (CsrWifiFsmEvent *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->type);
- return(ptr);
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventSer);
-
-void* CsrWifiEventDes(u8 *buffer, size_t length)
-{
- CsrWifiFsmEvent *primitive = kmalloc(sizeof(CsrWifiFsmEvent), GFP_KERNEL);
- size_t offset = 0;
- CsrUint16Des(&primitive->type, buffer, &offset);
-
- return primitive;
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventDes);
-
-size_t CsrWifiEventCsrUint8Sizeof(void *msg)
-{
- return 3;
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint8Sizeof);
-
-u8* CsrWifiEventCsrUint8Ser(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiEventCsrUint8 *primitive = (CsrWifiEventCsrUint8 *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint8Ser(ptr, len, primitive->value);
- return(ptr);
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint8Ser);
-
-
-void* CsrWifiEventCsrUint8Des(u8 *buffer, size_t length)
-{
- CsrWifiEventCsrUint8 *primitive = kmalloc(sizeof(CsrWifiEventCsrUint8), GFP_KERNEL);
-
- size_t offset = 0;
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint8Des(&primitive->value, buffer, &offset);
-
- return primitive;
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint8Des);
-
-
-size_t CsrWifiEventCsrUint16Sizeof(void *msg)
-{
- return 4;
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16Sizeof);
-
-
-u8* CsrWifiEventCsrUint16Ser(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiEventCsrUint16 *primitive = (CsrWifiEventCsrUint16 *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, primitive->value);
- return(ptr);
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16Ser);
-
-void* CsrWifiEventCsrUint16Des(u8 *buffer, size_t length)
-{
- CsrWifiEventCsrUint16 *primitive = kmalloc(sizeof(CsrWifiEventCsrUint16), GFP_KERNEL);
-
- size_t offset = 0;
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des(&primitive->value, buffer, &offset);
-
- return primitive;
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16Des);
-
-
-size_t CsrWifiEventCsrUint32Sizeof(void *msg)
-{
- return 6;
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint32Sizeof);
-
-u8* CsrWifiEventCsrUint32Ser(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiEventCsrUint32 *primitive = (CsrWifiEventCsrUint32 *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint32Ser(ptr, len, primitive->value);
- return(ptr);
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint32Ser);
-
-
-void* CsrWifiEventCsrUint32Des(u8 *buffer, size_t length)
-{
- CsrWifiEventCsrUint32 *primitive = kmalloc(sizeof(CsrWifiEventCsrUint32), GFP_KERNEL);
-
- size_t offset = 0;
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint32Des(&primitive->value, buffer, &offset);
-
- return primitive;
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint32Des);
-
-size_t CsrWifiEventCsrUint16CsrUint8Sizeof(void *msg)
-{
- return 5;
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16CsrUint8Sizeof);
-
-u8* CsrWifiEventCsrUint16CsrUint8Ser(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiEventCsrUint16CsrUint8 *primitive = (CsrWifiEventCsrUint16CsrUint8 *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, primitive->value16);
- CsrUint8Ser(ptr, len, primitive->value8);
- return(ptr);
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16CsrUint8Ser);
-
-
-void* CsrWifiEventCsrUint16CsrUint8Des(u8 *buffer, size_t length)
-{
- CsrWifiEventCsrUint16CsrUint8 *primitive = kmalloc(sizeof(CsrWifiEventCsrUint16CsrUint8), GFP_KERNEL);
-
- size_t offset = 0;
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des(&primitive->value16, buffer, &offset);
- CsrUint8Des(&primitive->value8, buffer, &offset);
-
- return primitive;
-}
-EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16CsrUint8Des);
-
-
diff --git a/drivers/staging/csr/csr_wifi_sme_ap_lib.h b/drivers/staging/csr/csr_wifi_sme_ap_lib.h
deleted file mode 100644
index 48ea9143f591..000000000000
--- a/drivers/staging/csr/csr_wifi_sme_ap_lib.h
+++ /dev/null
@@ -1,774 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_SME_AP_LIB_H__
-#define CSR_WIFI_SME_AP_LIB_H__
-
-#include "csr_sched.h"
-#include "csr_macro.h"
-#include "csr_msg_transport.h"
-
-#include "csr_wifi_lib.h"
-
-#include "csr_wifi_sme_ap_prim.h"
-#include "csr_wifi_sme_task.h"
-
-#ifndef CSR_WIFI_AP_ENABLE
-#error CSR_WIFI_AP_ENABLE MUST be defined inorder to use csr_wifi_sme_ap_lib.h
-#endif
-
-/*----------------------------------------------------------------------------*
- * CsrWifiSmeApFreeUpstreamMessageContents
- *
- * DESCRIPTION
- * Free the allocated memory in a CSR_WIFI_SME_AP upstream message. Does not
- * free the message itself, and can only be used for upstream messages.
- *
- * PARAMETERS
- * Deallocates the resources in a CSR_WIFI_SME_AP upstream message
- *----------------------------------------------------------------------------*/
-void CsrWifiSmeApFreeUpstreamMessageContents(u16 eventClass, void *message);
-
-/*----------------------------------------------------------------------------*
- * CsrWifiSmeApFreeDownstreamMessageContents
- *
- * DESCRIPTION
- * Free the allocated memory in a CSR_WIFI_SME_AP downstream message. Does not
- * free the message itself, and can only be used for downstream messages.
- *
- * PARAMETERS
- * Deallocates the resources in a CSR_WIFI_SME_AP downstream message
- *----------------------------------------------------------------------------*/
-void CsrWifiSmeApFreeDownstreamMessageContents(u16 eventClass, void *message);
-
-/*----------------------------------------------------------------------------*
- * Enum to string functions
- *----------------------------------------------------------------------------*/
-const char* CsrWifiSmeApAccessTypeToString(CsrWifiSmeApAccessType value);
-const char* CsrWifiSmeApAuthSupportToString(CsrWifiSmeApAuthSupport value);
-const char* CsrWifiSmeApAuthTypeToString(CsrWifiSmeApAuthType value);
-const char* CsrWifiSmeApDirectionToString(CsrWifiSmeApDirection value);
-const char* CsrWifiSmeApPhySupportToString(CsrWifiSmeApPhySupport value);
-const char* CsrWifiSmeApTypeToString(CsrWifiSmeApType value);
-
-
-/*----------------------------------------------------------------------------*
- * CsrPrim Type toString function.
- * Converts a message type to the String name of the Message
- *----------------------------------------------------------------------------*/
-const char* CsrWifiSmeApPrimTypeToString(CsrPrim msgType);
-
-/*----------------------------------------------------------------------------*
- * Lookup arrays for PrimType name Strings
- *----------------------------------------------------------------------------*/
-extern const char *CsrWifiSmeApUpstreamPrimNames[CSR_WIFI_SME_AP_PRIM_UPSTREAM_COUNT];
-extern const char *CsrWifiSmeApDownstreamPrimNames[CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_COUNT];
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApActiveBaGetReqSend
-
- DESCRIPTION
- This primitive used to retrieve information related to the active block
- ack sessions
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
-
-*******************************************************************************/
-#define CsrWifiSmeApActiveBaGetReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApActiveBaGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_ACTIVE_BA_GET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiSmeApActiveBaGetReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiSmeApActiveBaGetReq *msg__; \
- CsrWifiSmeApActiveBaGetReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApActiveBaGetReqSend(src__, interfaceTag__) \
- CsrWifiSmeApActiveBaGetReqSendTo(CSR_WIFI_SME_IFACEQUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApActiveBaGetCfmSend
-
- DESCRIPTION
- This primitive carries the information related to the active ba sessions
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag -
- status - Reports the result of the request
- activeBaCount - Number of active block ack session
- activeBaSessions - Points to a buffer containing an array of
- CsrWifiSmeApBaSession structures.
-
-*******************************************************************************/
-#define CsrWifiSmeApActiveBaGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, activeBaCount__, activeBaSessions__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApActiveBaGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_ACTIVE_BA_GET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->activeBaCount = (activeBaCount__); \
- msg__->activeBaSessions = (activeBaSessions__);
-
-#define CsrWifiSmeApActiveBaGetCfmSendTo(dst__, src__, interfaceTag__, status__, activeBaCount__, activeBaSessions__) \
- { \
- CsrWifiSmeApActiveBaGetCfm *msg__; \
- CsrWifiSmeApActiveBaGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, activeBaCount__, activeBaSessions__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApActiveBaGetCfmSend(dst__, interfaceTag__, status__, activeBaCount__, activeBaSessions__) \
- CsrWifiSmeApActiveBaGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, activeBaCount__, activeBaSessions__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApBaDeleteReqSend
-
- DESCRIPTION
- This primitive is used to delete an active block ack session
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- reason -
- baSession - BA session to be deleted
-
-*******************************************************************************/
-#define CsrWifiSmeApBaDeleteReqCreate(msg__, dst__, src__, interfaceTag__, reason__, baSession__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApBaDeleteReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_BA_DELETE_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->reason = (reason__); \
- msg__->baSession = (baSession__);
-
-#define CsrWifiSmeApBaDeleteReqSendTo(dst__, src__, interfaceTag__, reason__, baSession__) \
- { \
- CsrWifiSmeApBaDeleteReq *msg__; \
- CsrWifiSmeApBaDeleteReqCreate(msg__, dst__, src__, interfaceTag__, reason__, baSession__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApBaDeleteReqSend(src__, interfaceTag__, reason__, baSession__) \
- CsrWifiSmeApBaDeleteReqSendTo(CSR_WIFI_SME_IFACEQUEUE, src__, interfaceTag__, reason__, baSession__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApBaDeleteCfmSend
-
- DESCRIPTION
- This primitive confirms the BA is deleted
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag -
- status - Reports the result of the request
- baSession - deleted BA session
-
-*******************************************************************************/
-#define CsrWifiSmeApBaDeleteCfmCreate(msg__, dst__, src__, interfaceTag__, status__, baSession__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApBaDeleteCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_BA_DELETE_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->baSession = (baSession__);
-
-#define CsrWifiSmeApBaDeleteCfmSendTo(dst__, src__, interfaceTag__, status__, baSession__) \
- { \
- CsrWifiSmeApBaDeleteCfm *msg__; \
- CsrWifiSmeApBaDeleteCfmCreate(msg__, dst__, src__, interfaceTag__, status__, baSession__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApBaDeleteCfmSend(dst__, interfaceTag__, status__, baSession__) \
- CsrWifiSmeApBaDeleteCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, baSession__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApBeaconingStartReqSend
-
- DESCRIPTION
- This primitive requests the SME to start AP or GO functionality
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- initialPresence - Set to 0, if Not in a group fomration phase, set to 1 ,
- during group formation phase
- apType - apType : Legacy AP or P2PGO
- cloakSsid - cloakSsid flag.
- ssid - ssid.
- ifIndex - Radio Interface
- channel - channel.
- maxConnections - Maximum Stations + P2PClients allowed
- apCredentials - AP security credeitals used to advertise in beacon /probe
- response
- smeApConfig - AP configuration
- p2pGoParam - P2P specific GO parameters. Ignored if it is a leagacy AP
-
-*******************************************************************************/
-#define CsrWifiSmeApBeaconingStartReqCreate(msg__, dst__, src__, interfaceTag__, initialPresence__, apType__, cloakSsid__, ssid__, ifIndex__, channel__, maxConnections__, apCredentials__, smeApConfig__, p2pGoParam__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApBeaconingStartReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_BEACONING_START_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->initialPresence = (initialPresence__); \
- msg__->apType = (apType__); \
- msg__->cloakSsid = (cloakSsid__); \
- msg__->ssid = (ssid__); \
- msg__->ifIndex = (ifIndex__); \
- msg__->channel = (channel__); \
- msg__->maxConnections = (maxConnections__); \
- msg__->apCredentials = (apCredentials__); \
- msg__->smeApConfig = (smeApConfig__); \
- msg__->p2pGoParam = (p2pGoParam__);
-
-#define CsrWifiSmeApBeaconingStartReqSendTo(dst__, src__, interfaceTag__, initialPresence__, apType__, cloakSsid__, ssid__, ifIndex__, channel__, maxConnections__, apCredentials__, smeApConfig__, p2pGoParam__) \
- { \
- CsrWifiSmeApBeaconingStartReq *msg__; \
- CsrWifiSmeApBeaconingStartReqCreate(msg__, dst__, src__, interfaceTag__, initialPresence__, apType__, cloakSsid__, ssid__, ifIndex__, channel__, maxConnections__, apCredentials__, smeApConfig__, p2pGoParam__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApBeaconingStartReqSend(src__, interfaceTag__, initialPresence__, apType__, cloakSsid__, ssid__, ifIndex__, channel__, maxConnections__, apCredentials__, smeApConfig__, p2pGoParam__) \
- CsrWifiSmeApBeaconingStartReqSendTo(CSR_WIFI_SME_IFACEQUEUE, src__, interfaceTag__, initialPresence__, apType__, cloakSsid__, ssid__, ifIndex__, channel__, maxConnections__, apCredentials__, smeApConfig__, p2pGoParam__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApBeaconingStartCfmSend
-
- DESCRIPTION
- This primitive confirms the completion of the request along with the
- status
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag -
- status -
- secIeLength -
- secIe -
-
-*******************************************************************************/
-#define CsrWifiSmeApBeaconingStartCfmCreate(msg__, dst__, src__, interfaceTag__, status__, secIeLength__, secIe__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApBeaconingStartCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_BEACONING_START_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->secIeLength = (secIeLength__); \
- msg__->secIe = (secIe__);
-
-#define CsrWifiSmeApBeaconingStartCfmSendTo(dst__, src__, interfaceTag__, status__, secIeLength__, secIe__) \
- { \
- CsrWifiSmeApBeaconingStartCfm *msg__; \
- CsrWifiSmeApBeaconingStartCfmCreate(msg__, dst__, src__, interfaceTag__, status__, secIeLength__, secIe__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApBeaconingStartCfmSend(dst__, interfaceTag__, status__, secIeLength__, secIe__) \
- CsrWifiSmeApBeaconingStartCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, secIeLength__, secIe__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApBeaconingStopReqSend
-
- DESCRIPTION
- This primitive requests the SME to STOP AP or P2PGO operation
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
-
-*******************************************************************************/
-#define CsrWifiSmeApBeaconingStopReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApBeaconingStopReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_BEACONING_STOP_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiSmeApBeaconingStopReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiSmeApBeaconingStopReq *msg__; \
- CsrWifiSmeApBeaconingStopReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApBeaconingStopReqSend(src__, interfaceTag__) \
- CsrWifiSmeApBeaconingStopReqSendTo(CSR_WIFI_SME_IFACEQUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApBeaconingStopCfmSend
-
- DESCRIPTION
- This primitive confirms AP or P2PGO operation is terminated
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag -
- status -
-
-*******************************************************************************/
-#define CsrWifiSmeApBeaconingStopCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApBeaconingStopCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_BEACONING_STOP_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeApBeaconingStopCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiSmeApBeaconingStopCfm *msg__; \
- CsrWifiSmeApBeaconingStopCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApBeaconingStopCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiSmeApBeaconingStopCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApErrorIndSend
-
- DESCRIPTION
- This primitve is sent by SME to indicate some error in AP operationi
- after AP operations were started successfully and continuing the AP
- operation may lead to undesired behaviour. It is the responsibility of
- the upper layers to stop AP operation if needed
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Range 0-1
- apType -
- status - Contains the error status
-
-*******************************************************************************/
-#define CsrWifiSmeApErrorIndCreate(msg__, dst__, src__, interfaceTag__, apType__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApErrorInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_ERROR_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->apType = (apType__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeApErrorIndSendTo(dst__, src__, interfaceTag__, apType__, status__) \
- { \
- CsrWifiSmeApErrorInd *msg__; \
- CsrWifiSmeApErrorIndCreate(msg__, dst__, src__, interfaceTag__, apType__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApErrorIndSend(dst__, interfaceTag__, apType__, status__) \
- CsrWifiSmeApErrorIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, apType__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApStaConnectStartIndSend
-
- DESCRIPTION
- This primitive indicates that a stations request to join the group/BSS is
- accepted
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag -
- peerMacAddress -
-
-*******************************************************************************/
-#define CsrWifiSmeApStaConnectStartIndCreate(msg__, dst__, src__, interfaceTag__, peerMacAddress__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApStaConnectStartInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_STA_CONNECT_START_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->peerMacAddress = (peerMacAddress__);
-
-#define CsrWifiSmeApStaConnectStartIndSendTo(dst__, src__, interfaceTag__, peerMacAddress__) \
- { \
- CsrWifiSmeApStaConnectStartInd *msg__; \
- CsrWifiSmeApStaConnectStartIndCreate(msg__, dst__, src__, interfaceTag__, peerMacAddress__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApStaConnectStartIndSend(dst__, interfaceTag__, peerMacAddress__) \
- CsrWifiSmeApStaConnectStartIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, peerMacAddress__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApStaDisconnectReqSend
-
- DESCRIPTION
- This primitive tells SME to deauth ot disassociate a particular station
- within BSS
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- deauthReason -
- disassocReason -
- peerMacaddress -
- keepBlocking - If TRUE, the station is blocked. If FALSE and the station
- is connected, disconnect the station. If FALSE and the
- station is not connected, no action is taken.
-
-*******************************************************************************/
-#define CsrWifiSmeApStaDisconnectReqCreate(msg__, dst__, src__, interfaceTag__, deauthReason__, disassocReason__, peerMacaddress__, keepBlocking__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApStaDisconnectReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_STA_DISCONNECT_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->deauthReason = (deauthReason__); \
- msg__->disassocReason = (disassocReason__); \
- msg__->peerMacaddress = (peerMacaddress__); \
- msg__->keepBlocking = (keepBlocking__);
-
-#define CsrWifiSmeApStaDisconnectReqSendTo(dst__, src__, interfaceTag__, deauthReason__, disassocReason__, peerMacaddress__, keepBlocking__) \
- { \
- CsrWifiSmeApStaDisconnectReq *msg__; \
- CsrWifiSmeApStaDisconnectReqCreate(msg__, dst__, src__, interfaceTag__, deauthReason__, disassocReason__, peerMacaddress__, keepBlocking__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApStaDisconnectReqSend(src__, interfaceTag__, deauthReason__, disassocReason__, peerMacaddress__, keepBlocking__) \
- CsrWifiSmeApStaDisconnectReqSendTo(CSR_WIFI_SME_IFACEQUEUE, src__, interfaceTag__, deauthReason__, disassocReason__, peerMacaddress__, keepBlocking__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApStaDisconnectCfmSend
-
- DESCRIPTION
- This primitive confirms the station is disconnected
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag -
- status -
- peerMacaddress -
-
-*******************************************************************************/
-#define CsrWifiSmeApStaDisconnectCfmCreate(msg__, dst__, src__, interfaceTag__, status__, peerMacaddress__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApStaDisconnectCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_STA_DISCONNECT_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->peerMacaddress = (peerMacaddress__);
-
-#define CsrWifiSmeApStaDisconnectCfmSendTo(dst__, src__, interfaceTag__, status__, peerMacaddress__) \
- { \
- CsrWifiSmeApStaDisconnectCfm *msg__; \
- CsrWifiSmeApStaDisconnectCfmCreate(msg__, dst__, src__, interfaceTag__, status__, peerMacaddress__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApStaDisconnectCfmSend(dst__, interfaceTag__, status__, peerMacaddress__) \
- CsrWifiSmeApStaDisconnectCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, peerMacaddress__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApStaNotifyIndSend
-
- DESCRIPTION
- This primitive indicates that a station has joined or a previously joined
- station has left the BSS/group
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag -
- mediaStatus -
- peerMacAddress -
- peerDeviceAddress -
- disassocReason -
- deauthReason -
- WpsRegistration -
- secIeLength -
- secIe -
- groupKeyId -
- seqNumber -
-
-*******************************************************************************/
-#define CsrWifiSmeApStaNotifyIndCreate(msg__, dst__, src__, interfaceTag__, mediaStatus__, peerMacAddress__, peerDeviceAddress__, disassocReason__, deauthReason__, WpsRegistration__, secIeLength__, secIe__, groupKeyId__, seqNumber__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApStaNotifyInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_STA_NOTIFY_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->mediaStatus = (mediaStatus__); \
- msg__->peerMacAddress = (peerMacAddress__); \
- msg__->peerDeviceAddress = (peerDeviceAddress__); \
- msg__->disassocReason = (disassocReason__); \
- msg__->deauthReason = (deauthReason__); \
- msg__->WpsRegistration = (WpsRegistration__); \
- msg__->secIeLength = (secIeLength__); \
- msg__->secIe = (secIe__); \
- msg__->groupKeyId = (groupKeyId__); \
- memcpy(msg__->seqNumber, (seqNumber__), sizeof(u16) * 8);
-
-#define CsrWifiSmeApStaNotifyIndSendTo(dst__, src__, interfaceTag__, mediaStatus__, peerMacAddress__, peerDeviceAddress__, disassocReason__, deauthReason__, WpsRegistration__, secIeLength__, secIe__, groupKeyId__, seqNumber__) \
- { \
- CsrWifiSmeApStaNotifyInd *msg__; \
- CsrWifiSmeApStaNotifyIndCreate(msg__, dst__, src__, interfaceTag__, mediaStatus__, peerMacAddress__, peerDeviceAddress__, disassocReason__, deauthReason__, WpsRegistration__, secIeLength__, secIe__, groupKeyId__, seqNumber__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApStaNotifyIndSend(dst__, interfaceTag__, mediaStatus__, peerMacAddress__, peerDeviceAddress__, disassocReason__, deauthReason__, WpsRegistration__, secIeLength__, secIe__, groupKeyId__, seqNumber__) \
- CsrWifiSmeApStaNotifyIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, mediaStatus__, peerMacAddress__, peerDeviceAddress__, disassocReason__, deauthReason__, WpsRegistration__, secIeLength__, secIe__, groupKeyId__, seqNumber__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWmmParamUpdateReqSend
-
- DESCRIPTION
- Application uses this primitive to update the WMM parameters on the fly
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- wmmApParams - WMM parameters to be used for local firmware queue
- configuration
- wmmApBcParams - WMM parameters to be advertised in beacon/probe response
-
-*******************************************************************************/
-#define CsrWifiSmeApWmmParamUpdateReqCreate(msg__, dst__, src__, interfaceTag__, wmmApParams__, wmmApBcParams__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApWmmParamUpdateReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_WMM_PARAM_UPDATE_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- memcpy(msg__->wmmApParams, (wmmApParams__), sizeof(CsrWifiSmeWmmAcParams) * 4); \
- memcpy(msg__->wmmApBcParams, (wmmApBcParams__), sizeof(CsrWifiSmeWmmAcParams) * 4);
-
-#define CsrWifiSmeApWmmParamUpdateReqSendTo(dst__, src__, interfaceTag__, wmmApParams__, wmmApBcParams__) \
- { \
- CsrWifiSmeApWmmParamUpdateReq *msg__; \
- CsrWifiSmeApWmmParamUpdateReqCreate(msg__, dst__, src__, interfaceTag__, wmmApParams__, wmmApBcParams__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApWmmParamUpdateReqSend(src__, interfaceTag__, wmmApParams__, wmmApBcParams__) \
- CsrWifiSmeApWmmParamUpdateReqSendTo(CSR_WIFI_SME_IFACEQUEUE, src__, interfaceTag__, wmmApParams__, wmmApBcParams__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWmmParamUpdateCfmSend
-
- DESCRIPTION
- A confirm for CSR_WIFI_SME_AP_WMM_PARAM_UPDATE.request
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag -
- status -
-
-*******************************************************************************/
-#define CsrWifiSmeApWmmParamUpdateCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApWmmParamUpdateCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_WMM_PARAM_UPDATE_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeApWmmParamUpdateCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiSmeApWmmParamUpdateCfm *msg__; \
- CsrWifiSmeApWmmParamUpdateCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApWmmParamUpdateCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiSmeApWmmParamUpdateCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWpsConfigurationReqSend
-
- DESCRIPTION
- This primitive passes the WPS information for the device to SME. This may
- be accepted only if no interface is active.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- wpsConfig - WPS config.
-
-*******************************************************************************/
-#define CsrWifiSmeApWpsConfigurationReqCreate(msg__, dst__, src__, wpsConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApWpsConfigurationReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_WPS_CONFIGURATION_REQ, dst__, src__); \
- msg__->wpsConfig = (wpsConfig__);
-
-#define CsrWifiSmeApWpsConfigurationReqSendTo(dst__, src__, wpsConfig__) \
- { \
- CsrWifiSmeApWpsConfigurationReq *msg__; \
- CsrWifiSmeApWpsConfigurationReqCreate(msg__, dst__, src__, wpsConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApWpsConfigurationReqSend(src__, wpsConfig__) \
- CsrWifiSmeApWpsConfigurationReqSendTo(CSR_WIFI_SME_IFACEQUEUE, src__, wpsConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWpsConfigurationCfmSend
-
- DESCRIPTION
- Confirm.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Status of the request.
-
-*******************************************************************************/
-#define CsrWifiSmeApWpsConfigurationCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApWpsConfigurationCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_WPS_CONFIGURATION_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeApWpsConfigurationCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeApWpsConfigurationCfm *msg__; \
- CsrWifiSmeApWpsConfigurationCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApWpsConfigurationCfmSend(dst__, status__) \
- CsrWifiSmeApWpsConfigurationCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWpsRegistrationFinishedReqSend
-
- DESCRIPTION
- This primitive tells SME that WPS registration procedure has finished
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
-
-*******************************************************************************/
-#define CsrWifiSmeApWpsRegistrationFinishedReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApWpsRegistrationFinishedReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_WPS_REGISTRATION_FINISHED_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiSmeApWpsRegistrationFinishedReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiSmeApWpsRegistrationFinishedReq *msg__; \
- CsrWifiSmeApWpsRegistrationFinishedReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApWpsRegistrationFinishedReqSend(src__, interfaceTag__) \
- CsrWifiSmeApWpsRegistrationFinishedReqSendTo(CSR_WIFI_SME_IFACEQUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWpsRegistrationFinishedCfmSend
-
- DESCRIPTION
- A confirm for UNIFI_MGT_AP_WPS_REGISTRATION_FINISHED.request
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag -
- status -
-
-*******************************************************************************/
-#define CsrWifiSmeApWpsRegistrationFinishedCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApWpsRegistrationFinishedCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_WPS_REGISTRATION_FINISHED_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeApWpsRegistrationFinishedCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiSmeApWpsRegistrationFinishedCfm *msg__; \
- CsrWifiSmeApWpsRegistrationFinishedCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApWpsRegistrationFinishedCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiSmeApWpsRegistrationFinishedCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWpsRegistrationStartedReqSend
-
- DESCRIPTION
- This primitive tells SME that WPS registration procedure has started
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag -
- SelectedDevicePasswordId -
- SelectedconfigMethod -
-
-*******************************************************************************/
-#define CsrWifiSmeApWpsRegistrationStartedReqCreate(msg__, dst__, src__, interfaceTag__, SelectedDevicePasswordId__, SelectedconfigMethod__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApWpsRegistrationStartedReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_WPS_REGISTRATION_STARTED_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->SelectedDevicePasswordId = (SelectedDevicePasswordId__); \
- msg__->SelectedconfigMethod = (SelectedconfigMethod__);
-
-#define CsrWifiSmeApWpsRegistrationStartedReqSendTo(dst__, src__, interfaceTag__, SelectedDevicePasswordId__, SelectedconfigMethod__) \
- { \
- CsrWifiSmeApWpsRegistrationStartedReq *msg__; \
- CsrWifiSmeApWpsRegistrationStartedReqCreate(msg__, dst__, src__, interfaceTag__, SelectedDevicePasswordId__, SelectedconfigMethod__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApWpsRegistrationStartedReqSend(src__, interfaceTag__, SelectedDevicePasswordId__, SelectedconfigMethod__) \
- CsrWifiSmeApWpsRegistrationStartedReqSendTo(CSR_WIFI_SME_IFACEQUEUE, src__, interfaceTag__, SelectedDevicePasswordId__, SelectedconfigMethod__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWpsRegistrationStartedCfmSend
-
- DESCRIPTION
- A confirm for UNIFI_MGT_AP_WPS_REGISTRATION_STARTED.request
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag -
- status -
-
-*******************************************************************************/
-#define CsrWifiSmeApWpsRegistrationStartedCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeApWpsRegistrationStartedCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_AP_PRIM, CSR_WIFI_SME_AP_WPS_REGISTRATION_STARTED_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeApWpsRegistrationStartedCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiSmeApWpsRegistrationStartedCfm *msg__; \
- CsrWifiSmeApWpsRegistrationStartedCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_AP_PRIM, msg__); \
- }
-
-#define CsrWifiSmeApWpsRegistrationStartedCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiSmeApWpsRegistrationStartedCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__)
-
-
-#endif /* CSR_WIFI_SME_AP_LIB_H__ */
diff --git a/drivers/staging/csr/csr_wifi_sme_ap_prim.h b/drivers/staging/csr/csr_wifi_sme_ap_prim.h
deleted file mode 100644
index 3c4bcbc16126..000000000000
--- a/drivers/staging/csr/csr_wifi_sme_ap_prim.h
+++ /dev/null
@@ -1,1030 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_SME_AP_PRIM_H__
-#define CSR_WIFI_SME_AP_PRIM_H__
-
-#include "csr_prim_defs.h"
-#include "csr_sched.h"
-#include "csr_wifi_common.h"
-#include "csr_result.h"
-#include "csr_wifi_fsm_event.h"
-#include "csr_wifi_sme_prim.h"
-
-#ifndef CSR_WIFI_AP_ENABLE
-#error CSR_WIFI_AP_ENABLE MUST be defined inorder to use csr_wifi_sme_ap_prim.h
-#endif
-
-#define CSR_WIFI_SME_AP_PRIM (0x0407)
-
-typedef CsrPrim CsrWifiSmeApPrim;
-
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApAccessType
-
- DESCRIPTION
- Allow or deny STAs based on MAC address
-
- VALUES
- CSR_WIFI_AP_ACCESS_TYPE_NONE - None
- CSR_WIFI_AP_ACCESS_TYPE_ALLOW - Allow only if MAC address is from the list
- CSR_WIFI_AP_ACCESS_TYPE_DENY - Disallow if MAC address is from the list
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeApAccessType;
-#define CSR_WIFI_AP_ACCESS_TYPE_NONE ((CsrWifiSmeApAccessType) 0x00)
-#define CSR_WIFI_AP_ACCESS_TYPE_ALLOW ((CsrWifiSmeApAccessType) 0x01)
-#define CSR_WIFI_AP_ACCESS_TYPE_DENY ((CsrWifiSmeApAccessType) 0x02)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApAuthSupport
-
- DESCRIPTION
- Define bits for AP authentication support
-
- VALUES
- CSR_WIFI_SME_RSN_AUTH_WPAPSK - RSN WPA-PSK Support
- CSR_WIFI_SME_RSN_AUTH_WPA2PSK - RSN WPA2-PSK Support
- CSR_WIFI_SME_AUTH_WAPIPSK - WAPI-PSK Support
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeApAuthSupport;
-#define CSR_WIFI_SME_RSN_AUTH_WPAPSK ((CsrWifiSmeApAuthSupport) 0x01)
-#define CSR_WIFI_SME_RSN_AUTH_WPA2PSK ((CsrWifiSmeApAuthSupport) 0x02)
-#define CSR_WIFI_SME_AUTH_WAPIPSK ((CsrWifiSmeApAuthSupport) 0x04)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApAuthType
-
- DESCRIPTION
- Definition of the SME AP Authentication Options
-
- VALUES
- CSR_WIFI_SME_AP_AUTH_TYPE_OPEN_SYSTEM
- - Open authentication
- CSR_WIFI_SME_AP_AUTH_TYPE_PERSONAL
- - Personal authentication using a passphrase or a pre-shared
- key.
- CSR_WIFI_SME_AP_AUTH_TYPE_WEP
- - WEP authentication. This can be either open or shared key
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeApAuthType;
-#define CSR_WIFI_SME_AP_AUTH_TYPE_OPEN_SYSTEM ((CsrWifiSmeApAuthType) 0x00)
-#define CSR_WIFI_SME_AP_AUTH_TYPE_PERSONAL ((CsrWifiSmeApAuthType) 0x01)
-#define CSR_WIFI_SME_AP_AUTH_TYPE_WEP ((CsrWifiSmeApAuthType) 0x02)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApDirection
-
- DESCRIPTION
- Definition of Direction
-
- VALUES
- CSR_WIFI_AP_DIRECTION_RECEIPIENT - Receipient
- CSR_WIFI_AP_DIRECTION_ORIGINATOR - Originator
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeApDirection;
-#define CSR_WIFI_AP_DIRECTION_RECEIPIENT ((CsrWifiSmeApDirection) 0x00)
-#define CSR_WIFI_AP_DIRECTION_ORIGINATOR ((CsrWifiSmeApDirection) 0x01)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApPhySupport
-
- DESCRIPTION
- Define bits for CsrWifiSmeApPhySupportMask
-
- VALUES
- CSR_WIFI_SME_AP_PHY_SUPPORT_A - 802.11a. It is not supported in the current
- release.
- CSR_WIFI_SME_AP_PHY_SUPPORT_B - 802.11b
- CSR_WIFI_SME_AP_PHY_SUPPORT_G - 802.11g
- CSR_WIFI_SME_AP_PHY_SUPPORT_N - 802.11n
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeApPhySupport;
-#define CSR_WIFI_SME_AP_PHY_SUPPORT_A ((CsrWifiSmeApPhySupport) 0x01)
-#define CSR_WIFI_SME_AP_PHY_SUPPORT_B ((CsrWifiSmeApPhySupport) 0x02)
-#define CSR_WIFI_SME_AP_PHY_SUPPORT_G ((CsrWifiSmeApPhySupport) 0x04)
-#define CSR_WIFI_SME_AP_PHY_SUPPORT_N ((CsrWifiSmeApPhySupport) 0x08)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApType
-
- DESCRIPTION
- Definition of AP types
-
- VALUES
- CSR_WIFI_AP_TYPE_LEGACY - Legacy AP
- CSR_WIFI_AP_TYPE_P2P - P2P Group Owner(GO)
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeApType;
-#define CSR_WIFI_AP_TYPE_LEGACY ((CsrWifiSmeApType) 0x00)
-#define CSR_WIFI_AP_TYPE_P2P ((CsrWifiSmeApType) 0x01)
-
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApAuthSupportMask
-
- DESCRIPTION
- See CsrWifiSmeApAuthSupport for bit definitions
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeApAuthSupportMask;
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApPhySupportMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiSmeApPhySupport
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeApPhySupportMask;
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApRsnCapabilities
-
- DESCRIPTION
- Set to 0 for the current release
-
-*******************************************************************************/
-typedef u16 CsrWifiSmeApRsnCapabilities;
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApRsnCapabilitiesMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiSmeApRsnCapabilities
-
-*******************************************************************************/
-typedef u16 CsrWifiSmeApRsnCapabilitiesMask;
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWapiCapabilities
-
- DESCRIPTION
- Ignored by the stack as WAPI is not supported for AP operations in the
- current release
-
-*******************************************************************************/
-typedef u16 CsrWifiSmeApWapiCapabilities;
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWapiCapabilitiesMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiSmeApWapiCapabilities
-
-*******************************************************************************/
-typedef u16 CsrWifiSmeApWapiCapabilitiesMask;
-
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApHtParams
-
- DESCRIPTION
- Structure holding HT parameters
-
- MEMBERS
- greenfieldSupported - Indicates if the AP supports Htgreenfield operation
- subject to the chip capability. If the chip does not
- support Htgreenfield operation, this parameter will be
- ignored.
- NOTE: if shortGi20MHz is set to TRUE and the chip
- supports short GI operation for 20MHz this field will
- be be ignored and the AP will not support Htgreenfield
- operation.
- NOTE: This field is ignored by the Wi-Fi stack for the
- current release. It implies that AP does not support
- greenfield operation.
- shortGi20MHz - Indicates if the AP support short GI operation for
- 20MHz subject to the chip capability.If the chip does
- not support short GI for 20MHz, this parameter is
- ignored
- rxStbc - Support for STBC for receive. 0 => No support for STBC
- , 1=> Use STBC for Rx
- rifsModeAllowed - RIFS Mode is allowed to protect overlapping non-HT BSS
- htProtection - Deprecated
- dualCtsProtection - Dual CTS Protection enabled
-
-*******************************************************************************/
-typedef struct
-{
- u8 greenfieldSupported;
- u8 shortGi20MHz;
- u8 rxStbc;
- u8 rifsModeAllowed;
- u8 htProtection;
- u8 dualCtsProtection;
-} CsrWifiSmeApHtParams;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApP2pOperatingChanEntry
-
- DESCRIPTION
-
- MEMBERS
- operatingClass - Channel operating class
- operatingChannelCount - Number of channels in this entry
- operatingChannel - List of channels
-
-*******************************************************************************/
-typedef struct
-{
- u8 operatingClass;
- u8 operatingChannelCount;
- u8 *operatingChannel;
-} CsrWifiSmeApP2pOperatingChanEntry;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApP2pOperatingChanList
-
- DESCRIPTION
- This structure contains the lists of P2P operating channels
-
- MEMBERS
- country - Country
- channelEntryListCount - Number of entries
- channelEntryList - List of entries
-
-*******************************************************************************/
-typedef struct
-{
- u8 country[3];
- u8 channelEntryListCount;
- CsrWifiSmeApP2pOperatingChanEntry *channelEntryList;
-} CsrWifiSmeApP2pOperatingChanList;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApAuthPers
-
- DESCRIPTION
-
- MEMBERS
- authSupport -
- encryptionModeMask -
- rsnCapabilities -
- wapiCapabilities -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeApAuthSupportMask authSupport;
- CsrWifiSmeEncryptionMask encryptionModeMask;
- CsrWifiSmeApRsnCapabilitiesMask rsnCapabilities;
- CsrWifiSmeApWapiCapabilitiesMask wapiCapabilities;
-} CsrWifiSmeApAuthPers;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApBaSession
-
- DESCRIPTION
-
- MEMBERS
- peerMacAddress - Indicates MAC address of the peer station
- tid - Specifies the TID of the MSDUs for which this Block Ack has
- been set up. Range: 0-15
- direction - Specifies if the AP is the originator or the recipient of
- the data stream that uses the Block Ack.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiMacAddress peerMacAddress;
- u8 tid;
- CsrWifiSmeApDirection direction;
-} CsrWifiSmeApBaSession;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApMacConfig
-
- DESCRIPTION
- Structure holding AP MAC configuration.
-
- MEMBERS
- phySupportedBitmap - Indicates supported physical layers
- beaconInterval - Beacon interval in terms of TUs
- dtimPeriod - DTIM period in terms of number of beacon intervals
- maxListenInterval - Maximum allowed listen interval as number of beacon
- intervals
- supportedRatesCount - Number of supported rates. Range : 0 to 20
- supportedRates - List of supportedRates. A rate is specied in the
- units of 500kbps. An entry for a basic rate shall
- have the MSB set to 1.
- preamble - Preamble to be advertised in beacons and probe
- responses
- shortSlotTimeEnabled - TRUE indicates the AP shall use short slot time if
- all the stations use short slot operation.
- ctsProtectionType - CTS protection to be used
- wmmEnabled - Indicate whether WMM is enabled or not. If set to
- FALSE,the WMM parameters shall be ignored by the
- receiver.
- wmmApParams - WMM parameters to be used for local firmware queue
- configuration. Array index corresponds to the ACI.
- wmmApBcParams - WMM parameters to be advertised in beacon/probe
- response. Array index corresponds to the ACI
- accessType - Specifies whether the MAC addresses from the list
- should be allowed or denied
- macAddressListCount - Number of MAC addresses
- macAddressList - List of MAC addresses
- apHtParams - AP HT parameters. The stack shall use these
- parameters only if phySupportedBitmap indicates
- support for IEEE 802.11n
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeApPhySupportMask phySupportedBitmap;
- u16 beaconInterval;
- u8 dtimPeriod;
- u16 maxListenInterval;
- u8 supportedRatesCount;
- u8 supportedRates[20];
- CsrWifiSmePreambleType preamble;
- u8 shortSlotTimeEnabled;
- CsrWifiSmeCtsProtectionType ctsProtectionType;
- u8 wmmEnabled;
- CsrWifiSmeWmmAcParams wmmApParams[4];
- CsrWifiSmeWmmAcParams wmmApBcParams[4];
- CsrWifiSmeApAccessType accessType;
- u8 macAddressListCount;
- CsrWifiMacAddress *macAddressList;
- CsrWifiSmeApHtParams apHtParams;
-} CsrWifiSmeApMacConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApP2pGoConfig
-
- DESCRIPTION
-
- MEMBERS
- groupCapability - Indicates the P2P group capabilities
- operatingChanList - List of operating channels in the order of
- decreasing priority. It may contain channel
- entry/entries not supported by the wifi stack.
- These shall be filtered out by the wifi stack
- opPsEnabled - Indicates whether opportunistic power save can
- be used.
- Note: This parameter is ignored by the WiFi
- stack for the current release
- ctWindow - Define Client Traffic window to be used in terms
- of number of TUs. Range: 0 to 127.
- Note: This parameter is ignored by the WiFi
- stack for the current release.
- noaConfigMethod - Notice of Absence configuration method.
- Note: This parameter is ignored by the WiFi
- stack for the current release.
- allowNoaWithNonP2pDevices - Indicates if NOA should be allowed if non P2P
- devices are connected. If allowed the non P2P
- devices may suffer in throughput.
- Note: This parameter is ignored by the WiFi
- stack for the current release.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeP2pGroupCapabilityMask groupCapability;
- CsrWifiSmeApP2pOperatingChanList operatingChanList;
- u8 opPsEnabled;
- u8 ctWindow;
- CsrWifiSmeP2pNoaConfigMethod noaConfigMethod;
- u8 allowNoaWithNonP2pDevices;
-} CsrWifiSmeApP2pGoConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApCredentials
-
- DESCRIPTION
-
- MEMBERS
- authType -
- smeAuthType -
- smeAuthTypeopenSystemEmpty -
- smeAuthTypeauthwep -
- smeAuthTypeauthPers -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeApAuthType authType;
- union {
- CsrWifiSmeEmpty openSystemEmpty;
- CsrWifiSmeWepAuth authwep;
- CsrWifiSmeApAuthPers authPers;
- } smeAuthType;
-} CsrWifiSmeApCredentials;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApSecConfig
-
- DESCRIPTION
-
- MEMBERS
- apCredentials -
- wpsEnabled -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeApCredentials apCredentials;
- u8 wpsEnabled;
-} CsrWifiSmeApSecConfig;
-
-
-/* Downstream */
-#define CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_LOWEST (0x0000)
-
-#define CSR_WIFI_SME_AP_BEACONING_START_REQ ((CsrWifiSmeApPrim) (0x0000 + CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_BEACONING_STOP_REQ ((CsrWifiSmeApPrim) (0x0001 + CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_WPS_REGISTRATION_STARTED_REQ ((CsrWifiSmeApPrim) (0x0002 + CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_WPS_REGISTRATION_FINISHED_REQ ((CsrWifiSmeApPrim) (0x0003 + CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_WMM_PARAM_UPDATE_REQ ((CsrWifiSmeApPrim) (0x0004 + CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_STA_DISCONNECT_REQ ((CsrWifiSmeApPrim) (0x0005 + CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_WPS_CONFIGURATION_REQ ((CsrWifiSmeApPrim) (0x0006 + CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_ACTIVE_BA_GET_REQ ((CsrWifiSmeApPrim) (0x0007 + CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_BA_DELETE_REQ ((CsrWifiSmeApPrim) (0x0008 + CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_LOWEST))
-
-
-#define CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_HIGHEST (0x0008 + CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_LOWEST)
-
-/* Upstream */
-#define CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST (0x0000 + CSR_PRIM_UPSTREAM)
-
-#define CSR_WIFI_SME_AP_BEACONING_START_CFM ((CsrWifiSmeApPrim)(0x0000 + CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_BEACONING_STOP_CFM ((CsrWifiSmeApPrim)(0x0001 + CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_STA_NOTIFY_IND ((CsrWifiSmeApPrim)(0x0002 + CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_STA_CONNECT_START_IND ((CsrWifiSmeApPrim)(0x0003 + CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_WPS_REGISTRATION_STARTED_CFM ((CsrWifiSmeApPrim)(0x0004 + CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_WPS_REGISTRATION_FINISHED_CFM ((CsrWifiSmeApPrim)(0x0005 + CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_WMM_PARAM_UPDATE_CFM ((CsrWifiSmeApPrim)(0x0006 + CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_STA_DISCONNECT_CFM ((CsrWifiSmeApPrim)(0x0007 + CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_WPS_CONFIGURATION_CFM ((CsrWifiSmeApPrim)(0x0008 + CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_ERROR_IND ((CsrWifiSmeApPrim)(0x0009 + CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_ACTIVE_BA_GET_CFM ((CsrWifiSmeApPrim)(0x000A + CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_AP_BA_DELETE_CFM ((CsrWifiSmeApPrim)(0x000B + CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST))
-
-#define CSR_WIFI_SME_AP_PRIM_UPSTREAM_HIGHEST (0x000B + CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST)
-
-#define CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_COUNT (CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_HIGHEST + 1 - CSR_WIFI_SME_AP_PRIM_DOWNSTREAM_LOWEST)
-#define CSR_WIFI_SME_AP_PRIM_UPSTREAM_COUNT (CSR_WIFI_SME_AP_PRIM_UPSTREAM_HIGHEST + 1 - CSR_WIFI_SME_AP_PRIM_UPSTREAM_LOWEST)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApBeaconingStartReq
-
- DESCRIPTION
- This primitive requests the SME to start AP or GO functionality
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- initialPresence - Set to 0, if Not in a group fomration phase, set to 1 ,
- during group formation phase
- apType - apType : Legacy AP or P2PGO
- cloakSsid - cloakSsid flag.
- ssid - ssid.
- ifIndex - Radio Interface
- channel - channel.
- maxConnections - Maximum Stations + P2PClients allowed
- apCredentials - AP security credeitals used to advertise in beacon /probe
- response
- smeApConfig - AP configuration
- p2pGoParam - P2P specific GO parameters. Ignored if it is a leagacy AP
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u8 initialPresence;
- CsrWifiSmeApType apType;
- u8 cloakSsid;
- CsrWifiSsid ssid;
- CsrWifiSmeRadioIF ifIndex;
- u8 channel;
- u8 maxConnections;
- CsrWifiSmeApSecConfig apCredentials;
- CsrWifiSmeApMacConfig smeApConfig;
- CsrWifiSmeApP2pGoConfig p2pGoParam;
-} CsrWifiSmeApBeaconingStartReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApBeaconingStopReq
-
- DESCRIPTION
- This primitive requests the SME to STOP AP or P2PGO operation
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiSmeApBeaconingStopReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWpsRegistrationStartedReq
-
- DESCRIPTION
- This primitive tells SME that WPS registration procedure has started
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- SelectedDevicePasswordId -
- SelectedconfigMethod -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeWpsDpid SelectedDevicePasswordId;
- CsrWifiSmeWpsConfigType SelectedconfigMethod;
-} CsrWifiSmeApWpsRegistrationStartedReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWpsRegistrationFinishedReq
-
- DESCRIPTION
- This primitive tells SME that WPS registration procedure has finished
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiSmeApWpsRegistrationFinishedReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWmmParamUpdateReq
-
- DESCRIPTION
- Application uses this primitive to update the WMM parameters on the fly
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- wmmApParams - WMM parameters to be used for local firmware queue
- configuration
- wmmApBcParams - WMM parameters to be advertised in beacon/probe response
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeWmmAcParams wmmApParams[4];
- CsrWifiSmeWmmAcParams wmmApBcParams[4];
-} CsrWifiSmeApWmmParamUpdateReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApStaDisconnectReq
-
- DESCRIPTION
- This primitive tells SME to deauth ot disassociate a particular station
- within BSS
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- deauthReason -
- disassocReason -
- peerMacaddress -
- keepBlocking - If TRUE, the station is blocked. If FALSE and the station
- is connected, disconnect the station. If FALSE and the
- station is not connected, no action is taken.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeIEEE80211Reason deauthReason;
- CsrWifiSmeIEEE80211Reason disassocReason;
- CsrWifiMacAddress peerMacaddress;
- u8 keepBlocking;
-} CsrWifiSmeApStaDisconnectReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWpsConfigurationReq
-
- DESCRIPTION
- This primitive passes the WPS information for the device to SME. This may
- be accepted only if no interface is active.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- wpsConfig - WPS config.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiSmeWpsConfig wpsConfig;
-} CsrWifiSmeApWpsConfigurationReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApActiveBaGetReq
-
- DESCRIPTION
- This primitive used to retrieve information related to the active block
- ack sessions
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiSmeApActiveBaGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApBaDeleteReq
-
- DESCRIPTION
- This primitive is used to delete an active block ack session
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- reason -
- baSession - BA session to be deleted
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeIEEE80211Reason reason;
- CsrWifiSmeApBaSession baSession;
-} CsrWifiSmeApBaDeleteReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApBeaconingStartCfm
-
- DESCRIPTION
- This primitive confirms the completion of the request along with the
- status
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- status -
- secIeLength -
- secIe -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- u16 secIeLength;
- u8 *secIe;
-} CsrWifiSmeApBeaconingStartCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApBeaconingStopCfm
-
- DESCRIPTION
- This primitive confirms AP or P2PGO operation is terminated
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiSmeApBeaconingStopCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApStaNotifyInd
-
- DESCRIPTION
- This primitive indicates that a station has joined or a previously joined
- station has left the BSS/group
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- mediaStatus -
- peerMacAddress -
- peerDeviceAddress -
- disassocReason -
- deauthReason -
- WpsRegistration -
- secIeLength -
- secIe -
- groupKeyId -
- seqNumber -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeMediaStatus mediaStatus;
- CsrWifiMacAddress peerMacAddress;
- CsrWifiMacAddress peerDeviceAddress;
- CsrWifiSmeIEEE80211Reason disassocReason;
- CsrWifiSmeIEEE80211Reason deauthReason;
- CsrWifiSmeWpsRegistration WpsRegistration;
- u8 secIeLength;
- u8 *secIe;
- u8 groupKeyId;
- u16 seqNumber[8];
-} CsrWifiSmeApStaNotifyInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApStaConnectStartInd
-
- DESCRIPTION
- This primitive indicates that a stations request to join the group/BSS is
- accepted
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- peerMacAddress -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiMacAddress peerMacAddress;
-} CsrWifiSmeApStaConnectStartInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWpsRegistrationStartedCfm
-
- DESCRIPTION
- A confirm for UNIFI_MGT_AP_WPS_REGISTRATION_STARTED.request
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiSmeApWpsRegistrationStartedCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWpsRegistrationFinishedCfm
-
- DESCRIPTION
- A confirm for UNIFI_MGT_AP_WPS_REGISTRATION_FINISHED.request
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiSmeApWpsRegistrationFinishedCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWmmParamUpdateCfm
-
- DESCRIPTION
- A confirm for CSR_WIFI_SME_AP_WMM_PARAM_UPDATE.request
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- status -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiSmeApWmmParamUpdateCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApStaDisconnectCfm
-
- DESCRIPTION
- This primitive confirms the station is disconnected
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- status -
- peerMacaddress -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiMacAddress peerMacaddress;
-} CsrWifiSmeApStaDisconnectCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApWpsConfigurationCfm
-
- DESCRIPTION
- Confirm.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Status of the request.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeApWpsConfigurationCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApErrorInd
-
- DESCRIPTION
- This primitve is sent by SME to indicate some error in AP operationi
- after AP operations were started successfully and continuing the AP
- operation may lead to undesired behaviour. It is the responsibility of
- the upper layers to stop AP operation if needed
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Range 0-1
- apType -
- status - Contains the error status
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeApType apType;
- CsrResult status;
-} CsrWifiSmeApErrorInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApActiveBaGetCfm
-
- DESCRIPTION
- This primitive carries the information related to the active ba sessions
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- status - Reports the result of the request
- activeBaCount - Number of active block ack session
- activeBaSessions - Points to a buffer containing an array of
- CsrWifiSmeApBaSession structures.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- u16 activeBaCount;
- CsrWifiSmeApBaSession *activeBaSessions;
-} CsrWifiSmeApActiveBaGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeApBaDeleteCfm
-
- DESCRIPTION
- This primitive confirms the BA is deleted
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag -
- status - Reports the result of the request
- baSession - deleted BA session
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSmeApBaSession baSession;
-} CsrWifiSmeApBaDeleteCfm;
-
-
-#endif /* CSR_WIFI_SME_AP_PRIM_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_sme_converter_init.c b/drivers/staging/csr/csr_wifi_sme_converter_init.c
deleted file mode 100644
index 31835f06bbc2..000000000000
--- a/drivers/staging/csr/csr_wifi_sme_converter_init.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#include "csr_msgconv.h"
-#include "csr_macro.h"
-
-
-#ifdef CSR_LOG_ENABLE
-#include "csr_log.h"
-#endif
-
-#ifndef EXCLUDE_CSR_WIFI_SME_MODULE
-#include "csr_wifi_sme_serialize.h"
-#include "csr_wifi_sme_prim.h"
-
-static CsrMsgConvMsgEntry csrwifisme_conv_lut[] = {
- { CSR_WIFI_SME_ACTIVATE_REQ, CsrWifiSmeActivateReqSizeof, CsrWifiSmeActivateReqSer, CsrWifiSmeActivateReqDes, CsrWifiSmeActivateReqSerFree },
- { CSR_WIFI_SME_ADHOC_CONFIG_GET_REQ, CsrWifiSmeAdhocConfigGetReqSizeof, CsrWifiSmeAdhocConfigGetReqSer, CsrWifiSmeAdhocConfigGetReqDes, CsrWifiSmeAdhocConfigGetReqSerFree },
- { CSR_WIFI_SME_ADHOC_CONFIG_SET_REQ, CsrWifiSmeAdhocConfigSetReqSizeof, CsrWifiSmeAdhocConfigSetReqSer, CsrWifiSmeAdhocConfigSetReqDes, CsrWifiSmeAdhocConfigSetReqSerFree },
- { CSR_WIFI_SME_BLACKLIST_REQ, CsrWifiSmeBlacklistReqSizeof, CsrWifiSmeBlacklistReqSer, CsrWifiSmeBlacklistReqDes, CsrWifiSmeBlacklistReqSerFree },
- { CSR_WIFI_SME_CALIBRATION_DATA_GET_REQ, CsrWifiSmeCalibrationDataGetReqSizeof, CsrWifiSmeCalibrationDataGetReqSer, CsrWifiSmeCalibrationDataGetReqDes, CsrWifiSmeCalibrationDataGetReqSerFree },
- { CSR_WIFI_SME_CALIBRATION_DATA_SET_REQ, CsrWifiSmeCalibrationDataSetReqSizeof, CsrWifiSmeCalibrationDataSetReqSer, CsrWifiSmeCalibrationDataSetReqDes, CsrWifiSmeCalibrationDataSetReqSerFree },
- { CSR_WIFI_SME_CCX_CONFIG_GET_REQ, CsrWifiSmeCcxConfigGetReqSizeof, CsrWifiSmeCcxConfigGetReqSer, CsrWifiSmeCcxConfigGetReqDes, CsrWifiSmeCcxConfigGetReqSerFree },
- { CSR_WIFI_SME_CCX_CONFIG_SET_REQ, CsrWifiSmeCcxConfigSetReqSizeof, CsrWifiSmeCcxConfigSetReqSer, CsrWifiSmeCcxConfigSetReqDes, CsrWifiSmeCcxConfigSetReqSerFree },
- { CSR_WIFI_SME_COEX_CONFIG_GET_REQ, CsrWifiSmeCoexConfigGetReqSizeof, CsrWifiSmeCoexConfigGetReqSer, CsrWifiSmeCoexConfigGetReqDes, CsrWifiSmeCoexConfigGetReqSerFree },
- { CSR_WIFI_SME_COEX_CONFIG_SET_REQ, CsrWifiSmeCoexConfigSetReqSizeof, CsrWifiSmeCoexConfigSetReqSer, CsrWifiSmeCoexConfigSetReqDes, CsrWifiSmeCoexConfigSetReqSerFree },
- { CSR_WIFI_SME_COEX_INFO_GET_REQ, CsrWifiSmeCoexInfoGetReqSizeof, CsrWifiSmeCoexInfoGetReqSer, CsrWifiSmeCoexInfoGetReqDes, CsrWifiSmeCoexInfoGetReqSerFree },
- { CSR_WIFI_SME_CONNECT_REQ, CsrWifiSmeConnectReqSizeof, CsrWifiSmeConnectReqSer, CsrWifiSmeConnectReqDes, CsrWifiSmeConnectReqSerFree },
- { CSR_WIFI_SME_CONNECTION_CONFIG_GET_REQ, CsrWifiSmeConnectionConfigGetReqSizeof, CsrWifiSmeConnectionConfigGetReqSer, CsrWifiSmeConnectionConfigGetReqDes, CsrWifiSmeConnectionConfigGetReqSerFree },
- { CSR_WIFI_SME_CONNECTION_INFO_GET_REQ, CsrWifiSmeConnectionInfoGetReqSizeof, CsrWifiSmeConnectionInfoGetReqSer, CsrWifiSmeConnectionInfoGetReqDes, CsrWifiSmeConnectionInfoGetReqSerFree },
- { CSR_WIFI_SME_CONNECTION_STATS_GET_REQ, CsrWifiSmeConnectionStatsGetReqSizeof, CsrWifiSmeConnectionStatsGetReqSer, CsrWifiSmeConnectionStatsGetReqDes, CsrWifiSmeConnectionStatsGetReqSerFree },
- { CSR_WIFI_SME_DEACTIVATE_REQ, CsrWifiSmeDeactivateReqSizeof, CsrWifiSmeDeactivateReqSer, CsrWifiSmeDeactivateReqDes, CsrWifiSmeDeactivateReqSerFree },
- { CSR_WIFI_SME_DISCONNECT_REQ, CsrWifiSmeDisconnectReqSizeof, CsrWifiSmeDisconnectReqSer, CsrWifiSmeDisconnectReqDes, CsrWifiSmeDisconnectReqSerFree },
- { CSR_WIFI_SME_EVENT_MASK_SET_REQ, CsrWifiSmeEventMaskSetReqSizeof, CsrWifiSmeEventMaskSetReqSer, CsrWifiSmeEventMaskSetReqDes, CsrWifiSmeEventMaskSetReqSerFree },
- { CSR_WIFI_SME_HOST_CONFIG_GET_REQ, CsrWifiSmeHostConfigGetReqSizeof, CsrWifiSmeHostConfigGetReqSer, CsrWifiSmeHostConfigGetReqDes, CsrWifiSmeHostConfigGetReqSerFree },
- { CSR_WIFI_SME_HOST_CONFIG_SET_REQ, CsrWifiSmeHostConfigSetReqSizeof, CsrWifiSmeHostConfigSetReqSer, CsrWifiSmeHostConfigSetReqDes, CsrWifiSmeHostConfigSetReqSerFree },
- { CSR_WIFI_SME_KEY_REQ, CsrWifiSmeKeyReqSizeof, CsrWifiSmeKeyReqSer, CsrWifiSmeKeyReqDes, CsrWifiSmeKeyReqSerFree },
- { CSR_WIFI_SME_LINK_QUALITY_GET_REQ, CsrWifiSmeLinkQualityGetReqSizeof, CsrWifiSmeLinkQualityGetReqSer, CsrWifiSmeLinkQualityGetReqDes, CsrWifiSmeLinkQualityGetReqSerFree },
- { CSR_WIFI_SME_MIB_CONFIG_GET_REQ, CsrWifiSmeMibConfigGetReqSizeof, CsrWifiSmeMibConfigGetReqSer, CsrWifiSmeMibConfigGetReqDes, CsrWifiSmeMibConfigGetReqSerFree },
- { CSR_WIFI_SME_MIB_CONFIG_SET_REQ, CsrWifiSmeMibConfigSetReqSizeof, CsrWifiSmeMibConfigSetReqSer, CsrWifiSmeMibConfigSetReqDes, CsrWifiSmeMibConfigSetReqSerFree },
- { CSR_WIFI_SME_MIB_GET_NEXT_REQ, CsrWifiSmeMibGetNextReqSizeof, CsrWifiSmeMibGetNextReqSer, CsrWifiSmeMibGetNextReqDes, CsrWifiSmeMibGetNextReqSerFree },
- { CSR_WIFI_SME_MIB_GET_REQ, CsrWifiSmeMibGetReqSizeof, CsrWifiSmeMibGetReqSer, CsrWifiSmeMibGetReqDes, CsrWifiSmeMibGetReqSerFree },
- { CSR_WIFI_SME_MIB_SET_REQ, CsrWifiSmeMibSetReqSizeof, CsrWifiSmeMibSetReqSer, CsrWifiSmeMibSetReqDes, CsrWifiSmeMibSetReqSerFree },
- { CSR_WIFI_SME_MULTICAST_ADDRESS_REQ, CsrWifiSmeMulticastAddressReqSizeof, CsrWifiSmeMulticastAddressReqSer, CsrWifiSmeMulticastAddressReqDes, CsrWifiSmeMulticastAddressReqSerFree },
- { CSR_WIFI_SME_PACKET_FILTER_SET_REQ, CsrWifiSmePacketFilterSetReqSizeof, CsrWifiSmePacketFilterSetReqSer, CsrWifiSmePacketFilterSetReqDes, CsrWifiSmePacketFilterSetReqSerFree },
- { CSR_WIFI_SME_PERMANENT_MAC_ADDRESS_GET_REQ, CsrWifiSmePermanentMacAddressGetReqSizeof, CsrWifiSmePermanentMacAddressGetReqSer, CsrWifiSmePermanentMacAddressGetReqDes, CsrWifiSmePermanentMacAddressGetReqSerFree },
- { CSR_WIFI_SME_PMKID_REQ, CsrWifiSmePmkidReqSizeof, CsrWifiSmePmkidReqSer, CsrWifiSmePmkidReqDes, CsrWifiSmePmkidReqSerFree },
- { CSR_WIFI_SME_POWER_CONFIG_GET_REQ, CsrWifiSmePowerConfigGetReqSizeof, CsrWifiSmePowerConfigGetReqSer, CsrWifiSmePowerConfigGetReqDes, CsrWifiSmePowerConfigGetReqSerFree },
- { CSR_WIFI_SME_POWER_CONFIG_SET_REQ, CsrWifiSmePowerConfigSetReqSizeof, CsrWifiSmePowerConfigSetReqSer, CsrWifiSmePowerConfigSetReqDes, CsrWifiSmePowerConfigSetReqSerFree },
- { CSR_WIFI_SME_REGULATORY_DOMAIN_INFO_GET_REQ, CsrWifiSmeRegulatoryDomainInfoGetReqSizeof, CsrWifiSmeRegulatoryDomainInfoGetReqSer, CsrWifiSmeRegulatoryDomainInfoGetReqDes, CsrWifiSmeRegulatoryDomainInfoGetReqSerFree },
- { CSR_WIFI_SME_ROAMING_CONFIG_GET_REQ, CsrWifiSmeRoamingConfigGetReqSizeof, CsrWifiSmeRoamingConfigGetReqSer, CsrWifiSmeRoamingConfigGetReqDes, CsrWifiSmeRoamingConfigGetReqSerFree },
- { CSR_WIFI_SME_ROAMING_CONFIG_SET_REQ, CsrWifiSmeRoamingConfigSetReqSizeof, CsrWifiSmeRoamingConfigSetReqSer, CsrWifiSmeRoamingConfigSetReqDes, CsrWifiSmeRoamingConfigSetReqSerFree },
- { CSR_WIFI_SME_SCAN_CONFIG_GET_REQ, CsrWifiSmeScanConfigGetReqSizeof, CsrWifiSmeScanConfigGetReqSer, CsrWifiSmeScanConfigGetReqDes, CsrWifiSmeScanConfigGetReqSerFree },
- { CSR_WIFI_SME_SCAN_CONFIG_SET_REQ, CsrWifiSmeScanConfigSetReqSizeof, CsrWifiSmeScanConfigSetReqSer, CsrWifiSmeScanConfigSetReqDes, CsrWifiSmeScanConfigSetReqSerFree },
- { CSR_WIFI_SME_SCAN_FULL_REQ, CsrWifiSmeScanFullReqSizeof, CsrWifiSmeScanFullReqSer, CsrWifiSmeScanFullReqDes, CsrWifiSmeScanFullReqSerFree },
- { CSR_WIFI_SME_SCAN_RESULTS_FLUSH_REQ, CsrWifiSmeScanResultsFlushReqSizeof, CsrWifiSmeScanResultsFlushReqSer, CsrWifiSmeScanResultsFlushReqDes, CsrWifiSmeScanResultsFlushReqSerFree },
- { CSR_WIFI_SME_SCAN_RESULTS_GET_REQ, CsrWifiSmeScanResultsGetReqSizeof, CsrWifiSmeScanResultsGetReqSer, CsrWifiSmeScanResultsGetReqDes, CsrWifiSmeScanResultsGetReqSerFree },
- { CSR_WIFI_SME_SME_STA_CONFIG_GET_REQ, CsrWifiSmeSmeStaConfigGetReqSizeof, CsrWifiSmeSmeStaConfigGetReqSer, CsrWifiSmeSmeStaConfigGetReqDes, CsrWifiSmeSmeStaConfigGetReqSerFree },
- { CSR_WIFI_SME_SME_STA_CONFIG_SET_REQ, CsrWifiSmeSmeStaConfigSetReqSizeof, CsrWifiSmeSmeStaConfigSetReqSer, CsrWifiSmeSmeStaConfigSetReqDes, CsrWifiSmeSmeStaConfigSetReqSerFree },
- { CSR_WIFI_SME_STATION_MAC_ADDRESS_GET_REQ, CsrWifiSmeStationMacAddressGetReqSizeof, CsrWifiSmeStationMacAddressGetReqSer, CsrWifiSmeStationMacAddressGetReqDes, CsrWifiSmeStationMacAddressGetReqSerFree },
- { CSR_WIFI_SME_TSPEC_REQ, CsrWifiSmeTspecReqSizeof, CsrWifiSmeTspecReqSer, CsrWifiSmeTspecReqDes, CsrWifiSmeTspecReqSerFree },
- { CSR_WIFI_SME_VERSIONS_GET_REQ, CsrWifiSmeVersionsGetReqSizeof, CsrWifiSmeVersionsGetReqSer, CsrWifiSmeVersionsGetReqDes, CsrWifiSmeVersionsGetReqSerFree },
- { CSR_WIFI_SME_WIFI_FLIGHTMODE_REQ, CsrWifiSmeWifiFlightmodeReqSizeof, CsrWifiSmeWifiFlightmodeReqSer, CsrWifiSmeWifiFlightmodeReqDes, CsrWifiSmeWifiFlightmodeReqSerFree },
- { CSR_WIFI_SME_WIFI_OFF_REQ, CsrWifiSmeWifiOffReqSizeof, CsrWifiSmeWifiOffReqSer, CsrWifiSmeWifiOffReqDes, CsrWifiSmeWifiOffReqSerFree },
- { CSR_WIFI_SME_WIFI_ON_REQ, CsrWifiSmeWifiOnReqSizeof, CsrWifiSmeWifiOnReqSer, CsrWifiSmeWifiOnReqDes, CsrWifiSmeWifiOnReqSerFree },
- { CSR_WIFI_SME_CLOAKED_SSIDS_SET_REQ, CsrWifiSmeCloakedSsidsSetReqSizeof, CsrWifiSmeCloakedSsidsSetReqSer, CsrWifiSmeCloakedSsidsSetReqDes, CsrWifiSmeCloakedSsidsSetReqSerFree },
- { CSR_WIFI_SME_CLOAKED_SSIDS_GET_REQ, CsrWifiSmeCloakedSsidsGetReqSizeof, CsrWifiSmeCloakedSsidsGetReqSer, CsrWifiSmeCloakedSsidsGetReqDes, CsrWifiSmeCloakedSsidsGetReqSerFree },
- { CSR_WIFI_SME_SME_COMMON_CONFIG_GET_REQ, CsrWifiSmeSmeCommonConfigGetReqSizeof, CsrWifiSmeSmeCommonConfigGetReqSer, CsrWifiSmeSmeCommonConfigGetReqDes, CsrWifiSmeSmeCommonConfigGetReqSerFree },
- { CSR_WIFI_SME_SME_COMMON_CONFIG_SET_REQ, CsrWifiSmeSmeCommonConfigSetReqSizeof, CsrWifiSmeSmeCommonConfigSetReqSer, CsrWifiSmeSmeCommonConfigSetReqDes, CsrWifiSmeSmeCommonConfigSetReqSerFree },
- { CSR_WIFI_SME_INTERFACE_CAPABILITY_GET_REQ, CsrWifiSmeInterfaceCapabilityGetReqSizeof, CsrWifiSmeInterfaceCapabilityGetReqSer, CsrWifiSmeInterfaceCapabilityGetReqDes, CsrWifiSmeInterfaceCapabilityGetReqSerFree },
- { CSR_WIFI_SME_WPS_CONFIGURATION_REQ, CsrWifiSmeWpsConfigurationReqSizeof, CsrWifiSmeWpsConfigurationReqSer, CsrWifiSmeWpsConfigurationReqDes, CsrWifiSmeWpsConfigurationReqSerFree },
- { CSR_WIFI_SME_SET_REQ, CsrWifiSmeSetReqSizeof, CsrWifiSmeSetReqSer, CsrWifiSmeSetReqDes, CsrWifiSmeSetReqSerFree },
- { CSR_WIFI_SME_ACTIVATE_CFM, CsrWifiSmeActivateCfmSizeof, CsrWifiSmeActivateCfmSer, CsrWifiSmeActivateCfmDes, CsrWifiSmeActivateCfmSerFree },
- { CSR_WIFI_SME_ADHOC_CONFIG_GET_CFM, CsrWifiSmeAdhocConfigGetCfmSizeof, CsrWifiSmeAdhocConfigGetCfmSer, CsrWifiSmeAdhocConfigGetCfmDes, CsrWifiSmeAdhocConfigGetCfmSerFree },
- { CSR_WIFI_SME_ADHOC_CONFIG_SET_CFM, CsrWifiSmeAdhocConfigSetCfmSizeof, CsrWifiSmeAdhocConfigSetCfmSer, CsrWifiSmeAdhocConfigSetCfmDes, CsrWifiSmeAdhocConfigSetCfmSerFree },
- { CSR_WIFI_SME_ASSOCIATION_COMPLETE_IND, CsrWifiSmeAssociationCompleteIndSizeof, CsrWifiSmeAssociationCompleteIndSer, CsrWifiSmeAssociationCompleteIndDes, CsrWifiSmeAssociationCompleteIndSerFree },
- { CSR_WIFI_SME_ASSOCIATION_START_IND, CsrWifiSmeAssociationStartIndSizeof, CsrWifiSmeAssociationStartIndSer, CsrWifiSmeAssociationStartIndDes, CsrWifiSmeAssociationStartIndSerFree },
- { CSR_WIFI_SME_BLACKLIST_CFM, CsrWifiSmeBlacklistCfmSizeof, CsrWifiSmeBlacklistCfmSer, CsrWifiSmeBlacklistCfmDes, CsrWifiSmeBlacklistCfmSerFree },
- { CSR_WIFI_SME_CALIBRATION_DATA_GET_CFM, CsrWifiSmeCalibrationDataGetCfmSizeof, CsrWifiSmeCalibrationDataGetCfmSer, CsrWifiSmeCalibrationDataGetCfmDes, CsrWifiSmeCalibrationDataGetCfmSerFree },
- { CSR_WIFI_SME_CALIBRATION_DATA_SET_CFM, CsrWifiSmeCalibrationDataSetCfmSizeof, CsrWifiSmeCalibrationDataSetCfmSer, CsrWifiSmeCalibrationDataSetCfmDes, CsrWifiSmeCalibrationDataSetCfmSerFree },
- { CSR_WIFI_SME_CCX_CONFIG_GET_CFM, CsrWifiSmeCcxConfigGetCfmSizeof, CsrWifiSmeCcxConfigGetCfmSer, CsrWifiSmeCcxConfigGetCfmDes, CsrWifiSmeCcxConfigGetCfmSerFree },
- { CSR_WIFI_SME_CCX_CONFIG_SET_CFM, CsrWifiSmeCcxConfigSetCfmSizeof, CsrWifiSmeCcxConfigSetCfmSer, CsrWifiSmeCcxConfigSetCfmDes, CsrWifiSmeCcxConfigSetCfmSerFree },
- { CSR_WIFI_SME_COEX_CONFIG_GET_CFM, CsrWifiSmeCoexConfigGetCfmSizeof, CsrWifiSmeCoexConfigGetCfmSer, CsrWifiSmeCoexConfigGetCfmDes, CsrWifiSmeCoexConfigGetCfmSerFree },
- { CSR_WIFI_SME_COEX_CONFIG_SET_CFM, CsrWifiSmeCoexConfigSetCfmSizeof, CsrWifiSmeCoexConfigSetCfmSer, CsrWifiSmeCoexConfigSetCfmDes, CsrWifiSmeCoexConfigSetCfmSerFree },
- { CSR_WIFI_SME_COEX_INFO_GET_CFM, CsrWifiSmeCoexInfoGetCfmSizeof, CsrWifiSmeCoexInfoGetCfmSer, CsrWifiSmeCoexInfoGetCfmDes, CsrWifiSmeCoexInfoGetCfmSerFree },
- { CSR_WIFI_SME_CONNECT_CFM, CsrWifiSmeConnectCfmSizeof, CsrWifiSmeConnectCfmSer, CsrWifiSmeConnectCfmDes, CsrWifiSmeConnectCfmSerFree },
- { CSR_WIFI_SME_CONNECTION_CONFIG_GET_CFM, CsrWifiSmeConnectionConfigGetCfmSizeof, CsrWifiSmeConnectionConfigGetCfmSer, CsrWifiSmeConnectionConfigGetCfmDes, CsrWifiSmeConnectionConfigGetCfmSerFree },
- { CSR_WIFI_SME_CONNECTION_INFO_GET_CFM, CsrWifiSmeConnectionInfoGetCfmSizeof, CsrWifiSmeConnectionInfoGetCfmSer, CsrWifiSmeConnectionInfoGetCfmDes, CsrWifiSmeConnectionInfoGetCfmSerFree },
- { CSR_WIFI_SME_CONNECTION_QUALITY_IND, CsrWifiSmeConnectionQualityIndSizeof, CsrWifiSmeConnectionQualityIndSer, CsrWifiSmeConnectionQualityIndDes, CsrWifiSmeConnectionQualityIndSerFree },
- { CSR_WIFI_SME_CONNECTION_STATS_GET_CFM, CsrWifiSmeConnectionStatsGetCfmSizeof, CsrWifiSmeConnectionStatsGetCfmSer, CsrWifiSmeConnectionStatsGetCfmDes, CsrWifiSmeConnectionStatsGetCfmSerFree },
- { CSR_WIFI_SME_DEACTIVATE_CFM, CsrWifiSmeDeactivateCfmSizeof, CsrWifiSmeDeactivateCfmSer, CsrWifiSmeDeactivateCfmDes, CsrWifiSmeDeactivateCfmSerFree },
- { CSR_WIFI_SME_DISCONNECT_CFM, CsrWifiSmeDisconnectCfmSizeof, CsrWifiSmeDisconnectCfmSer, CsrWifiSmeDisconnectCfmDes, CsrWifiSmeDisconnectCfmSerFree },
- { CSR_WIFI_SME_EVENT_MASK_SET_CFM, CsrWifiSmeEventMaskSetCfmSizeof, CsrWifiSmeEventMaskSetCfmSer, CsrWifiSmeEventMaskSetCfmDes, CsrWifiSmeEventMaskSetCfmSerFree },
- { CSR_WIFI_SME_HOST_CONFIG_GET_CFM, CsrWifiSmeHostConfigGetCfmSizeof, CsrWifiSmeHostConfigGetCfmSer, CsrWifiSmeHostConfigGetCfmDes, CsrWifiSmeHostConfigGetCfmSerFree },
- { CSR_WIFI_SME_HOST_CONFIG_SET_CFM, CsrWifiSmeHostConfigSetCfmSizeof, CsrWifiSmeHostConfigSetCfmSer, CsrWifiSmeHostConfigSetCfmDes, CsrWifiSmeHostConfigSetCfmSerFree },
- { CSR_WIFI_SME_IBSS_STATION_IND, CsrWifiSmeIbssStationIndSizeof, CsrWifiSmeIbssStationIndSer, CsrWifiSmeIbssStationIndDes, CsrWifiSmeIbssStationIndSerFree },
- { CSR_WIFI_SME_KEY_CFM, CsrWifiSmeKeyCfmSizeof, CsrWifiSmeKeyCfmSer, CsrWifiSmeKeyCfmDes, CsrWifiSmeKeyCfmSerFree },
- { CSR_WIFI_SME_LINK_QUALITY_GET_CFM, CsrWifiSmeLinkQualityGetCfmSizeof, CsrWifiSmeLinkQualityGetCfmSer, CsrWifiSmeLinkQualityGetCfmDes, CsrWifiSmeLinkQualityGetCfmSerFree },
- { CSR_WIFI_SME_MEDIA_STATUS_IND, CsrWifiSmeMediaStatusIndSizeof, CsrWifiSmeMediaStatusIndSer, CsrWifiSmeMediaStatusIndDes, CsrWifiSmeMediaStatusIndSerFree },
- { CSR_WIFI_SME_MIB_CONFIG_GET_CFM, CsrWifiSmeMibConfigGetCfmSizeof, CsrWifiSmeMibConfigGetCfmSer, CsrWifiSmeMibConfigGetCfmDes, CsrWifiSmeMibConfigGetCfmSerFree },
- { CSR_WIFI_SME_MIB_CONFIG_SET_CFM, CsrWifiSmeMibConfigSetCfmSizeof, CsrWifiSmeMibConfigSetCfmSer, CsrWifiSmeMibConfigSetCfmDes, CsrWifiSmeMibConfigSetCfmSerFree },
- { CSR_WIFI_SME_MIB_GET_CFM, CsrWifiSmeMibGetCfmSizeof, CsrWifiSmeMibGetCfmSer, CsrWifiSmeMibGetCfmDes, CsrWifiSmeMibGetCfmSerFree },
- { CSR_WIFI_SME_MIB_GET_NEXT_CFM, CsrWifiSmeMibGetNextCfmSizeof, CsrWifiSmeMibGetNextCfmSer, CsrWifiSmeMibGetNextCfmDes, CsrWifiSmeMibGetNextCfmSerFree },
- { CSR_WIFI_SME_MIB_SET_CFM, CsrWifiSmeMibSetCfmSizeof, CsrWifiSmeMibSetCfmSer, CsrWifiSmeMibSetCfmDes, CsrWifiSmeMibSetCfmSerFree },
- { CSR_WIFI_SME_MIC_FAILURE_IND, CsrWifiSmeMicFailureIndSizeof, CsrWifiSmeMicFailureIndSer, CsrWifiSmeMicFailureIndDes, CsrWifiSmeMicFailureIndSerFree },
- { CSR_WIFI_SME_MULTICAST_ADDRESS_CFM, CsrWifiSmeMulticastAddressCfmSizeof, CsrWifiSmeMulticastAddressCfmSer, CsrWifiSmeMulticastAddressCfmDes, CsrWifiSmeMulticastAddressCfmSerFree },
- { CSR_WIFI_SME_PACKET_FILTER_SET_CFM, CsrWifiSmePacketFilterSetCfmSizeof, CsrWifiSmePacketFilterSetCfmSer, CsrWifiSmePacketFilterSetCfmDes, CsrWifiSmePacketFilterSetCfmSerFree },
- { CSR_WIFI_SME_PERMANENT_MAC_ADDRESS_GET_CFM, CsrWifiSmePermanentMacAddressGetCfmSizeof, CsrWifiSmePermanentMacAddressGetCfmSer, CsrWifiSmePermanentMacAddressGetCfmDes, CsrWifiSmePermanentMacAddressGetCfmSerFree },
- { CSR_WIFI_SME_PMKID_CANDIDATE_LIST_IND, CsrWifiSmePmkidCandidateListIndSizeof, CsrWifiSmePmkidCandidateListIndSer, CsrWifiSmePmkidCandidateListIndDes, CsrWifiSmePmkidCandidateListIndSerFree },
- { CSR_WIFI_SME_PMKID_CFM, CsrWifiSmePmkidCfmSizeof, CsrWifiSmePmkidCfmSer, CsrWifiSmePmkidCfmDes, CsrWifiSmePmkidCfmSerFree },
- { CSR_WIFI_SME_POWER_CONFIG_GET_CFM, CsrWifiSmePowerConfigGetCfmSizeof, CsrWifiSmePowerConfigGetCfmSer, CsrWifiSmePowerConfigGetCfmDes, CsrWifiSmePowerConfigGetCfmSerFree },
- { CSR_WIFI_SME_POWER_CONFIG_SET_CFM, CsrWifiSmePowerConfigSetCfmSizeof, CsrWifiSmePowerConfigSetCfmSer, CsrWifiSmePowerConfigSetCfmDes, CsrWifiSmePowerConfigSetCfmSerFree },
- { CSR_WIFI_SME_REGULATORY_DOMAIN_INFO_GET_CFM, CsrWifiSmeRegulatoryDomainInfoGetCfmSizeof, CsrWifiSmeRegulatoryDomainInfoGetCfmSer, CsrWifiSmeRegulatoryDomainInfoGetCfmDes, CsrWifiSmeRegulatoryDomainInfoGetCfmSerFree },
- { CSR_WIFI_SME_ROAM_COMPLETE_IND, CsrWifiSmeRoamCompleteIndSizeof, CsrWifiSmeRoamCompleteIndSer, CsrWifiSmeRoamCompleteIndDes, CsrWifiSmeRoamCompleteIndSerFree },
- { CSR_WIFI_SME_ROAM_START_IND, CsrWifiSmeRoamStartIndSizeof, CsrWifiSmeRoamStartIndSer, CsrWifiSmeRoamStartIndDes, CsrWifiSmeRoamStartIndSerFree },
- { CSR_WIFI_SME_ROAMING_CONFIG_GET_CFM, CsrWifiSmeRoamingConfigGetCfmSizeof, CsrWifiSmeRoamingConfigGetCfmSer, CsrWifiSmeRoamingConfigGetCfmDes, CsrWifiSmeRoamingConfigGetCfmSerFree },
- { CSR_WIFI_SME_ROAMING_CONFIG_SET_CFM, CsrWifiSmeRoamingConfigSetCfmSizeof, CsrWifiSmeRoamingConfigSetCfmSer, CsrWifiSmeRoamingConfigSetCfmDes, CsrWifiSmeRoamingConfigSetCfmSerFree },
- { CSR_WIFI_SME_SCAN_CONFIG_GET_CFM, CsrWifiSmeScanConfigGetCfmSizeof, CsrWifiSmeScanConfigGetCfmSer, CsrWifiSmeScanConfigGetCfmDes, CsrWifiSmeScanConfigGetCfmSerFree },
- { CSR_WIFI_SME_SCAN_CONFIG_SET_CFM, CsrWifiSmeScanConfigSetCfmSizeof, CsrWifiSmeScanConfigSetCfmSer, CsrWifiSmeScanConfigSetCfmDes, CsrWifiSmeScanConfigSetCfmSerFree },
- { CSR_WIFI_SME_SCAN_FULL_CFM, CsrWifiSmeScanFullCfmSizeof, CsrWifiSmeScanFullCfmSer, CsrWifiSmeScanFullCfmDes, CsrWifiSmeScanFullCfmSerFree },
- { CSR_WIFI_SME_SCAN_RESULT_IND, CsrWifiSmeScanResultIndSizeof, CsrWifiSmeScanResultIndSer, CsrWifiSmeScanResultIndDes, CsrWifiSmeScanResultIndSerFree },
- { CSR_WIFI_SME_SCAN_RESULTS_FLUSH_CFM, CsrWifiSmeScanResultsFlushCfmSizeof, CsrWifiSmeScanResultsFlushCfmSer, CsrWifiSmeScanResultsFlushCfmDes, CsrWifiSmeScanResultsFlushCfmSerFree },
- { CSR_WIFI_SME_SCAN_RESULTS_GET_CFM, CsrWifiSmeScanResultsGetCfmSizeof, CsrWifiSmeScanResultsGetCfmSer, CsrWifiSmeScanResultsGetCfmDes, CsrWifiSmeScanResultsGetCfmSerFree },
- { CSR_WIFI_SME_SME_STA_CONFIG_GET_CFM, CsrWifiSmeSmeStaConfigGetCfmSizeof, CsrWifiSmeSmeStaConfigGetCfmSer, CsrWifiSmeSmeStaConfigGetCfmDes, CsrWifiSmeSmeStaConfigGetCfmSerFree },
- { CSR_WIFI_SME_SME_STA_CONFIG_SET_CFM, CsrWifiSmeSmeStaConfigSetCfmSizeof, CsrWifiSmeSmeStaConfigSetCfmSer, CsrWifiSmeSmeStaConfigSetCfmDes, CsrWifiSmeSmeStaConfigSetCfmSerFree },
- { CSR_WIFI_SME_STATION_MAC_ADDRESS_GET_CFM, CsrWifiSmeStationMacAddressGetCfmSizeof, CsrWifiSmeStationMacAddressGetCfmSer, CsrWifiSmeStationMacAddressGetCfmDes, CsrWifiSmeStationMacAddressGetCfmSerFree },
- { CSR_WIFI_SME_TSPEC_IND, CsrWifiSmeTspecIndSizeof, CsrWifiSmeTspecIndSer, CsrWifiSmeTspecIndDes, CsrWifiSmeTspecIndSerFree },
- { CSR_WIFI_SME_TSPEC_CFM, CsrWifiSmeTspecCfmSizeof, CsrWifiSmeTspecCfmSer, CsrWifiSmeTspecCfmDes, CsrWifiSmeTspecCfmSerFree },
- { CSR_WIFI_SME_VERSIONS_GET_CFM, CsrWifiSmeVersionsGetCfmSizeof, CsrWifiSmeVersionsGetCfmSer, CsrWifiSmeVersionsGetCfmDes, CsrWifiSmeVersionsGetCfmSerFree },
- { CSR_WIFI_SME_WIFI_FLIGHTMODE_CFM, CsrWifiSmeWifiFlightmodeCfmSizeof, CsrWifiSmeWifiFlightmodeCfmSer, CsrWifiSmeWifiFlightmodeCfmDes, CsrWifiSmeWifiFlightmodeCfmSerFree },
- { CSR_WIFI_SME_WIFI_OFF_IND, CsrWifiSmeWifiOffIndSizeof, CsrWifiSmeWifiOffIndSer, CsrWifiSmeWifiOffIndDes, CsrWifiSmeWifiOffIndSerFree },
- { CSR_WIFI_SME_WIFI_OFF_CFM, CsrWifiSmeWifiOffCfmSizeof, CsrWifiSmeWifiOffCfmSer, CsrWifiSmeWifiOffCfmDes, CsrWifiSmeWifiOffCfmSerFree },
- { CSR_WIFI_SME_WIFI_ON_CFM, CsrWifiSmeWifiOnCfmSizeof, CsrWifiSmeWifiOnCfmSer, CsrWifiSmeWifiOnCfmDes, CsrWifiSmeWifiOnCfmSerFree },
- { CSR_WIFI_SME_CLOAKED_SSIDS_SET_CFM, CsrWifiSmeCloakedSsidsSetCfmSizeof, CsrWifiSmeCloakedSsidsSetCfmSer, CsrWifiSmeCloakedSsidsSetCfmDes, CsrWifiSmeCloakedSsidsSetCfmSerFree },
- { CSR_WIFI_SME_CLOAKED_SSIDS_GET_CFM, CsrWifiSmeCloakedSsidsGetCfmSizeof, CsrWifiSmeCloakedSsidsGetCfmSer, CsrWifiSmeCloakedSsidsGetCfmDes, CsrWifiSmeCloakedSsidsGetCfmSerFree },
- { CSR_WIFI_SME_WIFI_ON_IND, CsrWifiSmeWifiOnIndSizeof, CsrWifiSmeWifiOnIndSer, CsrWifiSmeWifiOnIndDes, CsrWifiSmeWifiOnIndSerFree },
- { CSR_WIFI_SME_SME_COMMON_CONFIG_GET_CFM, CsrWifiSmeSmeCommonConfigGetCfmSizeof, CsrWifiSmeSmeCommonConfigGetCfmSer, CsrWifiSmeSmeCommonConfigGetCfmDes, CsrWifiSmeSmeCommonConfigGetCfmSerFree },
- { CSR_WIFI_SME_SME_COMMON_CONFIG_SET_CFM, CsrWifiSmeSmeCommonConfigSetCfmSizeof, CsrWifiSmeSmeCommonConfigSetCfmSer, CsrWifiSmeSmeCommonConfigSetCfmDes, CsrWifiSmeSmeCommonConfigSetCfmSerFree },
- { CSR_WIFI_SME_INTERFACE_CAPABILITY_GET_CFM, CsrWifiSmeInterfaceCapabilityGetCfmSizeof, CsrWifiSmeInterfaceCapabilityGetCfmSer, CsrWifiSmeInterfaceCapabilityGetCfmDes, CsrWifiSmeInterfaceCapabilityGetCfmSerFree },
- { CSR_WIFI_SME_ERROR_IND, CsrWifiSmeErrorIndSizeof, CsrWifiSmeErrorIndSer, CsrWifiSmeErrorIndDes, CsrWifiSmeErrorIndSerFree },
- { CSR_WIFI_SME_INFO_IND, CsrWifiSmeInfoIndSizeof, CsrWifiSmeInfoIndSer, CsrWifiSmeInfoIndDes, CsrWifiSmeInfoIndSerFree },
- { CSR_WIFI_SME_CORE_DUMP_IND, CsrWifiSmeCoreDumpIndSizeof, CsrWifiSmeCoreDumpIndSer, CsrWifiSmeCoreDumpIndDes, CsrWifiSmeCoreDumpIndSerFree },
- { CSR_WIFI_SME_AMP_STATUS_CHANGE_IND, CsrWifiSmeAmpStatusChangeIndSizeof, CsrWifiSmeAmpStatusChangeIndSer, CsrWifiSmeAmpStatusChangeIndDes, CsrWifiSmeAmpStatusChangeIndSerFree },
- { CSR_WIFI_SME_WPS_CONFIGURATION_CFM, CsrWifiSmeWpsConfigurationCfmSizeof, CsrWifiSmeWpsConfigurationCfmSer, CsrWifiSmeWpsConfigurationCfmDes, CsrWifiSmeWpsConfigurationCfmSerFree },
-
- { 0, NULL, NULL, NULL, NULL },
-};
-
-CsrMsgConvMsgEntry* CsrWifiSmeConverterLookup(CsrMsgConvMsgEntry *ce, u16 msgType)
-{
- if (msgType & CSR_PRIM_UPSTREAM)
- {
- u16 idx = (msgType & ~CSR_PRIM_UPSTREAM) + CSR_WIFI_SME_PRIM_DOWNSTREAM_COUNT;
- if (idx < (CSR_WIFI_SME_PRIM_UPSTREAM_COUNT + CSR_WIFI_SME_PRIM_DOWNSTREAM_COUNT) &&
- csrwifisme_conv_lut[idx].msgType == msgType)
- {
- return &csrwifisme_conv_lut[idx];
- }
- }
- else
- {
- if (msgType < CSR_WIFI_SME_PRIM_DOWNSTREAM_COUNT &&
- csrwifisme_conv_lut[msgType].msgType == msgType)
- {
- return &csrwifisme_conv_lut[msgType];
- }
- }
- return NULL;
-}
-
-
-void CsrWifiSmeConverterInit(void)
-{
- CsrMsgConvInsert(CSR_WIFI_SME_PRIM, csrwifisme_conv_lut);
- CsrMsgConvCustomLookupRegister(CSR_WIFI_SME_PRIM, CsrWifiSmeConverterLookup);
-}
-
-
-#ifdef CSR_LOG_ENABLE
-static const CsrLogPrimitiveInformation csrwifisme_conv_info = {
- CSR_WIFI_SME_PRIM,
- (char *)"CSR_WIFI_SME_PRIM",
- csrwifisme_conv_lut
-};
-const CsrLogPrimitiveInformation* CsrWifiSmeTechInfoGet(void)
-{
- return &csrwifisme_conv_info;
-}
-
-
-#endif /* CSR_LOG_ENABLE */
-#endif /* EXCLUDE_CSR_WIFI_SME_MODULE */
diff --git a/drivers/staging/csr/csr_wifi_sme_converter_init.h b/drivers/staging/csr/csr_wifi_sme_converter_init.h
deleted file mode 100644
index ba5e4b44bb6b..000000000000
--- a/drivers/staging/csr/csr_wifi_sme_converter_init.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_SME_CONVERTER_INIT_H__
-#define CSR_WIFI_SME_CONVERTER_INIT_H__
-
-#ifndef EXCLUDE_CSR_WIFI_SME_MODULE
-
-#include "csr_msgconv.h"
-
-#ifdef CSR_LOG_ENABLE
-#include "csr_log.h"
-
-extern const CsrLogPrimitiveInformation* CsrWifiSmeTechInfoGet(void);
-#endif /* CSR_LOG_ENABLE */
-
-extern void CsrWifiSmeConverterInit(void);
-
-#else /* EXCLUDE_CSR_WIFI_SME_MODULE */
-
-#define CsrWifiSmeConverterInit()
-
-#endif /* EXCLUDE_CSR_WIFI_SME_MODULE */
-
-#endif /* CSR_WIFI_SME_CONVERTER_INIT_H__ */
diff --git a/drivers/staging/csr/csr_wifi_sme_free_downstream_contents.c b/drivers/staging/csr/csr_wifi_sme_free_downstream_contents.c
deleted file mode 100644
index 03b5ddb22cd7..000000000000
--- a/drivers/staging/csr/csr_wifi_sme_free_downstream_contents.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-#include <linux/slab.h>
-#include "csr_wifi_sme_prim.h"
-#include "csr_wifi_sme_lib.h"
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrWifiSmeFreeDownstreamMessageContents
- *
- * DESCRIPTION
- *
- *
- * PARAMETERS
- * eventClass: only the value CSR_WIFI_SME_PRIM will be handled
- * message: the message to free
- *----------------------------------------------------------------------------*/
-void CsrWifiSmeFreeDownstreamMessageContents(u16 eventClass, void *message)
-{
- if (eventClass != CSR_WIFI_SME_PRIM)
- {
- return;
- }
- if (NULL == message)
- {
- return;
- }
-
- switch (*((CsrWifiSmePrim *) message))
- {
- case CSR_WIFI_SME_BLACKLIST_REQ:
- {
- CsrWifiSmeBlacklistReq *p = (CsrWifiSmeBlacklistReq *)message;
- kfree(p->setAddresses);
- p->setAddresses = NULL;
- break;
- }
- case CSR_WIFI_SME_CALIBRATION_DATA_SET_REQ:
- {
- CsrWifiSmeCalibrationDataSetReq *p = (CsrWifiSmeCalibrationDataSetReq *)message;
- kfree(p->calibrationData);
- p->calibrationData = NULL;
- break;
- }
- case CSR_WIFI_SME_CONNECT_REQ:
- {
- CsrWifiSmeConnectReq *p = (CsrWifiSmeConnectReq *)message;
- kfree(p->connectionConfig.mlmeAssociateReqInformationElements);
- p->connectionConfig.mlmeAssociateReqInformationElements = NULL;
- break;
- }
- case CSR_WIFI_SME_MIB_GET_NEXT_REQ:
- {
- CsrWifiSmeMibGetNextReq *p = (CsrWifiSmeMibGetNextReq *)message;
- kfree(p->mibAttribute);
- p->mibAttribute = NULL;
- break;
- }
- case CSR_WIFI_SME_MIB_GET_REQ:
- {
- CsrWifiSmeMibGetReq *p = (CsrWifiSmeMibGetReq *)message;
- kfree(p->mibAttribute);
- p->mibAttribute = NULL;
- break;
- }
- case CSR_WIFI_SME_MIB_SET_REQ:
- {
- CsrWifiSmeMibSetReq *p = (CsrWifiSmeMibSetReq *)message;
- kfree(p->mibAttribute);
- p->mibAttribute = NULL;
- break;
- }
- case CSR_WIFI_SME_MULTICAST_ADDRESS_REQ:
- {
- CsrWifiSmeMulticastAddressReq *p = (CsrWifiSmeMulticastAddressReq *)message;
- kfree(p->setAddresses);
- p->setAddresses = NULL;
- break;
- }
- case CSR_WIFI_SME_PACKET_FILTER_SET_REQ:
- {
- CsrWifiSmePacketFilterSetReq *p = (CsrWifiSmePacketFilterSetReq *)message;
- kfree(p->filter);
- p->filter = NULL;
- break;
- }
- case CSR_WIFI_SME_PMKID_REQ:
- {
- CsrWifiSmePmkidReq *p = (CsrWifiSmePmkidReq *)message;
- kfree(p->setPmkids);
- p->setPmkids = NULL;
- break;
- }
- case CSR_WIFI_SME_SCAN_CONFIG_SET_REQ:
- {
- CsrWifiSmeScanConfigSetReq *p = (CsrWifiSmeScanConfigSetReq *)message;
- kfree(p->scanConfig.passiveChannelList);
- p->scanConfig.passiveChannelList = NULL;
- break;
- }
- case CSR_WIFI_SME_SCAN_FULL_REQ:
- {
- CsrWifiSmeScanFullReq *p = (CsrWifiSmeScanFullReq *)message;
- kfree(p->ssid);
- p->ssid = NULL;
- kfree(p->channelList);
- p->channelList = NULL;
- kfree(p->probeIe);
- p->probeIe = NULL;
- break;
- }
- case CSR_WIFI_SME_TSPEC_REQ:
- {
- CsrWifiSmeTspecReq *p = (CsrWifiSmeTspecReq *)message;
- kfree(p->tspec);
- p->tspec = NULL;
- kfree(p->tclas);
- p->tclas = NULL;
- break;
- }
- case CSR_WIFI_SME_WIFI_FLIGHTMODE_REQ:
- {
- CsrWifiSmeWifiFlightmodeReq *p = (CsrWifiSmeWifiFlightmodeReq *)message;
- {
- u16 i1;
- for (i1 = 0; i1 < p->mibFilesCount; i1++)
- {
- kfree(p->mibFiles[i1].data);
- p->mibFiles[i1].data = NULL;
- }
- }
- kfree(p->mibFiles);
- p->mibFiles = NULL;
- break;
- }
- case CSR_WIFI_SME_WIFI_ON_REQ:
- {
- CsrWifiSmeWifiOnReq *p = (CsrWifiSmeWifiOnReq *)message;
- {
- u16 i1;
- for (i1 = 0; i1 < p->mibFilesCount; i1++)
- {
- kfree(p->mibFiles[i1].data);
- p->mibFiles[i1].data = NULL;
- }
- }
- kfree(p->mibFiles);
- p->mibFiles = NULL;
- break;
- }
- case CSR_WIFI_SME_CLOAKED_SSIDS_SET_REQ:
- {
- CsrWifiSmeCloakedSsidsSetReq *p = (CsrWifiSmeCloakedSsidsSetReq *)message;
- kfree(p->cloakedSsids.cloakedSsids);
- p->cloakedSsids.cloakedSsids = NULL;
- break;
- }
- case CSR_WIFI_SME_WPS_CONFIGURATION_REQ:
- {
- CsrWifiSmeWpsConfigurationReq *p = (CsrWifiSmeWpsConfigurationReq *)message;
- kfree(p->wpsConfig.secondaryDeviceType);
- p->wpsConfig.secondaryDeviceType = NULL;
- break;
- }
- case CSR_WIFI_SME_SET_REQ:
- {
- CsrWifiSmeSetReq *p = (CsrWifiSmeSetReq *)message;
- kfree(p->data);
- p->data = NULL;
- break;
- }
-
- default:
- break;
- }
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_sme_free_upstream_contents.c b/drivers/staging/csr/csr_wifi_sme_free_upstream_contents.c
deleted file mode 100644
index c04767baaa5b..000000000000
--- a/drivers/staging/csr/csr_wifi_sme_free_upstream_contents.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-#include <linux/slab.h>
-#include "csr_wifi_sme_prim.h"
-#include "csr_wifi_sme_lib.h"
-
-/*----------------------------------------------------------------------------*
- * NAME
- * CsrWifiSmeFreeUpstreamMessageContents
- *
- * DESCRIPTION
- *
- *
- * PARAMETERS
- * eventClass: only the value CSR_WIFI_SME_PRIM will be handled
- * message: the message to free
- *----------------------------------------------------------------------------*/
-void CsrWifiSmeFreeUpstreamMessageContents(u16 eventClass, void *message)
-{
- if (eventClass != CSR_WIFI_SME_PRIM)
- {
- return;
- }
- if (NULL == message)
- {
- return;
- }
-
- switch (*((CsrWifiSmePrim *) message))
- {
- case CSR_WIFI_SME_ASSOCIATION_COMPLETE_IND:
- {
- CsrWifiSmeAssociationCompleteInd *p = (CsrWifiSmeAssociationCompleteInd *)message;
- kfree(p->connectionInfo.beaconFrame);
- p->connectionInfo.beaconFrame = NULL;
- kfree(p->connectionInfo.associationReqFrame);
- p->connectionInfo.associationReqFrame = NULL;
- kfree(p->connectionInfo.associationRspFrame);
- p->connectionInfo.associationRspFrame = NULL;
- kfree(p->connectionInfo.assocScanInfoElements);
- p->connectionInfo.assocScanInfoElements = NULL;
- kfree(p->connectionInfo.assocReqInfoElements);
- p->connectionInfo.assocReqInfoElements = NULL;
- kfree(p->connectionInfo.assocRspInfoElements);
- p->connectionInfo.assocRspInfoElements = NULL;
- break;
- }
- case CSR_WIFI_SME_BLACKLIST_CFM:
- {
- CsrWifiSmeBlacklistCfm *p = (CsrWifiSmeBlacklistCfm *)message;
- kfree(p->getAddresses);
- p->getAddresses = NULL;
- break;
- }
- case CSR_WIFI_SME_CALIBRATION_DATA_GET_CFM:
- {
- CsrWifiSmeCalibrationDataGetCfm *p = (CsrWifiSmeCalibrationDataGetCfm *)message;
- kfree(p->calibrationData);
- p->calibrationData = NULL;
- break;
- }
- case CSR_WIFI_SME_CONNECTION_CONFIG_GET_CFM:
- {
- CsrWifiSmeConnectionConfigGetCfm *p = (CsrWifiSmeConnectionConfigGetCfm *)message;
- kfree(p->connectionConfig.mlmeAssociateReqInformationElements);
- p->connectionConfig.mlmeAssociateReqInformationElements = NULL;
- break;
- }
- case CSR_WIFI_SME_CONNECTION_INFO_GET_CFM:
- {
- CsrWifiSmeConnectionInfoGetCfm *p = (CsrWifiSmeConnectionInfoGetCfm *)message;
- kfree(p->connectionInfo.beaconFrame);
- p->connectionInfo.beaconFrame = NULL;
- kfree(p->connectionInfo.associationReqFrame);
- p->connectionInfo.associationReqFrame = NULL;
- kfree(p->connectionInfo.associationRspFrame);
- p->connectionInfo.associationRspFrame = NULL;
- kfree(p->connectionInfo.assocScanInfoElements);
- p->connectionInfo.assocScanInfoElements = NULL;
- kfree(p->connectionInfo.assocReqInfoElements);
- p->connectionInfo.assocReqInfoElements = NULL;
- kfree(p->connectionInfo.assocRspInfoElements);
- p->connectionInfo.assocRspInfoElements = NULL;
- break;
- }
- case CSR_WIFI_SME_MEDIA_STATUS_IND:
- {
- CsrWifiSmeMediaStatusInd *p = (CsrWifiSmeMediaStatusInd *)message;
- kfree(p->connectionInfo.beaconFrame);
- p->connectionInfo.beaconFrame = NULL;
- kfree(p->connectionInfo.associationReqFrame);
- p->connectionInfo.associationReqFrame = NULL;
- kfree(p->connectionInfo.associationRspFrame);
- p->connectionInfo.associationRspFrame = NULL;
- kfree(p->connectionInfo.assocScanInfoElements);
- p->connectionInfo.assocScanInfoElements = NULL;
- kfree(p->connectionInfo.assocReqInfoElements);
- p->connectionInfo.assocReqInfoElements = NULL;
- kfree(p->connectionInfo.assocRspInfoElements);
- p->connectionInfo.assocRspInfoElements = NULL;
- break;
- }
- case CSR_WIFI_SME_MIB_GET_CFM:
- {
- CsrWifiSmeMibGetCfm *p = (CsrWifiSmeMibGetCfm *)message;
- kfree(p->mibAttribute);
- p->mibAttribute = NULL;
- break;
- }
- case CSR_WIFI_SME_MIB_GET_NEXT_CFM:
- {
- CsrWifiSmeMibGetNextCfm *p = (CsrWifiSmeMibGetNextCfm *)message;
- kfree(p->mibAttribute);
- p->mibAttribute = NULL;
- break;
- }
- case CSR_WIFI_SME_MULTICAST_ADDRESS_CFM:
- {
- CsrWifiSmeMulticastAddressCfm *p = (CsrWifiSmeMulticastAddressCfm *)message;
- kfree(p->getAddresses);
- p->getAddresses = NULL;
- break;
- }
- case CSR_WIFI_SME_PMKID_CANDIDATE_LIST_IND:
- {
- CsrWifiSmePmkidCandidateListInd *p = (CsrWifiSmePmkidCandidateListInd *)message;
- kfree(p->pmkidCandidates);
- p->pmkidCandidates = NULL;
- break;
- }
- case CSR_WIFI_SME_PMKID_CFM:
- {
- CsrWifiSmePmkidCfm *p = (CsrWifiSmePmkidCfm *)message;
- kfree(p->getPmkids);
- p->getPmkids = NULL;
- break;
- }
- case CSR_WIFI_SME_SCAN_CONFIG_GET_CFM:
- {
- CsrWifiSmeScanConfigGetCfm *p = (CsrWifiSmeScanConfigGetCfm *)message;
- kfree(p->scanConfig.passiveChannelList);
- p->scanConfig.passiveChannelList = NULL;
- break;
- }
- case CSR_WIFI_SME_SCAN_RESULT_IND:
- {
- CsrWifiSmeScanResultInd *p = (CsrWifiSmeScanResultInd *)message;
- kfree(p->result.informationElements);
- p->result.informationElements = NULL;
- switch (p->result.p2pDeviceRole)
- {
- case CSR_WIFI_SME_P2P_ROLE_GO:
- {
- u16 i4;
- for (i4 = 0; i4 < p->result.deviceInfo.groupInfo.p2pClientInfoCount; i4++)
- {
- kfree(p->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType);
- p->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType = NULL;
- }
- }
- kfree(p->result.deviceInfo.groupInfo.p2PClientInfo);
- p->result.deviceInfo.groupInfo.p2PClientInfo = NULL;
- break;
- case CSR_WIFI_SME_P2P_ROLE_STANDALONE:
- kfree(p->result.deviceInfo.standalonedevInfo.secDeviceType);
- p->result.deviceInfo.standalonedevInfo.secDeviceType = NULL;
- break;
- default:
- break;
- }
- break;
- }
- case CSR_WIFI_SME_SCAN_RESULTS_GET_CFM:
- {
- CsrWifiSmeScanResultsGetCfm *p = (CsrWifiSmeScanResultsGetCfm *)message;
- {
- u16 i1;
- for (i1 = 0; i1 < p->scanResultsCount; i1++)
- {
- kfree(p->scanResults[i1].informationElements);
- p->scanResults[i1].informationElements = NULL;
- switch (p->scanResults[i1].p2pDeviceRole)
- {
- case CSR_WIFI_SME_P2P_ROLE_GO:
- {
- u16 i4;
- for (i4 = 0; i4 < p->scanResults[i1].deviceInfo.groupInfo.p2pClientInfoCount; i4++)
- {
- kfree(p->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType);
- p->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType = NULL;
- }
- }
- kfree(p->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo);
- p->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo = NULL;
- break;
- case CSR_WIFI_SME_P2P_ROLE_STANDALONE:
- kfree(p->scanResults[i1].deviceInfo.standalonedevInfo.secDeviceType);
- p->scanResults[i1].deviceInfo.standalonedevInfo.secDeviceType = NULL;
- break;
- default:
- break;
- }
- }
- }
- kfree(p->scanResults);
- p->scanResults = NULL;
- break;
- }
- case CSR_WIFI_SME_TSPEC_IND:
- {
- CsrWifiSmeTspecInd *p = (CsrWifiSmeTspecInd *)message;
- kfree(p->tspec);
- p->tspec = NULL;
- break;
- }
- case CSR_WIFI_SME_TSPEC_CFM:
- {
- CsrWifiSmeTspecCfm *p = (CsrWifiSmeTspecCfm *)message;
- kfree(p->tspec);
- p->tspec = NULL;
- break;
- }
- case CSR_WIFI_SME_VERSIONS_GET_CFM:
- {
- CsrWifiSmeVersionsGetCfm *p = (CsrWifiSmeVersionsGetCfm *)message;
- kfree(p->versions.routerBuild);
- p->versions.routerBuild = NULL;
- kfree(p->versions.smeBuild);
- p->versions.smeBuild = NULL;
- break;
- }
- case CSR_WIFI_SME_CLOAKED_SSIDS_GET_CFM:
- {
- CsrWifiSmeCloakedSsidsGetCfm *p = (CsrWifiSmeCloakedSsidsGetCfm *)message;
- kfree(p->cloakedSsids.cloakedSsids);
- p->cloakedSsids.cloakedSsids = NULL;
- break;
- }
- case CSR_WIFI_SME_ERROR_IND:
- {
- CsrWifiSmeErrorInd *p = (CsrWifiSmeErrorInd *)message;
- kfree(p->errorMessage);
- p->errorMessage = NULL;
- break;
- }
- case CSR_WIFI_SME_INFO_IND:
- {
- CsrWifiSmeInfoInd *p = (CsrWifiSmeInfoInd *)message;
- kfree(p->infoMessage);
- p->infoMessage = NULL;
- break;
- }
- case CSR_WIFI_SME_CORE_DUMP_IND:
- {
- CsrWifiSmeCoreDumpInd *p = (CsrWifiSmeCoreDumpInd *)message;
- kfree(p->data);
- p->data = NULL;
- break;
- }
-
- default:
- break;
- }
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_sme_lib.h b/drivers/staging/csr/csr_wifi_sme_lib.h
deleted file mode 100644
index 53cf1268286e..000000000000
--- a/drivers/staging/csr/csr_wifi_sme_lib.h
+++ /dev/null
@@ -1,4303 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_SME_LIB_H__
-#define CSR_WIFI_SME_LIB_H__
-
-#include "csr_sched.h"
-#include "csr_macro.h"
-#include "csr_msg_transport.h"
-
-#include "csr_wifi_lib.h"
-
-#include "csr_wifi_sme_prim.h"
-#include "csr_wifi_sme_task.h"
-
-
-#ifndef CSR_WIFI_SME_LIB_DESTINATION_QUEUE
-# ifdef CSR_WIFI_NME_ENABLE
-# include "csr_wifi_nme_task.h"
-# define CSR_WIFI_SME_LIB_DESTINATION_QUEUE CSR_WIFI_NME_IFACEQUEUE
-# else
-# define CSR_WIFI_SME_LIB_DESTINATION_QUEUE CSR_WIFI_SME_IFACEQUEUE
-# endif
-#endif
-
-/*----------------------------------------------------------------------------*
- * CsrWifiSmeFreeUpstreamMessageContents
- *
- * DESCRIPTION
- * Free the allocated memory in a CSR_WIFI_SME upstream message. Does not
- * free the message itself, and can only be used for upstream messages.
- *
- * PARAMETERS
- * Deallocates the resources in a CSR_WIFI_SME upstream message
- *----------------------------------------------------------------------------*/
-void CsrWifiSmeFreeUpstreamMessageContents(u16 eventClass, void *message);
-
-/*----------------------------------------------------------------------------*
- * CsrWifiSmeFreeDownstreamMessageContents
- *
- * DESCRIPTION
- * Free the allocated memory in a CSR_WIFI_SME downstream message. Does not
- * free the message itself, and can only be used for downstream messages.
- *
- * PARAMETERS
- * Deallocates the resources in a CSR_WIFI_SME downstream message
- *----------------------------------------------------------------------------*/
-void CsrWifiSmeFreeDownstreamMessageContents(u16 eventClass, void *message);
-
-/*----------------------------------------------------------------------------*
- * Enum to string functions
- *----------------------------------------------------------------------------*/
-const char* CsrWifiSme80211NetworkTypeToString(CsrWifiSme80211NetworkType value);
-const char* CsrWifiSme80211PrivacyModeToString(CsrWifiSme80211PrivacyMode value);
-const char* CsrWifiSme80211dTrustLevelToString(CsrWifiSme80211dTrustLevel value);
-const char* CsrWifiSmeAmpStatusToString(CsrWifiSmeAmpStatus value);
-const char* CsrWifiSmeAuthModeToString(CsrWifiSmeAuthMode value);
-const char* CsrWifiSmeBasicUsabilityToString(CsrWifiSmeBasicUsability value);
-const char* CsrWifiSmeBssTypeToString(CsrWifiSmeBssType value);
-const char* CsrWifiSmeCoexSchemeToString(CsrWifiSmeCoexScheme value);
-const char* CsrWifiSmeControlIndicationToString(CsrWifiSmeControlIndication value);
-const char* CsrWifiSmeCtsProtectionTypeToString(CsrWifiSmeCtsProtectionType value);
-const char* CsrWifiSmeD3AutoScanModeToString(CsrWifiSmeD3AutoScanMode value);
-const char* CsrWifiSmeEncryptionToString(CsrWifiSmeEncryption value);
-const char* CsrWifiSmeFirmwareDriverInterfaceToString(CsrWifiSmeFirmwareDriverInterface value);
-const char* CsrWifiSmeHostPowerModeToString(CsrWifiSmeHostPowerMode value);
-const char* CsrWifiSmeIEEE80211ReasonToString(CsrWifiSmeIEEE80211Reason value);
-const char* CsrWifiSmeIEEE80211ResultToString(CsrWifiSmeIEEE80211Result value);
-const char* CsrWifiSmeIndicationsToString(CsrWifiSmeIndications value);
-const char* CsrWifiSmeKeyTypeToString(CsrWifiSmeKeyType value);
-const char* CsrWifiSmeListActionToString(CsrWifiSmeListAction value);
-const char* CsrWifiSmeMediaStatusToString(CsrWifiSmeMediaStatus value);
-const char* CsrWifiSmeP2pCapabilityToString(CsrWifiSmeP2pCapability value);
-const char* CsrWifiSmeP2pGroupCapabilityToString(CsrWifiSmeP2pGroupCapability value);
-const char* CsrWifiSmeP2pNoaConfigMethodToString(CsrWifiSmeP2pNoaConfigMethod value);
-const char* CsrWifiSmeP2pRoleToString(CsrWifiSmeP2pRole value);
-const char* CsrWifiSmeP2pStatusToString(CsrWifiSmeP2pStatus value);
-const char* CsrWifiSmePacketFilterModeToString(CsrWifiSmePacketFilterMode value);
-const char* CsrWifiSmePowerSaveLevelToString(CsrWifiSmePowerSaveLevel value);
-const char* CsrWifiSmePreambleTypeToString(CsrWifiSmePreambleType value);
-const char* CsrWifiSmeRadioIFToString(CsrWifiSmeRadioIF value);
-const char* CsrWifiSmeRegulatoryDomainToString(CsrWifiSmeRegulatoryDomain value);
-const char* CsrWifiSmeRoamReasonToString(CsrWifiSmeRoamReason value);
-const char* CsrWifiSmeScanTypeToString(CsrWifiSmeScanType value);
-const char* CsrWifiSmeTrafficTypeToString(CsrWifiSmeTrafficType value);
-const char* CsrWifiSmeTspecCtrlToString(CsrWifiSmeTspecCtrl value);
-const char* CsrWifiSmeTspecResultCodeToString(CsrWifiSmeTspecResultCode value);
-const char* CsrWifiSmeWepAuthModeToString(CsrWifiSmeWepAuthMode value);
-const char* CsrWifiSmeWepCredentialTypeToString(CsrWifiSmeWepCredentialType value);
-const char* CsrWifiSmeWmmModeToString(CsrWifiSmeWmmMode value);
-const char* CsrWifiSmeWmmQosInfoToString(CsrWifiSmeWmmQosInfo value);
-const char* CsrWifiSmeWpsConfigTypeToString(CsrWifiSmeWpsConfigType value);
-const char* CsrWifiSmeWpsDeviceCategoryToString(CsrWifiSmeWpsDeviceCategory value);
-const char* CsrWifiSmeWpsDeviceSubCategoryToString(CsrWifiSmeWpsDeviceSubCategory value);
-const char* CsrWifiSmeWpsDpidToString(CsrWifiSmeWpsDpid value);
-const char* CsrWifiSmeWpsRegistrationToString(CsrWifiSmeWpsRegistration value);
-
-
-/*----------------------------------------------------------------------------*
- * CsrPrim Type toString function.
- * Converts a message type to the String name of the Message
- *----------------------------------------------------------------------------*/
-const char* CsrWifiSmePrimTypeToString(CsrPrim msgType);
-
-/*----------------------------------------------------------------------------*
- * Lookup arrays for PrimType name Strings
- *----------------------------------------------------------------------------*/
-extern const char *CsrWifiSmeUpstreamPrimNames[CSR_WIFI_SME_PRIM_UPSTREAM_COUNT];
-extern const char *CsrWifiSmeDownstreamPrimNames[CSR_WIFI_SME_PRIM_DOWNSTREAM_COUNT];
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeActivateReqSend
-
- DESCRIPTION
- The WMA sends this primitive to activate the SME.
- The WMA must activate the SME before it can send any other primitive.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeActivateReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeActivateReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ACTIVATE_REQ, dst__, src__);
-
-#define CsrWifiSmeActivateReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeActivateReq *msg__; \
- CsrWifiSmeActivateReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeActivateReqSend(src__) \
- CsrWifiSmeActivateReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeActivateCfmSend
-
- DESCRIPTION
- The SME sends this primitive when the activation is complete.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeActivateCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeActivateCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ACTIVATE_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeActivateCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeActivateCfm *msg__; \
- CsrWifiSmeActivateCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeActivateCfmSend(dst__, status__) \
- CsrWifiSmeActivateCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAdhocConfigGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the adHocConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeAdhocConfigGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeAdhocConfigGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ADHOC_CONFIG_GET_REQ, dst__, src__);
-
-#define CsrWifiSmeAdhocConfigGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeAdhocConfigGetReq *msg__; \
- CsrWifiSmeAdhocConfigGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeAdhocConfigGetReqSend(src__) \
- CsrWifiSmeAdhocConfigGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAdhocConfigGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- adHocConfig - Contains the values used when starting an Ad-hoc (IBSS)
- connection.
-
-*******************************************************************************/
-#define CsrWifiSmeAdhocConfigGetCfmCreate(msg__, dst__, src__, status__, adHocConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeAdhocConfigGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ADHOC_CONFIG_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->adHocConfig = (adHocConfig__);
-
-#define CsrWifiSmeAdhocConfigGetCfmSendTo(dst__, src__, status__, adHocConfig__) \
- { \
- CsrWifiSmeAdhocConfigGetCfm *msg__; \
- CsrWifiSmeAdhocConfigGetCfmCreate(msg__, dst__, src__, status__, adHocConfig__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeAdhocConfigGetCfmSend(dst__, status__, adHocConfig__) \
- CsrWifiSmeAdhocConfigGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, adHocConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAdhocConfigSetReqSend
-
- DESCRIPTION
- This primitive sets the value of the adHocConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- adHocConfig - Sets the values to use when starting an ad hoc network.
-
-*******************************************************************************/
-#define CsrWifiSmeAdhocConfigSetReqCreate(msg__, dst__, src__, adHocConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeAdhocConfigSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ADHOC_CONFIG_SET_REQ, dst__, src__); \
- msg__->adHocConfig = (adHocConfig__);
-
-#define CsrWifiSmeAdhocConfigSetReqSendTo(dst__, src__, adHocConfig__) \
- { \
- CsrWifiSmeAdhocConfigSetReq *msg__; \
- CsrWifiSmeAdhocConfigSetReqCreate(msg__, dst__, src__, adHocConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeAdhocConfigSetReqSend(src__, adHocConfig__) \
- CsrWifiSmeAdhocConfigSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, adHocConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAdhocConfigSetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeAdhocConfigSetCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeAdhocConfigSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ADHOC_CONFIG_SET_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeAdhocConfigSetCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeAdhocConfigSetCfm *msg__; \
- CsrWifiSmeAdhocConfigSetCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeAdhocConfigSetCfmSend(dst__, status__) \
- CsrWifiSmeAdhocConfigSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAmpStatusChangeIndSend
-
- DESCRIPTION
- Indication of change to AMP activity.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface on which the AMP activity changed.
- ampStatus - The new status of AMP activity.Range: {AMP_ACTIVE,
- AMP_INACTIVE}.
-
-*******************************************************************************/
-#define CsrWifiSmeAmpStatusChangeIndCreate(msg__, dst__, src__, interfaceTag__, ampStatus__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeAmpStatusChangeInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_AMP_STATUS_CHANGE_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->ampStatus = (ampStatus__);
-
-#define CsrWifiSmeAmpStatusChangeIndSendTo(dst__, src__, interfaceTag__, ampStatus__) \
- { \
- CsrWifiSmeAmpStatusChangeInd *msg__; \
- CsrWifiSmeAmpStatusChangeIndCreate(msg__, dst__, src__, interfaceTag__, ampStatus__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeAmpStatusChangeIndSend(dst__, interfaceTag__, ampStatus__) \
- CsrWifiSmeAmpStatusChangeIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, ampStatus__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAssociationCompleteIndSend
-
- DESCRIPTION
- The SME will send this primitive to all the tasks that have registered to
- receive it whenever it completes an attempt to associate with an AP. If
- the association was successful, status will be set to
- CSR_WIFI_SME_STATUS_SUCCESS, otherwise status and deauthReason shall be
- set to appropriate error codes.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the association procedure
- connectionInfo - This parameter is relevant only if result is
- CSR_WIFI_SME_STATUS_SUCCESS:
- it points to the connection information for the new network
- deauthReason - This parameter is relevant only if result is not
- CSR_WIFI_SME_STATUS_SUCCESS:
- if the AP deauthorised the station, it gives the reason of
- the deauthorization
-
-*******************************************************************************/
-#define CsrWifiSmeAssociationCompleteIndCreate(msg__, dst__, src__, interfaceTag__, status__, connectionInfo__, deauthReason__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeAssociationCompleteInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ASSOCIATION_COMPLETE_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->connectionInfo = (connectionInfo__); \
- msg__->deauthReason = (deauthReason__);
-
-#define CsrWifiSmeAssociationCompleteIndSendTo(dst__, src__, interfaceTag__, status__, connectionInfo__, deauthReason__) \
- { \
- CsrWifiSmeAssociationCompleteInd *msg__; \
- CsrWifiSmeAssociationCompleteIndCreate(msg__, dst__, src__, interfaceTag__, status__, connectionInfo__, deauthReason__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeAssociationCompleteIndSend(dst__, interfaceTag__, status__, connectionInfo__, deauthReason__) \
- CsrWifiSmeAssociationCompleteIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, connectionInfo__, deauthReason__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAssociationStartIndSend
-
- DESCRIPTION
- The SME will send this primitive to all the tasks that have registered to
- receive it whenever it begins an attempt to associate with an AP.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- address - BSSID of the associating network
- ssid - Service Set identifier of the associating network
-
-*******************************************************************************/
-#define CsrWifiSmeAssociationStartIndCreate(msg__, dst__, src__, interfaceTag__, address__, ssid__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeAssociationStartInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ASSOCIATION_START_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->address = (address__); \
- msg__->ssid = (ssid__);
-
-#define CsrWifiSmeAssociationStartIndSendTo(dst__, src__, interfaceTag__, address__, ssid__) \
- { \
- CsrWifiSmeAssociationStartInd *msg__; \
- CsrWifiSmeAssociationStartIndCreate(msg__, dst__, src__, interfaceTag__, address__, ssid__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeAssociationStartIndSend(dst__, interfaceTag__, address__, ssid__) \
- CsrWifiSmeAssociationStartIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, address__, ssid__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeBlacklistReqSend
-
- DESCRIPTION
- The wireless manager application should call this primitive to notify the
- driver of any networks that should not be connected to. The interface
- allows the wireless manager application to query, add, remove, and flush
- the BSSIDs that the driver may not connect or roam to.
- When this primitive adds to the black list the BSSID to which the SME is
- currently connected, the SME will try to roam, if applicable, to another
- BSSID in the same ESS; if the roaming procedure fails, the SME will
- disconnect.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- action - The value of the CsrWifiSmeListAction parameter instructs
- the driver to modify or provide the list of blacklisted
- networks.
- setAddressCount - Number of BSSIDs sent with this primitive
- setAddresses - Pointer to the list of BBSIDs sent with the primitive, set
- to NULL if none is sent.
-
-*******************************************************************************/
-#define CsrWifiSmeBlacklistReqCreate(msg__, dst__, src__, interfaceTag__, action__, setAddressCount__, setAddresses__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeBlacklistReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_BLACKLIST_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->action = (action__); \
- msg__->setAddressCount = (setAddressCount__); \
- msg__->setAddresses = (setAddresses__);
-
-#define CsrWifiSmeBlacklistReqSendTo(dst__, src__, interfaceTag__, action__, setAddressCount__, setAddresses__) \
- { \
- CsrWifiSmeBlacklistReq *msg__; \
- CsrWifiSmeBlacklistReqCreate(msg__, dst__, src__, interfaceTag__, action__, setAddressCount__, setAddresses__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeBlacklistReqSend(src__, interfaceTag__, action__, setAddressCount__, setAddresses__) \
- CsrWifiSmeBlacklistReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__, action__, setAddressCount__, setAddresses__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeBlacklistCfmSend
-
- DESCRIPTION
- The SME will call this primitive when the action on the blacklist has
- completed. For a GET action, this primitive also reports the list of
- BBSIDs in the blacklist.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- action - Action in the request
- getAddressCount - This parameter is only relevant if action is
- CSR_WIFI_SME_LIST_ACTION_GET:
- number of BSSIDs sent with this primitive
- getAddresses - Pointer to the list of BBSIDs sent with the primitive, set
- to NULL if none is sent.
-
-*******************************************************************************/
-#define CsrWifiSmeBlacklistCfmCreate(msg__, dst__, src__, interfaceTag__, status__, action__, getAddressCount__, getAddresses__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeBlacklistCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_BLACKLIST_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->action = (action__); \
- msg__->getAddressCount = (getAddressCount__); \
- msg__->getAddresses = (getAddresses__);
-
-#define CsrWifiSmeBlacklistCfmSendTo(dst__, src__, interfaceTag__, status__, action__, getAddressCount__, getAddresses__) \
- { \
- CsrWifiSmeBlacklistCfm *msg__; \
- CsrWifiSmeBlacklistCfmCreate(msg__, dst__, src__, interfaceTag__, status__, action__, getAddressCount__, getAddresses__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeBlacklistCfmSend(dst__, interfaceTag__, status__, action__, getAddressCount__, getAddresses__) \
- CsrWifiSmeBlacklistCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, action__, getAddressCount__, getAddresses__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCalibrationDataGetReqSend
-
- DESCRIPTION
- This primitive retrieves the Wi-Fi radio calibration data.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeCalibrationDataGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCalibrationDataGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CALIBRATION_DATA_GET_REQ, dst__, src__);
-
-#define CsrWifiSmeCalibrationDataGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeCalibrationDataGetReq *msg__; \
- CsrWifiSmeCalibrationDataGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCalibrationDataGetReqSend(src__) \
- CsrWifiSmeCalibrationDataGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCalibrationDataGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- calibrationDataLength - Number of bytes in the buffer pointed by
- calibrationData
- calibrationData - Pointer to a buffer of length calibrationDataLength
- containing the calibration data
-
-*******************************************************************************/
-#define CsrWifiSmeCalibrationDataGetCfmCreate(msg__, dst__, src__, status__, calibrationDataLength__, calibrationData__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCalibrationDataGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CALIBRATION_DATA_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->calibrationDataLength = (calibrationDataLength__); \
- msg__->calibrationData = (calibrationData__);
-
-#define CsrWifiSmeCalibrationDataGetCfmSendTo(dst__, src__, status__, calibrationDataLength__, calibrationData__) \
- { \
- CsrWifiSmeCalibrationDataGetCfm *msg__; \
- CsrWifiSmeCalibrationDataGetCfmCreate(msg__, dst__, src__, status__, calibrationDataLength__, calibrationData__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCalibrationDataGetCfmSend(dst__, status__, calibrationDataLength__, calibrationData__) \
- CsrWifiSmeCalibrationDataGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, calibrationDataLength__, calibrationData__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCalibrationDataSetReqSend
-
- DESCRIPTION
- This primitive sets the Wi-Fi radio calibration data.
- The usage of the primitive with proper calibration data will avoid
- time-consuming configuration after power-up.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- calibrationDataLength - Number of bytes in the buffer pointed by
- calibrationData
- calibrationData - Pointer to a buffer of length calibrationDataLength
- containing the calibration data
-
-*******************************************************************************/
-#define CsrWifiSmeCalibrationDataSetReqCreate(msg__, dst__, src__, calibrationDataLength__, calibrationData__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCalibrationDataSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CALIBRATION_DATA_SET_REQ, dst__, src__); \
- msg__->calibrationDataLength = (calibrationDataLength__); \
- msg__->calibrationData = (calibrationData__);
-
-#define CsrWifiSmeCalibrationDataSetReqSendTo(dst__, src__, calibrationDataLength__, calibrationData__) \
- { \
- CsrWifiSmeCalibrationDataSetReq *msg__; \
- CsrWifiSmeCalibrationDataSetReqCreate(msg__, dst__, src__, calibrationDataLength__, calibrationData__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCalibrationDataSetReqSend(src__, calibrationDataLength__, calibrationData__) \
- CsrWifiSmeCalibrationDataSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, calibrationDataLength__, calibrationData__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCalibrationDataSetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeCalibrationDataSetCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCalibrationDataSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CALIBRATION_DATA_SET_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeCalibrationDataSetCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeCalibrationDataSetCfm *msg__; \
- CsrWifiSmeCalibrationDataSetCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCalibrationDataSetCfmSend(dst__, status__) \
- CsrWifiSmeCalibrationDataSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCcxConfigGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the CcxConfig parameter.
- CURRENTLY NOT SUPPORTED.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-#define CsrWifiSmeCcxConfigGetReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCcxConfigGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CCX_CONFIG_GET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiSmeCcxConfigGetReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiSmeCcxConfigGetReq *msg__; \
- CsrWifiSmeCcxConfigGetReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCcxConfigGetReqSend(src__, interfaceTag__) \
- CsrWifiSmeCcxConfigGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCcxConfigGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- ccxConfig - Currently not supported
-
-*******************************************************************************/
-#define CsrWifiSmeCcxConfigGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, ccxConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCcxConfigGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CCX_CONFIG_GET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->ccxConfig = (ccxConfig__);
-
-#define CsrWifiSmeCcxConfigGetCfmSendTo(dst__, src__, interfaceTag__, status__, ccxConfig__) \
- { \
- CsrWifiSmeCcxConfigGetCfm *msg__; \
- CsrWifiSmeCcxConfigGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, ccxConfig__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCcxConfigGetCfmSend(dst__, interfaceTag__, status__, ccxConfig__) \
- CsrWifiSmeCcxConfigGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, ccxConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCcxConfigSetReqSend
-
- DESCRIPTION
- This primitive sets the value of the CcxConfig parameter.
- CURRENTLY NOT SUPPORTED.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- ccxConfig - Currently not supported
-
-*******************************************************************************/
-#define CsrWifiSmeCcxConfigSetReqCreate(msg__, dst__, src__, interfaceTag__, ccxConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCcxConfigSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CCX_CONFIG_SET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->ccxConfig = (ccxConfig__);
-
-#define CsrWifiSmeCcxConfigSetReqSendTo(dst__, src__, interfaceTag__, ccxConfig__) \
- { \
- CsrWifiSmeCcxConfigSetReq *msg__; \
- CsrWifiSmeCcxConfigSetReqCreate(msg__, dst__, src__, interfaceTag__, ccxConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCcxConfigSetReqSend(src__, interfaceTag__, ccxConfig__) \
- CsrWifiSmeCcxConfigSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__, ccxConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCcxConfigSetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeCcxConfigSetCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCcxConfigSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CCX_CONFIG_SET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeCcxConfigSetCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiSmeCcxConfigSetCfm *msg__; \
- CsrWifiSmeCcxConfigSetCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCcxConfigSetCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiSmeCcxConfigSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCloakedSsidsGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the CloakedSsids parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeCloakedSsidsGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCloakedSsidsGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CLOAKED_SSIDS_GET_REQ, dst__, src__);
-
-#define CsrWifiSmeCloakedSsidsGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeCloakedSsidsGetReq *msg__; \
- CsrWifiSmeCloakedSsidsGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCloakedSsidsGetReqSend(src__) \
- CsrWifiSmeCloakedSsidsGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCloakedSsidsGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- cloakedSsids - Reports list of cloaked SSIDs that are explicitly scanned for
- by the driver
-
-*******************************************************************************/
-#define CsrWifiSmeCloakedSsidsGetCfmCreate(msg__, dst__, src__, status__, cloakedSsids__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCloakedSsidsGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CLOAKED_SSIDS_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->cloakedSsids = (cloakedSsids__);
-
-#define CsrWifiSmeCloakedSsidsGetCfmSendTo(dst__, src__, status__, cloakedSsids__) \
- { \
- CsrWifiSmeCloakedSsidsGetCfm *msg__; \
- CsrWifiSmeCloakedSsidsGetCfmCreate(msg__, dst__, src__, status__, cloakedSsids__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCloakedSsidsGetCfmSend(dst__, status__, cloakedSsids__) \
- CsrWifiSmeCloakedSsidsGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, cloakedSsids__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCloakedSsidsSetReqSend
-
- DESCRIPTION
- This primitive sets the list of cloaked SSIDs for which the WMA possesses
- profiles.
- When the driver detects a cloaked AP, the SME will explicitly scan for it
- using the list of cloaked SSIDs provided it, and, if the scan succeeds,
- it will report the AP to the WMA either via CSR_WIFI_SME_SCAN_RESULT_IND
- (if registered) or via CSR_WIFI_SCAN_RESULT_GET_CFM.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- cloakedSsids - Sets the list of cloaked SSIDs
-
-*******************************************************************************/
-#define CsrWifiSmeCloakedSsidsSetReqCreate(msg__, dst__, src__, cloakedSsids__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCloakedSsidsSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CLOAKED_SSIDS_SET_REQ, dst__, src__); \
- msg__->cloakedSsids = (cloakedSsids__);
-
-#define CsrWifiSmeCloakedSsidsSetReqSendTo(dst__, src__, cloakedSsids__) \
- { \
- CsrWifiSmeCloakedSsidsSetReq *msg__; \
- CsrWifiSmeCloakedSsidsSetReqCreate(msg__, dst__, src__, cloakedSsids__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCloakedSsidsSetReqSend(src__, cloakedSsids__) \
- CsrWifiSmeCloakedSsidsSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, cloakedSsids__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCloakedSsidsSetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeCloakedSsidsSetCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCloakedSsidsSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CLOAKED_SSIDS_SET_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeCloakedSsidsSetCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeCloakedSsidsSetCfm *msg__; \
- CsrWifiSmeCloakedSsidsSetCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCloakedSsidsSetCfmSend(dst__, status__) \
- CsrWifiSmeCloakedSsidsSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexConfigGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the CoexConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeCoexConfigGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCoexConfigGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_COEX_CONFIG_GET_REQ, dst__, src__);
-
-#define CsrWifiSmeCoexConfigGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeCoexConfigGetReq *msg__; \
- CsrWifiSmeCoexConfigGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCoexConfigGetReqSend(src__) \
- CsrWifiSmeCoexConfigGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexConfigGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- coexConfig - Reports the parameters used to configure the coexistence
- behaviour
-
-*******************************************************************************/
-#define CsrWifiSmeCoexConfigGetCfmCreate(msg__, dst__, src__, status__, coexConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCoexConfigGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_COEX_CONFIG_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->coexConfig = (coexConfig__);
-
-#define CsrWifiSmeCoexConfigGetCfmSendTo(dst__, src__, status__, coexConfig__) \
- { \
- CsrWifiSmeCoexConfigGetCfm *msg__; \
- CsrWifiSmeCoexConfigGetCfmCreate(msg__, dst__, src__, status__, coexConfig__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCoexConfigGetCfmSend(dst__, status__, coexConfig__) \
- CsrWifiSmeCoexConfigGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, coexConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexConfigSetReqSend
-
- DESCRIPTION
- This primitive sets the value of the CoexConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- coexConfig - Configures the coexistence behaviour
-
-*******************************************************************************/
-#define CsrWifiSmeCoexConfigSetReqCreate(msg__, dst__, src__, coexConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCoexConfigSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_COEX_CONFIG_SET_REQ, dst__, src__); \
- msg__->coexConfig = (coexConfig__);
-
-#define CsrWifiSmeCoexConfigSetReqSendTo(dst__, src__, coexConfig__) \
- { \
- CsrWifiSmeCoexConfigSetReq *msg__; \
- CsrWifiSmeCoexConfigSetReqCreate(msg__, dst__, src__, coexConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCoexConfigSetReqSend(src__, coexConfig__) \
- CsrWifiSmeCoexConfigSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, coexConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexConfigSetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeCoexConfigSetCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCoexConfigSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_COEX_CONFIG_SET_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeCoexConfigSetCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeCoexConfigSetCfm *msg__; \
- CsrWifiSmeCoexConfigSetCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCoexConfigSetCfmSend(dst__, status__) \
- CsrWifiSmeCoexConfigSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexInfoGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the CoexInfo parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeCoexInfoGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCoexInfoGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_COEX_INFO_GET_REQ, dst__, src__);
-
-#define CsrWifiSmeCoexInfoGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeCoexInfoGetReq *msg__; \
- CsrWifiSmeCoexInfoGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCoexInfoGetReqSend(src__) \
- CsrWifiSmeCoexInfoGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexInfoGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- coexInfo - Reports information and state related to coexistence.
-
-*******************************************************************************/
-#define CsrWifiSmeCoexInfoGetCfmCreate(msg__, dst__, src__, status__, coexInfo__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCoexInfoGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_COEX_INFO_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->coexInfo = (coexInfo__);
-
-#define CsrWifiSmeCoexInfoGetCfmSendTo(dst__, src__, status__, coexInfo__) \
- { \
- CsrWifiSmeCoexInfoGetCfm *msg__; \
- CsrWifiSmeCoexInfoGetCfmCreate(msg__, dst__, src__, status__, coexInfo__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCoexInfoGetCfmSend(dst__, status__, coexInfo__) \
- CsrWifiSmeCoexInfoGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, coexInfo__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectReqSend
-
- DESCRIPTION
- The wireless manager application calls this primitive to start the
- process of joining an 802.11 wireless network or to start an ad hoc
- network.
- The structure pointed by connectionConfig contains parameters describing
- the network to join or, in case of an ad hoc network, to host or join.
- The SME will select a network, perform the IEEE 802.11 Join, Authenticate
- and Associate exchanges.
- The SME selects the networks from the current scan list that match both
- the SSID and BSSID, however either or both of these may be the wildcard
- value. Using this rule, the following operations are possible:
- * To connect to a network by name, specify the SSID and set the BSSID to
- 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF. If there are two or more networks visible,
- the SME will select the one with the strongest signal.
- * To connect to a specific network, specify the BSSID. The SSID is
- optional, but if given it must match the SSID of the network. An empty
- SSID may be specified by setting the SSID length to zero. Please note
- that if the BSSID is specified (i.e. not equal to 0xFF 0xFF 0xFF 0xFF
- 0xFF 0xFF), the SME will not attempt to roam if signal conditions become
- poor, even if there is an alternative AP with an SSID that matches the
- current network SSID.
- * To connect to any network matching the other parameters (i.e. security,
- etc), set the SSID length to zero and set the BSSID to 0xFF 0xFF 0xFF
- 0xFF 0xFF 0xFF. In this case, the SME will order all available networks
- by their signal strengths and will iterate through this list until it
- successfully connects.
- NOTE: Specifying the BSSID will restrict the selection to one specific
- network. If SSID and BSSID are given, they must both match the network
- for it to be selected. To select a network based on the SSID only, the
- wireless manager application must set the BSSID to 0xFF 0xFF 0xFF 0xFF
- 0xFF 0xFF.
- The SME will try to connect to each network that matches the provided
- parameters, one by one, until it succeeds or has tried unsuccessfully
- with all the matching networks.
- If there is no network that matches the parameters and the request allows
- to host an ad hoc network, the SME will advertise a new ad hoc network
- instead.
- If the SME cannot connect, it will notify the failure in the confirm.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- connectionConfig - Describes the candidate network to join or to host.
-
-*******************************************************************************/
-#define CsrWifiSmeConnectReqCreate(msg__, dst__, src__, interfaceTag__, connectionConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeConnectReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CONNECT_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->connectionConfig = (connectionConfig__);
-
-#define CsrWifiSmeConnectReqSendTo(dst__, src__, interfaceTag__, connectionConfig__) \
- { \
- CsrWifiSmeConnectReq *msg__; \
- CsrWifiSmeConnectReqCreate(msg__, dst__, src__, interfaceTag__, connectionConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeConnectReqSend(src__, interfaceTag__, connectionConfig__) \
- CsrWifiSmeConnectReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__, connectionConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectCfmSend
-
- DESCRIPTION
- The SME calls this primitive when the connection exchange is complete or
- all connection attempts fail.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request.
- CSR_WIFI_SME_STATUS_NOT_FOUND: all attempts by the SME to
- locate the requested AP failed
-
-*******************************************************************************/
-#define CsrWifiSmeConnectCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeConnectCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CONNECT_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeConnectCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiSmeConnectCfm *msg__; \
- CsrWifiSmeConnectCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeConnectCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiSmeConnectCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionConfigGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the ConnectionConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-#define CsrWifiSmeConnectionConfigGetReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeConnectionConfigGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CONNECTION_CONFIG_GET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiSmeConnectionConfigGetReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiSmeConnectionConfigGetReq *msg__; \
- CsrWifiSmeConnectionConfigGetReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeConnectionConfigGetReqSend(src__, interfaceTag__) \
- CsrWifiSmeConnectionConfigGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionConfigGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- connectionConfig - Parameters used by the SME for selecting a network
-
-*******************************************************************************/
-#define CsrWifiSmeConnectionConfigGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, connectionConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeConnectionConfigGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CONNECTION_CONFIG_GET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->connectionConfig = (connectionConfig__);
-
-#define CsrWifiSmeConnectionConfigGetCfmSendTo(dst__, src__, interfaceTag__, status__, connectionConfig__) \
- { \
- CsrWifiSmeConnectionConfigGetCfm *msg__; \
- CsrWifiSmeConnectionConfigGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, connectionConfig__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeConnectionConfigGetCfmSend(dst__, interfaceTag__, status__, connectionConfig__) \
- CsrWifiSmeConnectionConfigGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, connectionConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionInfoGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the ConnectionInfo parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-#define CsrWifiSmeConnectionInfoGetReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeConnectionInfoGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CONNECTION_INFO_GET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiSmeConnectionInfoGetReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiSmeConnectionInfoGetReq *msg__; \
- CsrWifiSmeConnectionInfoGetReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeConnectionInfoGetReqSend(src__, interfaceTag__) \
- CsrWifiSmeConnectionInfoGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionInfoGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- connectionInfo - Information about the current connection
-
-*******************************************************************************/
-#define CsrWifiSmeConnectionInfoGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, connectionInfo__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeConnectionInfoGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CONNECTION_INFO_GET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->connectionInfo = (connectionInfo__);
-
-#define CsrWifiSmeConnectionInfoGetCfmSendTo(dst__, src__, interfaceTag__, status__, connectionInfo__) \
- { \
- CsrWifiSmeConnectionInfoGetCfm *msg__; \
- CsrWifiSmeConnectionInfoGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, connectionInfo__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeConnectionInfoGetCfmSend(dst__, interfaceTag__, status__, connectionInfo__) \
- CsrWifiSmeConnectionInfoGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, connectionInfo__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionQualityIndSend
-
- DESCRIPTION
- The SME sends this primitive to all the tasks that have registered to
- receive it whenever the value of the current connection quality
- parameters change by more than a certain configurable amount.
- The wireless manager application may configure the trigger thresholds for
- this indication using the field in smeConfig parameter of
- CSR_WIFI_SME_SME_CONFIG_SET_REQ.
- Connection quality messages can be suppressed by setting both thresholds
- to zero.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- linkQuality - Indicates the quality of the link
-
-*******************************************************************************/
-#define CsrWifiSmeConnectionQualityIndCreate(msg__, dst__, src__, interfaceTag__, linkQuality__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeConnectionQualityInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CONNECTION_QUALITY_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->linkQuality = (linkQuality__);
-
-#define CsrWifiSmeConnectionQualityIndSendTo(dst__, src__, interfaceTag__, linkQuality__) \
- { \
- CsrWifiSmeConnectionQualityInd *msg__; \
- CsrWifiSmeConnectionQualityIndCreate(msg__, dst__, src__, interfaceTag__, linkQuality__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeConnectionQualityIndSend(dst__, interfaceTag__, linkQuality__) \
- CsrWifiSmeConnectionQualityIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, linkQuality__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionStatsGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the ConnectionStats parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-#define CsrWifiSmeConnectionStatsGetReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeConnectionStatsGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CONNECTION_STATS_GET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiSmeConnectionStatsGetReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiSmeConnectionStatsGetReq *msg__; \
- CsrWifiSmeConnectionStatsGetReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeConnectionStatsGetReqSend(src__, interfaceTag__) \
- CsrWifiSmeConnectionStatsGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionStatsGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- connectionStats - Statistics for current connection.
-
-*******************************************************************************/
-#define CsrWifiSmeConnectionStatsGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, connectionStats__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeConnectionStatsGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CONNECTION_STATS_GET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->connectionStats = (connectionStats__);
-
-#define CsrWifiSmeConnectionStatsGetCfmSendTo(dst__, src__, interfaceTag__, status__, connectionStats__) \
- { \
- CsrWifiSmeConnectionStatsGetCfm *msg__; \
- CsrWifiSmeConnectionStatsGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, connectionStats__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeConnectionStatsGetCfmSend(dst__, interfaceTag__, status__, connectionStats__) \
- CsrWifiSmeConnectionStatsGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, connectionStats__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoreDumpIndSend
-
- DESCRIPTION
- The SME will send this primitive to all the tasks that have registered to
- receive Wi-Fi Chip core dump data.
- The core dump data may be fragmented and sent using more than one
- indication.
- To indicate that all the data has been sent, the last indication contains
- a 'length' of 0 and 'data' of NULL.
-
- PARAMETERS
- queue - Destination Task Queue
- dataLength - Number of bytes in the buffer pointed to by 'data'
- data - Pointer to the buffer containing 'dataLength' bytes of core
- dump data
-
-*******************************************************************************/
-#define CsrWifiSmeCoreDumpIndCreate(msg__, dst__, src__, dataLength__, data__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeCoreDumpInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_CORE_DUMP_IND, dst__, src__); \
- msg__->dataLength = (dataLength__); \
- msg__->data = (data__);
-
-#define CsrWifiSmeCoreDumpIndSendTo(dst__, src__, dataLength__, data__) \
- { \
- CsrWifiSmeCoreDumpInd *msg__; \
- CsrWifiSmeCoreDumpIndCreate(msg__, dst__, src__, dataLength__, data__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeCoreDumpIndSend(dst__, dataLength__, data__) \
- CsrWifiSmeCoreDumpIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, dataLength__, data__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeDeactivateReqSend
-
- DESCRIPTION
- The WMA sends this primitive to deactivate the SME.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeDeactivateReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeDeactivateReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_DEACTIVATE_REQ, dst__, src__);
-
-#define CsrWifiSmeDeactivateReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeDeactivateReq *msg__; \
- CsrWifiSmeDeactivateReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeDeactivateReqSend(src__) \
- CsrWifiSmeDeactivateReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeDeactivateCfmSend
-
- DESCRIPTION
- The SME sends this primitive when the deactivation is complete.
- The WMA cannot send any more primitives until it actives the SME again
- sending another CSR_WIFI_SME_ACTIVATE_REQ.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeDeactivateCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeDeactivateCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_DEACTIVATE_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeDeactivateCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeDeactivateCfm *msg__; \
- CsrWifiSmeDeactivateCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeDeactivateCfmSend(dst__, status__) \
- CsrWifiSmeDeactivateCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeDisconnectReqSend
-
- DESCRIPTION
- The wireless manager application may disconnect from the current network
- by calling this primitive
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-#define CsrWifiSmeDisconnectReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeDisconnectReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_DISCONNECT_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiSmeDisconnectReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiSmeDisconnectReq *msg__; \
- CsrWifiSmeDisconnectReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeDisconnectReqSend(src__, interfaceTag__) \
- CsrWifiSmeDisconnectReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeDisconnectCfmSend
-
- DESCRIPTION
- On reception of CSR_WIFI_SME_DISCONNECT_REQ the SME will perform a
- disconnect operation, sending a CsrWifiSmeMediaStatusInd with
- CSR_WIFI_SME_MEDIA_STATUS_DISCONNECTED and then call this primitive when
- disconnection is complete.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeDisconnectCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeDisconnectCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_DISCONNECT_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeDisconnectCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiSmeDisconnectCfm *msg__; \
- CsrWifiSmeDisconnectCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeDisconnectCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiSmeDisconnectCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeErrorIndSend
-
- DESCRIPTION
- Important error message indicating a error of some importance
-
- PARAMETERS
- queue - Destination Task Queue
- errorMessage - Contains the error message.
-
-*******************************************************************************/
-#define CsrWifiSmeErrorIndCreate(msg__, dst__, src__, errorMessage__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeErrorInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ERROR_IND, dst__, src__); \
- msg__->errorMessage = (errorMessage__);
-
-#define CsrWifiSmeErrorIndSendTo(dst__, src__, errorMessage__) \
- { \
- CsrWifiSmeErrorInd *msg__; \
- CsrWifiSmeErrorIndCreate(msg__, dst__, src__, errorMessage__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeErrorIndSend(dst__, errorMessage__) \
- CsrWifiSmeErrorIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, errorMessage__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeEventMaskSetReqSend
-
- DESCRIPTION
- The wireless manager application may register with the SME to receive
- notification of interesting events. Indications will be sent only if the
- wireless manager explicitly registers to be notified of that event.
- indMask is a bit mask of values defined in CsrWifiSmeIndicationsMask.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- indMask - Set mask with values from CsrWifiSmeIndications
-
-*******************************************************************************/
-#define CsrWifiSmeEventMaskSetReqCreate(msg__, dst__, src__, indMask__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeEventMaskSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_EVENT_MASK_SET_REQ, dst__, src__); \
- msg__->indMask = (indMask__);
-
-#define CsrWifiSmeEventMaskSetReqSendTo(dst__, src__, indMask__) \
- { \
- CsrWifiSmeEventMaskSetReq *msg__; \
- CsrWifiSmeEventMaskSetReqCreate(msg__, dst__, src__, indMask__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeEventMaskSetReqSend(src__, indMask__) \
- CsrWifiSmeEventMaskSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, indMask__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeEventMaskSetCfmSend
-
- DESCRIPTION
- The SME calls the primitive to report the result of the request
- primitive.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeEventMaskSetCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeEventMaskSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_EVENT_MASK_SET_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeEventMaskSetCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeEventMaskSetCfm *msg__; \
- CsrWifiSmeEventMaskSetCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeEventMaskSetCfmSend(dst__, status__) \
- CsrWifiSmeEventMaskSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeHostConfigGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the hostConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-#define CsrWifiSmeHostConfigGetReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeHostConfigGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_HOST_CONFIG_GET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiSmeHostConfigGetReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiSmeHostConfigGetReq *msg__; \
- CsrWifiSmeHostConfigGetReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeHostConfigGetReqSend(src__, interfaceTag__) \
- CsrWifiSmeHostConfigGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeHostConfigGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- hostConfig - Current host power state.
-
-*******************************************************************************/
-#define CsrWifiSmeHostConfigGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, hostConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeHostConfigGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_HOST_CONFIG_GET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->hostConfig = (hostConfig__);
-
-#define CsrWifiSmeHostConfigGetCfmSendTo(dst__, src__, interfaceTag__, status__, hostConfig__) \
- { \
- CsrWifiSmeHostConfigGetCfm *msg__; \
- CsrWifiSmeHostConfigGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, hostConfig__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeHostConfigGetCfmSend(dst__, interfaceTag__, status__, hostConfig__) \
- CsrWifiSmeHostConfigGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, hostConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeHostConfigSetReqSend
-
- DESCRIPTION
- This primitive sets the value of the hostConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- hostConfig - Communicates a change of host power state (for example, on
- mains power, on battery power etc) and of the periodicity of
- traffic data
-
-*******************************************************************************/
-#define CsrWifiSmeHostConfigSetReqCreate(msg__, dst__, src__, interfaceTag__, hostConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeHostConfigSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_HOST_CONFIG_SET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->hostConfig = (hostConfig__);
-
-#define CsrWifiSmeHostConfigSetReqSendTo(dst__, src__, interfaceTag__, hostConfig__) \
- { \
- CsrWifiSmeHostConfigSetReq *msg__; \
- CsrWifiSmeHostConfigSetReqCreate(msg__, dst__, src__, interfaceTag__, hostConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeHostConfigSetReqSend(src__, interfaceTag__, hostConfig__) \
- CsrWifiSmeHostConfigSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__, hostConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeHostConfigSetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeHostConfigSetCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeHostConfigSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_HOST_CONFIG_SET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeHostConfigSetCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiSmeHostConfigSetCfm *msg__; \
- CsrWifiSmeHostConfigSetCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeHostConfigSetCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiSmeHostConfigSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeIbssStationIndSend
-
- DESCRIPTION
- The SME will send this primitive to indicate that a station has joined or
- left the ad-hoc network.
-
- PARAMETERS
- queue - Destination Task Queue
- address - MAC address of the station that has joined or left
- isconnected - TRUE if the station joined, FALSE if the station left
-
-*******************************************************************************/
-#define CsrWifiSmeIbssStationIndCreate(msg__, dst__, src__, address__, isconnected__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeIbssStationInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_IBSS_STATION_IND, dst__, src__); \
- msg__->address = (address__); \
- msg__->isconnected = (isconnected__);
-
-#define CsrWifiSmeIbssStationIndSendTo(dst__, src__, address__, isconnected__) \
- { \
- CsrWifiSmeIbssStationInd *msg__; \
- CsrWifiSmeIbssStationIndCreate(msg__, dst__, src__, address__, isconnected__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeIbssStationIndSend(dst__, address__, isconnected__) \
- CsrWifiSmeIbssStationIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, address__, isconnected__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeInfoIndSend
-
- DESCRIPTION
- Message indicating a some info about current activity. Mostly of interest
- in testing but may be useful in the field.
-
- PARAMETERS
- queue - Destination Task Queue
- infoMessage - Contains the message.
-
-*******************************************************************************/
-#define CsrWifiSmeInfoIndCreate(msg__, dst__, src__, infoMessage__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeInfoInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_INFO_IND, dst__, src__); \
- msg__->infoMessage = (infoMessage__);
-
-#define CsrWifiSmeInfoIndSendTo(dst__, src__, infoMessage__) \
- { \
- CsrWifiSmeInfoInd *msg__; \
- CsrWifiSmeInfoIndCreate(msg__, dst__, src__, infoMessage__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeInfoIndSend(dst__, infoMessage__) \
- CsrWifiSmeInfoIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, infoMessage__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeInterfaceCapabilityGetReqSend
-
- DESCRIPTION
- The Wireless Manager calls this primitive to ask the SME for the
- capabilities of the supported interfaces
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeInterfaceCapabilityGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeInterfaceCapabilityGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_INTERFACE_CAPABILITY_GET_REQ, dst__, src__);
-
-#define CsrWifiSmeInterfaceCapabilityGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeInterfaceCapabilityGetReq *msg__; \
- CsrWifiSmeInterfaceCapabilityGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeInterfaceCapabilityGetReqSend(src__) \
- CsrWifiSmeInterfaceCapabilityGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeInterfaceCapabilityGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Result of the request
- numInterfaces - Number of the interfaces supported
- capBitmap - Points to the list of capabilities bitmaps provided for each
- interface.
- The bits represent the following capabilities:
- -bits 7 to 4-Reserved
- -bit 3-AMP
- -bit 2-P2P
- -bit 1-AP
- -bit 0-STA
-
-*******************************************************************************/
-#define CsrWifiSmeInterfaceCapabilityGetCfmCreate(msg__, dst__, src__, status__, numInterfaces__, capBitmap__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeInterfaceCapabilityGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_INTERFACE_CAPABILITY_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->numInterfaces = (numInterfaces__); \
- memcpy(msg__->capBitmap, (capBitmap__), sizeof(u8) * 2);
-
-#define CsrWifiSmeInterfaceCapabilityGetCfmSendTo(dst__, src__, status__, numInterfaces__, capBitmap__) \
- { \
- CsrWifiSmeInterfaceCapabilityGetCfm *msg__; \
- CsrWifiSmeInterfaceCapabilityGetCfmCreate(msg__, dst__, src__, status__, numInterfaces__, capBitmap__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeInterfaceCapabilityGetCfmSend(dst__, status__, numInterfaces__, capBitmap__) \
- CsrWifiSmeInterfaceCapabilityGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, numInterfaces__, capBitmap__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeKeyReqSend
-
- DESCRIPTION
- The wireless manager application calls this primitive to add or remove
- keys that the chip should use for encryption of data.
- The interface allows the wireless manager application to add and remove
- keys according to the specified action.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- action - The value of the CsrWifiSmeListAction parameter instructs the
- driver to modify or provide the list of keys.
- CSR_WIFI_SME_LIST_ACTION_GET is not supported here.
- key - Key to be added or removed
-
-*******************************************************************************/
-#define CsrWifiSmeKeyReqCreate(msg__, dst__, src__, interfaceTag__, action__, key__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeKeyReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_KEY_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->action = (action__); \
- msg__->key = (key__);
-
-#define CsrWifiSmeKeyReqSendTo(dst__, src__, interfaceTag__, action__, key__) \
- { \
- CsrWifiSmeKeyReq *msg__; \
- CsrWifiSmeKeyReqCreate(msg__, dst__, src__, interfaceTag__, action__, key__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeKeyReqSend(src__, interfaceTag__, action__, key__) \
- CsrWifiSmeKeyReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__, action__, key__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeKeyCfmSend
-
- DESCRIPTION
- The SME calls the primitive to report the result of the request
- primitive.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- action - Action in the request
- keyType - Type of the key added/deleted
- peerMacAddress - Peer MAC Address of the key added/deleted
-
-*******************************************************************************/
-#define CsrWifiSmeKeyCfmCreate(msg__, dst__, src__, interfaceTag__, status__, action__, keyType__, peerMacAddress__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeKeyCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_KEY_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->action = (action__); \
- msg__->keyType = (keyType__); \
- msg__->peerMacAddress = (peerMacAddress__);
-
-#define CsrWifiSmeKeyCfmSendTo(dst__, src__, interfaceTag__, status__, action__, keyType__, peerMacAddress__) \
- { \
- CsrWifiSmeKeyCfm *msg__; \
- CsrWifiSmeKeyCfmCreate(msg__, dst__, src__, interfaceTag__, status__, action__, keyType__, peerMacAddress__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeKeyCfmSend(dst__, interfaceTag__, status__, action__, keyType__, peerMacAddress__) \
- CsrWifiSmeKeyCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, action__, keyType__, peerMacAddress__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeLinkQualityGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the LinkQuality parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-#define CsrWifiSmeLinkQualityGetReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeLinkQualityGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_LINK_QUALITY_GET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiSmeLinkQualityGetReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiSmeLinkQualityGetReq *msg__; \
- CsrWifiSmeLinkQualityGetReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeLinkQualityGetReqSend(src__, interfaceTag__) \
- CsrWifiSmeLinkQualityGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeLinkQualityGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- linkQuality - Indicates the quality of the link
-
-*******************************************************************************/
-#define CsrWifiSmeLinkQualityGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, linkQuality__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeLinkQualityGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_LINK_QUALITY_GET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->linkQuality = (linkQuality__);
-
-#define CsrWifiSmeLinkQualityGetCfmSendTo(dst__, src__, interfaceTag__, status__, linkQuality__) \
- { \
- CsrWifiSmeLinkQualityGetCfm *msg__; \
- CsrWifiSmeLinkQualityGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, linkQuality__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeLinkQualityGetCfmSend(dst__, interfaceTag__, status__, linkQuality__) \
- CsrWifiSmeLinkQualityGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, linkQuality__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMediaStatusIndSend
-
- DESCRIPTION
- The SME sends this primitive to all the tasks that have registered to
- receive it when a network connection is established, lost or has moved to
- another AP.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- mediaStatus - Indicates the media status
- connectionInfo - This parameter is relevant only if the mediaStatus is
- CSR_WIFI_SME_MEDIA_STATUS_CONNECTED:
- it points to the connection information for the new network
- disassocReason - This parameter is relevant only if the mediaStatus is
- CSR_WIFI_SME_MEDIA_STATUS_DISCONNECTED:
- if a disassociation has occurred it gives the reason of the
- disassociation
- deauthReason - This parameter is relevant only if the mediaStatus is
- CSR_WIFI_SME_MEDIA_STATUS_DISCONNECTED:
- if a deauthentication has occurred it gives the reason of
- the deauthentication
-
-*******************************************************************************/
-#define CsrWifiSmeMediaStatusIndCreate(msg__, dst__, src__, interfaceTag__, mediaStatus__, connectionInfo__, disassocReason__, deauthReason__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeMediaStatusInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_MEDIA_STATUS_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->mediaStatus = (mediaStatus__); \
- msg__->connectionInfo = (connectionInfo__); \
- msg__->disassocReason = (disassocReason__); \
- msg__->deauthReason = (deauthReason__);
-
-#define CsrWifiSmeMediaStatusIndSendTo(dst__, src__, interfaceTag__, mediaStatus__, connectionInfo__, disassocReason__, deauthReason__) \
- { \
- CsrWifiSmeMediaStatusInd *msg__; \
- CsrWifiSmeMediaStatusIndCreate(msg__, dst__, src__, interfaceTag__, mediaStatus__, connectionInfo__, disassocReason__, deauthReason__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeMediaStatusIndSend(dst__, interfaceTag__, mediaStatus__, connectionInfo__, disassocReason__, deauthReason__) \
- CsrWifiSmeMediaStatusIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, mediaStatus__, connectionInfo__, disassocReason__, deauthReason__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibConfigGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the MibConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeMibConfigGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeMibConfigGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_MIB_CONFIG_GET_REQ, dst__, src__);
-
-#define CsrWifiSmeMibConfigGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeMibConfigGetReq *msg__; \
- CsrWifiSmeMibConfigGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeMibConfigGetReqSend(src__) \
- CsrWifiSmeMibConfigGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibConfigGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- mibConfig - Reports various IEEE 802.11 attributes as currently configured
-
-*******************************************************************************/
-#define CsrWifiSmeMibConfigGetCfmCreate(msg__, dst__, src__, status__, mibConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeMibConfigGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_MIB_CONFIG_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->mibConfig = (mibConfig__);
-
-#define CsrWifiSmeMibConfigGetCfmSendTo(dst__, src__, status__, mibConfig__) \
- { \
- CsrWifiSmeMibConfigGetCfm *msg__; \
- CsrWifiSmeMibConfigGetCfmCreate(msg__, dst__, src__, status__, mibConfig__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeMibConfigGetCfmSend(dst__, status__, mibConfig__) \
- CsrWifiSmeMibConfigGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, mibConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibConfigSetReqSend
-
- DESCRIPTION
- This primitive sets the value of the MibConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- mibConfig - Conveys the desired value of various IEEE 802.11 attributes as
- currently configured
-
-*******************************************************************************/
-#define CsrWifiSmeMibConfigSetReqCreate(msg__, dst__, src__, mibConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeMibConfigSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_MIB_CONFIG_SET_REQ, dst__, src__); \
- msg__->mibConfig = (mibConfig__);
-
-#define CsrWifiSmeMibConfigSetReqSendTo(dst__, src__, mibConfig__) \
- { \
- CsrWifiSmeMibConfigSetReq *msg__; \
- CsrWifiSmeMibConfigSetReqCreate(msg__, dst__, src__, mibConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeMibConfigSetReqSend(src__, mibConfig__) \
- CsrWifiSmeMibConfigSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, mibConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibConfigSetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeMibConfigSetCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeMibConfigSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_MIB_CONFIG_SET_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeMibConfigSetCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeMibConfigSetCfm *msg__; \
- CsrWifiSmeMibConfigSetCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeMibConfigSetCfmSend(dst__, status__) \
- CsrWifiSmeMibConfigSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibGetCfmSend
-
- DESCRIPTION
- The SME calls this primitive to return the requested MIB variable values.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- mibAttributeLength - Length of mibAttribute
- mibAttribute - Points to the VarBind or VarBindList containing the
- names and values of the MIB variables requested
-
-*******************************************************************************/
-#define CsrWifiSmeMibGetCfmCreate(msg__, dst__, src__, status__, mibAttributeLength__, mibAttribute__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeMibGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_MIB_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->mibAttributeLength = (mibAttributeLength__); \
- msg__->mibAttribute = (mibAttribute__);
-
-#define CsrWifiSmeMibGetCfmSendTo(dst__, src__, status__, mibAttributeLength__, mibAttribute__) \
- { \
- CsrWifiSmeMibGetCfm *msg__; \
- CsrWifiSmeMibGetCfmCreate(msg__, dst__, src__, status__, mibAttributeLength__, mibAttribute__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeMibGetCfmSend(dst__, status__, mibAttributeLength__, mibAttribute__) \
- CsrWifiSmeMibGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, mibAttributeLength__, mibAttribute__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibGetNextReqSend
-
- DESCRIPTION
- To read a sequence of MIB parameters, for example a table, call this
- primitive to find the name of the next MIB variable
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- mibAttributeLength - Length of mibAttribute
- mibAttribute - Points to a VarBind or VarBindList containing the
- name(s) of the MIB variable(s) to search from.
-
-*******************************************************************************/
-#define CsrWifiSmeMibGetNextReqCreate(msg__, dst__, src__, mibAttributeLength__, mibAttribute__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeMibGetNextReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_MIB_GET_NEXT_REQ, dst__, src__); \
- msg__->mibAttributeLength = (mibAttributeLength__); \
- msg__->mibAttribute = (mibAttribute__);
-
-#define CsrWifiSmeMibGetNextReqSendTo(dst__, src__, mibAttributeLength__, mibAttribute__) \
- { \
- CsrWifiSmeMibGetNextReq *msg__; \
- CsrWifiSmeMibGetNextReqCreate(msg__, dst__, src__, mibAttributeLength__, mibAttribute__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeMibGetNextReqSend(src__, mibAttributeLength__, mibAttribute__) \
- CsrWifiSmeMibGetNextReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, mibAttributeLength__, mibAttribute__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibGetNextCfmSend
-
- DESCRIPTION
- The SME calls this primitive to return the requested MIB name(s).
- The wireless manager application can then read the value of the MIB
- variable using CSR_WIFI_SME_MIB_GET_REQ, using the names provided.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- mibAttributeLength - Length of mibAttribute
- mibAttribute - Points to a VarBind or VarBindList containing the
- name(s) of the MIB variable(s) lexicographically
- following the name(s) given in the request
-
-*******************************************************************************/
-#define CsrWifiSmeMibGetNextCfmCreate(msg__, dst__, src__, status__, mibAttributeLength__, mibAttribute__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeMibGetNextCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_MIB_GET_NEXT_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->mibAttributeLength = (mibAttributeLength__); \
- msg__->mibAttribute = (mibAttribute__);
-
-#define CsrWifiSmeMibGetNextCfmSendTo(dst__, src__, status__, mibAttributeLength__, mibAttribute__) \
- { \
- CsrWifiSmeMibGetNextCfm *msg__; \
- CsrWifiSmeMibGetNextCfmCreate(msg__, dst__, src__, status__, mibAttributeLength__, mibAttribute__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeMibGetNextCfmSend(dst__, status__, mibAttributeLength__, mibAttribute__) \
- CsrWifiSmeMibGetNextCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, mibAttributeLength__, mibAttribute__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibGetReqSend
-
- DESCRIPTION
- The wireless manager application calls this primitive to retrieve one or
- more MIB variables.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- mibAttributeLength - Length of mibAttribute
- mibAttribute - Points to the VarBind or VarBindList containing the
- names of the MIB variables to be retrieved
-
-*******************************************************************************/
-#define CsrWifiSmeMibGetReqCreate(msg__, dst__, src__, mibAttributeLength__, mibAttribute__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeMibGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_MIB_GET_REQ, dst__, src__); \
- msg__->mibAttributeLength = (mibAttributeLength__); \
- msg__->mibAttribute = (mibAttribute__);
-
-#define CsrWifiSmeMibGetReqSendTo(dst__, src__, mibAttributeLength__, mibAttribute__) \
- { \
- CsrWifiSmeMibGetReq *msg__; \
- CsrWifiSmeMibGetReqCreate(msg__, dst__, src__, mibAttributeLength__, mibAttribute__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeMibGetReqSend(src__, mibAttributeLength__, mibAttribute__) \
- CsrWifiSmeMibGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, mibAttributeLength__, mibAttribute__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibSetReqSend
-
- DESCRIPTION
- The SME provides raw access to the MIB on the chip, which may be used by
- some configuration or diagnostic utilities, but is not normally needed by
- the wireless manager application.
- The MIB access functions use BER encoded names (OID) of the MIB
- parameters and BER encoded values, as described in the chip Host
- Interface Protocol Specification.
- The MIB parameters are described in 'Wi-Fi 5.0.0 Management Information
- Base Reference Guide'.
- The wireless manager application calls this primitive to set one or more
- MIB variables
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- mibAttributeLength - Length of mibAttribute
- mibAttribute - Points to the VarBind or VarBindList containing the
- names and values of the MIB variables to set
-
-*******************************************************************************/
-#define CsrWifiSmeMibSetReqCreate(msg__, dst__, src__, mibAttributeLength__, mibAttribute__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeMibSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_MIB_SET_REQ, dst__, src__); \
- msg__->mibAttributeLength = (mibAttributeLength__); \
- msg__->mibAttribute = (mibAttribute__);
-
-#define CsrWifiSmeMibSetReqSendTo(dst__, src__, mibAttributeLength__, mibAttribute__) \
- { \
- CsrWifiSmeMibSetReq *msg__; \
- CsrWifiSmeMibSetReqCreate(msg__, dst__, src__, mibAttributeLength__, mibAttribute__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeMibSetReqSend(src__, mibAttributeLength__, mibAttribute__) \
- CsrWifiSmeMibSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, mibAttributeLength__, mibAttribute__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibSetCfmSend
-
- DESCRIPTION
- The SME calls the primitive to report the result of the set primitive.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeMibSetCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeMibSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_MIB_SET_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeMibSetCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeMibSetCfm *msg__; \
- CsrWifiSmeMibSetCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeMibSetCfmSend(dst__, status__) \
- CsrWifiSmeMibSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMicFailureIndSend
-
- DESCRIPTION
- The SME sends this primitive to all the tasks that have registered to
- receive it whenever the chip firmware reports a MIC failure.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- secondFailure - TRUE if this indication is for a second failure in 60
- seconds
- count - The number of MIC failure events since the connection was
- established
- address - MAC address of the transmitter that caused the MIC failure
- keyType - Type of key for which the failure occurred
-
-*******************************************************************************/
-#define CsrWifiSmeMicFailureIndCreate(msg__, dst__, src__, interfaceTag__, secondFailure__, count__, address__, keyType__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeMicFailureInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_MIC_FAILURE_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->secondFailure = (secondFailure__); \
- msg__->count = (count__); \
- msg__->address = (address__); \
- msg__->keyType = (keyType__);
-
-#define CsrWifiSmeMicFailureIndSendTo(dst__, src__, interfaceTag__, secondFailure__, count__, address__, keyType__) \
- { \
- CsrWifiSmeMicFailureInd *msg__; \
- CsrWifiSmeMicFailureIndCreate(msg__, dst__, src__, interfaceTag__, secondFailure__, count__, address__, keyType__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeMicFailureIndSend(dst__, interfaceTag__, secondFailure__, count__, address__, keyType__) \
- CsrWifiSmeMicFailureIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, secondFailure__, count__, address__, keyType__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMulticastAddressReqSend
-
- DESCRIPTION
- The wireless manager application calls this primitive to specify the
- multicast addresses which the chip should recognise. The interface allows
- the wireless manager application to query, add, remove and flush the
- multicast addresses for the network interface according to the specified
- action.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- action - The value of the CsrWifiSmeListAction parameter
- instructs the driver to modify or provide the list of
- MAC addresses.
- setAddressesCount - Number of MAC addresses sent with the primitive
- setAddresses - Pointer to the list of MAC Addresses sent with the
- primitive, set to NULL if none is sent.
-
-*******************************************************************************/
-#define CsrWifiSmeMulticastAddressReqCreate(msg__, dst__, src__, interfaceTag__, action__, setAddressesCount__, setAddresses__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeMulticastAddressReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_MULTICAST_ADDRESS_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->action = (action__); \
- msg__->setAddressesCount = (setAddressesCount__); \
- msg__->setAddresses = (setAddresses__);
-
-#define CsrWifiSmeMulticastAddressReqSendTo(dst__, src__, interfaceTag__, action__, setAddressesCount__, setAddresses__) \
- { \
- CsrWifiSmeMulticastAddressReq *msg__; \
- CsrWifiSmeMulticastAddressReqCreate(msg__, dst__, src__, interfaceTag__, action__, setAddressesCount__, setAddresses__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeMulticastAddressReqSend(src__, interfaceTag__, action__, setAddressesCount__, setAddresses__) \
- CsrWifiSmeMulticastAddressReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__, action__, setAddressesCount__, setAddresses__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMulticastAddressCfmSend
-
- DESCRIPTION
- The SME will call this primitive when the operation is complete. For a
- GET action, this primitive reports the current list of MAC addresses.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- action - Action in the request
- getAddressesCount - This parameter is only relevant if action is
- CSR_WIFI_SME_LIST_ACTION_GET:
- number of MAC addresses sent with the primitive
- getAddresses - Pointer to the list of MAC Addresses sent with the
- primitive, set to NULL if none is sent.
-
-*******************************************************************************/
-#define CsrWifiSmeMulticastAddressCfmCreate(msg__, dst__, src__, interfaceTag__, status__, action__, getAddressesCount__, getAddresses__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeMulticastAddressCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_MULTICAST_ADDRESS_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->action = (action__); \
- msg__->getAddressesCount = (getAddressesCount__); \
- msg__->getAddresses = (getAddresses__);
-
-#define CsrWifiSmeMulticastAddressCfmSendTo(dst__, src__, interfaceTag__, status__, action__, getAddressesCount__, getAddresses__) \
- { \
- CsrWifiSmeMulticastAddressCfm *msg__; \
- CsrWifiSmeMulticastAddressCfmCreate(msg__, dst__, src__, interfaceTag__, status__, action__, getAddressesCount__, getAddresses__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeMulticastAddressCfmSend(dst__, interfaceTag__, status__, action__, getAddressesCount__, getAddresses__) \
- CsrWifiSmeMulticastAddressCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, action__, getAddressesCount__, getAddresses__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePacketFilterSetReqSend
-
- DESCRIPTION
- The wireless manager application should call this primitive to enable or
- disable filtering of broadcast packets: uninteresting broadcast packets
- will be dropped by the Wi-Fi chip, instead of passing them up to the
- host.
- This has the advantage of saving power in the host application processor
- as it removes the need to process unwanted packets.
- All broadcast packets are filtered according to the filter and the filter
- mode provided, except ARP packets, which are filtered using
- arpFilterAddress.
- Filters are not cumulative: only the parameters specified in the most
- recent successful request are significant.
- For more information, see 'UniFi Firmware API Specification'.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- filterLength - Length of the filter in bytes.
- filterLength=0 disables the filter previously set
- filter - Points to the first byte of the filter provided, if any.
- This shall include zero or more instance of the
- information elements of one of these types
- * Traffic Classification (TCLAS) elements
- * WMM-SA TCLAS elements
- mode - Specifies whether the filter selects or excludes packets
- matching the filter
- arpFilterAddress - IPv4 address to be used for filtering the ARP packets.
- * If the specified address is the IPv4 broadcast address
- (255.255.255.255), all ARP packets are reported to the
- host,
- * If the specified address is NOT the IPv4 broadcast
- address, only ARP packets with the specified address in
- the Source or Target Protocol Address fields are reported
- to the host
-
-*******************************************************************************/
-#define CsrWifiSmePacketFilterSetReqCreate(msg__, dst__, src__, interfaceTag__, filterLength__, filter__, mode__, arpFilterAddress__) \
- msg__ = kmalloc(sizeof(CsrWifiSmePacketFilterSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_PACKET_FILTER_SET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->filterLength = (filterLength__); \
- msg__->filter = (filter__); \
- msg__->mode = (mode__); \
- msg__->arpFilterAddress = (arpFilterAddress__);
-
-#define CsrWifiSmePacketFilterSetReqSendTo(dst__, src__, interfaceTag__, filterLength__, filter__, mode__, arpFilterAddress__) \
- { \
- CsrWifiSmePacketFilterSetReq *msg__; \
- CsrWifiSmePacketFilterSetReqCreate(msg__, dst__, src__, interfaceTag__, filterLength__, filter__, mode__, arpFilterAddress__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmePacketFilterSetReqSend(src__, interfaceTag__, filterLength__, filter__, mode__, arpFilterAddress__) \
- CsrWifiSmePacketFilterSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__, filterLength__, filter__, mode__, arpFilterAddress__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePacketFilterSetCfmSend
-
- DESCRIPTION
- The SME calls the primitive to report the result of the set primitive.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmePacketFilterSetCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmePacketFilterSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_PACKET_FILTER_SET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiSmePacketFilterSetCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiSmePacketFilterSetCfm *msg__; \
- CsrWifiSmePacketFilterSetCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmePacketFilterSetCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiSmePacketFilterSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePermanentMacAddressGetReqSend
-
- DESCRIPTION
- This primitive retrieves the MAC address stored in EEPROM
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmePermanentMacAddressGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmePermanentMacAddressGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_PERMANENT_MAC_ADDRESS_GET_REQ, dst__, src__);
-
-#define CsrWifiSmePermanentMacAddressGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmePermanentMacAddressGetReq *msg__; \
- CsrWifiSmePermanentMacAddressGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmePermanentMacAddressGetReqSend(src__) \
- CsrWifiSmePermanentMacAddressGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePermanentMacAddressGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- permanentMacAddress - MAC address stored in the EEPROM
-
-*******************************************************************************/
-#define CsrWifiSmePermanentMacAddressGetCfmCreate(msg__, dst__, src__, status__, permanentMacAddress__) \
- msg__ = kmalloc(sizeof(CsrWifiSmePermanentMacAddressGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_PERMANENT_MAC_ADDRESS_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->permanentMacAddress = (permanentMacAddress__);
-
-#define CsrWifiSmePermanentMacAddressGetCfmSendTo(dst__, src__, status__, permanentMacAddress__) \
- { \
- CsrWifiSmePermanentMacAddressGetCfm *msg__; \
- CsrWifiSmePermanentMacAddressGetCfmCreate(msg__, dst__, src__, status__, permanentMacAddress__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmePermanentMacAddressGetCfmSend(dst__, status__, permanentMacAddress__) \
- CsrWifiSmePermanentMacAddressGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, permanentMacAddress__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePmkidCandidateListIndSend
-
- DESCRIPTION
- The SME will send this primitive to all the tasks that have registered to
- receive it when a new network supporting preauthentication and/or PMK
- caching is seen.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an
- interface
- pmkidCandidatesCount - Number of PMKID candidates provided
- pmkidCandidates - Points to the first PMKID candidate
-
-*******************************************************************************/
-#define CsrWifiSmePmkidCandidateListIndCreate(msg__, dst__, src__, interfaceTag__, pmkidCandidatesCount__, pmkidCandidates__) \
- msg__ = kmalloc(sizeof(CsrWifiSmePmkidCandidateListInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_PMKID_CANDIDATE_LIST_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->pmkidCandidatesCount = (pmkidCandidatesCount__); \
- msg__->pmkidCandidates = (pmkidCandidates__);
-
-#define CsrWifiSmePmkidCandidateListIndSendTo(dst__, src__, interfaceTag__, pmkidCandidatesCount__, pmkidCandidates__) \
- { \
- CsrWifiSmePmkidCandidateListInd *msg__; \
- CsrWifiSmePmkidCandidateListIndCreate(msg__, dst__, src__, interfaceTag__, pmkidCandidatesCount__, pmkidCandidates__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmePmkidCandidateListIndSend(dst__, interfaceTag__, pmkidCandidatesCount__, pmkidCandidates__) \
- CsrWifiSmePmkidCandidateListIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, pmkidCandidatesCount__, pmkidCandidates__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePmkidReqSend
-
- DESCRIPTION
- The wireless manager application calls this primitive to request an
- operation on the SME PMKID list.
- The action argument specifies the operation to perform.
- When the connection is complete, the wireless manager application may
- then send and receive EAPOL packets to complete WPA or WPA2
- authentication if appropriate.
- The wireless manager application can then pass the resulting encryption
- keys using this primitive.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- action - The value of the CsrWifiSmeListAction parameter instructs
- the driver to modify or provide the list of PMKIDs.
- setPmkidsCount - Number of PMKIDs sent with the primitive
- setPmkids - Pointer to the list of PMKIDs sent with the primitive, set
- to NULL if none is sent.
-
-*******************************************************************************/
-#define CsrWifiSmePmkidReqCreate(msg__, dst__, src__, interfaceTag__, action__, setPmkidsCount__, setPmkids__) \
- msg__ = kmalloc(sizeof(CsrWifiSmePmkidReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_PMKID_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->action = (action__); \
- msg__->setPmkidsCount = (setPmkidsCount__); \
- msg__->setPmkids = (setPmkids__);
-
-#define CsrWifiSmePmkidReqSendTo(dst__, src__, interfaceTag__, action__, setPmkidsCount__, setPmkids__) \
- { \
- CsrWifiSmePmkidReq *msg__; \
- CsrWifiSmePmkidReqCreate(msg__, dst__, src__, interfaceTag__, action__, setPmkidsCount__, setPmkids__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmePmkidReqSend(src__, interfaceTag__, action__, setPmkidsCount__, setPmkids__) \
- CsrWifiSmePmkidReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__, action__, setPmkidsCount__, setPmkids__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePmkidCfmSend
-
- DESCRIPTION
- The SME will call this primitive when the operation is complete. For a
- GET action, this primitive reports the current list of PMKIDs
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- action - Action in the request
- getPmkidsCount - This parameter is only relevant if action is
- CSR_WIFI_SME_LIST_ACTION_GET:
- number of PMKIDs sent with the primitive
- getPmkids - Pointer to the list of PMKIDs sent with the primitive, set
- to NULL if none is sent.
-
-*******************************************************************************/
-#define CsrWifiSmePmkidCfmCreate(msg__, dst__, src__, interfaceTag__, status__, action__, getPmkidsCount__, getPmkids__) \
- msg__ = kmalloc(sizeof(CsrWifiSmePmkidCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_PMKID_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->action = (action__); \
- msg__->getPmkidsCount = (getPmkidsCount__); \
- msg__->getPmkids = (getPmkids__);
-
-#define CsrWifiSmePmkidCfmSendTo(dst__, src__, interfaceTag__, status__, action__, getPmkidsCount__, getPmkids__) \
- { \
- CsrWifiSmePmkidCfm *msg__; \
- CsrWifiSmePmkidCfmCreate(msg__, dst__, src__, interfaceTag__, status__, action__, getPmkidsCount__, getPmkids__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmePmkidCfmSend(dst__, interfaceTag__, status__, action__, getPmkidsCount__, getPmkids__) \
- CsrWifiSmePmkidCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, action__, getPmkidsCount__, getPmkids__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePowerConfigGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the PowerConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmePowerConfigGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmePowerConfigGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_POWER_CONFIG_GET_REQ, dst__, src__);
-
-#define CsrWifiSmePowerConfigGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmePowerConfigGetReq *msg__; \
- CsrWifiSmePowerConfigGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmePowerConfigGetReqSend(src__) \
- CsrWifiSmePowerConfigGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePowerConfigGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- powerConfig - Returns the current parameters for the power configuration of
- the firmware
-
-*******************************************************************************/
-#define CsrWifiSmePowerConfigGetCfmCreate(msg__, dst__, src__, status__, powerConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmePowerConfigGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_POWER_CONFIG_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->powerConfig = (powerConfig__);
-
-#define CsrWifiSmePowerConfigGetCfmSendTo(dst__, src__, status__, powerConfig__) \
- { \
- CsrWifiSmePowerConfigGetCfm *msg__; \
- CsrWifiSmePowerConfigGetCfmCreate(msg__, dst__, src__, status__, powerConfig__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmePowerConfigGetCfmSend(dst__, status__, powerConfig__) \
- CsrWifiSmePowerConfigGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, powerConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePowerConfigSetReqSend
-
- DESCRIPTION
- This primitive sets the value of the PowerConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- powerConfig - Power saving configuration
-
-*******************************************************************************/
-#define CsrWifiSmePowerConfigSetReqCreate(msg__, dst__, src__, powerConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmePowerConfigSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_POWER_CONFIG_SET_REQ, dst__, src__); \
- msg__->powerConfig = (powerConfig__);
-
-#define CsrWifiSmePowerConfigSetReqSendTo(dst__, src__, powerConfig__) \
- { \
- CsrWifiSmePowerConfigSetReq *msg__; \
- CsrWifiSmePowerConfigSetReqCreate(msg__, dst__, src__, powerConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmePowerConfigSetReqSend(src__, powerConfig__) \
- CsrWifiSmePowerConfigSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, powerConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePowerConfigSetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmePowerConfigSetCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmePowerConfigSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_POWER_CONFIG_SET_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmePowerConfigSetCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmePowerConfigSetCfm *msg__; \
- CsrWifiSmePowerConfigSetCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmePowerConfigSetCfmSend(dst__, status__) \
- CsrWifiSmePowerConfigSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRegulatoryDomainInfoGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the RegulatoryDomainInfo parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeRegulatoryDomainInfoGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeRegulatoryDomainInfoGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_REGULATORY_DOMAIN_INFO_GET_REQ, dst__, src__);
-
-#define CsrWifiSmeRegulatoryDomainInfoGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeRegulatoryDomainInfoGetReq *msg__; \
- CsrWifiSmeRegulatoryDomainInfoGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeRegulatoryDomainInfoGetReqSend(src__) \
- CsrWifiSmeRegulatoryDomainInfoGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRegulatoryDomainInfoGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- regDomInfo - Reports information and state related to regulatory domain
- operation.
-
-*******************************************************************************/
-#define CsrWifiSmeRegulatoryDomainInfoGetCfmCreate(msg__, dst__, src__, status__, regDomInfo__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeRegulatoryDomainInfoGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_REGULATORY_DOMAIN_INFO_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->regDomInfo = (regDomInfo__);
-
-#define CsrWifiSmeRegulatoryDomainInfoGetCfmSendTo(dst__, src__, status__, regDomInfo__) \
- { \
- CsrWifiSmeRegulatoryDomainInfoGetCfm *msg__; \
- CsrWifiSmeRegulatoryDomainInfoGetCfmCreate(msg__, dst__, src__, status__, regDomInfo__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeRegulatoryDomainInfoGetCfmSend(dst__, status__, regDomInfo__) \
- CsrWifiSmeRegulatoryDomainInfoGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, regDomInfo__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamCompleteIndSend
-
- DESCRIPTION
- The SME will send this primitive to all the tasks that have registered to
- receive it whenever it completes an attempt to roam to an AP. If the roam
- attempt was successful, status will be set to CSR_WIFI_SME_SUCCESS,
- otherwise it shall be set to the appropriate error code.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the roaming procedure
-
-*******************************************************************************/
-#define CsrWifiSmeRoamCompleteIndCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeRoamCompleteInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ROAM_COMPLETE_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeRoamCompleteIndSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiSmeRoamCompleteInd *msg__; \
- CsrWifiSmeRoamCompleteIndCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeRoamCompleteIndSend(dst__, interfaceTag__, status__) \
- CsrWifiSmeRoamCompleteIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamStartIndSend
-
- DESCRIPTION
- The SME will send this primitive to all the tasks that have registered to
- receive it whenever it begins an attempt to roam to an AP.
- If the wireless manager application connect request specified the SSID
- and the BSSID was set to the broadcast address (0xFF 0xFF 0xFF 0xFF 0xFF
- 0xFF), the SME monitors the signal quality and maintains a list of
- candidates to roam to. When the signal quality of the current connection
- falls below a threshold, and there is a candidate with better quality,
- the SME will attempt to the candidate AP.
- If the roaming procedure succeeds, the SME will also issue a Media
- Connect indication to inform the wireless manager application of the
- change.
- NOTE: to prevent the SME from initiating roaming the WMA must specify the
- BSSID in the connection request; this forces the SME to connect only to
- that AP.
- The wireless manager application can obtain statistics for roaming
- purposes using CSR_WIFI_SME_CONNECTION_QUALITY_IND and
- CSR_WIFI_SME_CONNECTION_STATS_GET_REQ.
- When the wireless manager application wishes to roam to another AP, it
- must issue a connection request specifying the BSSID of the desired AP.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- roamReason - Indicates the reason for starting the roaming procedure
- reason80211 - Indicates the reason for deauthentication or disassociation
-
-*******************************************************************************/
-#define CsrWifiSmeRoamStartIndCreate(msg__, dst__, src__, interfaceTag__, roamReason__, reason80211__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeRoamStartInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ROAM_START_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->roamReason = (roamReason__); \
- msg__->reason80211 = (reason80211__);
-
-#define CsrWifiSmeRoamStartIndSendTo(dst__, src__, interfaceTag__, roamReason__, reason80211__) \
- { \
- CsrWifiSmeRoamStartInd *msg__; \
- CsrWifiSmeRoamStartIndCreate(msg__, dst__, src__, interfaceTag__, roamReason__, reason80211__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeRoamStartIndSend(dst__, interfaceTag__, roamReason__, reason80211__) \
- CsrWifiSmeRoamStartIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, roamReason__, reason80211__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamingConfigGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the RoamingConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-#define CsrWifiSmeRoamingConfigGetReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeRoamingConfigGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ROAMING_CONFIG_GET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiSmeRoamingConfigGetReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiSmeRoamingConfigGetReq *msg__; \
- CsrWifiSmeRoamingConfigGetReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeRoamingConfigGetReqSend(src__, interfaceTag__) \
- CsrWifiSmeRoamingConfigGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamingConfigGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- roamingConfig - Reports the roaming behaviour of the driver and firmware
-
-*******************************************************************************/
-#define CsrWifiSmeRoamingConfigGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, roamingConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeRoamingConfigGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ROAMING_CONFIG_GET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->roamingConfig = (roamingConfig__);
-
-#define CsrWifiSmeRoamingConfigGetCfmSendTo(dst__, src__, interfaceTag__, status__, roamingConfig__) \
- { \
- CsrWifiSmeRoamingConfigGetCfm *msg__; \
- CsrWifiSmeRoamingConfigGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, roamingConfig__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeRoamingConfigGetCfmSend(dst__, interfaceTag__, status__, roamingConfig__) \
- CsrWifiSmeRoamingConfigGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, roamingConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamingConfigSetReqSend
-
- DESCRIPTION
- This primitive sets the value of the RoamingConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- roamingConfig - Desired roaming behaviour values
-
-*******************************************************************************/
-#define CsrWifiSmeRoamingConfigSetReqCreate(msg__, dst__, src__, interfaceTag__, roamingConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeRoamingConfigSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ROAMING_CONFIG_SET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->roamingConfig = (roamingConfig__);
-
-#define CsrWifiSmeRoamingConfigSetReqSendTo(dst__, src__, interfaceTag__, roamingConfig__) \
- { \
- CsrWifiSmeRoamingConfigSetReq *msg__; \
- CsrWifiSmeRoamingConfigSetReqCreate(msg__, dst__, src__, interfaceTag__, roamingConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeRoamingConfigSetReqSend(src__, interfaceTag__, roamingConfig__) \
- CsrWifiSmeRoamingConfigSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__, roamingConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamingConfigSetCfmSend
-
- DESCRIPTION
- This primitive sets the value of the RoamingConfig parameter.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeRoamingConfigSetCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeRoamingConfigSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_ROAMING_CONFIG_SET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeRoamingConfigSetCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiSmeRoamingConfigSetCfm *msg__; \
- CsrWifiSmeRoamingConfigSetCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeRoamingConfigSetCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiSmeRoamingConfigSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanConfigGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the ScanConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeScanConfigGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeScanConfigGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SCAN_CONFIG_GET_REQ, dst__, src__);
-
-#define CsrWifiSmeScanConfigGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeScanConfigGetReq *msg__; \
- CsrWifiSmeScanConfigGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeScanConfigGetReqSend(src__) \
- CsrWifiSmeScanConfigGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanConfigGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- scanConfig - Returns the current parameters for the autonomous scanning
- behaviour of the firmware
-
-*******************************************************************************/
-#define CsrWifiSmeScanConfigGetCfmCreate(msg__, dst__, src__, status__, scanConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeScanConfigGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SCAN_CONFIG_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->scanConfig = (scanConfig__);
-
-#define CsrWifiSmeScanConfigGetCfmSendTo(dst__, src__, status__, scanConfig__) \
- { \
- CsrWifiSmeScanConfigGetCfm *msg__; \
- CsrWifiSmeScanConfigGetCfmCreate(msg__, dst__, src__, status__, scanConfig__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeScanConfigGetCfmSend(dst__, status__, scanConfig__) \
- CsrWifiSmeScanConfigGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, scanConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanConfigSetReqSend
-
- DESCRIPTION
- This primitive sets the value of the ScanConfig parameter.
- The SME normally configures the firmware to perform autonomous scanning
- without involving the host.
- The firmware passes beacon / probe response or indicates loss of beacon
- on certain changes of state, for example:
- * A new AP is seen for the first time
- * An AP is no longer visible
- * The signal strength of an AP changes by more than a certain amount, as
- configured by the thresholds in the scanConfig parameter
- In addition to the autonomous scan, the wireless manager application may
- request a scan at any time using CSR_WIFI_SME_SCAN_FULL_REQ.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- scanConfig - Reports the configuration for the autonomous scanning behaviour
- of the firmware
-
-*******************************************************************************/
-#define CsrWifiSmeScanConfigSetReqCreate(msg__, dst__, src__, scanConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeScanConfigSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SCAN_CONFIG_SET_REQ, dst__, src__); \
- msg__->scanConfig = (scanConfig__);
-
-#define CsrWifiSmeScanConfigSetReqSendTo(dst__, src__, scanConfig__) \
- { \
- CsrWifiSmeScanConfigSetReq *msg__; \
- CsrWifiSmeScanConfigSetReqCreate(msg__, dst__, src__, scanConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeScanConfigSetReqSend(src__, scanConfig__) \
- CsrWifiSmeScanConfigSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, scanConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanConfigSetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeScanConfigSetCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeScanConfigSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SCAN_CONFIG_SET_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeScanConfigSetCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeScanConfigSetCfm *msg__; \
- CsrWifiSmeScanConfigSetCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeScanConfigSetCfmSend(dst__, status__) \
- CsrWifiSmeScanConfigSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanFullReqSend
-
- DESCRIPTION
- The wireless manager application should call this primitive to request a
- full scan.
- Channels are scanned actively or passively according to the requirement
- set by regulatory domain.
- If the SME receives this primitive while a full scan is going on, the new
- request is buffered and it will be served after the current full scan is
- completed.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- ssidCount - Number of SSIDs provided.
- If it is 0, the SME will attempt to detect any network
- ssid - Points to the first SSID provided, if any.
- bssid - BSS identifier.
- If it is equal to FF-FF-FF-FF-FF, the SME will listen for
- messages from any BSS.
- If it is different from FF-FF-FF-FF-FF and any SSID is
- provided, one SSID must match the network of the BSS.
- forceScan - Forces the scan even if the SME is in a state which would
- normally prevent it (e.g. autonomous scan is running).
- bssType - Type of BSS to scan for
- scanType - Type of scan to perform
- channelListCount - Number of channels provided.
- If it is 0, the SME will initiate a scan of all the
- supported channels that are permitted by the current
- regulatory domain.
- channelList - Points to the first channel , or NULL if channelListCount
- is zero.
- probeIeLength - Length of the information element in bytes to be sent
- with the probe message.
- probeIe - Points to the first byte of the information element to be
- sent with the probe message.
-
-*******************************************************************************/
-#define CsrWifiSmeScanFullReqCreate(msg__, dst__, src__, ssidCount__, ssid__, bssid__, forceScan__, bssType__, scanType__, channelListCount__, channelList__, probeIeLength__, probeIe__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeScanFullReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SCAN_FULL_REQ, dst__, src__); \
- msg__->ssidCount = (ssidCount__); \
- msg__->ssid = (ssid__); \
- msg__->bssid = (bssid__); \
- msg__->forceScan = (forceScan__); \
- msg__->bssType = (bssType__); \
- msg__->scanType = (scanType__); \
- msg__->channelListCount = (channelListCount__); \
- msg__->channelList = (channelList__); \
- msg__->probeIeLength = (probeIeLength__); \
- msg__->probeIe = (probeIe__);
-
-#define CsrWifiSmeScanFullReqSendTo(dst__, src__, ssidCount__, ssid__, bssid__, forceScan__, bssType__, scanType__, channelListCount__, channelList__, probeIeLength__, probeIe__) \
- { \
- CsrWifiSmeScanFullReq *msg__; \
- CsrWifiSmeScanFullReqCreate(msg__, dst__, src__, ssidCount__, ssid__, bssid__, forceScan__, bssType__, scanType__, channelListCount__, channelList__, probeIeLength__, probeIe__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeScanFullReqSend(src__, ssidCount__, ssid__, bssid__, forceScan__, bssType__, scanType__, channelListCount__, channelList__, probeIeLength__, probeIe__) \
- CsrWifiSmeScanFullReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, ssidCount__, ssid__, bssid__, forceScan__, bssType__, scanType__, channelListCount__, channelList__, probeIeLength__, probeIe__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanFullCfmSend
-
- DESCRIPTION
- The SME calls this primitive when the results from the scan are
- available.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeScanFullCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeScanFullCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SCAN_FULL_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeScanFullCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeScanFullCfm *msg__; \
- CsrWifiSmeScanFullCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeScanFullCfmSend(dst__, status__) \
- CsrWifiSmeScanFullCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanResultIndSend
-
- DESCRIPTION
- The SME sends this primitive to all the tasks that have registered to
- receive it whenever a scan indication is received from the firmware.
-
- PARAMETERS
- queue - Destination Task Queue
- result - Points to a buffer containing a scan result.
-
-*******************************************************************************/
-#define CsrWifiSmeScanResultIndCreate(msg__, dst__, src__, result__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeScanResultInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SCAN_RESULT_IND, dst__, src__); \
- msg__->result = (result__);
-
-#define CsrWifiSmeScanResultIndSendTo(dst__, src__, result__) \
- { \
- CsrWifiSmeScanResultInd *msg__; \
- CsrWifiSmeScanResultIndCreate(msg__, dst__, src__, result__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeScanResultIndSend(dst__, result__) \
- CsrWifiSmeScanResultIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, result__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanResultsFlushReqSend
-
- DESCRIPTION
- The Wireless Manager calls this primitive to ask the SME to delete all
- scan results from its cache, except for the scan result of any currently
- connected network.
- As scan results are received by the SME from the firmware, they are
- cached in the SME memory.
- Any time the Wireless Manager requests scan results, they are returned
- from the SME internal cache.
- For some applications it may be desirable to clear this cache prior to
- requesting that a scan be performed; this will ensure that the cache then
- only contains the networks detected in the most recent scan.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeScanResultsFlushReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeScanResultsFlushReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SCAN_RESULTS_FLUSH_REQ, dst__, src__);
-
-#define CsrWifiSmeScanResultsFlushReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeScanResultsFlushReq *msg__; \
- CsrWifiSmeScanResultsFlushReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeScanResultsFlushReqSend(src__) \
- CsrWifiSmeScanResultsFlushReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanResultsFlushCfmSend
-
- DESCRIPTION
- The SME will call this primitive when the cache has been cleared.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeScanResultsFlushCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeScanResultsFlushCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SCAN_RESULTS_FLUSH_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeScanResultsFlushCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeScanResultsFlushCfm *msg__; \
- CsrWifiSmeScanResultsFlushCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeScanResultsFlushCfmSend(dst__, status__) \
- CsrWifiSmeScanResultsFlushCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanResultsGetReqSend
-
- DESCRIPTION
- The wireless manager application calls this primitive to retrieve the
- current set of scan results, either after receiving a successful
- CSR_WIFI_SME_SCAN_FULL_CFM, or to get autonomous scan results.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeScanResultsGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeScanResultsGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SCAN_RESULTS_GET_REQ, dst__, src__);
-
-#define CsrWifiSmeScanResultsGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeScanResultsGetReq *msg__; \
- CsrWifiSmeScanResultsGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeScanResultsGetReqSend(src__) \
- CsrWifiSmeScanResultsGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanResultsGetCfmSend
-
- DESCRIPTION
- The SME sends this primitive to provide the current set of scan results.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- scanResultsCount - Number of scan results
- scanResults - Points to a buffer containing an array of
- CsrWifiSmeScanResult structures.
-
-*******************************************************************************/
-#define CsrWifiSmeScanResultsGetCfmCreate(msg__, dst__, src__, status__, scanResultsCount__, scanResults__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeScanResultsGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SCAN_RESULTS_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->scanResultsCount = (scanResultsCount__); \
- msg__->scanResults = (scanResults__);
-
-#define CsrWifiSmeScanResultsGetCfmSendTo(dst__, src__, status__, scanResultsCount__, scanResults__) \
- { \
- CsrWifiSmeScanResultsGetCfm *msg__; \
- CsrWifiSmeScanResultsGetCfmCreate(msg__, dst__, src__, status__, scanResultsCount__, scanResults__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeScanResultsGetCfmSend(dst__, status__, scanResultsCount__, scanResults__) \
- CsrWifiSmeScanResultsGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, scanResultsCount__, scanResults__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSetReqSend
-
- DESCRIPTION
- Used to pass custom data to the SME. Format is the same as 802.11 Info
- Elements => | Id | Length | Data
- 1) Cmanr Test Mode "Id:0 Length:1 Data:0x00 = OFF 0x01 = ON" "0x00 0x01
- (0x00|0x01)"
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- dataLength - Number of bytes in the buffer pointed to by 'data'
- data - Pointer to the buffer containing 'dataLength' bytes
-
-*******************************************************************************/
-#define CsrWifiSmeSetReqCreate(msg__, dst__, src__, dataLength__, data__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SET_REQ, dst__, src__); \
- msg__->dataLength = (dataLength__); \
- msg__->data = (data__);
-
-#define CsrWifiSmeSetReqSendTo(dst__, src__, dataLength__, data__) \
- { \
- CsrWifiSmeSetReq *msg__; \
- CsrWifiSmeSetReqCreate(msg__, dst__, src__, dataLength__, data__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeSetReqSend(src__, dataLength__, data__) \
- CsrWifiSmeSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, dataLength__, data__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeCommonConfigGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the Sme common parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeSmeCommonConfigGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeSmeCommonConfigGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SME_COMMON_CONFIG_GET_REQ, dst__, src__);
-
-#define CsrWifiSmeSmeCommonConfigGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeSmeCommonConfigGetReq *msg__; \
- CsrWifiSmeSmeCommonConfigGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeSmeCommonConfigGetReqSend(src__) \
- CsrWifiSmeSmeCommonConfigGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeCommonConfigGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- deviceConfig - Configuration options in the SME
-
-*******************************************************************************/
-#define CsrWifiSmeSmeCommonConfigGetCfmCreate(msg__, dst__, src__, status__, deviceConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeSmeCommonConfigGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SME_COMMON_CONFIG_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->deviceConfig = (deviceConfig__);
-
-#define CsrWifiSmeSmeCommonConfigGetCfmSendTo(dst__, src__, status__, deviceConfig__) \
- { \
- CsrWifiSmeSmeCommonConfigGetCfm *msg__; \
- CsrWifiSmeSmeCommonConfigGetCfmCreate(msg__, dst__, src__, status__, deviceConfig__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeSmeCommonConfigGetCfmSend(dst__, status__, deviceConfig__) \
- CsrWifiSmeSmeCommonConfigGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, deviceConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeCommonConfigSetReqSend
-
- DESCRIPTION
- This primitive sets the value of the Sme common.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- deviceConfig - Configuration options in the SME
-
-*******************************************************************************/
-#define CsrWifiSmeSmeCommonConfigSetReqCreate(msg__, dst__, src__, deviceConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeSmeCommonConfigSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SME_COMMON_CONFIG_SET_REQ, dst__, src__); \
- msg__->deviceConfig = (deviceConfig__);
-
-#define CsrWifiSmeSmeCommonConfigSetReqSendTo(dst__, src__, deviceConfig__) \
- { \
- CsrWifiSmeSmeCommonConfigSetReq *msg__; \
- CsrWifiSmeSmeCommonConfigSetReqCreate(msg__, dst__, src__, deviceConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeSmeCommonConfigSetReqSend(src__, deviceConfig__) \
- CsrWifiSmeSmeCommonConfigSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, deviceConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeCommonConfigSetCfmSend
-
- DESCRIPTION
- Reports the result of the request
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeSmeCommonConfigSetCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeSmeCommonConfigSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SME_COMMON_CONFIG_SET_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeSmeCommonConfigSetCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeSmeCommonConfigSetCfm *msg__; \
- CsrWifiSmeSmeCommonConfigSetCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeSmeCommonConfigSetCfmSend(dst__, status__) \
- CsrWifiSmeSmeCommonConfigSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeStaConfigGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the SmeStaConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-#define CsrWifiSmeSmeStaConfigGetReqCreate(msg__, dst__, src__, interfaceTag__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeSmeStaConfigGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SME_STA_CONFIG_GET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__);
-
-#define CsrWifiSmeSmeStaConfigGetReqSendTo(dst__, src__, interfaceTag__) \
- { \
- CsrWifiSmeSmeStaConfigGetReq *msg__; \
- CsrWifiSmeSmeStaConfigGetReqCreate(msg__, dst__, src__, interfaceTag__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeSmeStaConfigGetReqSend(src__, interfaceTag__) \
- CsrWifiSmeSmeStaConfigGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeStaConfigGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- smeConfig - Current SME Station Parameters
-
-*******************************************************************************/
-#define CsrWifiSmeSmeStaConfigGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, smeConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeSmeStaConfigGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SME_STA_CONFIG_GET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->smeConfig = (smeConfig__);
-
-#define CsrWifiSmeSmeStaConfigGetCfmSendTo(dst__, src__, interfaceTag__, status__, smeConfig__) \
- { \
- CsrWifiSmeSmeStaConfigGetCfm *msg__; \
- CsrWifiSmeSmeStaConfigGetCfmCreate(msg__, dst__, src__, interfaceTag__, status__, smeConfig__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeSmeStaConfigGetCfmSend(dst__, interfaceTag__, status__, smeConfig__) \
- CsrWifiSmeSmeStaConfigGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, smeConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeStaConfigSetReqSend
-
- DESCRIPTION
- This primitive sets the value of the SmeConfig parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- smeConfig - SME Station Parameters to be set
-
-*******************************************************************************/
-#define CsrWifiSmeSmeStaConfigSetReqCreate(msg__, dst__, src__, interfaceTag__, smeConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeSmeStaConfigSetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SME_STA_CONFIG_SET_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->smeConfig = (smeConfig__);
-
-#define CsrWifiSmeSmeStaConfigSetReqSendTo(dst__, src__, interfaceTag__, smeConfig__) \
- { \
- CsrWifiSmeSmeStaConfigSetReq *msg__; \
- CsrWifiSmeSmeStaConfigSetReqCreate(msg__, dst__, src__, interfaceTag__, smeConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeSmeStaConfigSetReqSend(src__, interfaceTag__, smeConfig__) \
- CsrWifiSmeSmeStaConfigSetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__, smeConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeStaConfigSetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeSmeStaConfigSetCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeSmeStaConfigSetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_SME_STA_CONFIG_SET_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeSmeStaConfigSetCfmSendTo(dst__, src__, interfaceTag__, status__) \
- { \
- CsrWifiSmeSmeStaConfigSetCfm *msg__; \
- CsrWifiSmeSmeStaConfigSetCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeSmeStaConfigSetCfmSend(dst__, interfaceTag__, status__) \
- CsrWifiSmeSmeStaConfigSetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeStationMacAddressGetReqSend
-
- DESCRIPTION
- This primitives is used to retrieve the current MAC address used by the
- station.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeStationMacAddressGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeStationMacAddressGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_STATION_MAC_ADDRESS_GET_REQ, dst__, src__);
-
-#define CsrWifiSmeStationMacAddressGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeStationMacAddressGetReq *msg__; \
- CsrWifiSmeStationMacAddressGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeStationMacAddressGetReqSend(src__) \
- CsrWifiSmeStationMacAddressGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeStationMacAddressGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- stationMacAddress - Current MAC address of the station.
-
-*******************************************************************************/
-#define CsrWifiSmeStationMacAddressGetCfmCreate(msg__, dst__, src__, status__, stationMacAddress__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeStationMacAddressGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_STATION_MAC_ADDRESS_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- memcpy(msg__->stationMacAddress, (stationMacAddress__), sizeof(CsrWifiMacAddress) * 2);
-
-#define CsrWifiSmeStationMacAddressGetCfmSendTo(dst__, src__, status__, stationMacAddress__) \
- { \
- CsrWifiSmeStationMacAddressGetCfm *msg__; \
- CsrWifiSmeStationMacAddressGetCfmCreate(msg__, dst__, src__, status__, stationMacAddress__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeStationMacAddressGetCfmSend(dst__, status__, stationMacAddress__) \
- CsrWifiSmeStationMacAddressGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, stationMacAddress__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeTspecReqSend
-
- DESCRIPTION
- The wireless manager application should call this primitive to use the
- TSPEC feature.
- The chip supports the use of TSPECs and TCLAS for the use of IEEE
- 802.11/WMM Quality of Service features.
- The API allows the wireless manager application to supply a correctly
- formatted TSPEC and TCLAS pair to the driver.
- After performing basic validation, the driver negotiates the installation
- of the TSPEC with the AP as defined by the 802.11 specification.
- The driver retains all TSPEC and TCLAS pairs until they are specifically
- removed.
- It is not compulsory for a TSPEC to have a TCLAS (NULL is used to
- indicate that no TCLAS is supplied), while a TCLASS always require a
- TSPEC.
- The format of the TSPEC element is specified in 'WMM (including WMM Power
- Save) Specification - Version 1.1' and 'ANSI/IEEE Std 802.11-REVmb/D3.0'.
- For more information, see 'UniFi Configuring WMM and WMM-PS'.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- interfaceTag - Interface Identifier; unique identifier of an interface
- action - Specifies the action to be carried out on the list of TSPECs.
- CSR_WIFI_SME_LIST_ACTION_FLUSH is not applicable here.
- transactionId - Unique Transaction ID for the TSPEC, as assigned by the
- driver
- strict - If it set to false, allows the SME to perform automatic
- TSPEC negotiation
- ctrlMask - Additional TSPEC configuration for CCX.
- Set mask with values from CsrWifiSmeTspecCtrl.
- CURRENTLY NOT SUPPORTED
- tspecLength - Length of the TSPEC.
- tspec - Points to the first byte of the TSPEC
- tclasLength - Length of the TCLAS.
- If it is equal to 0, no TCLASS is provided for the TSPEC
- tclas - Points to the first byte of the TCLAS, if any.
-
-*******************************************************************************/
-#define CsrWifiSmeTspecReqCreate(msg__, dst__, src__, interfaceTag__, action__, transactionId__, strict__, ctrlMask__, tspecLength__, tspec__, tclasLength__, tclas__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeTspecReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_TSPEC_REQ, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->action = (action__); \
- msg__->transactionId = (transactionId__); \
- msg__->strict = (strict__); \
- msg__->ctrlMask = (ctrlMask__); \
- msg__->tspecLength = (tspecLength__); \
- msg__->tspec = (tspec__); \
- msg__->tclasLength = (tclasLength__); \
- msg__->tclas = (tclas__);
-
-#define CsrWifiSmeTspecReqSendTo(dst__, src__, interfaceTag__, action__, transactionId__, strict__, ctrlMask__, tspecLength__, tspec__, tclasLength__, tclas__) \
- { \
- CsrWifiSmeTspecReq *msg__; \
- CsrWifiSmeTspecReqCreate(msg__, dst__, src__, interfaceTag__, action__, transactionId__, strict__, ctrlMask__, tspecLength__, tspec__, tclasLength__, tclas__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeTspecReqSend(src__, interfaceTag__, action__, transactionId__, strict__, ctrlMask__, tspecLength__, tspec__, tclasLength__, tclas__) \
- CsrWifiSmeTspecReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, interfaceTag__, action__, transactionId__, strict__, ctrlMask__, tspecLength__, tspec__, tclasLength__, tclas__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeTspecIndSend
-
- DESCRIPTION
- The SME will send this primitive to all the task that have registered to
- receive it when a status change in the TSPEC occurs.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- transactionId - Unique Transaction ID for the TSPEC, as assigned by the
- driver
- tspecResultCode - Specifies the TSPEC operation requested by the peer
- station
- tspecLength - Length of the TSPEC.
- tspec - Points to the first byte of the TSPEC
-
-*******************************************************************************/
-#define CsrWifiSmeTspecIndCreate(msg__, dst__, src__, interfaceTag__, transactionId__, tspecResultCode__, tspecLength__, tspec__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeTspecInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_TSPEC_IND, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->transactionId = (transactionId__); \
- msg__->tspecResultCode = (tspecResultCode__); \
- msg__->tspecLength = (tspecLength__); \
- msg__->tspec = (tspec__);
-
-#define CsrWifiSmeTspecIndSendTo(dst__, src__, interfaceTag__, transactionId__, tspecResultCode__, tspecLength__, tspec__) \
- { \
- CsrWifiSmeTspecInd *msg__; \
- CsrWifiSmeTspecIndCreate(msg__, dst__, src__, interfaceTag__, transactionId__, tspecResultCode__, tspecLength__, tspec__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeTspecIndSend(dst__, interfaceTag__, transactionId__, tspecResultCode__, tspecLength__, tspec__) \
- CsrWifiSmeTspecIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, transactionId__, tspecResultCode__, tspecLength__, tspec__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeTspecCfmSend
-
- DESCRIPTION
- The SME calls the primitive to report the result of the TSpec primitive
- request.
-
- PARAMETERS
- queue - Destination Task Queue
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- transactionId - Unique Transaction ID for the TSPEC, as assigned by the
- driver
- tspecResultCode - Specifies the result of the negotiated TSPEC operation
- tspecLength - Length of the TSPEC.
- tspec - Points to the first byte of the TSPEC
-
-*******************************************************************************/
-#define CsrWifiSmeTspecCfmCreate(msg__, dst__, src__, interfaceTag__, status__, transactionId__, tspecResultCode__, tspecLength__, tspec__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeTspecCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_TSPEC_CFM, dst__, src__); \
- msg__->interfaceTag = (interfaceTag__); \
- msg__->status = (status__); \
- msg__->transactionId = (transactionId__); \
- msg__->tspecResultCode = (tspecResultCode__); \
- msg__->tspecLength = (tspecLength__); \
- msg__->tspec = (tspec__);
-
-#define CsrWifiSmeTspecCfmSendTo(dst__, src__, interfaceTag__, status__, transactionId__, tspecResultCode__, tspecLength__, tspec__) \
- { \
- CsrWifiSmeTspecCfm *msg__; \
- CsrWifiSmeTspecCfmCreate(msg__, dst__, src__, interfaceTag__, status__, transactionId__, tspecResultCode__, tspecLength__, tspec__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeTspecCfmSend(dst__, interfaceTag__, status__, transactionId__, tspecResultCode__, tspecLength__, tspec__) \
- CsrWifiSmeTspecCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, interfaceTag__, status__, transactionId__, tspecResultCode__, tspecLength__, tspec__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeVersionsGetReqSend
-
- DESCRIPTION
- This primitive gets the value of the Versions parameter.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeVersionsGetReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeVersionsGetReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_VERSIONS_GET_REQ, dst__, src__);
-
-#define CsrWifiSmeVersionsGetReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeVersionsGetReq *msg__; \
- CsrWifiSmeVersionsGetReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeVersionsGetReqSend(src__) \
- CsrWifiSmeVersionsGetReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeVersionsGetCfmSend
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
- versions - Version IDs of the product
-
-*******************************************************************************/
-#define CsrWifiSmeVersionsGetCfmCreate(msg__, dst__, src__, status__, versions__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeVersionsGetCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_VERSIONS_GET_CFM, dst__, src__); \
- msg__->status = (status__); \
- msg__->versions = (versions__);
-
-#define CsrWifiSmeVersionsGetCfmSendTo(dst__, src__, status__, versions__) \
- { \
- CsrWifiSmeVersionsGetCfm *msg__; \
- CsrWifiSmeVersionsGetCfmCreate(msg__, dst__, src__, status__, versions__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeVersionsGetCfmSend(dst__, status__, versions__) \
- CsrWifiSmeVersionsGetCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__, versions__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiFlightmodeReqSend
-
- DESCRIPTION
- The wireless manager application may call this primitive on boot-up of
- the platform to ensure that the chip is placed in a mode that prevents
- any emission of RF energy.
- This primitive is an alternative to CSR_WIFI_SME_WIFI_ON_REQ.
- As in CSR_WIFI_SME_WIFI_ON_REQ, it causes the download of the patch file
- (if any) and the programming of the initial MIB settings (if supplied by
- the WMA), but it also ensures that the chip is left in its lowest
- possible power-mode with the radio subsystems disabled.
- This feature is useful on platforms where power cannot be removed from
- the chip (leaving the chip not initialised will cause it to consume more
- power so calling this function ensures that the chip is initialised into
- a low power mode but without entering a state where it could emit any RF
- energy).
- NOTE: this primitive does not cause the Wi-Fi to change state: Wi-Fi
- stays conceptually off. Configuration primitives can be sent after
- CSR_WIFI_SME_WIFI_FLIGHTMODE_REQ and the configuration will be maintained.
- Requests that require the state of the Wi-Fi to be ON will return
- CSR_WIFI_SME_STATUS_WIFI_OFF in their confirms.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- address - Optionally specifies a station MAC address.
- In normal use, the manager should set the address to 0xFF
- 0xFF 0xFF 0xFF 0xFF 0xFF, which will cause the chip to use
- the MAC address in the MIB.
- mibFilesCount - Number of provided data blocks with initial MIB values
- mibFiles - Points to the first data block with initial MIB values.
- These data blocks are typically the contents of the provided
- files ufmib.dat and localmib.dat, available from the host
- file system, if they exist.
- These files typically contain radio tuning and calibration
- values.
- More values can be created using the Host Tools.
-
-*******************************************************************************/
-#define CsrWifiSmeWifiFlightmodeReqCreate(msg__, dst__, src__, address__, mibFilesCount__, mibFiles__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeWifiFlightmodeReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_WIFI_FLIGHTMODE_REQ, dst__, src__); \
- msg__->address = (address__); \
- msg__->mibFilesCount = (mibFilesCount__); \
- msg__->mibFiles = (mibFiles__);
-
-#define CsrWifiSmeWifiFlightmodeReqSendTo(dst__, src__, address__, mibFilesCount__, mibFiles__) \
- { \
- CsrWifiSmeWifiFlightmodeReq *msg__; \
- CsrWifiSmeWifiFlightmodeReqCreate(msg__, dst__, src__, address__, mibFilesCount__, mibFiles__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeWifiFlightmodeReqSend(src__, address__, mibFilesCount__, mibFiles__) \
- CsrWifiSmeWifiFlightmodeReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, address__, mibFilesCount__, mibFiles__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiFlightmodeCfmSend
-
- DESCRIPTION
- The SME calls this primitive when the chip is initialised for low power
- mode and with the radio subsystem disabled. To leave flight mode, and
- enable Wi-Fi, the wireless manager application should call
- CSR_WIFI_SME_WIFI_ON_REQ.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeWifiFlightmodeCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeWifiFlightmodeCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_WIFI_FLIGHTMODE_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeWifiFlightmodeCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeWifiFlightmodeCfm *msg__; \
- CsrWifiSmeWifiFlightmodeCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeWifiFlightmodeCfmSend(dst__, status__) \
- CsrWifiSmeWifiFlightmodeCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiOffReqSend
-
- DESCRIPTION
- The wireless manager application calls this primitive to turn off the
- chip, thus saving power when Wi-Fi is not in use.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
-
-*******************************************************************************/
-#define CsrWifiSmeWifiOffReqCreate(msg__, dst__, src__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeWifiOffReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_WIFI_OFF_REQ, dst__, src__);
-
-#define CsrWifiSmeWifiOffReqSendTo(dst__, src__) \
- { \
- CsrWifiSmeWifiOffReq *msg__; \
- CsrWifiSmeWifiOffReqCreate(msg__, dst__, src__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeWifiOffReqSend(src__) \
- CsrWifiSmeWifiOffReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiOffIndSend
-
- DESCRIPTION
- The SME sends this primitive to all the tasks that have registered to
- receive it to report that the chip has been turned off.
-
- PARAMETERS
- queue - Destination Task Queue
- reason - Indicates the reason why the Wi-Fi has been switched off.
-
-*******************************************************************************/
-#define CsrWifiSmeWifiOffIndCreate(msg__, dst__, src__, reason__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeWifiOffInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_WIFI_OFF_IND, dst__, src__); \
- msg__->reason = (reason__);
-
-#define CsrWifiSmeWifiOffIndSendTo(dst__, src__, reason__) \
- { \
- CsrWifiSmeWifiOffInd *msg__; \
- CsrWifiSmeWifiOffIndCreate(msg__, dst__, src__, reason__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeWifiOffIndSend(dst__, reason__) \
- CsrWifiSmeWifiOffIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, reason__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiOffCfmSend
-
- DESCRIPTION
- After receiving CSR_WIFI_SME_WIFI_OFF_REQ, if the chip is connected to a
- network, the SME will perform a disconnect operation, will send a
- CSR_WIFI_SME_MEDIA_STATUS_IND with
- CSR_WIFI_SME_MEDIA_STATUS_DISCONNECTED, and then will call
- CSR_WIFI_SME_WIFI_OFF_CFM when the chip is off.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeWifiOffCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeWifiOffCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_WIFI_OFF_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeWifiOffCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeWifiOffCfm *msg__; \
- CsrWifiSmeWifiOffCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeWifiOffCfmSend(dst__, status__) \
- CsrWifiSmeWifiOffCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiOnReqSend
-
- DESCRIPTION
- The wireless manager application calls this primitive to turn on the
- Wi-Fi chip.
- If the Wi-Fi chip is currently off, the SME turns the Wi-Fi chip on,
- downloads the patch file (if any), and programs the initial MIB settings
- (if supplied by the WMA).
- The patch file is not provided with the SME API; its downloading is
- automatic and handled internally by the system.
- The MIB settings, when provided, override the default values that the
- firmware loads from EEPROM.
- If the Wi-Fi chip is already on, the SME takes no action and returns a
- successful status in the confirm.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- address - Optionally specifies a station MAC address.
- In normal use, the manager should set the address to 0xFF
- 0xFF 0xFF 0xFF 0xFF 0xFF, which will cause the chip to use
- the MAC address in the MIB
- mibFilesCount - Number of provided data blocks with initial MIB values
- mibFiles - Points to the first data block with initial MIB values.
- These data blocks are typically the contents of the provided
- files ufmib.dat and localmib.dat, available from the host
- file system, if they exist.
- These files typically contain radio tuning and calibration
- values.
- More values can be created using the Host Tools.
-
-*******************************************************************************/
-#define CsrWifiSmeWifiOnReqCreate(msg__, dst__, src__, address__, mibFilesCount__, mibFiles__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeWifiOnReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_WIFI_ON_REQ, dst__, src__); \
- msg__->address = (address__); \
- msg__->mibFilesCount = (mibFilesCount__); \
- msg__->mibFiles = (mibFiles__);
-
-#define CsrWifiSmeWifiOnReqSendTo(dst__, src__, address__, mibFilesCount__, mibFiles__) \
- { \
- CsrWifiSmeWifiOnReq *msg__; \
- CsrWifiSmeWifiOnReqCreate(msg__, dst__, src__, address__, mibFilesCount__, mibFiles__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeWifiOnReqSend(src__, address__, mibFilesCount__, mibFiles__) \
- CsrWifiSmeWifiOnReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, address__, mibFilesCount__, mibFiles__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiOnIndSend
-
- DESCRIPTION
- The SME sends this primitive to all tasks that have registered to receive
- it once the chip becomes available and ready to use.
-
- PARAMETERS
- queue - Destination Task Queue
- address - Current MAC address
-
-*******************************************************************************/
-#define CsrWifiSmeWifiOnIndCreate(msg__, dst__, src__, address__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeWifiOnInd), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_WIFI_ON_IND, dst__, src__); \
- msg__->address = (address__);
-
-#define CsrWifiSmeWifiOnIndSendTo(dst__, src__, address__) \
- { \
- CsrWifiSmeWifiOnInd *msg__; \
- CsrWifiSmeWifiOnIndCreate(msg__, dst__, src__, address__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeWifiOnIndSend(dst__, address__) \
- CsrWifiSmeWifiOnIndSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, address__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiOnCfmSend
-
- DESCRIPTION
- The SME sends this primitive to the task that has sent the request once
- the chip has been initialised and is available for use.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Reports the result of the request
-
-*******************************************************************************/
-#define CsrWifiSmeWifiOnCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeWifiOnCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_WIFI_ON_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeWifiOnCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeWifiOnCfm *msg__; \
- CsrWifiSmeWifiOnCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeWifiOnCfmSend(dst__, status__) \
- CsrWifiSmeWifiOnCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWpsConfigurationReqSend
-
- DESCRIPTION
- This primitive passes the WPS information for the device to SME. This may
- be accepted only if no interface is active.
-
- PARAMETERS
- queue - Message Source Task Queue (Cfm's will be sent to this Queue)
- wpsConfig - WPS config.
-
-*******************************************************************************/
-#define CsrWifiSmeWpsConfigurationReqCreate(msg__, dst__, src__, wpsConfig__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeWpsConfigurationReq), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_WPS_CONFIGURATION_REQ, dst__, src__); \
- msg__->wpsConfig = (wpsConfig__);
-
-#define CsrWifiSmeWpsConfigurationReqSendTo(dst__, src__, wpsConfig__) \
- { \
- CsrWifiSmeWpsConfigurationReq *msg__; \
- CsrWifiSmeWpsConfigurationReqCreate(msg__, dst__, src__, wpsConfig__); \
- CsrMsgTransport(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeWpsConfigurationReqSend(src__, wpsConfig__) \
- CsrWifiSmeWpsConfigurationReqSendTo(CSR_WIFI_SME_LIB_DESTINATION_QUEUE, src__, wpsConfig__)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWpsConfigurationCfmSend
-
- DESCRIPTION
- Confirm.
-
- PARAMETERS
- queue - Destination Task Queue
- status - Status of the request.
-
-*******************************************************************************/
-#define CsrWifiSmeWpsConfigurationCfmCreate(msg__, dst__, src__, status__) \
- msg__ = kmalloc(sizeof(CsrWifiSmeWpsConfigurationCfm), GFP_KERNEL); \
- CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_SME_PRIM, CSR_WIFI_SME_WPS_CONFIGURATION_CFM, dst__, src__); \
- msg__->status = (status__);
-
-#define CsrWifiSmeWpsConfigurationCfmSendTo(dst__, src__, status__) \
- { \
- CsrWifiSmeWpsConfigurationCfm *msg__; \
- CsrWifiSmeWpsConfigurationCfmCreate(msg__, dst__, src__, status__); \
- CsrSchedMessagePut(dst__, CSR_WIFI_SME_PRIM, msg__); \
- }
-
-#define CsrWifiSmeWpsConfigurationCfmSend(dst__, status__) \
- CsrWifiSmeWpsConfigurationCfmSendTo(dst__, CSR_WIFI_SME_IFACEQUEUE, status__)
-
-#endif /* CSR_WIFI_SME_LIB_H__ */
diff --git a/drivers/staging/csr/csr_wifi_sme_prim.h b/drivers/staging/csr/csr_wifi_sme_prim.h
deleted file mode 100644
index 17ec79c77e54..000000000000
--- a/drivers/staging/csr/csr_wifi_sme_prim.h
+++ /dev/null
@@ -1,6510 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_SME_PRIM_H__
-#define CSR_WIFI_SME_PRIM_H__
-
-#include <linux/types.h>
-#include "csr_prim_defs.h"
-#include "csr_sched.h"
-#include "csr_wifi_common.h"
-#include "csr_result.h"
-#include "csr_wifi_fsm_event.h"
-
-#define CSR_WIFI_SME_PRIM (0x0404)
-
-typedef CsrPrim CsrWifiSmePrim;
-
-
-/*******************************************************************************
-
- NAME
- CsrWifiSme80211NetworkType
-
- DESCRIPTION
- Indicates the physical layer of the network
-
- VALUES
- CSR_WIFI_SME_80211_NETWORK_TYPE_DS
- - Direct-sequence spread spectrum
- CSR_WIFI_SME_80211_NETWORK_TYPE_OFDM24
- - Orthogonal Frequency Division Multiplexing at 2.4 GHz
- CSR_WIFI_SME_80211_NETWORK_TYPE_OFDM5
- - Orthogonal Frequency Division Multiplexing at 5 GHz
- CSR_WIFI_SME_80211_NETWORK_TYPE_AUTO
- - Automatic
-
-*******************************************************************************/
-typedef u8 CsrWifiSme80211NetworkType;
-#define CSR_WIFI_SME_80211_NETWORK_TYPE_DS ((CsrWifiSme80211NetworkType) 0x00)
-#define CSR_WIFI_SME_80211_NETWORK_TYPE_OFDM24 ((CsrWifiSme80211NetworkType) 0x01)
-#define CSR_WIFI_SME_80211_NETWORK_TYPE_OFDM5 ((CsrWifiSme80211NetworkType) 0x02)
-#define CSR_WIFI_SME_80211_NETWORK_TYPE_AUTO ((CsrWifiSme80211NetworkType) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSme80211PrivacyMode
-
- DESCRIPTION
- Bits to enable or disable the privacy mode
-
- VALUES
- CSR_WIFI_SME_80211_PRIVACY_MODE_DISABLED
- - Privacy mode is enabled: use of WEP for confidentiality is
- required.
- CSR_WIFI_SME_80211_PRIVACY_MODE_ENABLED
- - Privacy mode is disabled
-
-*******************************************************************************/
-typedef u8 CsrWifiSme80211PrivacyMode;
-#define CSR_WIFI_SME_80211_PRIVACY_MODE_DISABLED ((CsrWifiSme80211PrivacyMode) 0x00)
-#define CSR_WIFI_SME_80211_PRIVACY_MODE_ENABLED ((CsrWifiSme80211PrivacyMode) 0x01)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSme80211dTrustLevel
-
- DESCRIPTION
- Level of trust for the information coming from the network
-
- VALUES
- CSR_WIFI_SME_80211D_TRUST_LEVEL_STRICT
- - Start with passive scanning and only accept country IE for
- updating channel lists
- CSR_WIFI_SME_80211D_TRUST_LEVEL_ADJUNCT
- - As above plus accept adjunct technology location
- information
- CSR_WIFI_SME_80211D_TRUST_LEVEL_BSS
- - As above accept plus receiving channel from infrastructure
- networks
- CSR_WIFI_SME_80211D_TRUST_LEVEL_IBSS
- - As above accept plus receiving channel from the ad hoc
- networks
- CSR_WIFI_SME_80211D_TRUST_LEVEL_MIB
- - Start with active scanning with list of active channels
- from the MIB and accept as above
- CSR_WIFI_SME_80211D_TRUST_LEVEL_DISABLED
- - Start with active scanning with list of active channels
- from the MIB and ignore any channel information from the
- network
-
-*******************************************************************************/
-typedef u8 CsrWifiSme80211dTrustLevel;
-#define CSR_WIFI_SME_80211D_TRUST_LEVEL_STRICT ((CsrWifiSme80211dTrustLevel) 0x01)
-#define CSR_WIFI_SME_80211D_TRUST_LEVEL_ADJUNCT ((CsrWifiSme80211dTrustLevel) 0x02)
-#define CSR_WIFI_SME_80211D_TRUST_LEVEL_BSS ((CsrWifiSme80211dTrustLevel) 0x03)
-#define CSR_WIFI_SME_80211D_TRUST_LEVEL_IBSS ((CsrWifiSme80211dTrustLevel) 0x04)
-#define CSR_WIFI_SME_80211D_TRUST_LEVEL_MIB ((CsrWifiSme80211dTrustLevel) 0x05)
-#define CSR_WIFI_SME_80211D_TRUST_LEVEL_DISABLED ((CsrWifiSme80211dTrustLevel) 0x06)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAmpStatus
-
- DESCRIPTION
- AMP Current Status
-
- VALUES
- CSR_WIFI_SME_AMP_ACTIVE - AMP ACTIVE.
- CSR_WIFI_SME_AMP_INACTIVE - AMP INACTIVE
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeAmpStatus;
-#define CSR_WIFI_SME_AMP_ACTIVE ((CsrWifiSmeAmpStatus) 0x00)
-#define CSR_WIFI_SME_AMP_INACTIVE ((CsrWifiSmeAmpStatus) 0x01)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAuthMode
-
- DESCRIPTION
- Define bits for CsrWifiSmeAuthMode
-
- VALUES
- CSR_WIFI_SME_AUTH_MODE_80211_OPEN
- - Connects to an open system network (i.e. no authentication,
- no encryption) or to a WEP enabled network.
- CSR_WIFI_SME_AUTH_MODE_80211_SHARED
- - Connect to a WEP enabled network.
- CSR_WIFI_SME_AUTH_MODE_8021X_WPA
- - Connects to a WPA Enterprise enabled network.
- CSR_WIFI_SME_AUTH_MODE_8021X_WPAPSK
- - Connects to a WPA with Pre-Shared Key enabled network.
- CSR_WIFI_SME_AUTH_MODE_8021X_WPA2
- - Connects to a WPA2 Enterprise enabled network.
- CSR_WIFI_SME_AUTH_MODE_8021X_WPA2PSK
- - Connects to a WPA2 with Pre-Shared Key enabled network.
- CSR_WIFI_SME_AUTH_MODE_8021X_CCKM
- - Connects to a CCKM enabled network.
- CSR_WIFI_SME_AUTH_MODE_WAPI_WAI
- - Connects to a WAPI Enterprise enabled network.
- CSR_WIFI_SME_AUTH_MODE_WAPI_WAIPSK
- - Connects to a WAPI with Pre-Shared Key enabled network.
- CSR_WIFI_SME_AUTH_MODE_8021X_OTHER1X
- - For future use.
-
-*******************************************************************************/
-typedef u16 CsrWifiSmeAuthMode;
-#define CSR_WIFI_SME_AUTH_MODE_80211_OPEN ((CsrWifiSmeAuthMode) 0x0001)
-#define CSR_WIFI_SME_AUTH_MODE_80211_SHARED ((CsrWifiSmeAuthMode) 0x0002)
-#define CSR_WIFI_SME_AUTH_MODE_8021X_WPA ((CsrWifiSmeAuthMode) 0x0004)
-#define CSR_WIFI_SME_AUTH_MODE_8021X_WPAPSK ((CsrWifiSmeAuthMode) 0x0008)
-#define CSR_WIFI_SME_AUTH_MODE_8021X_WPA2 ((CsrWifiSmeAuthMode) 0x0010)
-#define CSR_WIFI_SME_AUTH_MODE_8021X_WPA2PSK ((CsrWifiSmeAuthMode) 0x0020)
-#define CSR_WIFI_SME_AUTH_MODE_8021X_CCKM ((CsrWifiSmeAuthMode) 0x0040)
-#define CSR_WIFI_SME_AUTH_MODE_WAPI_WAI ((CsrWifiSmeAuthMode) 0x0080)
-#define CSR_WIFI_SME_AUTH_MODE_WAPI_WAIPSK ((CsrWifiSmeAuthMode) 0x0100)
-#define CSR_WIFI_SME_AUTH_MODE_8021X_OTHER1X ((CsrWifiSmeAuthMode) 0x0200)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeBasicUsability
-
- DESCRIPTION
- Indicates the usability level of a channel
-
- VALUES
- CSR_WIFI_SME_BASIC_USABILITY_UNUSABLE
- - Not usable; connection not recommended
- CSR_WIFI_SME_BASIC_USABILITY_POOR
- - Poor quality; connect only if nothing better is available
- CSR_WIFI_SME_BASIC_USABILITY_SATISFACTORY
- - Quality is satisfactory
- CSR_WIFI_SME_BASIC_USABILITY_NOT_CONNECTED
- - Not connected
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeBasicUsability;
-#define CSR_WIFI_SME_BASIC_USABILITY_UNUSABLE ((CsrWifiSmeBasicUsability) 0x00)
-#define CSR_WIFI_SME_BASIC_USABILITY_POOR ((CsrWifiSmeBasicUsability) 0x01)
-#define CSR_WIFI_SME_BASIC_USABILITY_SATISFACTORY ((CsrWifiSmeBasicUsability) 0x02)
-#define CSR_WIFI_SME_BASIC_USABILITY_NOT_CONNECTED ((CsrWifiSmeBasicUsability) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeBssType
-
- DESCRIPTION
- Indicates the BSS type
-
- VALUES
- CSR_WIFI_SME_BSS_TYPE_INFRASTRUCTURE
- - Infrastructure BSS.
- CSR_WIFI_SME_BSS_TYPE_ADHOC
- - Ad hoc or Independent BSS.
- CSR_WIFI_SME_BSS_TYPE_ANY_BSS
- - Specifies any type of BSS
- CSR_WIFI_SME_BSS_TYPE_P2P
- - Specifies P2P
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeBssType;
-#define CSR_WIFI_SME_BSS_TYPE_INFRASTRUCTURE ((CsrWifiSmeBssType) 0x00)
-#define CSR_WIFI_SME_BSS_TYPE_ADHOC ((CsrWifiSmeBssType) 0x01)
-#define CSR_WIFI_SME_BSS_TYPE_ANY_BSS ((CsrWifiSmeBssType) 0x02)
-#define CSR_WIFI_SME_BSS_TYPE_P2P ((CsrWifiSmeBssType) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexScheme
-
- DESCRIPTION
- Options for the coexistence signalling
- Same as MibValues
-
- VALUES
- CSR_WIFI_SME_COEX_SCHEME_DISABLED
- - The coexistence signalling is disabled
- CSR_WIFI_SME_COEX_SCHEME_CSR
- - Basic CSR coexistence signalling
- CSR_WIFI_SME_COEX_SCHEME_CSR_CHANNEL
- - Full CSR coexistence signalling
- CSR_WIFI_SME_COEX_SCHEME_PTA
- - Packet Traffic Arbitrator coexistence signalling
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeCoexScheme;
-#define CSR_WIFI_SME_COEX_SCHEME_DISABLED ((CsrWifiSmeCoexScheme) 0x00)
-#define CSR_WIFI_SME_COEX_SCHEME_CSR ((CsrWifiSmeCoexScheme) 0x01)
-#define CSR_WIFI_SME_COEX_SCHEME_CSR_CHANNEL ((CsrWifiSmeCoexScheme) 0x02)
-#define CSR_WIFI_SME_COEX_SCHEME_PTA ((CsrWifiSmeCoexScheme) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeControlIndication
-
- DESCRIPTION
- Indicates the reason why the Wi-Fi has been switched off.
- The values of this type are used across the NME/SME/Router API's and they
- must be kept consistent with the corresponding types in the .xml of the
- ottherinterfaces
-
- VALUES
- CSR_WIFI_SME_CONTROL_INDICATION_ERROR
- - An unrecoverable error (for example, an unrecoverable SDIO
- error) has occurred.
- The wireless manager application should reinitialise the
- chip by calling CSR_WIFI_SME_WIFI_ON_REQ.
- CSR_WIFI_SME_CONTROL_INDICATION_EXIT
- - The chip became unavailable due to an external action, for
- example, when a plug-in card is ejected or the driver is
- unloaded.
- CSR_WIFI_SME_CONTROL_INDICATION_USER_REQUESTED
- - The Wi-Fi has been switched off as the wireless manager
- application has sent CSR_WIFI_SME_WIFI_OFF_REQ
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeControlIndication;
-#define CSR_WIFI_SME_CONTROL_INDICATION_ERROR ((CsrWifiSmeControlIndication) 0x01)
-#define CSR_WIFI_SME_CONTROL_INDICATION_EXIT ((CsrWifiSmeControlIndication) 0x02)
-#define CSR_WIFI_SME_CONTROL_INDICATION_USER_REQUESTED ((CsrWifiSmeControlIndication) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCtsProtectionType
-
- DESCRIPTION
- SME CTS Protection Types
-
- VALUES
- CSR_WIFI_SME_CTS_PROTECTION_AUTOMATIC
- - AP CTS Protection automatic based on non-ERP station in own
- BSS or neighbouring BSS on the same channel based on OLBC.
- This requires monitoring of beacons from other APs.
- CSR_WIFI_SME_CTS_PROTECTION_FORCE_ENABLED
- - AP CTS Protection Force enabled
- CSR_WIFI_SME_CTS_PROTECTION_FORCE_DISABLED
- - AP CTS Protection Force disabled.
- CSR_WIFI_SME_CTS_PROTECTION_AUTOMATIC_NO_OLBC
- - AP CTS Protection automatic without considering OLBC but
- considering non-ERP station in the own BSS Valid only if AP
- is configured to work in 802.11bg or 802.11g mode otherwise
- this option specifies the same behaviour as AUTOMATIC
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeCtsProtectionType;
-#define CSR_WIFI_SME_CTS_PROTECTION_AUTOMATIC ((CsrWifiSmeCtsProtectionType) 0x00)
-#define CSR_WIFI_SME_CTS_PROTECTION_FORCE_ENABLED ((CsrWifiSmeCtsProtectionType) 0x01)
-#define CSR_WIFI_SME_CTS_PROTECTION_FORCE_DISABLED ((CsrWifiSmeCtsProtectionType) 0x02)
-#define CSR_WIFI_SME_CTS_PROTECTION_AUTOMATIC_NO_OLBC ((CsrWifiSmeCtsProtectionType) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeD3AutoScanMode
-
- DESCRIPTION
- Autonomous scan status while in D3 suspended period
-
- VALUES
- CSR_WIFI_SME_D3AUTO_SCAN_MODE_PSON
- - Autonomous scan stays on
- CSR_WIFI_SME_D3AUTO_SCAN_MODE_PSOFF
- - Autonomous scan is switched off
- CSR_WIFI_SME_D3AUTO_SCAN_MODE_PSAUTO
- - Automatically select autoscanning behaviour.
- CURRENTLY NOT SUPPORTED
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeD3AutoScanMode;
-#define CSR_WIFI_SME_D3AUTO_SCAN_MODE_PSON ((CsrWifiSmeD3AutoScanMode) 0x00)
-#define CSR_WIFI_SME_D3AUTO_SCAN_MODE_PSOFF ((CsrWifiSmeD3AutoScanMode) 0x01)
-#define CSR_WIFI_SME_D3AUTO_SCAN_MODE_PSAUTO ((CsrWifiSmeD3AutoScanMode) 0x02)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeEncryption
-
- DESCRIPTION
- Defines bits for CsrWifiSmeEncryption
- For a WEP enabled network, the caller must specify the correct
- combination of flags in the encryptionModeMask.
-
- VALUES
- CSR_WIFI_SME_ENCRYPTION_CIPHER_NONE
- - No encryption set
- CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_WEP40
- - Selects 40 byte key WEP for unicast communication
- CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_WEP104
- - Selects 104 byte key WEP for unicast communication
- CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_TKIP
- - Selects TKIP for unicast communication
- CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_CCMP
- - Selects CCMP for unicast communication
- CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_SMS4
- - Selects SMS4 for unicast communication
- CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_WEP40
- - Selects 40 byte key WEP for broadcast messages
- CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_WEP104
- - Selects 104 byte key WEP for broadcast messages
- CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_TKIP
- - Selects a TKIP for broadcast messages
- CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_CCMP
- - Selects CCMP for broadcast messages
- CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_SMS4
- - Selects SMS4 for broadcast messages
-
-*******************************************************************************/
-typedef u16 CsrWifiSmeEncryption;
-#define CSR_WIFI_SME_ENCRYPTION_CIPHER_NONE ((CsrWifiSmeEncryption) 0x0000)
-#define CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_WEP40 ((CsrWifiSmeEncryption) 0x0001)
-#define CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_WEP104 ((CsrWifiSmeEncryption) 0x0002)
-#define CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_TKIP ((CsrWifiSmeEncryption) 0x0004)
-#define CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_CCMP ((CsrWifiSmeEncryption) 0x0008)
-#define CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_SMS4 ((CsrWifiSmeEncryption) 0x0010)
-#define CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_WEP40 ((CsrWifiSmeEncryption) 0x0020)
-#define CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_WEP104 ((CsrWifiSmeEncryption) 0x0040)
-#define CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_TKIP ((CsrWifiSmeEncryption) 0x0080)
-#define CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_CCMP ((CsrWifiSmeEncryption) 0x0100)
-#define CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_SMS4 ((CsrWifiSmeEncryption) 0x0200)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeFirmwareDriverInterface
-
- DESCRIPTION
- Type of communication between Host and Firmware
-
- VALUES
- CSR_WIFI_SME_FIRMWARE_DRIVER_INTERFACE_UNIT_DATA_INTERFACE
- - No preformated header. NOT SUPPORTED in the current release
- CSR_WIFI_SME_FIRMWARE_DRIVER_INTERFACE_PACKET_INTERFACE
- - Preformated IEEE 802.11 header for user plane
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeFirmwareDriverInterface;
-#define CSR_WIFI_SME_FIRMWARE_DRIVER_INTERFACE_UNIT_DATA_INTERFACE ((CsrWifiSmeFirmwareDriverInterface) 0x00)
-#define CSR_WIFI_SME_FIRMWARE_DRIVER_INTERFACE_PACKET_INTERFACE ((CsrWifiSmeFirmwareDriverInterface) 0x01)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeHostPowerMode
-
- DESCRIPTION
- Defines the power mode
-
- VALUES
- CSR_WIFI_SME_HOST_POWER_MODE_ACTIVE
- - Host device is running on external power.
- CSR_WIFI_SME_HOST_POWER_MODE_POWER_SAVE
- - Host device is running on (internal) battery power.
- CSR_WIFI_SME_HOST_POWER_MODE_FULL_POWER_SAVE
- - For future use.
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeHostPowerMode;
-#define CSR_WIFI_SME_HOST_POWER_MODE_ACTIVE ((CsrWifiSmeHostPowerMode) 0x00)
-#define CSR_WIFI_SME_HOST_POWER_MODE_POWER_SAVE ((CsrWifiSmeHostPowerMode) 0x01)
-#define CSR_WIFI_SME_HOST_POWER_MODE_FULL_POWER_SAVE ((CsrWifiSmeHostPowerMode) 0x02)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeIEEE80211Reason
-
- DESCRIPTION
- As definined in the IEEE 802.11 standards
-
- VALUES
- CSR_WIFI_SME_IEEE80211_REASON_SUCCESS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_UNSPECIFIED_REASON
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_AUTHENTICATION_NOT_VALID
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_DEAUTHENTICATED_LEAVE_BSS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_DISASSOCIATED_INACTIVITY
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_AP_OVERLOAD
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_CLASS_2FRAME_ERROR
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_CLASS_3FRAME_ERROR
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_DISASSOCIATED_LEAVE_BSS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_ASSOCIATION_NOT_AUTHENTICATED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_DISASSOCIATED_POWER_CAPABILITY
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_DISASSOCIATED_SUPPORTED_CHANNELS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_INVALID_INFORMATION_ELEMENT
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_MICHAEL_MIC_FAILURE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_FOURWAY_HANDSHAKE_TIMEOUT
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_GROUP_KEY_UPDATE_TIMEOUT
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_HANDSHAKE_ELEMENT_DIFFERENT
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_INVALID_GROUP_CIPHER
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_INVALID_PAIRWISE_CIPHER
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_INVALID_AKMP
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_UNSUPPORTED_RSN_IEVERSION
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_INVALID_RSN_IECAPABILITIES
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_DOT1X_AUTH_FAILED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_CIPHER_REJECTED_BY_POLICY
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_SERVICE_CHANGE_PRECLUDES_TS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_QOS_UNSPECIFIED_REASON
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_QOS_INSUFFICIENT_BANDWIDTH
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_QOS_EXCESSIVE_NOT_ACK
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_QOS_TXOPLIMIT_EXCEEDED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_QSTA_LEAVING
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_END_TS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_END_DLS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_END_BA
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_UNKNOWN_TS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_UNKNOWN_BA
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_UNKNOWN_DLS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_TIMEOUT
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_STAKEY_MISMATCH
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_UNICAST_KEY_NEGOTIATION_TIMEOUT
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_MULTICAST_KEY_ANNOUNCEMENT_TIMEOUT
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_INCOMPATIBLE_UNICAST_KEY_NEGOTIATION_IE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_INVALID_MULTICAST_CIPHER
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_INVALID_UNICAST_CIPHER
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_UNSUPPORTED_WAPI_IE_VERSION
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_INVALID_WAPI_CAPABILITY_IE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_REASON_WAI_CERTIFICATE_AUTHENTICATION_FAILED
- - See IEEE 802.11 Standard
-
-*******************************************************************************/
-typedef u16 CsrWifiSmeIEEE80211Reason;
-#define CSR_WIFI_SME_IEEE80211_REASON_SUCCESS ((CsrWifiSmeIEEE80211Reason) 0x0000)
-#define CSR_WIFI_SME_IEEE80211_REASON_UNSPECIFIED_REASON ((CsrWifiSmeIEEE80211Reason) 0x0001)
-#define CSR_WIFI_SME_IEEE80211_REASON_AUTHENTICATION_NOT_VALID ((CsrWifiSmeIEEE80211Reason) 0x0002)
-#define CSR_WIFI_SME_IEEE80211_REASON_DEAUTHENTICATED_LEAVE_BSS ((CsrWifiSmeIEEE80211Reason) 0x0003)
-#define CSR_WIFI_SME_IEEE80211_REASON_DISASSOCIATED_INACTIVITY ((CsrWifiSmeIEEE80211Reason) 0x0004)
-#define CSR_WIFI_SME_IEEE80211_REASON_AP_OVERLOAD ((CsrWifiSmeIEEE80211Reason) 0x0005)
-#define CSR_WIFI_SME_IEEE80211_REASON_CLASS_2FRAME_ERROR ((CsrWifiSmeIEEE80211Reason) 0x0006)
-#define CSR_WIFI_SME_IEEE80211_REASON_CLASS_3FRAME_ERROR ((CsrWifiSmeIEEE80211Reason) 0x0007)
-#define CSR_WIFI_SME_IEEE80211_REASON_DISASSOCIATED_LEAVE_BSS ((CsrWifiSmeIEEE80211Reason) 0x0008)
-#define CSR_WIFI_SME_IEEE80211_REASON_ASSOCIATION_NOT_AUTHENTICATED ((CsrWifiSmeIEEE80211Reason) 0x0009)
-#define CSR_WIFI_SME_IEEE80211_REASON_DISASSOCIATED_POWER_CAPABILITY ((CsrWifiSmeIEEE80211Reason) 0x000a)
-#define CSR_WIFI_SME_IEEE80211_REASON_DISASSOCIATED_SUPPORTED_CHANNELS ((CsrWifiSmeIEEE80211Reason) 0x000b)
-#define CSR_WIFI_SME_IEEE80211_REASON_INVALID_INFORMATION_ELEMENT ((CsrWifiSmeIEEE80211Reason) 0x000d)
-#define CSR_WIFI_SME_IEEE80211_REASON_MICHAEL_MIC_FAILURE ((CsrWifiSmeIEEE80211Reason) 0x000e)
-#define CSR_WIFI_SME_IEEE80211_REASON_FOURWAY_HANDSHAKE_TIMEOUT ((CsrWifiSmeIEEE80211Reason) 0x000f)
-#define CSR_WIFI_SME_IEEE80211_REASON_GROUP_KEY_UPDATE_TIMEOUT ((CsrWifiSmeIEEE80211Reason) 0x0010)
-#define CSR_WIFI_SME_IEEE80211_REASON_HANDSHAKE_ELEMENT_DIFFERENT ((CsrWifiSmeIEEE80211Reason) 0x0011)
-#define CSR_WIFI_SME_IEEE80211_REASON_INVALID_GROUP_CIPHER ((CsrWifiSmeIEEE80211Reason) 0x0012)
-#define CSR_WIFI_SME_IEEE80211_REASON_INVALID_PAIRWISE_CIPHER ((CsrWifiSmeIEEE80211Reason) 0x0013)
-#define CSR_WIFI_SME_IEEE80211_REASON_INVALID_AKMP ((CsrWifiSmeIEEE80211Reason) 0x0014)
-#define CSR_WIFI_SME_IEEE80211_REASON_UNSUPPORTED_RSN_IEVERSION ((CsrWifiSmeIEEE80211Reason) 0x0015)
-#define CSR_WIFI_SME_IEEE80211_REASON_INVALID_RSN_IECAPABILITIES ((CsrWifiSmeIEEE80211Reason) 0x0016)
-#define CSR_WIFI_SME_IEEE80211_REASON_DOT1X_AUTH_FAILED ((CsrWifiSmeIEEE80211Reason) 0x0017)
-#define CSR_WIFI_SME_IEEE80211_REASON_CIPHER_REJECTED_BY_POLICY ((CsrWifiSmeIEEE80211Reason) 0x0018)
-#define CSR_WIFI_SME_IEEE80211_REASON_SERVICE_CHANGE_PRECLUDES_TS ((CsrWifiSmeIEEE80211Reason) 0x001F)
-#define CSR_WIFI_SME_IEEE80211_REASON_QOS_UNSPECIFIED_REASON ((CsrWifiSmeIEEE80211Reason) 0x0020)
-#define CSR_WIFI_SME_IEEE80211_REASON_QOS_INSUFFICIENT_BANDWIDTH ((CsrWifiSmeIEEE80211Reason) 0x0021)
-#define CSR_WIFI_SME_IEEE80211_REASON_QOS_EXCESSIVE_NOT_ACK ((CsrWifiSmeIEEE80211Reason) 0x0022)
-#define CSR_WIFI_SME_IEEE80211_REASON_QOS_TXOPLIMIT_EXCEEDED ((CsrWifiSmeIEEE80211Reason) 0x0023)
-#define CSR_WIFI_SME_IEEE80211_REASON_QSTA_LEAVING ((CsrWifiSmeIEEE80211Reason) 0x0024)
-#define CSR_WIFI_SME_IEEE80211_REASON_END_TS ((CsrWifiSmeIEEE80211Reason) 0x0025)
-#define CSR_WIFI_SME_IEEE80211_REASON_END_DLS ((CsrWifiSmeIEEE80211Reason) 0x0025)
-#define CSR_WIFI_SME_IEEE80211_REASON_END_BA ((CsrWifiSmeIEEE80211Reason) 0x0025)
-#define CSR_WIFI_SME_IEEE80211_REASON_UNKNOWN_TS ((CsrWifiSmeIEEE80211Reason) 0x0026)
-#define CSR_WIFI_SME_IEEE80211_REASON_UNKNOWN_BA ((CsrWifiSmeIEEE80211Reason) 0x0026)
-#define CSR_WIFI_SME_IEEE80211_REASON_UNKNOWN_DLS ((CsrWifiSmeIEEE80211Reason) 0x0026)
-#define CSR_WIFI_SME_IEEE80211_REASON_TIMEOUT ((CsrWifiSmeIEEE80211Reason) 0x0027)
-#define CSR_WIFI_SME_IEEE80211_REASON_STAKEY_MISMATCH ((CsrWifiSmeIEEE80211Reason) 0x002d)
-#define CSR_WIFI_SME_IEEE80211_REASON_UNICAST_KEY_NEGOTIATION_TIMEOUT ((CsrWifiSmeIEEE80211Reason) 0xf019)
-#define CSR_WIFI_SME_IEEE80211_REASON_MULTICAST_KEY_ANNOUNCEMENT_TIMEOUT ((CsrWifiSmeIEEE80211Reason) 0xf01a)
-#define CSR_WIFI_SME_IEEE80211_REASON_INCOMPATIBLE_UNICAST_KEY_NEGOTIATION_IE ((CsrWifiSmeIEEE80211Reason) 0xf01b)
-#define CSR_WIFI_SME_IEEE80211_REASON_INVALID_MULTICAST_CIPHER ((CsrWifiSmeIEEE80211Reason) 0xf01c)
-#define CSR_WIFI_SME_IEEE80211_REASON_INVALID_UNICAST_CIPHER ((CsrWifiSmeIEEE80211Reason) 0xf01d)
-#define CSR_WIFI_SME_IEEE80211_REASON_UNSUPPORTED_WAPI_IE_VERSION ((CsrWifiSmeIEEE80211Reason) 0xf01e)
-#define CSR_WIFI_SME_IEEE80211_REASON_INVALID_WAPI_CAPABILITY_IE ((CsrWifiSmeIEEE80211Reason) 0xf01f)
-#define CSR_WIFI_SME_IEEE80211_REASON_WAI_CERTIFICATE_AUTHENTICATION_FAILED ((CsrWifiSmeIEEE80211Reason) 0xf020)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeIEEE80211Result
-
- DESCRIPTION
- As definined in the IEEE 802.11 standards
-
- VALUES
- CSR_WIFI_SME_IEEE80211_RESULT_SUCCESS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_UNSPECIFIED_FAILURE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_CAPABILITIES_MISMATCH
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REASSOCIATION_DENIED_NO_ASSOCIATION
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_EXTERNAL_REASON
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_AUTHENTICATION_MISMATCH
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_INVALID_AUTHENTICATION_SEQUENCE_NUMBER
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_CHALLENGE_FAILURE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_AUTHENTICATION_TIMEOUT
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_AP_OUT_OF_MEMORY
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_BASIC_RATES_MISMATCH
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_SHORT_PREAMBLE_REQUIRED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_PBCC_MODULATION_REQUIRED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_CHANNEL_AGILITY_REQUIRED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_SPECTRUM_MANAGEMENT_REQUIRED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_POWER_CAPABILITY_UNACCEPTABLE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_SUPPORTED_CHANNELS_UNACCEPTABLE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_SHORT_SLOT_REQUIRED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_DSSS_OFDMREQUIRED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_NO_HT_SUPPORT
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_R0KH_UNREACHABLE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_PCO_TRANSITION_SUPPORT
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_ASSOCIATION_REQUEST_REJECTED_TEMPORARILY
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_ROBUST_MANAGEMENT_FRAME_POLICY_VIOLATION
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_FAILURE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_AP_BANDWIDTH_INSUFFICIENT
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_POOR_OPERATING_CHANNEL
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_QOS_REQUIRED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_REASON_UNSPECIFIED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_INVALID_PARAMETERS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_WITH_SUGGESTED_TSPEC_CHANGES
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_INVALID_IE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_INVALID_GROUP_CIPHER
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_INVALID_PAIRWISE_CIPHER
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_INVALID_AKMP
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_UNSUPPORTED_RSN_VERSION
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_INVALID_RSN_CAPABILITY
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_SECURITY_POLICY
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_FOR_DELAY_PERIOD
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_NOT_ALLOWED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_NOT_PRESENT
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_NOT_QSTA
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_LISTEN_INTERVAL_TOO_LARGE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_INVALID_FT_ACTION_FRAME_COUNT
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_INVALID_PMKID
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_INVALID_MDIE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_INVALID_FTIE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_UNSPECIFIED_QOS_FAILURE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_WRONG_POLICY
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_INSUFFICIENT_BANDWIDTH
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_INVALID_TSPEC_PARAMETERS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_TIMEOUT
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_TOO_MANY_SIMULTANEOUS_REQUESTS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_BSS_ALREADY_STARTED_OR_JOINED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_NOT_SUPPORTED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_TRANSMISSION_FAILURE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_NOT_AUTHENTICATED
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_RESET_REQUIRED_BEFORE_START
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_LM_INFO_UNAVAILABLE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_INVALID_UNICAST_CIPHER
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_INVALID_MULTICAST_CIPHER
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_UNSUPPORTED_WAPI_IE_VERSION
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_IEEE80211_RESULT_INVALID_WAPI_CAPABILITY_IE
- - See IEEE 802.11 Standard
-
-*******************************************************************************/
-typedef u16 CsrWifiSmeIEEE80211Result;
-#define CSR_WIFI_SME_IEEE80211_RESULT_SUCCESS ((CsrWifiSmeIEEE80211Result) 0x0000)
-#define CSR_WIFI_SME_IEEE80211_RESULT_UNSPECIFIED_FAILURE ((CsrWifiSmeIEEE80211Result) 0x0001)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_CAPABILITIES_MISMATCH ((CsrWifiSmeIEEE80211Result) 0x000a)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REASSOCIATION_DENIED_NO_ASSOCIATION ((CsrWifiSmeIEEE80211Result) 0x000b)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_EXTERNAL_REASON ((CsrWifiSmeIEEE80211Result) 0x000c)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_AUTHENTICATION_MISMATCH ((CsrWifiSmeIEEE80211Result) 0x000d)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_INVALID_AUTHENTICATION_SEQUENCE_NUMBER ((CsrWifiSmeIEEE80211Result) 0x000e)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_CHALLENGE_FAILURE ((CsrWifiSmeIEEE80211Result) 0x000f)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_AUTHENTICATION_TIMEOUT ((CsrWifiSmeIEEE80211Result) 0x0010)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_AP_OUT_OF_MEMORY ((CsrWifiSmeIEEE80211Result) 0x0011)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_BASIC_RATES_MISMATCH ((CsrWifiSmeIEEE80211Result) 0x0012)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_SHORT_PREAMBLE_REQUIRED ((CsrWifiSmeIEEE80211Result) 0x0013)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_PBCC_MODULATION_REQUIRED ((CsrWifiSmeIEEE80211Result) 0x0014)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_CHANNEL_AGILITY_REQUIRED ((CsrWifiSmeIEEE80211Result) 0x0015)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_SPECTRUM_MANAGEMENT_REQUIRED ((CsrWifiSmeIEEE80211Result) 0x0016)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_POWER_CAPABILITY_UNACCEPTABLE ((CsrWifiSmeIEEE80211Result) 0x0017)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_SUPPORTED_CHANNELS_UNACCEPTABLE ((CsrWifiSmeIEEE80211Result) 0x0018)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_SHORT_SLOT_REQUIRED ((CsrWifiSmeIEEE80211Result) 0x0019)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_DSSS_OFDMREQUIRED ((CsrWifiSmeIEEE80211Result) 0x001a)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_NO_HT_SUPPORT ((CsrWifiSmeIEEE80211Result) 0x001b)
-#define CSR_WIFI_SME_IEEE80211_RESULT_R0KH_UNREACHABLE ((CsrWifiSmeIEEE80211Result) 0x001c)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_PCO_TRANSITION_SUPPORT ((CsrWifiSmeIEEE80211Result) 0x001d)
-#define CSR_WIFI_SME_IEEE80211_RESULT_ASSOCIATION_REQUEST_REJECTED_TEMPORARILY ((CsrWifiSmeIEEE80211Result) 0x001e)
-#define CSR_WIFI_SME_IEEE80211_RESULT_ROBUST_MANAGEMENT_FRAME_POLICY_VIOLATION ((CsrWifiSmeIEEE80211Result) 0x001f)
-#define CSR_WIFI_SME_IEEE80211_RESULT_FAILURE ((CsrWifiSmeIEEE80211Result) 0x0020)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_AP_BANDWIDTH_INSUFFICIENT ((CsrWifiSmeIEEE80211Result) 0x0021)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_POOR_OPERATING_CHANNEL ((CsrWifiSmeIEEE80211Result) 0x0022)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_QOS_REQUIRED ((CsrWifiSmeIEEE80211Result) 0x0023)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_REASON_UNSPECIFIED ((CsrWifiSmeIEEE80211Result) 0x0025)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED ((CsrWifiSmeIEEE80211Result) 0x0025)
-#define CSR_WIFI_SME_IEEE80211_RESULT_INVALID_PARAMETERS ((CsrWifiSmeIEEE80211Result) 0x0026)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_WITH_SUGGESTED_TSPEC_CHANGES ((CsrWifiSmeIEEE80211Result) 0x0027)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_INVALID_IE ((CsrWifiSmeIEEE80211Result) 0x0028)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_INVALID_GROUP_CIPHER ((CsrWifiSmeIEEE80211Result) 0x0029)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_INVALID_PAIRWISE_CIPHER ((CsrWifiSmeIEEE80211Result) 0x002a)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_INVALID_AKMP ((CsrWifiSmeIEEE80211Result) 0x002b)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_UNSUPPORTED_RSN_VERSION ((CsrWifiSmeIEEE80211Result) 0x002c)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_INVALID_RSN_CAPABILITY ((CsrWifiSmeIEEE80211Result) 0x002d)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_SECURITY_POLICY ((CsrWifiSmeIEEE80211Result) 0x002e)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_FOR_DELAY_PERIOD ((CsrWifiSmeIEEE80211Result) 0x002f)
-#define CSR_WIFI_SME_IEEE80211_RESULT_NOT_ALLOWED ((CsrWifiSmeIEEE80211Result) 0x0030)
-#define CSR_WIFI_SME_IEEE80211_RESULT_NOT_PRESENT ((CsrWifiSmeIEEE80211Result) 0x0031)
-#define CSR_WIFI_SME_IEEE80211_RESULT_NOT_QSTA ((CsrWifiSmeIEEE80211Result) 0x0032)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REJECTED_LISTEN_INTERVAL_TOO_LARGE ((CsrWifiSmeIEEE80211Result) 0x0033)
-#define CSR_WIFI_SME_IEEE80211_RESULT_INVALID_FT_ACTION_FRAME_COUNT ((CsrWifiSmeIEEE80211Result) 0x0034)
-#define CSR_WIFI_SME_IEEE80211_RESULT_INVALID_PMKID ((CsrWifiSmeIEEE80211Result) 0x0035)
-#define CSR_WIFI_SME_IEEE80211_RESULT_INVALID_MDIE ((CsrWifiSmeIEEE80211Result) 0x0036)
-#define CSR_WIFI_SME_IEEE80211_RESULT_INVALID_FTIE ((CsrWifiSmeIEEE80211Result) 0x0037)
-#define CSR_WIFI_SME_IEEE80211_RESULT_UNSPECIFIED_QOS_FAILURE ((CsrWifiSmeIEEE80211Result) 0x00c8)
-#define CSR_WIFI_SME_IEEE80211_RESULT_WRONG_POLICY ((CsrWifiSmeIEEE80211Result) 0x00c9)
-#define CSR_WIFI_SME_IEEE80211_RESULT_INSUFFICIENT_BANDWIDTH ((CsrWifiSmeIEEE80211Result) 0x00ca)
-#define CSR_WIFI_SME_IEEE80211_RESULT_INVALID_TSPEC_PARAMETERS ((CsrWifiSmeIEEE80211Result) 0x00cb)
-#define CSR_WIFI_SME_IEEE80211_RESULT_TIMEOUT ((CsrWifiSmeIEEE80211Result) 0x8000)
-#define CSR_WIFI_SME_IEEE80211_RESULT_TOO_MANY_SIMULTANEOUS_REQUESTS ((CsrWifiSmeIEEE80211Result) 0x8001)
-#define CSR_WIFI_SME_IEEE80211_RESULT_BSS_ALREADY_STARTED_OR_JOINED ((CsrWifiSmeIEEE80211Result) 0x8002)
-#define CSR_WIFI_SME_IEEE80211_RESULT_NOT_SUPPORTED ((CsrWifiSmeIEEE80211Result) 0x8003)
-#define CSR_WIFI_SME_IEEE80211_RESULT_TRANSMISSION_FAILURE ((CsrWifiSmeIEEE80211Result) 0x8004)
-#define CSR_WIFI_SME_IEEE80211_RESULT_REFUSED_NOT_AUTHENTICATED ((CsrWifiSmeIEEE80211Result) 0x8005)
-#define CSR_WIFI_SME_IEEE80211_RESULT_RESET_REQUIRED_BEFORE_START ((CsrWifiSmeIEEE80211Result) 0x8006)
-#define CSR_WIFI_SME_IEEE80211_RESULT_LM_INFO_UNAVAILABLE ((CsrWifiSmeIEEE80211Result) 0x8007)
-#define CSR_WIFI_SME_IEEE80211_RESULT_INVALID_UNICAST_CIPHER ((CsrWifiSmeIEEE80211Result) 0xf02f)
-#define CSR_WIFI_SME_IEEE80211_RESULT_INVALID_MULTICAST_CIPHER ((CsrWifiSmeIEEE80211Result) 0xf030)
-#define CSR_WIFI_SME_IEEE80211_RESULT_UNSUPPORTED_WAPI_IE_VERSION ((CsrWifiSmeIEEE80211Result) 0xf031)
-#define CSR_WIFI_SME_IEEE80211_RESULT_INVALID_WAPI_CAPABILITY_IE ((CsrWifiSmeIEEE80211Result) 0xf032)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeIndications
-
- DESCRIPTION
- Defines bits for CsrWifiSmeIndicationsMask
-
- VALUES
- CSR_WIFI_SME_INDICATIONS_NONE
- - Used to cancel the registrations for receiving indications
- CSR_WIFI_SME_INDICATIONS_WIFIOFF
- - Used to register for CSR_WIFI_SME_WIFI_OFF_IND events
- CSR_WIFI_SME_INDICATIONS_SCANRESULT
- - Used to register for CSR_WIFI_SME_SCAN_RESULT_IND events
- CSR_WIFI_SME_INDICATIONS_CONNECTIONQUALITY
- - Used to register for CSR_WIFI_SME_CONNECTION_QUALITY_IND
- events
- CSR_WIFI_SME_INDICATIONS_MEDIASTATUS
- - Used to register for CSR_WIFI_SME_MEDIA_STATUS_IND events
- CSR_WIFI_SME_INDICATIONS_MICFAILURE
- - Used to register for CSR_WIFI_SME_MICFAILURE_IND events
- CSR_WIFI_SME_INDICATIONS_PMKIDCANDIDATELIST
- - Used to register for CSR_WIFI_SME_PMKIDCANDIDATE_LIST_IND
- events
- CSR_WIFI_SME_INDICATIONS_TSPEC
- - Used to register for CSR_WIFI_SME_TSPEC_IND events
- CSR_WIFI_SME_INDICATIONS_ROAMSTART
- - Used to register for CSR_WIFI_SME_ROAM_START_IND events
- CSR_WIFI_SME_INDICATIONS_ROAMCOMPLETE
- - Used to register for CSR_WIFI_SME_ROAM_COMPLETE_IND events
- CSR_WIFI_SME_INDICATIONS_ASSOCIATIONSTART
- - Used to register for CSR_WIFI_SME_ASSOCIATION_START_IND
- events
- CSR_WIFI_SME_INDICATIONS_ASSOCIATIONCOMPLETE
- - Used to register for CSR_WIFI_SME_ASSOCIATION_COMPLETE_IND
- events
- CSR_WIFI_SME_INDICATIONS_IBSSSTATION
- - Used to register for CSR_WIFI_SME_IBSS_STATION_IND events
- CSR_WIFI_SME_INDICATIONS_WIFION
- - Used to register for CSR_WIFI_SME_WIFI_ON_IND events
- CSR_WIFI_SME_INDICATIONS_ERROR
- - Used to register for CSR_WIFI_SME_ERROR_IND events
- CSR_WIFI_SME_INDICATIONS_INFO
- - Used to register for CSR_WIFI_SME_INFO_IND events
- CSR_WIFI_SME_INDICATIONS_COREDUMP
- - Used to register for CSR_WIFI_SME_CORE_DUMP_IND events
- CSR_WIFI_SME_INDICATIONS_ALL
- - Used to register for all available indications
-
-*******************************************************************************/
-typedef u32 CsrWifiSmeIndications;
-#define CSR_WIFI_SME_INDICATIONS_NONE ((CsrWifiSmeIndications) 0x00000000)
-#define CSR_WIFI_SME_INDICATIONS_WIFIOFF ((CsrWifiSmeIndications) 0x00000001)
-#define CSR_WIFI_SME_INDICATIONS_SCANRESULT ((CsrWifiSmeIndications) 0x00000002)
-#define CSR_WIFI_SME_INDICATIONS_CONNECTIONQUALITY ((CsrWifiSmeIndications) 0x00000004)
-#define CSR_WIFI_SME_INDICATIONS_MEDIASTATUS ((CsrWifiSmeIndications) 0x00000008)
-#define CSR_WIFI_SME_INDICATIONS_MICFAILURE ((CsrWifiSmeIndications) 0x00000010)
-#define CSR_WIFI_SME_INDICATIONS_PMKIDCANDIDATELIST ((CsrWifiSmeIndications) 0x00000020)
-#define CSR_WIFI_SME_INDICATIONS_TSPEC ((CsrWifiSmeIndications) 0x00000040)
-#define CSR_WIFI_SME_INDICATIONS_ROAMSTART ((CsrWifiSmeIndications) 0x00000080)
-#define CSR_WIFI_SME_INDICATIONS_ROAMCOMPLETE ((CsrWifiSmeIndications) 0x00000100)
-#define CSR_WIFI_SME_INDICATIONS_ASSOCIATIONSTART ((CsrWifiSmeIndications) 0x00000200)
-#define CSR_WIFI_SME_INDICATIONS_ASSOCIATIONCOMPLETE ((CsrWifiSmeIndications) 0x00000400)
-#define CSR_WIFI_SME_INDICATIONS_IBSSSTATION ((CsrWifiSmeIndications) 0x00000800)
-#define CSR_WIFI_SME_INDICATIONS_WIFION ((CsrWifiSmeIndications) 0x00001000)
-#define CSR_WIFI_SME_INDICATIONS_ERROR ((CsrWifiSmeIndications) 0x00002000)
-#define CSR_WIFI_SME_INDICATIONS_INFO ((CsrWifiSmeIndications) 0x00004000)
-#define CSR_WIFI_SME_INDICATIONS_COREDUMP ((CsrWifiSmeIndications) 0x00008000)
-#define CSR_WIFI_SME_INDICATIONS_ALL ((CsrWifiSmeIndications) 0xFFFFFFFF)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeKeyType
-
- DESCRIPTION
- Indicates the type of the key
-
- VALUES
- CSR_WIFI_SME_KEY_TYPE_GROUP - Key for broadcast communication
- CSR_WIFI_SME_KEY_TYPE_PAIRWISE - Key for unicast communication
- CSR_WIFI_SME_KEY_TYPE_STAKEY - Key for direct link communication to
- another station in infrastructure networks
- CSR_WIFI_SME_KEY_TYPE_IGTK - Integrity Group Temporal Key
- CSR_WIFI_SME_KEY_TYPE_CCKM - Key for Cisco Centralized Key Management
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeKeyType;
-#define CSR_WIFI_SME_KEY_TYPE_GROUP ((CsrWifiSmeKeyType) 0x00)
-#define CSR_WIFI_SME_KEY_TYPE_PAIRWISE ((CsrWifiSmeKeyType) 0x01)
-#define CSR_WIFI_SME_KEY_TYPE_STAKEY ((CsrWifiSmeKeyType) 0x02)
-#define CSR_WIFI_SME_KEY_TYPE_IGTK ((CsrWifiSmeKeyType) 0x03)
-#define CSR_WIFI_SME_KEY_TYPE_CCKM ((CsrWifiSmeKeyType) 0x04)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeListAction
-
- DESCRIPTION
- Identifies the type of action to be performed on a list of items
- The values of this type are used across the NME/SME/Router API's and they
- must be kept consistent with the corresponding types in the .xml of the
- ottherinterfaces
-
- VALUES
- CSR_WIFI_SME_LIST_ACTION_GET - Retrieve the current list of items
- CSR_WIFI_SME_LIST_ACTION_ADD - Add one or more items
- CSR_WIFI_SME_LIST_ACTION_REMOVE - Remove one or more items
- CSR_WIFI_SME_LIST_ACTION_FLUSH - Remove all items
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeListAction;
-#define CSR_WIFI_SME_LIST_ACTION_GET ((CsrWifiSmeListAction) 0x00)
-#define CSR_WIFI_SME_LIST_ACTION_ADD ((CsrWifiSmeListAction) 0x01)
-#define CSR_WIFI_SME_LIST_ACTION_REMOVE ((CsrWifiSmeListAction) 0x02)
-#define CSR_WIFI_SME_LIST_ACTION_FLUSH ((CsrWifiSmeListAction) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMediaStatus
-
- DESCRIPTION
- Indicates the connection status
- The values of this type are used across the NME/SME/Router API's and they
- must be kept consistent with the corresponding types in the .xml of the
- ottherinterfaces
-
- VALUES
- CSR_WIFI_SME_MEDIA_STATUS_CONNECTED
- - Value CSR_WIFI_SME_MEDIA_STATUS_CONNECTED can happen in two
- situations:
- * A network connection is established. Specifically, this is
- when the MLME_ASSOCIATION completes or the first peer
- relationship is established in an IBSS. In a WPA/WPA2
- network, this indicates that the stack is ready to perform
- the 4-way handshake or 802.1x authentication if CSR NME
- security library is not used. If CSR NME security library
- is used this indicates, completion of 4way handshake or
- 802.1x authentication
- * The SME roams to another AP on the same ESS
- During the AP operation, it indicates that the peer station
- is connected to the AP and is ready for data transfer.
- CSR_WIFI_SME_MEDIA_STATUS_DISCONNECTED
- - Value CSR_WIFI_SME_MEDIA_STATUS_DISCONNECTED can happen in
- two situations:
- * when the connection to a network is lost and there is no
- alternative on the same ESS to roam to
- * when a CSR_WIFI_SME_DISCONNECT_REQ request is issued
- During AP or P2PGO operation, it indicates that the peer
- station has disconnected from the AP
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeMediaStatus;
-#define CSR_WIFI_SME_MEDIA_STATUS_CONNECTED ((CsrWifiSmeMediaStatus) 0x00)
-#define CSR_WIFI_SME_MEDIA_STATUS_DISCONNECTED ((CsrWifiSmeMediaStatus) 0x01)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeP2pCapability
-
- DESCRIPTION
- Defines P2P Device Capabilities
-
- VALUES
- CSR_WIFI_SME_P2P_SERVICE_DISCOVERY_CAPABILITY
- - This field is set to 1 if the P2P Device supports Service
- Discovery, and to 0 otherwise
- CSR_WIFI_SME_P2P_CLIENT_DISCOVERABILITY_CAPABILITY
- - This field is set to 1 when the P2P Device supports P2P
- Client Discoverability, and to 0 otherwise.
- CSR_WIFI_SME_P2P_CONCURRENT_OPERATION_CAPABILITY
- - This field is set to 1 when the P2P Device supports
- Concurrent Operation with WLAN, and to 0 otherwise.
- CSR_WIFI_SME_P2P_MANAGED_DEVICE_CAPABILITY
- - This field is set to 1 when the P2P interface of the P2P
- Device is capable of being managed by the WLAN
- (infrastructure network) based on P2P coexistence
- parameters, and to 0 otherwise
- CSR_WIFI_SME_P2P_INVITAION_CAPABILITY
- - This field is set to 1 if the P2P Device is capable of
- processing P2P Invitation Procedure signaling, and to 0
- otherwise.
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeP2pCapability;
-#define CSR_WIFI_SME_P2P_SERVICE_DISCOVERY_CAPABILITY ((CsrWifiSmeP2pCapability) 0x01)
-#define CSR_WIFI_SME_P2P_CLIENT_DISCOVERABILITY_CAPABILITY ((CsrWifiSmeP2pCapability) 0x02)
-#define CSR_WIFI_SME_P2P_CONCURRENT_OPERATION_CAPABILITY ((CsrWifiSmeP2pCapability) 0x04)
-#define CSR_WIFI_SME_P2P_MANAGED_DEVICE_CAPABILITY ((CsrWifiSmeP2pCapability) 0x08)
-#define CSR_WIFI_SME_P2P_INVITAION_CAPABILITY ((CsrWifiSmeP2pCapability) 0x20)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeP2pGroupCapability
-
- DESCRIPTION
- Define bits for P2P Group Capability
-
- VALUES
- CSR_WIFI_P2P_GRP_CAP_GO
- - Indicates if the local device has become a GO after GO
- negotiation
- CSR_WIFI_P2P_GRP_CAP_PERSISTENT
- - Persistent group
- CSR_WIFI_P2P_GRP_CAP_INTRABSS_DIST
- - Intra-BSS data distribution support
- CSR_WIFI_P2P_GRP_CAP_CROSS_CONN
- - Support of cross connection
- CSR_WIFI_P2P_GRP_CAP_PERSISTENT_RECONNECT
- - Support of persistent reconnect
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeP2pGroupCapability;
-#define CSR_WIFI_P2P_GRP_CAP_GO ((CsrWifiSmeP2pGroupCapability) 0x01)
-#define CSR_WIFI_P2P_GRP_CAP_PERSISTENT ((CsrWifiSmeP2pGroupCapability) 0x02)
-#define CSR_WIFI_P2P_GRP_CAP_INTRABSS_DIST ((CsrWifiSmeP2pGroupCapability) 0x08)
-#define CSR_WIFI_P2P_GRP_CAP_CROSS_CONN ((CsrWifiSmeP2pGroupCapability) 0x10)
-#define CSR_WIFI_P2P_GRP_CAP_PERSISTENT_RECONNECT ((CsrWifiSmeP2pGroupCapability) 0x20)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeP2pNoaConfigMethod
-
- DESCRIPTION
- Notice of Absece Configuration
-
- VALUES
- CSR_WIFI_P2P_NOA_NONE - Do not use NOA
- CSR_WIFI_P2P_NOA_AUTONOMOUS - NOA based on the traffic analysis
- CSR_WIFI_P2P_NOA_USER_DEFINED - NOA as specified by the user
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeP2pNoaConfigMethod;
-#define CSR_WIFI_P2P_NOA_NONE ((CsrWifiSmeP2pNoaConfigMethod) 0x00)
-#define CSR_WIFI_P2P_NOA_AUTONOMOUS ((CsrWifiSmeP2pNoaConfigMethod) 0x01)
-#define CSR_WIFI_P2P_NOA_USER_DEFINED ((CsrWifiSmeP2pNoaConfigMethod) 0x02)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeP2pRole
-
- DESCRIPTION
- Definition of roles for a P2P Device
-
- VALUES
- CSR_WIFI_SME_P2P_ROLE_NONE - A non-P2PDevice device
- CSR_WIFI_SME_P2P_ROLE_STANDALONE - A Standalone P2P device
- CSR_WIFI_SME_P2P_ROLE_GO - Role Assumed is that of a Group Owner
- within a P2P Group
- CSR_WIFI_SME_P2P_ROLE_CLI - Role Assumed is that of a P2P Client
- within a P2P Group
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeP2pRole;
-#define CSR_WIFI_SME_P2P_ROLE_NONE ((CsrWifiSmeP2pRole) 0x00)
-#define CSR_WIFI_SME_P2P_ROLE_STANDALONE ((CsrWifiSmeP2pRole) 0x01)
-#define CSR_WIFI_SME_P2P_ROLE_GO ((CsrWifiSmeP2pRole) 0x02)
-#define CSR_WIFI_SME_P2P_ROLE_CLI ((CsrWifiSmeP2pRole) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeP2pStatus
-
- DESCRIPTION
- This data type enumerates the outcome of P2P procedure
-
- VALUES
- CSR_WIFI_SME_P2P_STATUS_SUCCESS
- - Success
- CSR_WIFI_SME_P2P_STATUS_FAIL_INFO_UNAVAILABLE
- - Fail; information is currently unavailable
- CSR_WIFI_SME_P2P_STATUS_FAIL_INCOMPATIBLE_PARAM
- - Fail; incompatible parameters
- CSR_WIFI_SME_P2P_STATUS_FAIL_LIMIT_REACHED
- - Fail; limit reached
- CSR_WIFI_SME_P2P_STATUS_FAIL_INVALID_PARAM
- - Fail; invalid parameters
- CSR_WIFI_SME_P2P_STATUS_FAIL_ACCOMODATE
- - Fail; unable to accommodate request
- CSR_WIFI_SME_P2P_STATUS_FAIL_PREV_ERROR
- - Fail; previous protocol error, or disruptive behavior
- CSR_WIFI_SME_P2P_STATUS_FAIL_COMMON_CHANNELS
- - Fail; no common channels
- CSR_WIFI_SME_P2P_STATUS_FAIL_UNKNOWN_GROUP
- - Fail; unknown P2P Group
- CSR_WIFI_SME_P2P_STATUS_FAIL_GO_INTENT
- - Fail: both P2P Devices indicated an Intent of 15 in Group
- Owner Negotiation
- CSR_WIFI_SME_P2P_STATUS_FAIL_PROVISION_METHOD_INCOMPATIBLE
- - Fail; incompatible provisioning method
- CSR_WIFI_SME_P2P_STATUS_FAIL_REJECT
- - Fail: rejected by user
- CSR_WIFI_SME_P2P_STATUS_FAIL_RESERVED
- - Fail; Status Reserved
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeP2pStatus;
-#define CSR_WIFI_SME_P2P_STATUS_SUCCESS ((CsrWifiSmeP2pStatus) 0x00)
-#define CSR_WIFI_SME_P2P_STATUS_FAIL_INFO_UNAVAILABLE ((CsrWifiSmeP2pStatus) 0x01)
-#define CSR_WIFI_SME_P2P_STATUS_FAIL_INCOMPATIBLE_PARAM ((CsrWifiSmeP2pStatus) 0x02)
-#define CSR_WIFI_SME_P2P_STATUS_FAIL_LIMIT_REACHED ((CsrWifiSmeP2pStatus) 0x03)
-#define CSR_WIFI_SME_P2P_STATUS_FAIL_INVALID_PARAM ((CsrWifiSmeP2pStatus) 0x04)
-#define CSR_WIFI_SME_P2P_STATUS_FAIL_ACCOMODATE ((CsrWifiSmeP2pStatus) 0x05)
-#define CSR_WIFI_SME_P2P_STATUS_FAIL_PREV_ERROR ((CsrWifiSmeP2pStatus) 0x06)
-#define CSR_WIFI_SME_P2P_STATUS_FAIL_COMMON_CHANNELS ((CsrWifiSmeP2pStatus) 0x07)
-#define CSR_WIFI_SME_P2P_STATUS_FAIL_UNKNOWN_GROUP ((CsrWifiSmeP2pStatus) 0x08)
-#define CSR_WIFI_SME_P2P_STATUS_FAIL_GO_INTENT ((CsrWifiSmeP2pStatus) 0x09)
-#define CSR_WIFI_SME_P2P_STATUS_FAIL_PROVISION_METHOD_INCOMPATIBLE ((CsrWifiSmeP2pStatus) 0x0A)
-#define CSR_WIFI_SME_P2P_STATUS_FAIL_REJECT ((CsrWifiSmeP2pStatus) 0x0B)
-#define CSR_WIFI_SME_P2P_STATUS_FAIL_RESERVED ((CsrWifiSmeP2pStatus) 0xFF)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePacketFilterMode
-
- DESCRIPTION
- Options for the filter mode parameter.
- The Values here match the HIP interface
-
- VALUES
- CSR_WIFI_SME_PACKET_FILTER_MODE_OPT_OUT
- - Broadcast packets are always reported to the host unless
- they match at least one of the specified TCLAS IEs.
- CSR_WIFI_SME_PACKET_FILTER_MODE_OPT_IN
- - Broadcast packets are reported to the host only if they
- match at least one of the specified TCLAS IEs.
-
-*******************************************************************************/
-typedef u8 CsrWifiSmePacketFilterMode;
-#define CSR_WIFI_SME_PACKET_FILTER_MODE_OPT_OUT ((CsrWifiSmePacketFilterMode) 0x00)
-#define CSR_WIFI_SME_PACKET_FILTER_MODE_OPT_IN ((CsrWifiSmePacketFilterMode) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePowerSaveLevel
-
- DESCRIPTION
- Power Save Level options as defined in the IEEE 802.11 standards
- First 3 values are set to match the mlme PowerManagementMode
-
- VALUES
- CSR_WIFI_SME_POWER_SAVE_LEVEL_LOW - No power save: the driver will remain
- active at all times
- CSR_WIFI_SME_POWER_SAVE_LEVEL_HIGH - Enter power save after all packets in
- the queues are transmitted and received
- CSR_WIFI_SME_POWER_SAVE_LEVEL_MED - Enter power save after all packets in
- the queues are transmitted and received
- and a further configurable delay
- (default 1s) has elapsed
- CSR_WIFI_SME_POWER_SAVE_LEVEL_AUTO - The SME will decide when to enter power
- save mode according to the traffic
- analysis
-
-*******************************************************************************/
-typedef u8 CsrWifiSmePowerSaveLevel;
-#define CSR_WIFI_SME_POWER_SAVE_LEVEL_LOW ((CsrWifiSmePowerSaveLevel) 0x00)
-#define CSR_WIFI_SME_POWER_SAVE_LEVEL_HIGH ((CsrWifiSmePowerSaveLevel) 0x01)
-#define CSR_WIFI_SME_POWER_SAVE_LEVEL_MED ((CsrWifiSmePowerSaveLevel) 0x02)
-#define CSR_WIFI_SME_POWER_SAVE_LEVEL_AUTO ((CsrWifiSmePowerSaveLevel) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePreambleType
-
- DESCRIPTION
- SME Preamble Types
-
- VALUES
- CSR_WIFI_SME_USE_LONG_PREAMBLE - Use legacy (long) preamble
- CSR_WIFI_SME_USE_SHORT_PREAMBLE - Use short PPDU format
-
-*******************************************************************************/
-typedef u8 CsrWifiSmePreambleType;
-#define CSR_WIFI_SME_USE_LONG_PREAMBLE ((CsrWifiSmePreambleType) 0x00)
-#define CSR_WIFI_SME_USE_SHORT_PREAMBLE ((CsrWifiSmePreambleType) 0x01)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRadioIF
-
- DESCRIPTION
- Indicates the frequency
-
- VALUES
- CSR_WIFI_SME_RADIO_IF_GHZ_2_4 - Indicates the 2.4 GHZ frequency
- CSR_WIFI_SME_RADIO_IF_GHZ_5_0 - Future use: currently not supported
- CSR_WIFI_SME_RADIO_IF_BOTH - Future use: currently not supported
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeRadioIF;
-#define CSR_WIFI_SME_RADIO_IF_GHZ_2_4 ((CsrWifiSmeRadioIF) 0x01)
-#define CSR_WIFI_SME_RADIO_IF_GHZ_5_0 ((CsrWifiSmeRadioIF) 0x02)
-#define CSR_WIFI_SME_RADIO_IF_BOTH ((CsrWifiSmeRadioIF) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRegulatoryDomain
-
- DESCRIPTION
- Indicates the regulatory domain as defined in IEEE 802.11 standards
-
- VALUES
- CSR_WIFI_SME_REGULATORY_DOMAIN_OTHER
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_REGULATORY_DOMAIN_FCC
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_REGULATORY_DOMAIN_IC
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_REGULATORY_DOMAIN_ETSI
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_REGULATORY_DOMAIN_SPAIN
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_REGULATORY_DOMAIN_FRANCE
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_REGULATORY_DOMAIN_JAPAN
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_REGULATORY_DOMAIN_JAPANBIS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_REGULATORY_DOMAIN_CHINA
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_REGULATORY_DOMAIN_CHINABIS
- - See IEEE 802.11 Standard
- CSR_WIFI_SME_REGULATORY_DOMAIN_NONE
- - See IEEE 802.11 Standard
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeRegulatoryDomain;
-#define CSR_WIFI_SME_REGULATORY_DOMAIN_OTHER ((CsrWifiSmeRegulatoryDomain) 0x00)
-#define CSR_WIFI_SME_REGULATORY_DOMAIN_FCC ((CsrWifiSmeRegulatoryDomain) 0x10)
-#define CSR_WIFI_SME_REGULATORY_DOMAIN_IC ((CsrWifiSmeRegulatoryDomain) 0x20)
-#define CSR_WIFI_SME_REGULATORY_DOMAIN_ETSI ((CsrWifiSmeRegulatoryDomain) 0x30)
-#define CSR_WIFI_SME_REGULATORY_DOMAIN_SPAIN ((CsrWifiSmeRegulatoryDomain) 0x31)
-#define CSR_WIFI_SME_REGULATORY_DOMAIN_FRANCE ((CsrWifiSmeRegulatoryDomain) 0x32)
-#define CSR_WIFI_SME_REGULATORY_DOMAIN_JAPAN ((CsrWifiSmeRegulatoryDomain) 0x40)
-#define CSR_WIFI_SME_REGULATORY_DOMAIN_JAPANBIS ((CsrWifiSmeRegulatoryDomain) 0x41)
-#define CSR_WIFI_SME_REGULATORY_DOMAIN_CHINA ((CsrWifiSmeRegulatoryDomain) 0x50)
-#define CSR_WIFI_SME_REGULATORY_DOMAIN_CHINABIS ((CsrWifiSmeRegulatoryDomain) 0x51)
-#define CSR_WIFI_SME_REGULATORY_DOMAIN_NONE ((CsrWifiSmeRegulatoryDomain) 0xFF)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamReason
-
- DESCRIPTION
- Indicates the reason for roaming
-
- VALUES
- CSR_WIFI_SME_ROAM_REASON_BEACONLOST
- - The station cannot receive the beacon signal any more
- CSR_WIFI_SME_ROAM_REASON_DISASSOCIATED
- - The station has been disassociated
- CSR_WIFI_SME_ROAM_REASON_DEAUTHENTICATED
- - The station has been deauthenticated
- CSR_WIFI_SME_ROAM_REASON_BETTERAPFOUND
- - A better AP has been found
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeRoamReason;
-#define CSR_WIFI_SME_ROAM_REASON_BEACONLOST ((CsrWifiSmeRoamReason) 0x00)
-#define CSR_WIFI_SME_ROAM_REASON_DISASSOCIATED ((CsrWifiSmeRoamReason) 0x01)
-#define CSR_WIFI_SME_ROAM_REASON_DEAUTHENTICATED ((CsrWifiSmeRoamReason) 0x02)
-#define CSR_WIFI_SME_ROAM_REASON_BETTERAPFOUND ((CsrWifiSmeRoamReason) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanType
-
- DESCRIPTION
- Identifies the type of scan to be performed
-
- VALUES
- CSR_WIFI_SME_SCAN_TYPE_ALL - Scan actively or passively according to the
- regulatory domain restrictions
- CSR_WIFI_SME_SCAN_TYPE_ACTIVE - Scan actively only: send probes and listen
- for answers
- CSR_WIFI_SME_SCAN_TYPE_PASSIVE - Scan passively only: listen for beacon
- messages
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeScanType;
-#define CSR_WIFI_SME_SCAN_TYPE_ALL ((CsrWifiSmeScanType) 0x00)
-#define CSR_WIFI_SME_SCAN_TYPE_ACTIVE ((CsrWifiSmeScanType) 0x01)
-#define CSR_WIFI_SME_SCAN_TYPE_PASSIVE ((CsrWifiSmeScanType) 0x02)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeTrafficType
-
- DESCRIPTION
- Identifies the type of traffic going on on the connection.
- The values of this type are used across the NME/SME/Router API's and they
- must be kept consistent with the corresponding types in the .xml of the
- ottherinterfaces
-
- VALUES
- CSR_WIFI_SME_TRAFFIC_TYPE_OCCASIONAL
- - During the last 30 seconds there were fewer than 20 packets
- per seconds in each second in both directions
- CSR_WIFI_SME_TRAFFIC_TYPE_BURSTY
- - During the last 30 seconds there was at least one second
- during which more than 20 packets were received in either
- direction
- CSR_WIFI_SME_TRAFFIC_TYPE_PERIODIC
- - During the last 5 seconds there were at least 10 packets
- received each second and a defined period for the traffic
- can be recognized
- CSR_WIFI_SME_TRAFFIC_TYPE_CONTINUOUS
- - During the last 5 seconds there were at least 20 packets
- received each second in either direction
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeTrafficType;
-#define CSR_WIFI_SME_TRAFFIC_TYPE_OCCASIONAL ((CsrWifiSmeTrafficType) 0x00)
-#define CSR_WIFI_SME_TRAFFIC_TYPE_BURSTY ((CsrWifiSmeTrafficType) 0x01)
-#define CSR_WIFI_SME_TRAFFIC_TYPE_PERIODIC ((CsrWifiSmeTrafficType) 0x02)
-#define CSR_WIFI_SME_TRAFFIC_TYPE_CONTINUOUS ((CsrWifiSmeTrafficType) 0x03)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeTspecCtrl
-
- DESCRIPTION
- Defines bits for CsrWifiSmeTspecCtrlMask for additional CCX configuration.
- CURRENTLY NOT SUPPORTED.
-
- VALUES
- CSR_WIFI_SME_TSPEC_CTRL_STRICT
- - No automatic negotiation
- CSR_WIFI_SME_TSPEC_CTRL_CCX_SIGNALLING
- - Signalling TSPEC
- CSR_WIFI_SME_TSPEC_CTRL_CCX_VOICE
- - Voice traffic TSPEC
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeTspecCtrl;
-#define CSR_WIFI_SME_TSPEC_CTRL_STRICT ((CsrWifiSmeTspecCtrl) 0x01)
-#define CSR_WIFI_SME_TSPEC_CTRL_CCX_SIGNALLING ((CsrWifiSmeTspecCtrl) 0x02)
-#define CSR_WIFI_SME_TSPEC_CTRL_CCX_VOICE ((CsrWifiSmeTspecCtrl) 0x04)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeTspecResultCode
-
- DESCRIPTION
- Defines the result of the TSPEC exchanges with the AP
-
- VALUES
- CSR_WIFI_SME_TSPEC_RESULT_SUCCESS
- - TSPEC command has been processed correctly
- CSR_WIFI_SME_TSPEC_RESULT_UNSPECIFIED_QOS_FAILURE
- - The Access Point reported a failure
- CSR_WIFI_SME_TSPEC_RESULT_FAILURE
- - Internal failure in the SME
- CSR_WIFI_SME_TSPEC_RESULT_INVALID_TSPEC_PARAMETERS
- - The TSPEC parameters are invalid
- CSR_WIFI_SME_TSPEC_RESULT_INVALID_TCLAS_PARAMETERS
- - The TCLASS parameters are invalid
- CSR_WIFI_SME_TSPEC_RESULT_INSUFFICIENT_BANDWIDTH
- - As specified by the WMM Spec
- CSR_WIFI_SME_TSPEC_RESULT_WRONG_POLICY
- - As specified by the WMM Spec
- CSR_WIFI_SME_TSPEC_RESULT_REJECTED_WITH_SUGGESTED_CHANGES
- - As specified by the WMM Spec
- CSR_WIFI_SME_TSPEC_RESULT_TIMEOUT
- - The TSPEC negotiation timed out
- CSR_WIFI_SME_TSPEC_RESULT_NOT_SUPPORTED
- - The Access Point does not support the TSPEC
- CSR_WIFI_SME_TSPEC_RESULT_IE_LENGTH_INCORRECT
- - The length of the TSPEC is not correct
- CSR_WIFI_SME_TSPEC_RESULT_INVALID_TRANSACTION_ID
- - The TSPEC transaction id is not in the list
- CSR_WIFI_SME_TSPEC_RESULT_INSTALLED
- - The TSPEC has been installed and it is now active.
- CSR_WIFI_SME_TSPEC_RESULT_TID_ALREADY_INSTALLED
- - The Traffic ID has already been installed
- CSR_WIFI_SME_TSPEC_RESULT_TSPEC_REMOTELY_DELETED
- - The AP has deleted the TSPEC
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeTspecResultCode;
-#define CSR_WIFI_SME_TSPEC_RESULT_SUCCESS ((CsrWifiSmeTspecResultCode) 0x00)
-#define CSR_WIFI_SME_TSPEC_RESULT_UNSPECIFIED_QOS_FAILURE ((CsrWifiSmeTspecResultCode) 0x01)
-#define CSR_WIFI_SME_TSPEC_RESULT_FAILURE ((CsrWifiSmeTspecResultCode) 0x02)
-#define CSR_WIFI_SME_TSPEC_RESULT_INVALID_TSPEC_PARAMETERS ((CsrWifiSmeTspecResultCode) 0x05)
-#define CSR_WIFI_SME_TSPEC_RESULT_INVALID_TCLAS_PARAMETERS ((CsrWifiSmeTspecResultCode) 0x06)
-#define CSR_WIFI_SME_TSPEC_RESULT_INSUFFICIENT_BANDWIDTH ((CsrWifiSmeTspecResultCode) 0x07)
-#define CSR_WIFI_SME_TSPEC_RESULT_WRONG_POLICY ((CsrWifiSmeTspecResultCode) 0x08)
-#define CSR_WIFI_SME_TSPEC_RESULT_REJECTED_WITH_SUGGESTED_CHANGES ((CsrWifiSmeTspecResultCode) 0x09)
-#define CSR_WIFI_SME_TSPEC_RESULT_TIMEOUT ((CsrWifiSmeTspecResultCode) 0x0D)
-#define CSR_WIFI_SME_TSPEC_RESULT_NOT_SUPPORTED ((CsrWifiSmeTspecResultCode) 0x0E)
-#define CSR_WIFI_SME_TSPEC_RESULT_IE_LENGTH_INCORRECT ((CsrWifiSmeTspecResultCode) 0x10)
-#define CSR_WIFI_SME_TSPEC_RESULT_INVALID_TRANSACTION_ID ((CsrWifiSmeTspecResultCode) 0x11)
-#define CSR_WIFI_SME_TSPEC_RESULT_INSTALLED ((CsrWifiSmeTspecResultCode) 0x12)
-#define CSR_WIFI_SME_TSPEC_RESULT_TID_ALREADY_INSTALLED ((CsrWifiSmeTspecResultCode) 0x13)
-#define CSR_WIFI_SME_TSPEC_RESULT_TSPEC_REMOTELY_DELETED ((CsrWifiSmeTspecResultCode) 0x14)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWepAuthMode
-
- DESCRIPTION
- Define bits for CsrWifiSmeWepAuthMode
-
- VALUES
- CSR_WIFI_SME_WEP_AUTH_MODE_OPEN - Open-WEP enabled network
- CSR_WIFI_SME_WEP_AUTH_MODE_SHARED - Shared-key WEP enabled network.
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeWepAuthMode;
-#define CSR_WIFI_SME_WEP_AUTH_MODE_OPEN ((CsrWifiSmeWepAuthMode) 0x00)
-#define CSR_WIFI_SME_WEP_AUTH_MODE_SHARED ((CsrWifiSmeWepAuthMode) 0x01)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWepCredentialType
-
- DESCRIPTION
- Definition of types of WEP Credentials
-
- VALUES
- CSR_WIFI_SME_CREDENTIAL_TYPE_WEP64
- - WEP 64 credential
- CSR_WIFI_SME_CREDENTIAL_TYPE_WEP128
- - WEP 128 credential
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeWepCredentialType;
-#define CSR_WIFI_SME_CREDENTIAL_TYPE_WEP64 ((CsrWifiSmeWepCredentialType) 0x00)
-#define CSR_WIFI_SME_CREDENTIAL_TYPE_WEP128 ((CsrWifiSmeWepCredentialType) 0x01)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWmmMode
-
- DESCRIPTION
- Defines bits for CsrWifiSmeWmmModeMask: enable/disable WMM features.
-
- VALUES
- CSR_WIFI_SME_WMM_MODE_DISABLED - Disables the WMM features.
- CSR_WIFI_SME_WMM_MODE_AC_ENABLED - Enables support for WMM-AC.
- CSR_WIFI_SME_WMM_MODE_PS_ENABLED - Enables support for WMM Power Save.
- CSR_WIFI_SME_WMM_MODE_SA_ENABLED - Currently not supported
- CSR_WIFI_SME_WMM_MODE_ENABLED - Enables support for all currently
- available WMM features.
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeWmmMode;
-#define CSR_WIFI_SME_WMM_MODE_DISABLED ((CsrWifiSmeWmmMode) 0x00)
-#define CSR_WIFI_SME_WMM_MODE_AC_ENABLED ((CsrWifiSmeWmmMode) 0x01)
-#define CSR_WIFI_SME_WMM_MODE_PS_ENABLED ((CsrWifiSmeWmmMode) 0x02)
-#define CSR_WIFI_SME_WMM_MODE_SA_ENABLED ((CsrWifiSmeWmmMode) 0x04)
-#define CSR_WIFI_SME_WMM_MODE_ENABLED ((CsrWifiSmeWmmMode) 0xFF)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWmmQosInfo
-
- DESCRIPTION
- Defines bits for the QoS Info Octect as defined in the WMM specification.
- The first four values define one bit each that can be set or cleared.
- Each of the last four values define all the remaining 4 bits and only one
- of them at the time shall be used.
- For more information, see 'WMM (including WMM Power Save) Specification -
- Version 1.1' and 'UniFi Configuring WMM and WMM-PS, Application Note'.
-
- VALUES
- CSR_WIFI_SME_WMM_QOS_INFO_AC_MAX_SP_ALL
- - WMM AP may deliver all buffered frames
- CSR_WIFI_SME_WMM_QOS_INFO_AC_VO
- - Enable UAPSD(both trigger and delivery) for Voice Access
- Category
- CSR_WIFI_SME_WMM_QOS_INFO_AC_VI
- - Enable UAPSD(both trigger and delivery) for Video Access
- Category
- CSR_WIFI_SME_WMM_QOS_INFO_AC_BK
- - Enable UAPSD(both trigger and delivery) for Background
- Access Category
- CSR_WIFI_SME_WMM_QOS_INFO_AC_BE
- - Enable UAPSD(both trigger and delivery) for Best Effort
- Access Category
- CSR_WIFI_SME_WMM_QOS_INFO_AC_MAX_SP_TWO
- - WMM AP may deliver a maximum of 2 buffered frames (MSDUs
- and MMPDUs) per USP
- CSR_WIFI_SME_WMM_QOS_INFO_AC_MAX_SP_FOUR
- - WMM AP may deliver a maximum of 4 buffered frames (MSDUs
- and MMPDUs) per USP
- CSR_WIFI_SME_WMM_QOS_INFO_AC_MAX_SP_SIX
- - WMM AP may deliver a maximum of 6 buffered frames (MSDUs
- and MMPDUs) per USP
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeWmmQosInfo;
-#define CSR_WIFI_SME_WMM_QOS_INFO_AC_MAX_SP_ALL ((CsrWifiSmeWmmQosInfo) 0x00)
-#define CSR_WIFI_SME_WMM_QOS_INFO_AC_VO ((CsrWifiSmeWmmQosInfo) 0x01)
-#define CSR_WIFI_SME_WMM_QOS_INFO_AC_VI ((CsrWifiSmeWmmQosInfo) 0x02)
-#define CSR_WIFI_SME_WMM_QOS_INFO_AC_BK ((CsrWifiSmeWmmQosInfo) 0x04)
-#define CSR_WIFI_SME_WMM_QOS_INFO_AC_BE ((CsrWifiSmeWmmQosInfo) 0x08)
-#define CSR_WIFI_SME_WMM_QOS_INFO_AC_MAX_SP_TWO ((CsrWifiSmeWmmQosInfo) 0x20)
-#define CSR_WIFI_SME_WMM_QOS_INFO_AC_MAX_SP_FOUR ((CsrWifiSmeWmmQosInfo) 0x40)
-#define CSR_WIFI_SME_WMM_QOS_INFO_AC_MAX_SP_SIX ((CsrWifiSmeWmmQosInfo) 0x60)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWpsConfigType
-
- DESCRIPTION
- WPS config methods supported/used by a device
-
- VALUES
- CSR_WIFI_WPS_CONFIG_LABEL
- - Label
- CSR_WIFI_WPS_CONFIG_DISPLAY
- - Display
- CSR_WIFI_WPS_CONFIG_EXT_NFC
- - External NFC : Not supported in this release
- CSR_WIFI_WPS_CONFIG_INT_NFC
- - Internal NFC : Not supported in this release
- CSR_WIFI_WPS_CONFIG_NFC_IFACE
- - NFC interface : Not supported in this release
- CSR_WIFI_WPS_CONFIG_PBC
- - PBC
- CSR_WIFI_WPS_CONFIG_KEYPAD
- - KeyPad
- CSR_WIFI_WPS_CONFIG_VIRTUAL_PBC
- - PBC through software user interface
- CSR_WIFI_WPS_CONFIG_PHYSICAL_PBC
- - Physical PBC
- CSR_WIFI_WPS_CONFIG_VIRTUAL_DISPLAY
- - Virtual Display : via html config page etc
- CSR_WIFI_WPS_CONFIG_PHYSICAL_DISPLAY
- - Physical Display : Attached to the device
-
-*******************************************************************************/
-typedef u16 CsrWifiSmeWpsConfigType;
-#define CSR_WIFI_WPS_CONFIG_LABEL ((CsrWifiSmeWpsConfigType) 0x0004)
-#define CSR_WIFI_WPS_CONFIG_DISPLAY ((CsrWifiSmeWpsConfigType) 0x0008)
-#define CSR_WIFI_WPS_CONFIG_EXT_NFC ((CsrWifiSmeWpsConfigType) 0x0010)
-#define CSR_WIFI_WPS_CONFIG_INT_NFC ((CsrWifiSmeWpsConfigType) 0x0020)
-#define CSR_WIFI_WPS_CONFIG_NFC_IFACE ((CsrWifiSmeWpsConfigType) 0x0040)
-#define CSR_WIFI_WPS_CONFIG_PBC ((CsrWifiSmeWpsConfigType) 0x0080)
-#define CSR_WIFI_WPS_CONFIG_KEYPAD ((CsrWifiSmeWpsConfigType) 0x0100)
-#define CSR_WIFI_WPS_CONFIG_VIRTUAL_PBC ((CsrWifiSmeWpsConfigType) 0x0280)
-#define CSR_WIFI_WPS_CONFIG_PHYSICAL_PBC ((CsrWifiSmeWpsConfigType) 0x0480)
-#define CSR_WIFI_WPS_CONFIG_VIRTUAL_DISPLAY ((CsrWifiSmeWpsConfigType) 0x2008)
-#define CSR_WIFI_WPS_CONFIG_PHYSICAL_DISPLAY ((CsrWifiSmeWpsConfigType) 0x4008)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWpsDeviceCategory
-
- DESCRIPTION
- Wps Primary Device Types
-
- VALUES
- CSR_WIFI_SME_WPS_CATEGORY_UNSPECIFIED
- - Unspecified.
- CSR_WIFI_SME_WPS_CATEGORY_COMPUTER
- - Computer.
- CSR_WIFI_SME_WPS_CATEGORY_INPUT_DEV
- - Input device
- CSR_WIFI_SME_WPS_CATEGORY_PRT_SCAN_FX_CP
- - Printer Scanner Fax Copier etc
- CSR_WIFI_SME_WPS_CATEGORY_CAMERA
- - Camera
- CSR_WIFI_SME_WPS_CATEGORY_STORAGE
- - Storage
- CSR_WIFI_SME_WPS_CATEGORY_NET_INFRA
- - Net Infra
- CSR_WIFI_SME_WPS_CATEGORY_DISPLAY
- - Display
- CSR_WIFI_SME_WPS_CATEGORY_MULTIMEDIA
- - Multimedia
- CSR_WIFI_SME_WPS_CATEGORY_GAMING
- - Gaming.
- CSR_WIFI_SME_WPS_CATEGORY_TELEPHONE
- - Telephone.
- CSR_WIFI_SME_WPS_CATEGORY_AUDIO
- - Audio
- CSR_WIFI_SME_WPS_CATEOARY_OTHERS
- - Others.
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeWpsDeviceCategory;
-#define CSR_WIFI_SME_WPS_CATEGORY_UNSPECIFIED ((CsrWifiSmeWpsDeviceCategory) 0x00)
-#define CSR_WIFI_SME_WPS_CATEGORY_COMPUTER ((CsrWifiSmeWpsDeviceCategory) 0x01)
-#define CSR_WIFI_SME_WPS_CATEGORY_INPUT_DEV ((CsrWifiSmeWpsDeviceCategory) 0x02)
-#define CSR_WIFI_SME_WPS_CATEGORY_PRT_SCAN_FX_CP ((CsrWifiSmeWpsDeviceCategory) 0x03)
-#define CSR_WIFI_SME_WPS_CATEGORY_CAMERA ((CsrWifiSmeWpsDeviceCategory) 0x04)
-#define CSR_WIFI_SME_WPS_CATEGORY_STORAGE ((CsrWifiSmeWpsDeviceCategory) 0x05)
-#define CSR_WIFI_SME_WPS_CATEGORY_NET_INFRA ((CsrWifiSmeWpsDeviceCategory) 0x06)
-#define CSR_WIFI_SME_WPS_CATEGORY_DISPLAY ((CsrWifiSmeWpsDeviceCategory) 0x07)
-#define CSR_WIFI_SME_WPS_CATEGORY_MULTIMEDIA ((CsrWifiSmeWpsDeviceCategory) 0x08)
-#define CSR_WIFI_SME_WPS_CATEGORY_GAMING ((CsrWifiSmeWpsDeviceCategory) 0x09)
-#define CSR_WIFI_SME_WPS_CATEGORY_TELEPHONE ((CsrWifiSmeWpsDeviceCategory) 0x0A)
-#define CSR_WIFI_SME_WPS_CATEGORY_AUDIO ((CsrWifiSmeWpsDeviceCategory) 0x0B)
-#define CSR_WIFI_SME_WPS_CATEOARY_OTHERS ((CsrWifiSmeWpsDeviceCategory) 0xFF)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWpsDeviceSubCategory
-
- DESCRIPTION
- Wps Secondary Device Types
-
- VALUES
- CSR_WIFI_SME_WPS_SUB_CATEGORY_UNSPECIFIED
- - Unspecied
- CSR_WIFI_SME_WPS_STORAGE_SUB_CATEGORY_NAS
- - Network Associated Storage
- CSR_WIFI_SME_WPS_PSFC_SUB_CATEGORY_PRNTR
- - Printer or print server
- CSR_WIFI_SME_WPS_TELEPHONE_SUB_CATEGORY_WM
- - Windows mobile
- CSR_WIFI_SME_WPS_AUDIO_SUB_CATEGORY_TUNER
- - Audio tuner/receiver
- CSR_WIFI_SME_WPS_CAMERA_SUB_CATEGORY_DIG_STL
- - Digital still camera
- CSR_WIFI_SME_WPS_NET_INFRA_SUB_CATEGORY_AP
- - Access Point
- CSR_WIFI_SME_WPS_DISPLAY_SUB_CATEGORY_TV
- - TV.
- CSR_WIFI_SME_WPS_MM_SUB_CATEGORY_DAR
- - DAR.
- CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_KEYBD
- - Keyboard.
- CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_PC
- - PC.
- CSR_WIFI_SME_WPS_GAMING_SUB_CATEGORY_XBOX
- - Xbox.
- CSR_WIFI_SME_WPS_PSFC_SUB_CATEGORY_SCNR
- - Scanner
- CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_SERVER
- - Server
- CSR_WIFI_SME_WPS_NET_INFRA_SUB_CATEGORY_ROUTER
- - Router
- CSR_WIFI_SME_WPS_MM_SUB_CATEGORY_PVR
- - PVR
- CSR_WIFI_SME_WPS_AUDIO_SUB_CATEGORY_SPEAKER
- - Speaker
- CSR_WIFI_SME_WPS_TELEPHONE_SUB_CATEGORY_FP_SM
- - Feature phone - Single mode
- CSR_WIFI_SME_WPS_CAMERA_SUB_CATEGORY_VIDEO
- - Video camera
- CSR_WIFI_SME_WPS_DISPLAY_SUB_CATEGORY_PIC_FRM
- - Picture frame
- CSR_WIFI_SME_WPS_GAMING_SUB_CATEGORY_XBOX_360
- - Xbox360
- CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_MOUSE
- - Mouse
- CSR_WIFI_SME_WPS_NET_INFRA_SUB_CATEGORY_SWITCH
- - Switch
- CSR_WIFI_SME_WPS_AUDIO_SUB_CATEGORY_PMP
- - Portable music player
- CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_JOYSTK
- - Joy stick
- CSR_WIFI_SME_WPS_GAMING_SUB_CATEGORY_PLAY_STN
- - Play-station
- CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_MED_CENT
- - Media Center
- CSR_WIFI_SME_WPS_MM_SUB_CATEGORY_MCX
- - MCX
- CSR_WIFI_SME_WPS_TELEPHONE_SUB_CATEGORY_FP_DM
- - Feature phone - Dual mode
- CSR_WIFI_SME_WPS_CAMERA_SUB_CATEGORY_WEB
- - Web camera
- CSR_WIFI_SME_WPS_PSFC_SUB_CATEGORY_FAX
- - Fax
- CSR_WIFI_SME_WPS_DISPLAY_SUB_CATEGORY_PROJECTOR
- - Projector
- CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_TRKBL
- - Track Ball
- CSR_WIFI_SME_WPS_MM_SUB_CATEGORY_ST_BOX
- - Set-Top-Box
- CSR_WIFI_SME_WPS_NET_INFRA_SUB_CATEGORY_GATEWAY
- - GateWay.
- CSR_WIFI_SME_WPS_CAMERA_SUB_CATEGORY_SECURITY
- - Security camera
- CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_ULTRA_MOB_PC
- - Ultra mobile PC.
- CSR_WIFI_SME_WPS_GAMING_SUB_CATEGORY_CONSOLE
- - Game console/Game console adapter
- CSR_WIFI_SME_WPS_PSFC_SUB_CATEGORY_CPR
- - Copier
- CSR_WIFI_SME_WPS_AUDIO_SUB_CATEGORY_HEADSET
- - Headset(headphones + microphone)
- CSR_WIFI_SME_WPS_TELEPHONE_SUB_CATEGORY_SP_SM
- - Smart phone - Single mode
- CSR_WIFI_SME_WPS_DISPLAY_SUB_CATEGORY_MONITOR
- - Monitor.
- CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_GAME_CTRL
- - Game control.
- CSR_WIFI_SME_WPS_PSFC_SUB_CATEGORY_ALL
- - All-in-One
- CSR_WIFI_SME_WPS_MM_SUB_CATEGORY_MEDIA
- - Media Server/Media Adapter/Media Extender
- CSR_WIFI_SME_WPS_TELEPHONE_SUB_CATEGORY_SP_DM
- - Smart phone - Dual mode
- CSR_WIFI_SME_WPS_GAMING_SUB_CATEGORY_PORT_DEV
- - Portable gaming device
- CSR_WIFI_SME_WPS_AUDIO_SUB_CATEGORY_HEADPHONE
- - Headphone.
- CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_NOTEBOOK
- - Notebook.
- CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_REMOTE
- - Remote control
- CSR_WIFI_SME_WPS_AUDIO_SUB_CATEGORY_MIC
- - Microphone
- CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_DESKTOP
- - Desktop.
- CSR_WIFI_SME_WPS_MM_SUB_CATEGORY_VP
- - Portable video player
- CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_MID
- - Mobile internet device
- CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_TOUCH_SCRN
- - Touch screen
- CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_BIOMET_RDR
- - Biometric reader
- CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_NETBOOK
- - Netbook
- CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_BRCD_RDR
- - Bar code reader.
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeWpsDeviceSubCategory;
-#define CSR_WIFI_SME_WPS_SUB_CATEGORY_UNSPECIFIED ((CsrWifiSmeWpsDeviceSubCategory) 0x00)
-#define CSR_WIFI_SME_WPS_STORAGE_SUB_CATEGORY_NAS ((CsrWifiSmeWpsDeviceSubCategory) 0x01)
-#define CSR_WIFI_SME_WPS_PSFC_SUB_CATEGORY_PRNTR ((CsrWifiSmeWpsDeviceSubCategory) 0x01)
-#define CSR_WIFI_SME_WPS_TELEPHONE_SUB_CATEGORY_WM ((CsrWifiSmeWpsDeviceSubCategory) 0x01)
-#define CSR_WIFI_SME_WPS_AUDIO_SUB_CATEGORY_TUNER ((CsrWifiSmeWpsDeviceSubCategory) 0x01)
-#define CSR_WIFI_SME_WPS_CAMERA_SUB_CATEGORY_DIG_STL ((CsrWifiSmeWpsDeviceSubCategory) 0x01)
-#define CSR_WIFI_SME_WPS_NET_INFRA_SUB_CATEGORY_AP ((CsrWifiSmeWpsDeviceSubCategory) 0x01)
-#define CSR_WIFI_SME_WPS_DISPLAY_SUB_CATEGORY_TV ((CsrWifiSmeWpsDeviceSubCategory) 0x01)
-#define CSR_WIFI_SME_WPS_MM_SUB_CATEGORY_DAR ((CsrWifiSmeWpsDeviceSubCategory) 0x01)
-#define CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_KEYBD ((CsrWifiSmeWpsDeviceSubCategory) 0x01)
-#define CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_PC ((CsrWifiSmeWpsDeviceSubCategory) 0x01)
-#define CSR_WIFI_SME_WPS_GAMING_SUB_CATEGORY_XBOX ((CsrWifiSmeWpsDeviceSubCategory) 0x01)
-#define CSR_WIFI_SME_WPS_PSFC_SUB_CATEGORY_SCNR ((CsrWifiSmeWpsDeviceSubCategory) 0x02)
-#define CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_SERVER ((CsrWifiSmeWpsDeviceSubCategory) 0x02)
-#define CSR_WIFI_SME_WPS_NET_INFRA_SUB_CATEGORY_ROUTER ((CsrWifiSmeWpsDeviceSubCategory) 0x02)
-#define CSR_WIFI_SME_WPS_MM_SUB_CATEGORY_PVR ((CsrWifiSmeWpsDeviceSubCategory) 0x02)
-#define CSR_WIFI_SME_WPS_AUDIO_SUB_CATEGORY_SPEAKER ((CsrWifiSmeWpsDeviceSubCategory) 0x02)
-#define CSR_WIFI_SME_WPS_TELEPHONE_SUB_CATEGORY_FP_SM ((CsrWifiSmeWpsDeviceSubCategory) 0x02)
-#define CSR_WIFI_SME_WPS_CAMERA_SUB_CATEGORY_VIDEO ((CsrWifiSmeWpsDeviceSubCategory) 0x02)
-#define CSR_WIFI_SME_WPS_DISPLAY_SUB_CATEGORY_PIC_FRM ((CsrWifiSmeWpsDeviceSubCategory) 0x02)
-#define CSR_WIFI_SME_WPS_GAMING_SUB_CATEGORY_XBOX_360 ((CsrWifiSmeWpsDeviceSubCategory) 0x02)
-#define CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_MOUSE ((CsrWifiSmeWpsDeviceSubCategory) 0x02)
-#define CSR_WIFI_SME_WPS_NET_INFRA_SUB_CATEGORY_SWITCH ((CsrWifiSmeWpsDeviceSubCategory) 0x03)
-#define CSR_WIFI_SME_WPS_AUDIO_SUB_CATEGORY_PMP ((CsrWifiSmeWpsDeviceSubCategory) 0x03)
-#define CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_JOYSTK ((CsrWifiSmeWpsDeviceSubCategory) 0x03)
-#define CSR_WIFI_SME_WPS_GAMING_SUB_CATEGORY_PLAY_STN ((CsrWifiSmeWpsDeviceSubCategory) 0x03)
-#define CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_MED_CENT ((CsrWifiSmeWpsDeviceSubCategory) 0x03)
-#define CSR_WIFI_SME_WPS_MM_SUB_CATEGORY_MCX ((CsrWifiSmeWpsDeviceSubCategory) 0x03)
-#define CSR_WIFI_SME_WPS_TELEPHONE_SUB_CATEGORY_FP_DM ((CsrWifiSmeWpsDeviceSubCategory) 0x03)
-#define CSR_WIFI_SME_WPS_CAMERA_SUB_CATEGORY_WEB ((CsrWifiSmeWpsDeviceSubCategory) 0x03)
-#define CSR_WIFI_SME_WPS_PSFC_SUB_CATEGORY_FAX ((CsrWifiSmeWpsDeviceSubCategory) 0x03)
-#define CSR_WIFI_SME_WPS_DISPLAY_SUB_CATEGORY_PROJECTOR ((CsrWifiSmeWpsDeviceSubCategory) 0x03)
-#define CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_TRKBL ((CsrWifiSmeWpsDeviceSubCategory) 0x04)
-#define CSR_WIFI_SME_WPS_MM_SUB_CATEGORY_ST_BOX ((CsrWifiSmeWpsDeviceSubCategory) 0x04)
-#define CSR_WIFI_SME_WPS_NET_INFRA_SUB_CATEGORY_GATEWAY ((CsrWifiSmeWpsDeviceSubCategory) 0x04)
-#define CSR_WIFI_SME_WPS_CAMERA_SUB_CATEGORY_SECURITY ((CsrWifiSmeWpsDeviceSubCategory) 0x04)
-#define CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_ULTRA_MOB_PC ((CsrWifiSmeWpsDeviceSubCategory) 0x04)
-#define CSR_WIFI_SME_WPS_GAMING_SUB_CATEGORY_CONSOLE ((CsrWifiSmeWpsDeviceSubCategory) 0x04)
-#define CSR_WIFI_SME_WPS_PSFC_SUB_CATEGORY_CPR ((CsrWifiSmeWpsDeviceSubCategory) 0x04)
-#define CSR_WIFI_SME_WPS_AUDIO_SUB_CATEGORY_HEADSET ((CsrWifiSmeWpsDeviceSubCategory) 0x04)
-#define CSR_WIFI_SME_WPS_TELEPHONE_SUB_CATEGORY_SP_SM ((CsrWifiSmeWpsDeviceSubCategory) 0x04)
-#define CSR_WIFI_SME_WPS_DISPLAY_SUB_CATEGORY_MONITOR ((CsrWifiSmeWpsDeviceSubCategory) 0x04)
-#define CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_GAME_CTRL ((CsrWifiSmeWpsDeviceSubCategory) 0x05)
-#define CSR_WIFI_SME_WPS_PSFC_SUB_CATEGORY_ALL ((CsrWifiSmeWpsDeviceSubCategory) 0x05)
-#define CSR_WIFI_SME_WPS_MM_SUB_CATEGORY_MEDIA ((CsrWifiSmeWpsDeviceSubCategory) 0x05)
-#define CSR_WIFI_SME_WPS_TELEPHONE_SUB_CATEGORY_SP_DM ((CsrWifiSmeWpsDeviceSubCategory) 0x05)
-#define CSR_WIFI_SME_WPS_GAMING_SUB_CATEGORY_PORT_DEV ((CsrWifiSmeWpsDeviceSubCategory) 0x05)
-#define CSR_WIFI_SME_WPS_AUDIO_SUB_CATEGORY_HEADPHONE ((CsrWifiSmeWpsDeviceSubCategory) 0x05)
-#define CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_NOTEBOOK ((CsrWifiSmeWpsDeviceSubCategory) 0x05)
-#define CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_REMOTE ((CsrWifiSmeWpsDeviceSubCategory) 0x06)
-#define CSR_WIFI_SME_WPS_AUDIO_SUB_CATEGORY_MIC ((CsrWifiSmeWpsDeviceSubCategory) 0x06)
-#define CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_DESKTOP ((CsrWifiSmeWpsDeviceSubCategory) 0x06)
-#define CSR_WIFI_SME_WPS_MM_SUB_CATEGORY_VP ((CsrWifiSmeWpsDeviceSubCategory) 0x06)
-#define CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_MID ((CsrWifiSmeWpsDeviceSubCategory) 0x07)
-#define CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_TOUCH_SCRN ((CsrWifiSmeWpsDeviceSubCategory) 0x07)
-#define CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_BIOMET_RDR ((CsrWifiSmeWpsDeviceSubCategory) 0x08)
-#define CSR_WIFI_SME_WPS_COMPUTER_SUB_CATEGORY_NETBOOK ((CsrWifiSmeWpsDeviceSubCategory) 0x08)
-#define CSR_WIFI_SME_WPS_INPUT_DEV_SUB_CATEGORY_BRCD_RDR ((CsrWifiSmeWpsDeviceSubCategory) 0x09)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWpsDpid
-
- DESCRIPTION
- Device Password ID for the chosen config method
-
- VALUES
- CSR_WIFI_SME_WPS_DPID_PIN - PIN
- CSR_WIFI_SME_WPS_DPID_USER - User specified : Used only during P2P GO
- negotiation procedure
- CSR_WIFI_SME_WPS_DPID_MACHINE - Machine specified i: Not used in this
- release
- CSR_WIFI_SME_WPS_DPID_REKEY - Rekey : Not used in this release
- CSR_WIFI_SME_WPS_DPID_PBC - PBC
- CSR_WIFI_SME_WPS_DPID_REGISTRAR - Registrar specified : Used only in P2P Go
- negotiation procedure
-
-*******************************************************************************/
-typedef u16 CsrWifiSmeWpsDpid;
-#define CSR_WIFI_SME_WPS_DPID_PIN ((CsrWifiSmeWpsDpid) 0x0000)
-#define CSR_WIFI_SME_WPS_DPID_USER ((CsrWifiSmeWpsDpid) 0x0001)
-#define CSR_WIFI_SME_WPS_DPID_MACHINE ((CsrWifiSmeWpsDpid) 0x0002)
-#define CSR_WIFI_SME_WPS_DPID_REKEY ((CsrWifiSmeWpsDpid) 0x0003)
-#define CSR_WIFI_SME_WPS_DPID_PBC ((CsrWifiSmeWpsDpid) 0x0004)
-#define CSR_WIFI_SME_WPS_DPID_REGISTRAR ((CsrWifiSmeWpsDpid) 0x0005)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWpsRegistration
-
- DESCRIPTION
-
- VALUES
- CSR_WIFI_SME_WPS_REG_NOT_REQUIRED - No encryption set
- CSR_WIFI_SME_WPS_REG_REQUIRED - No encryption set
- CSR_WIFI_SME_WPS_REG_UNKNOWN - No encryption set
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeWpsRegistration;
-#define CSR_WIFI_SME_WPS_REG_NOT_REQUIRED ((CsrWifiSmeWpsRegistration) 0x00)
-#define CSR_WIFI_SME_WPS_REG_REQUIRED ((CsrWifiSmeWpsRegistration) 0x01)
-#define CSR_WIFI_SME_WPS_REG_UNKNOWN ((CsrWifiSmeWpsRegistration) 0x02)
-
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAuthModeMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiSmeAuthMode
-
-*******************************************************************************/
-typedef u16 CsrWifiSmeAuthModeMask;
-/*******************************************************************************
-
- NAME
- CsrWifiSmeEncryptionMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiSmeEncryption
-
-*******************************************************************************/
-typedef u16 CsrWifiSmeEncryptionMask;
-/*******************************************************************************
-
- NAME
- CsrWifiSmeIndicationsMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiSmeIndications
-
-*******************************************************************************/
-typedef u32 CsrWifiSmeIndicationsMask;
-/*******************************************************************************
-
- NAME
- CsrWifiSmeP2pCapabilityMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiSmeP2pCapability
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeP2pCapabilityMask;
-/*******************************************************************************
-
- NAME
- CsrWifiSmeP2pGroupCapabilityMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiSmeP2pGroupCapability
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeP2pGroupCapabilityMask;
-/*******************************************************************************
-
- NAME
- CsrWifiSmeTspecCtrlMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiSmeTspecCtrl
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeTspecCtrlMask;
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWmmModeMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiSmeWmmMode
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeWmmModeMask;
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWmmQosInfoMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiSmeWmmQosInfo
-
-*******************************************************************************/
-typedef u8 CsrWifiSmeWmmQosInfoMask;
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWpsConfigTypeMask
-
- DESCRIPTION
- Mask type for use with the values defined by CsrWifiSmeWpsConfigType
-
-*******************************************************************************/
-typedef u16 CsrWifiSmeWpsConfigTypeMask;
-
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAdHocConfig
-
- DESCRIPTION
- Defines values to use when starting an Ad-hoc (IBSS) network.
-
- MEMBERS
- atimWindowTu - ATIM window specified for IBSS
- beaconPeriodTu - Interval between beacon packets
- joinOnlyAttempts - Maximum number of attempts to join an ad-hoc network.
- The default value is 1.
- Set to 0 for infinite attempts.
- joinAttemptIntervalMs - Time between scans for joining the requested IBSS.
-
-*******************************************************************************/
-typedef struct
-{
- u16 atimWindowTu;
- u16 beaconPeriodTu;
- u16 joinOnlyAttempts;
- u16 joinAttemptIntervalMs;
-} CsrWifiSmeAdHocConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAvailabilityConfig
-
- DESCRIPTION
-
- MEMBERS
- listenChannel -
- availabilityDuration -
- avalabilityPeriod -
-
-*******************************************************************************/
-typedef struct
-{
- u8 listenChannel;
- u16 availabilityDuration;
- u16 avalabilityPeriod;
-} CsrWifiSmeAvailabilityConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCcxConfig
-
- DESCRIPTION
- This type is reserved for future use and should not be used.
-
- MEMBERS
- keepAliveTimeMs - NOT USED
- apRoamingEnabled - NOT USED
- measurementsMask - NOT USED
- ccxRadioMgtEnabled - NOT USED
-
-*******************************************************************************/
-typedef struct
-{
- u8 keepAliveTimeMs;
- u8 apRoamingEnabled;
- u8 measurementsMask;
- u8 ccxRadioMgtEnabled;
-} CsrWifiSmeCcxConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexConfig
-
- DESCRIPTION
- Parameters for the coexistence behaviour.
-
- MEMBERS
- coexEnableSchemeManagement - Enables the Coexistence Management Scheme
- coexPeriodicWakeHost - If TRUE the firmware wakes up the host
- periodically according to the traffic
- period and latency parameters; the host
- will then send the data to transmit only
- when woken up.
- If FALSE, the firmware does not wake up the
- host and the host will send the data to
- transmit to the firmware whenever there is
- data to transmit
- coexTrafficBurstyLatencyMs - Period of awakening for the firmware used
- when bursty traffic is detected
- coexTrafficContinuousLatencyMs - Period of awakening for the firmware used
- when continuous traffic is detected
- coexObexBlackoutDurationMs - Blackout Duration when a Obex Connection is
- used
- coexObexBlackoutPeriodMs - Blackout Period when a Obex Connection is
- used
- coexA2dpBrBlackoutDurationMs - Blackout Duration when a Basic Rate A2DP
- Connection streaming data
- coexA2dpBrBlackoutPeriodMs - Blackout Period when a Basic Rate A2DP
- Connection streaming data
- coexA2dpEdrBlackoutDurationMs - Blackout Duration when an Enhanced Data
- Rate A2DP Connection streaming data
- coexA2dpEdrBlackoutPeriodMs - Blackout Period when an Enhanced Data Rate
- A2DP Connection streaming data
- coexPagingBlackoutDurationMs - Blackout Duration when a BT page is active
- coexPagingBlackoutPeriodMs - Blackout Period when a BT page is active
- coexInquiryBlackoutDurationMs - Blackout Duration when a BT inquiry is
- active
- coexInquiryBlackoutPeriodMs - Blackout Period when a BT inquiry is active
-
-*******************************************************************************/
-typedef struct
-{
- u8 coexEnableSchemeManagement;
- u8 coexPeriodicWakeHost;
- u16 coexTrafficBurstyLatencyMs;
- u16 coexTrafficContinuousLatencyMs;
- u16 coexObexBlackoutDurationMs;
- u16 coexObexBlackoutPeriodMs;
- u16 coexA2dpBrBlackoutDurationMs;
- u16 coexA2dpBrBlackoutPeriodMs;
- u16 coexA2dpEdrBlackoutDurationMs;
- u16 coexA2dpEdrBlackoutPeriodMs;
- u16 coexPagingBlackoutDurationMs;
- u16 coexPagingBlackoutPeriodMs;
- u16 coexInquiryBlackoutDurationMs;
- u16 coexInquiryBlackoutPeriodMs;
-} CsrWifiSmeCoexConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionStats
-
- DESCRIPTION
- Indicates the statistics of the connection.
- The dot11 fields are defined in the Annex D of the IEEE 802.11 standard.
-
- MEMBERS
- unifiTxDataRate
- - The bit rate currently in use for transmissions of unicast
- data frames; a data rate in units of 500kbit/s.
- On an infrastructure BSS, this is the data rate used in
- communicating with the associated access point; if there is
- none, an error is returned.
- On an IBSS, this is the data rate used for the last
- transmission of a unicast data frame to any station in the
- IBSS. If no such transmission has been made, an error is
- returned.
- unifiRxDataRate
- - As above for receiving data
- dot11RetryCount
- - See IEEE 802.11 Standard
- dot11MultipleRetryCount
- - See IEEE 802.11 Standard
- dot11AckFailureCount
- - See IEEE 802.11 Standard
- dot11FrameDuplicateCount
- - See IEEE 802.11 Standard
- dot11FcsErrorCount
- - See IEEE 802.11 Standard
- dot11RtsSuccessCount
- - See IEEE 802.11 Standard
- dot11RtsFailureCount
- - See IEEE 802.11 Standard
- dot11FailedCount
- - See IEEE 802.11 Standard
- dot11TransmittedFragmentCount
- - See IEEE 802.11 Standard
- dot11TransmittedFrameCount
- - See IEEE 802.11 Standard
- dot11WepExcludedCount
- - See IEEE 802.11 Standard
- dot11WepIcvErrorCount
- - See IEEE 802.11 Standard
- dot11WepUndecryptableCount
- - See IEEE 802.11 Standard
- dot11MulticastReceivedFrameCount
- - See IEEE 802.11 Standard
- dot11MulticastTransmittedFrameCount
- - See IEEE 802.11 Standard
- dot11ReceivedFragmentCount
- - See IEEE 802.11 Standard
- dot11Rsna4WayHandshakeFailures
- - See IEEE 802.11 Standard
- dot11RsnaTkipCounterMeasuresInvoked
- - See IEEE 802.11 Standard
- dot11RsnaStatsTkipLocalMicFailures
- - See IEEE 802.11 Standard
- dot11RsnaStatsTkipReplays
- - See IEEE 802.11 Standard
- dot11RsnaStatsTkipIcvErrors
- - See IEEE 802.11 Standard
- dot11RsnaStatsCcmpReplays
- - See IEEE 802.11 Standard
- dot11RsnaStatsCcmpDecryptErrors
- - See IEEE 802.11 Standard
-
-*******************************************************************************/
-typedef struct
-{
- u8 unifiTxDataRate;
- u8 unifiRxDataRate;
- u32 dot11RetryCount;
- u32 dot11MultipleRetryCount;
- u32 dot11AckFailureCount;
- u32 dot11FrameDuplicateCount;
- u32 dot11FcsErrorCount;
- u32 dot11RtsSuccessCount;
- u32 dot11RtsFailureCount;
- u32 dot11FailedCount;
- u32 dot11TransmittedFragmentCount;
- u32 dot11TransmittedFrameCount;
- u32 dot11WepExcludedCount;
- u32 dot11WepIcvErrorCount;
- u32 dot11WepUndecryptableCount;
- u32 dot11MulticastReceivedFrameCount;
- u32 dot11MulticastTransmittedFrameCount;
- u32 dot11ReceivedFragmentCount;
- u32 dot11Rsna4WayHandshakeFailures;
- u32 dot11RsnaTkipCounterMeasuresInvoked;
- u32 dot11RsnaStatsTkipLocalMicFailures;
- u32 dot11RsnaStatsTkipReplays;
- u32 dot11RsnaStatsTkipIcvErrors;
- u32 dot11RsnaStatsCcmpReplays;
- u32 dot11RsnaStatsCcmpDecryptErrors;
-} CsrWifiSmeConnectionStats;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeDataBlock
-
- DESCRIPTION
- Holds a generic data block to be passed through the interface
-
- MEMBERS
- length - Length of the data block
- data - Points to the first byte of the data block
-
-*******************************************************************************/
-typedef struct
-{
- u16 length;
- u8 *data;
-} CsrWifiSmeDataBlock;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeEmpty
-
- DESCRIPTION
- Empty Structure to indicate that no parameters are available.
-
- MEMBERS
- empty - Only element of the empty structure (always set to 0).
-
-*******************************************************************************/
-typedef struct
-{
- u8 empty;
-} CsrWifiSmeEmpty;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeLinkQuality
-
- DESCRIPTION
- Indicates the quality of the link
-
- MEMBERS
- unifiRssi - Indicates the received signal strength indication of the link in
- dBm
- unifiSnr - Indicates the signal to noise ratio of the link in dB
-
-*******************************************************************************/
-typedef struct
-{
- s16 unifiRssi;
- s16 unifiSnr;
-} CsrWifiSmeLinkQuality;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibConfig
-
- DESCRIPTION
- Allows low level configuration in the chip.
-
- MEMBERS
- unifiFixMaxTxDataRate - This attribute is used in combination with
- unifiFixTxDataRate. If it is FALSE, then
- unifiFixTxDataRate specifies a specific data
- rate to use. If it is TRUE, unifiFixTxDataRate
- instead specifies a maximum data rate.
- unifiFixTxDataRate - Transmit rate for unicast data.
- See MIB description for more details
- dot11RtsThreshold - See IEEE 802.11 Standard
- dot11FragmentationThreshold - See IEEE 802.11 Standard
- dot11CurrentTxPowerLevel - See IEEE 802.11 Standard
-
-*******************************************************************************/
-typedef struct
-{
- u8 unifiFixMaxTxDataRate;
- u8 unifiFixTxDataRate;
- u16 dot11RtsThreshold;
- u16 dot11FragmentationThreshold;
- u16 dot11CurrentTxPowerLevel;
-} CsrWifiSmeMibConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeP2pProfileIdentity
-
- DESCRIPTION
- Details to be filled in
-
- MEMBERS
- listenChannel -
- availabilityDuration -
- avalabilityPeriod -
-
-*******************************************************************************/
-typedef struct
-{
- u8 listenChannel;
- u16 availabilityDuration;
- u16 avalabilityPeriod;
-} CsrWifiSmeP2pProfileIdentity;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePmkid
-
- DESCRIPTION
- Defines a PMKID association with BSS
-
- MEMBERS
- bssid - BSS identifier
- pmkid - PMKID
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiMacAddress bssid;
- u8 pmkid[16];
-} CsrWifiSmePmkid;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePmkidCandidate
-
- DESCRIPTION
- Information for a PMKID candidate
-
- MEMBERS
- bssid - BSS identifier
- preAuthAllowed - Indicates whether preauthentication is allowed
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiMacAddress bssid;
- u8 preAuthAllowed;
-} CsrWifiSmePmkidCandidate;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePmkidList
-
- DESCRIPTION
- NOT USED
- Used in the Sync access API
-
- MEMBERS
- pmkidsCount - Number of PMKIDs in the list
- pmkids - Points to the first PMKID in the list
-
-*******************************************************************************/
-typedef struct
-{
- u8 pmkidsCount;
- CsrWifiSmePmkid *pmkids;
-} CsrWifiSmePmkidList;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRegulatoryDomainInfo
-
- DESCRIPTION
- Regulatory domain options.
-
- MEMBERS
- dot11MultiDomainCapabilityImplemented
- - TRUE is the multi domain capability is implemented
- dot11MultiDomainCapabilityEnabled
- - TRUE is the multi domain capability is enabled
- currentRegulatoryDomain
- - Current regulatory domain
- currentCountryCode
- - Current country code as defined by the IEEE 802.11
- standards
-
-*******************************************************************************/
-typedef struct
-{
- u8 dot11MultiDomainCapabilityImplemented;
- u8 dot11MultiDomainCapabilityEnabled;
- CsrWifiSmeRegulatoryDomain currentRegulatoryDomain;
- u8 currentCountryCode[2];
-} CsrWifiSmeRegulatoryDomainInfo;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamingBandData
-
- DESCRIPTION
- Thresholds to define one usability level category for the received signal
-
- MEMBERS
- rssiHighThreshold - Received Signal Strength Indication upper bound in dBm
- for the usability level
- rssiLowThreshold - Received Signal Strength Indication lower bound in dBm
- for the usability level
- snrHighThreshold - Signal to Noise Ratio upper bound in dB for the
- usability level
- snrLowThreshold - Signal to Noise Ratio lower bound in dB for the
- usability level
-
-*******************************************************************************/
-typedef struct
-{
- s16 rssiHighThreshold;
- s16 rssiLowThreshold;
- s16 snrHighThreshold;
- s16 snrLowThreshold;
-} CsrWifiSmeRoamingBandData;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanConfigData
-
- DESCRIPTION
- Configures the scanning behaviour of the driver and firmware
-
- MEMBERS
- intervalSeconds - All the channels will be scanned once in this time
- interval.
- If connected, the channel scans are spread across
- the interval.
- If disconnected, all the channels will be scanned
- together
- validitySeconds - How long the scan result are cached
- minActiveChannelTimeTu - Minimum time of listening on a channel being
- actively scanned before leaving if no probe
- responses or beacon frames have been received
- maxActiveChannelTimeTu - Maximum time of listening on a channel being
- actively scanned
- minPassiveChannelTimeTu - Minimum time of listening on a channel being
- passive scanned before leaving if no beacon frames
- have been received
- maxPassiveChannelTimeTu - Maximum time of listening on a channel being
- passively scanned
-
-*******************************************************************************/
-typedef struct
-{
- u16 intervalSeconds;
- u16 validitySeconds;
- u16 minActiveChannelTimeTu;
- u16 maxActiveChannelTimeTu;
- u16 minPassiveChannelTimeTu;
- u16 maxPassiveChannelTimeTu;
-} CsrWifiSmeScanConfigData;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeTsfTime
-
- DESCRIPTION
- Time stamp representation
-
- MEMBERS
- data - TSF Bytes
-
-*******************************************************************************/
-typedef struct
-{
- u8 data[8];
-} CsrWifiSmeTsfTime;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeVersions
-
- DESCRIPTION
- Reports version information for the chip, the firmware and the driver and
- the SME.
-
- MEMBERS
- chipId - Chip ID
- chipVersion - Chip version ID
- firmwareBuild - Firmware Rom build number
- firmwarePatch - Firmware Patch build number (if applicable)
- firmwareHip - Firmware HIP protocol version number
- routerBuild - Router build number
- routerHip - Router HIP protocol version number
- smeBuild - SME build number
- smeHip - SME HIP protocol version number
-
-*******************************************************************************/
-typedef struct
-{
- u32 chipId;
- u32 chipVersion;
- u32 firmwareBuild;
- u32 firmwarePatch;
- u32 firmwareHip;
- char *routerBuild;
- u32 routerHip;
- char *smeBuild;
- u32 smeHip;
-} CsrWifiSmeVersions;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWmmAcParams
-
- DESCRIPTION
- Structure holding WMM AC params data.
-
- MEMBERS
- cwMin - Exponent for the calculation of CWmin. Range: 0
- to 15
- cwMax - Exponent for the calculation of CWmax. Range: 0
- to15
- aifs - Arbitration Inter Frame Spacing in terms of
- number of timeslots. Range 2 to 15
- txopLimit - TXOP Limit in the units of 32 microseconds
- admissionControlMandatory - Indicates whether the admission control is
- mandatory or not. Current release does not
- support admission control , hence shall be set
- to FALSE.
-
-*******************************************************************************/
-typedef struct
-{
- u8 cwMin;
- u8 cwMax;
- u8 aifs;
- u16 txopLimit;
- u8 admissionControlMandatory;
-} CsrWifiSmeWmmAcParams;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWpsDeviceType
-
- DESCRIPTION
- Structure holding AP WPS device type data.
-
- MEMBERS
- deviceDetails - category , sub category etc
-
-*******************************************************************************/
-typedef struct
-{
- u8 deviceDetails[8];
-} CsrWifiSmeWpsDeviceType;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWpsDeviceTypeCommon
-
- DESCRIPTION
-
- MEMBERS
- spportWps -
- deviceType -
-
-*******************************************************************************/
-typedef struct
-{
- u8 spportWps;
- u8 deviceType;
-} CsrWifiSmeWpsDeviceTypeCommon;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWpsInfo
-
- DESCRIPTION
-
- MEMBERS
- version -
- configMethods -
- devicePassworId -
-
-*******************************************************************************/
-typedef struct
-{
- u16 version;
- u16 configMethods;
- u16 devicePassworId;
-} CsrWifiSmeWpsInfo;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCloakedSsidConfig
-
- DESCRIPTION
- List of cloaked SSIDs .
-
- MEMBERS
- cloakedSsidsCount - Number of cloaked SSID
- cloakedSsids - Points to the first byte of the first SSID provided
-
-*******************************************************************************/
-typedef struct
-{
- u8 cloakedSsidsCount;
- CsrWifiSsid *cloakedSsids;
-} CsrWifiSmeCloakedSsidConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexInfo
-
- DESCRIPTION
- Information and state related to coexistence.
-
- MEMBERS
- hasTrafficData - TRUE if any Wi-Fi traffic is detected
- currentTrafficType - Current type of traffic
- currentPeriodMs - Period of the traffic as detected by the traffic
- analysis.
- If the traffic is not periodic, it is set to 0.
- currentPowerSave - Current power save level
- currentCoexPeriodMs - Period of awakening for the firmware used when
- periodic traffic is detected.
- If the traffic is not periodic, it is set to 0.
- currentCoexLatencyMs - Period of awakening for the firmware used when
- non-periodic traffic is detected
- hasBtDevice - TRUE if there is a Bluetooth device connected
- currentBlackoutDurationUs - Current blackout duration for protecting
- Bluetooth
- currentBlackoutPeriodUs - Current blackout period
- currentCoexScheme - Defines the scheme for the coexistence
- signalling
-
-*******************************************************************************/
-typedef struct
-{
- u8 hasTrafficData;
- CsrWifiSmeTrafficType currentTrafficType;
- u16 currentPeriodMs;
- CsrWifiSmePowerSaveLevel currentPowerSave;
- u16 currentCoexPeriodMs;
- u16 currentCoexLatencyMs;
- u8 hasBtDevice;
- u32 currentBlackoutDurationUs;
- u32 currentBlackoutPeriodUs;
- CsrWifiSmeCoexScheme currentCoexScheme;
-} CsrWifiSmeCoexInfo;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionConfig
-
- DESCRIPTION
- Specifies the parameters that the SME should use in selecting a network.
-
- MEMBERS
- ssid
- - Service Set identifier
- bssid
- - BSS identifier
- bssType
- - Indicates the type of BSS
- ifIndex
- - Indicates the radio interface
- privacyMode
- - Specifies whether the privacy mode is enabled or disabled.
- authModeMask
- - Sets the authentication options that the SME can use while
- associating to the AP
- Set mask with values from CsrWifiSmeAuthMode
- encryptionModeMask
- - Sets the encryption options that the SME can use while
- associating to the AP
- Set mask with values from CsrWifiSmeEncryption
- mlmeAssociateReqInformationElementsLength
- - Length in bytes of information elements to be sent in the
- Association Request.
- mlmeAssociateReqInformationElements
- - Points to the first byte of the information elements, if
- any.
- wmmQosInfo
- - This parameter allows the driver's WMM behaviour to be
- configured.
- To enable support for WMM, use
- CSR_WIFI_SME_SME_CONFIG_SET_REQ with the
- CSR_WIFI_SME_WMM_MODE_AC_ENABLED bit set in wmmModeMask
- field in smeConfig parameter.
- Set mask with values from CsrWifiSmeWmmQosInfo
- adhocJoinOnly
- - This parameter is relevant only if bssType is NOT set to
- CSR_WIFI_SME_BSS_TYPE_INFRASTRUCTURE:
- if TRUE the SME will only try to join an ad-hoc network if
- there is one already established;
- if FALSE the SME will try to join an ad-hoc network if
- there is one already established or it will try to
- establish a new one
- adhocChannel
- - This parameter is relevant only if bssType is NOT set to
- CSR_WIFI_SME_BSS_TYPE_INFRASTRUCTURE:
- it indicates the channel to use joining an ad hoc network.
- Setting this to 0 causes the SME to select a channel from
- those permitted in the regulatory domain.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSsid ssid;
- CsrWifiMacAddress bssid;
- CsrWifiSmeBssType bssType;
- CsrWifiSmeRadioIF ifIndex;
- CsrWifiSme80211PrivacyMode privacyMode;
- CsrWifiSmeAuthModeMask authModeMask;
- CsrWifiSmeEncryptionMask encryptionModeMask;
- u16 mlmeAssociateReqInformationElementsLength;
- u8 *mlmeAssociateReqInformationElements;
- CsrWifiSmeWmmQosInfoMask wmmQosInfo;
- u8 adhocJoinOnly;
- u8 adhocChannel;
-} CsrWifiSmeConnectionConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionInfo
-
- DESCRIPTION
- Parameters that the SME should use in selecting a network
-
- MEMBERS
- ssid - Service set identifier
- bssid - BSS identifier
- networkType80211 - Physical layer used for the connection
- channelNumber - Channel number
- channelFrequency - Channel frequency
- authMode - Authentication mode used for the connection
- pairwiseCipher - Encryption type for peer to peer communication
- groupCipher - Encryption type for broadcast and multicast
- communication
- ifIndex - Indicates the radio interface
- atimWindowTu - ATIM window specified for IBSS
- beaconPeriodTu - Interval between beacon packets
- reassociation - Indicates whether a reassociation occurred
- beaconFrameLength - Indicates the number of bytes of the beacon
- frame
- beaconFrame - Points at the first byte of the beacon frame
- associationReqFrameLength - Indicates the number of bytes of the
- association request frame
- associationReqFrame - Points at the first byte of the association
- request frame
- associationRspFrameLength - Indicates the number of bytes of the
- association response frame
- associationRspFrame - Points at the first byte of the association
- response frame
- assocScanInfoElementsLength - Indicates the number of bytes in the buffer
- pointed by assocScanInfoElements
- assocScanInfoElements - Pointer to the buffer containing the
- information elements of the probe response
- received after the probe requests sent before
- attempting to authenticate to the network
- assocReqCapabilities - Reports the content of the Capability
- information element as specified in the
- association request.
- assocReqListenIntervalTu - Listen Interval specified in the association
- request
- assocReqApAddress - AP address to which the association requests
- has been sent
- assocReqInfoElementsLength - Indicates the number of bytes of the
- association request information elements
- assocReqInfoElements - Points at the first byte of the association
- request information elements
- assocRspResult - Result reported in the association response
- assocRspCapabilityInfo - Reports the content of the Capability
- information element as received in the
- association response.
- assocRspAssociationId - Reports the association ID received in the
- association response.
- assocRspInfoElementsLength - Indicates the number of bytes of the
- association response information elements
- assocRspInfoElements - Points at the first byte of the association
- response information elements
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSsid ssid;
- CsrWifiMacAddress bssid;
- CsrWifiSme80211NetworkType networkType80211;
- u8 channelNumber;
- u16 channelFrequency;
- CsrWifiSmeAuthMode authMode;
- CsrWifiSmeEncryption pairwiseCipher;
- CsrWifiSmeEncryption groupCipher;
- CsrWifiSmeRadioIF ifIndex;
- u16 atimWindowTu;
- u16 beaconPeriodTu;
- u8 reassociation;
- u16 beaconFrameLength;
- u8 *beaconFrame;
- u16 associationReqFrameLength;
- u8 *associationReqFrame;
- u16 associationRspFrameLength;
- u8 *associationRspFrame;
- u16 assocScanInfoElementsLength;
- u8 *assocScanInfoElements;
- u16 assocReqCapabilities;
- u16 assocReqListenIntervalTu;
- CsrWifiMacAddress assocReqApAddress;
- u16 assocReqInfoElementsLength;
- u8 *assocReqInfoElements;
- CsrWifiSmeIEEE80211Result assocRspResult;
- u16 assocRspCapabilityInfo;
- u16 assocRspAssociationId;
- u16 assocRspInfoElementsLength;
- u8 *assocRspInfoElements;
-} CsrWifiSmeConnectionInfo;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeDeviceConfig
-
- DESCRIPTION
- General configuration options in the SME
-
- MEMBERS
- trustLevel - Level of trust of the information coming from the
- network
- countryCode - Country code as specified by IEEE 802.11 standard
- firmwareDriverInterface - Specifies the type of communication between Host
- and Firmware
- enableStrictDraftN - If TRUE TKIP is disallowed when connecting to
- 802.11n enabled access points
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSme80211dTrustLevel trustLevel;
- u8 countryCode[2];
- CsrWifiSmeFirmwareDriverInterface firmwareDriverInterface;
- u8 enableStrictDraftN;
-} CsrWifiSmeDeviceConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeDeviceInfo
-
- DESCRIPTION
- P2P Information for a P2P Device
-
- MEMBERS
- deviceAddress - Device Address of the P2P device
- configMethods - Supported WPS configuration methods.
- p2PDeviceCap - P2P device capabilities
- primDeviceType - Primary WPS device type
- secondaryDeviceTypeCount - Number of secondary device types
- secDeviceType - list of secondary WPS device types
- deviceName - Device name without up to 32 characters'\0'.
- deviceNameLength - Number of characters of the device name
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiMacAddress deviceAddress;
- CsrWifiSmeWpsConfigTypeMask configMethods;
- CsrWifiSmeP2pCapabilityMask p2PDeviceCap;
- CsrWifiSmeWpsDeviceType primDeviceType;
- u8 secondaryDeviceTypeCount;
- CsrWifiSmeWpsDeviceType *secDeviceType;
- u8 deviceName[32];
- u8 deviceNameLength;
-} CsrWifiSmeDeviceInfo;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeDeviceInfoCommon
-
- DESCRIPTION
- Structure holding device information.
-
- MEMBERS
- p2pDeviceAddress -
- primaryDeviceType -
- secondaryDeviceTypesCount -
- secondaryDeviceTypes -
- deviceNameLength -
- deviceName -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiMacAddress p2pDeviceAddress;
- CsrWifiSmeWpsDeviceTypeCommon primaryDeviceType;
- u8 secondaryDeviceTypesCount;
- u8 secondaryDeviceTypes[10];
- u8 deviceNameLength;
- u8 deviceName[32];
-} CsrWifiSmeDeviceInfoCommon;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeHostConfig
-
- DESCRIPTION
- Defines the host power state (for example, on mains power, on battery
- power etc) and the periodicity of the traffic data.
-
- MEMBERS
- powerMode - The wireless manager application should use the
- powerMode parameter to inform the SME of the host
- power state.
- applicationDataPeriodMs - The applicationDataPeriodMs parameter allows a
- wireless manager application to inform the SME
- that an application is running that generates
- periodic network traffic and the period of the
- traffic.
- An example of such an application is a VoIP client.
- The wireless manager application should set
- applicationDataPeriodMs to the period in
- milliseconds between data packets or zero if no
- periodic application is running.
- Voip etc 0 = No Periodic Data
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeHostPowerMode powerMode;
- u16 applicationDataPeriodMs;
-} CsrWifiSmeHostConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeKey
-
- DESCRIPTION
- Information for a key to be used for encryption
-
- MEMBERS
- keyType - Specifies whether the key is a pairwise or group key; it
- should be set to CSR_WIFI_SME_GROUP_KEY or
- CSR_WIFI_SME_PAIRWISE_KEY, as required.
- keyIndex - Specifies which WEP key (0-3) to set; it should be set to 0
- for a WPA/WPA2 pairwise key and non-zero for a WPA/WPA2
- group key.
- wepTxKey - If wepTxKey is TRUE, and the key is a WEP key, the key will
- be selected for encrypting transmitted packets.
- To select a previously defined key as the transmit
- encryption key, set keyIndex to the required key, wepTxKey
- to TRUE and the keyLength to 0.
- keyRsc - Key Receive Sequence Counter
- authenticator - If TRUE the WMA will act as authenticator.
- CURRENTLY NOT SUPPORTED
- address - BSS identifier of the AP
- keyLength - Length of the key in bytes
- key - Points to the first byte of the key
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeKeyType keyType;
- u8 keyIndex;
- u8 wepTxKey;
- u16 keyRsc[8];
- u8 authenticator;
- CsrWifiMacAddress address;
- u8 keyLength;
- u8 key[32];
-} CsrWifiSmeKey;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeP2pClientInfoType
-
- DESCRIPTION
- P2P Information for a P2P Client
-
- MEMBERS
- p2PClientInterfaceAddress - MAC address of the P2P Client
- clientDeviceInfo - Device Information
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiMacAddress p2PClientInterfaceAddress;
- CsrWifiSmeDeviceInfo clientDeviceInfo;
-} CsrWifiSmeP2pClientInfoType;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeP2pGroupInfo
-
- DESCRIPTION
- P2P Information for a P2P Group
-
- MEMBERS
- groupCapability - P2P group capabilities
- p2pDeviceAddress - Device Address of the GO
- p2pClientInfoCount - Number of P2P Clients that belong to the group.
- p2PClientInfo - Pointer to the list containing client information for
- each client in the group
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeP2pGroupCapabilityMask groupCapability;
- CsrWifiMacAddress p2pDeviceAddress;
- u8 p2pClientInfoCount;
- CsrWifiSmeP2pClientInfoType *p2PClientInfo;
-} CsrWifiSmeP2pGroupInfo;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePowerConfig
-
- DESCRIPTION
- Configures the power-save behaviour of the driver and firmware.
-
- MEMBERS
- powerSaveLevel - Power Save Level option
- listenIntervalTu - Interval for waking to receive beacon frames
- rxDtims - If TRUE, wake for DTIM every beacon period, to
- allow the reception broadcast packets
- d3AutoScanMode - Defines whether the autonomous scanning will be
- turned off or will stay on during a D3 suspended
- period
- clientTrafficWindow - Deprecated
- opportunisticPowerSave - Deprecated
- noticeOfAbsence - Deprecated
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmePowerSaveLevel powerSaveLevel;
- u16 listenIntervalTu;
- u8 rxDtims;
- CsrWifiSmeD3AutoScanMode d3AutoScanMode;
- u8 clientTrafficWindow;
- u8 opportunisticPowerSave;
- u8 noticeOfAbsence;
-} CsrWifiSmePowerConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamingConfig
-
- DESCRIPTION
- Configures the roaming behaviour of the driver and firmware
-
- MEMBERS
- roamingBands - Defines the thresholds to determine the usability
- level of the current connection.
- roamingBands is indexed by the first 3 entries of
- the CsrWifiSmeBasicUsability enum
- disableSmoothRoaming - Disable the RSSI/SNR triggers from the Firmware
- that the SME uses to detect the quality of the
- connection.
- This implicitly disables disableRoamScans
- disableRoamScans - Disables the scanning for the roaming operation
- reconnectLimit - Maximum number of times SME may reconnect in the
- given interval
- reconnectLimitIntervalMs - Interval for maximum number of times SME may
- reconnect to the same Access Point
- roamScanCfg - Scanning behaviour for the specifically aimed at
- improving roaming performance.
- roamScanCfg is indexed by the first 3 entries of
- the CsrWifiSmeBasicUsability enum
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeRoamingBandData roamingBands[3];
- u8 disableSmoothRoaming;
- u8 disableRoamScans;
- u8 reconnectLimit;
- u16 reconnectLimitIntervalMs;
- CsrWifiSmeScanConfigData roamScanCfg[3];
-} CsrWifiSmeRoamingConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanConfig
-
- DESCRIPTION
- Parameters for the autonomous scanning behaviour of the system
-
- MEMBERS
- scanCfg - Scan configuration data.
- Indexed by the CsrWifiSmeBasicUsability enum
- disableAutonomousScans - Enables or disables the autonomous scan
- maxResults - Maximum number of results to be cached in the SME
- highRssiThreshold - High received signal strength indication threshold
- in dBm for an AP above which the system will
- report scan indications
- lowRssiThreshold - Low received signal strength indication threshold
- in dBm for an AP below which the system will
- report scan indications
- deltaRssiThreshold - Minimum difference for received signal strength
- indication in dBm for an AP which trigger a scan
- indication to be sent.
- highSnrThreshold - High Signal to Noise Ratio threshold in dB for an
- AP above which the system will report scan
- indications
- lowSnrThreshold - Low Signal to Noise Ratio threshold in dB for an
- AP below which the system will report scan
- indications
- deltaSnrThreshold - Minimum difference for Signal to Noise Ratio in dB
- for an AP which trigger a scan indication to be
- sent.
- passiveChannelListCount - Number of channels to be scanned passively.
- passiveChannelList - Points to the first channel to be scanned
- passively , if any.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeScanConfigData scanCfg[4];
- u8 disableAutonomousScans;
- u16 maxResults;
- s8 highRssiThreshold;
- s8 lowRssiThreshold;
- s8 deltaRssiThreshold;
- s8 highSnrThreshold;
- s8 lowSnrThreshold;
- s8 deltaSnrThreshold;
- u16 passiveChannelListCount;
- u8 *passiveChannelList;
-} CsrWifiSmeScanConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanResult
-
- DESCRIPTION
- This structure defines the scan result for each BSS found
-
- MEMBERS
- ssid - Service set identifier
- bssid - BSS identifier
- rssi - Received signal strength indication in dBm
- snr - Signal to noise ratio in dB
- ifIndex - Indicates the radio interface
- beaconPeriodTu - Interval between beacon frames
- timeStamp - Timestamp in the BSS
- localTime - Timestamp in the Access Point
- channelFrequency - Channel frequency
- capabilityInformation - Capabilities of the BSS.
- channelNumber - Channel number
- usability - Indicates the usability level.
- bssType - Type of BSS.
- informationElementsLength - Number of bytes of the information elements
- received as part of the beacon or probe
- response.
- informationElements - Points to the first byte of the IEs received
- as part of the beacon or probe response.
- The format of the IEs is as specified in the
- IEEE 802.11 specification.
- p2pDeviceRole - Role of the P2P device.
- Relevant only if bssType is
- CSR_WIFI_SME_BSS_TYPE_P2P
- deviceInfo - Union containing P2P device info which
- depends on p2pDeviceRole parameter.
- deviceInforeservedCli -
- deviceInfogroupInfo -
- deviceInforeservedNone -
- deviceInfostandalonedevInfo -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSsid ssid;
- CsrWifiMacAddress bssid;
- s16 rssi;
- s16 snr;
- CsrWifiSmeRadioIF ifIndex;
- u16 beaconPeriodTu;
- CsrWifiSmeTsfTime timeStamp;
- CsrWifiSmeTsfTime localTime;
- u16 channelFrequency;
- u16 capabilityInformation;
- u8 channelNumber;
- CsrWifiSmeBasicUsability usability;
- CsrWifiSmeBssType bssType;
- u16 informationElementsLength;
- u8 *informationElements;
- CsrWifiSmeP2pRole p2pDeviceRole;
- union {
- CsrWifiSmeEmpty reservedCli;
- CsrWifiSmeP2pGroupInfo groupInfo;
- CsrWifiSmeEmpty reservedNone;
- CsrWifiSmeDeviceInfo standalonedevInfo;
- } deviceInfo;
-} CsrWifiSmeScanResult;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeStaConfig
-
- DESCRIPTION
- Station configuration options in the SME
-
- MEMBERS
- connectionQualityRssiChangeTrigger - Sets the difference of RSSI
- measurements which triggers reports
- from the Firmware
- connectionQualitySnrChangeTrigger - Sets the difference of SNR measurements
- which triggers reports from the
- Firmware
- wmmModeMask - Mask containing one or more values from
- CsrWifiSmeWmmMode
- ifIndex - Indicates the band of frequencies used
- allowUnicastUseGroupCipher - If TRUE, it allows to use groupwise
- keys if no pairwise key is specified
- enableOpportunisticKeyCaching - If TRUE, enables the Opportunistic Key
- Caching feature
-
-*******************************************************************************/
-typedef struct
-{
- u8 connectionQualityRssiChangeTrigger;
- u8 connectionQualitySnrChangeTrigger;
- CsrWifiSmeWmmModeMask wmmModeMask;
- CsrWifiSmeRadioIF ifIndex;
- u8 allowUnicastUseGroupCipher;
- u8 enableOpportunisticKeyCaching;
-} CsrWifiSmeStaConfig;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWep128Keys
-
- DESCRIPTION
- Structure holding WEP Authentication Type and WEP keys that can be used
- when using WEP128.
-
- MEMBERS
- wepAuthType - Mask to select the WEP authentication type (Open or Shared)
- selectedWepKey - Index to one of the four keys below indicating the
- currently used WEP key. Mapping From SME/User -> firmware.
- Key 1 -> Index 0. Key 2 -> Index 1. key 3 -> Index 2. Key
- 4-> Index 3.
- key1 - Value for key number 1.
- key2 - Value for key number 2.
- key3 - Value for key number 3.
- key4 - Value for key number 4.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeWepAuthMode wepAuthType;
- u8 selectedWepKey;
- u8 key1[13];
- u8 key2[13];
- u8 key3[13];
- u8 key4[13];
-} CsrWifiSmeWep128Keys;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWep64Keys
-
- DESCRIPTION
- Structure holding WEP Authentication Type and WEP keys that can be used
- when using WEP64.
-
- MEMBERS
- wepAuthType - Mask to select the WEP authentication type (Open or Shared)
- selectedWepKey - Index to one of the four keys below indicating the
- currently used WEP key. Mapping From SME/User -> firmware.
- Key 1 -> Index 0. Key 2 -> Index 1. key 3 -> Index 2. Key
- 4-> Index 3.
- key1 - Value for key number 1.
- key2 - Value for key number 2.
- key3 - Value for key number 3.
- key4 - Value for key number 4.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeWepAuthMode wepAuthType;
- u8 selectedWepKey;
- u8 key1[5];
- u8 key2[5];
- u8 key3[5];
- u8 key4[5];
-} CsrWifiSmeWep64Keys;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWepAuth
-
- DESCRIPTION
- WEP authentication parameter structure
-
- MEMBERS
- wepKeyType - WEP key try (128 bit or 64 bit)
- wepCredentials - Union containing credentials which depends on
- wepKeyType parameter.
- wepCredentialswep128Key -
- wepCredentialswep64Key -
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiSmeWepCredentialType wepKeyType;
- union {
- CsrWifiSmeWep128Keys wep128Key;
- CsrWifiSmeWep64Keys wep64Key;
- } wepCredentials;
-} CsrWifiSmeWepAuth;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWpsConfig
-
- DESCRIPTION
- Structure holding AP WPS Config data.
-
- MEMBERS
- wpsVersion - wpsVersion should be 0x10 for WPS1.0h or 0x20 for
- WSC2.0
- uuid - uuid.
- deviceName - Device name upto 32 characters without '\0'.
- deviceNameLength - deviceNameLen.
- manufacturer - manufacturer: CSR
- manufacturerLength - manufacturerLen.
- modelName - modelName Unifi
- modelNameLength - modelNameLen.
- modelNumber - modelNumber
- modelNumberLength - modelNumberLen.
- serialNumber - serialNumber
- primDeviceType - Primary WPS device type
- secondaryDeviceTypeCount - Number of secondary device types
- secondaryDeviceType - list of secondary WPS device types
- configMethods - Supported WPS config methods
- rfBands - RfBands.
- osVersion - Os version on which the device is running
-
-*******************************************************************************/
-typedef struct
-{
- u8 wpsVersion;
- u8 uuid[16];
- u8 deviceName[32];
- u8 deviceNameLength;
- u8 manufacturer[64];
- u8 manufacturerLength;
- u8 modelName[32];
- u8 modelNameLength;
- u8 modelNumber[32];
- u8 modelNumberLength;
- u8 serialNumber[32];
- CsrWifiSmeWpsDeviceType primDeviceType;
- u8 secondaryDeviceTypeCount;
- CsrWifiSmeWpsDeviceType *secondaryDeviceType;
- CsrWifiSmeWpsConfigTypeMask configMethods;
- u8 rfBands;
- u8 osVersion[4];
-} CsrWifiSmeWpsConfig;
-
-
-/* Downstream */
-#define CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST (0x0000)
-
-#define CSR_WIFI_SME_ACTIVATE_REQ ((CsrWifiSmePrim) (0x0000 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_ADHOC_CONFIG_GET_REQ ((CsrWifiSmePrim) (0x0001 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_ADHOC_CONFIG_SET_REQ ((CsrWifiSmePrim) (0x0002 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_BLACKLIST_REQ ((CsrWifiSmePrim) (0x0003 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_CALIBRATION_DATA_GET_REQ ((CsrWifiSmePrim) (0x0004 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_CALIBRATION_DATA_SET_REQ ((CsrWifiSmePrim) (0x0005 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_CCX_CONFIG_GET_REQ ((CsrWifiSmePrim) (0x0006 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_CCX_CONFIG_SET_REQ ((CsrWifiSmePrim) (0x0007 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_COEX_CONFIG_GET_REQ ((CsrWifiSmePrim) (0x0008 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_COEX_CONFIG_SET_REQ ((CsrWifiSmePrim) (0x0009 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_COEX_INFO_GET_REQ ((CsrWifiSmePrim) (0x000A + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_CONNECT_REQ ((CsrWifiSmePrim) (0x000B + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_CONNECTION_CONFIG_GET_REQ ((CsrWifiSmePrim) (0x000C + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_CONNECTION_INFO_GET_REQ ((CsrWifiSmePrim) (0x000D + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_CONNECTION_STATS_GET_REQ ((CsrWifiSmePrim) (0x000E + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_DEACTIVATE_REQ ((CsrWifiSmePrim) (0x000F + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_DISCONNECT_REQ ((CsrWifiSmePrim) (0x0010 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_EVENT_MASK_SET_REQ ((CsrWifiSmePrim) (0x0011 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_HOST_CONFIG_GET_REQ ((CsrWifiSmePrim) (0x0012 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_HOST_CONFIG_SET_REQ ((CsrWifiSmePrim) (0x0013 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_KEY_REQ ((CsrWifiSmePrim) (0x0014 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_LINK_QUALITY_GET_REQ ((CsrWifiSmePrim) (0x0015 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_MIB_CONFIG_GET_REQ ((CsrWifiSmePrim) (0x0016 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_MIB_CONFIG_SET_REQ ((CsrWifiSmePrim) (0x0017 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_MIB_GET_NEXT_REQ ((CsrWifiSmePrim) (0x0018 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_MIB_GET_REQ ((CsrWifiSmePrim) (0x0019 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_MIB_SET_REQ ((CsrWifiSmePrim) (0x001A + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_MULTICAST_ADDRESS_REQ ((CsrWifiSmePrim) (0x001B + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_PACKET_FILTER_SET_REQ ((CsrWifiSmePrim) (0x001C + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_PERMANENT_MAC_ADDRESS_GET_REQ ((CsrWifiSmePrim) (0x001D + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_PMKID_REQ ((CsrWifiSmePrim) (0x001E + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_POWER_CONFIG_GET_REQ ((CsrWifiSmePrim) (0x001F + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_POWER_CONFIG_SET_REQ ((CsrWifiSmePrim) (0x0020 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_REGULATORY_DOMAIN_INFO_GET_REQ ((CsrWifiSmePrim) (0x0021 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_ROAMING_CONFIG_GET_REQ ((CsrWifiSmePrim) (0x0022 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_ROAMING_CONFIG_SET_REQ ((CsrWifiSmePrim) (0x0023 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_SCAN_CONFIG_GET_REQ ((CsrWifiSmePrim) (0x0024 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_SCAN_CONFIG_SET_REQ ((CsrWifiSmePrim) (0x0025 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_SCAN_FULL_REQ ((CsrWifiSmePrim) (0x0026 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_SCAN_RESULTS_FLUSH_REQ ((CsrWifiSmePrim) (0x0027 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_SCAN_RESULTS_GET_REQ ((CsrWifiSmePrim) (0x0028 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_SME_STA_CONFIG_GET_REQ ((CsrWifiSmePrim) (0x0029 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_SME_STA_CONFIG_SET_REQ ((CsrWifiSmePrim) (0x002A + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_STATION_MAC_ADDRESS_GET_REQ ((CsrWifiSmePrim) (0x002B + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_TSPEC_REQ ((CsrWifiSmePrim) (0x002C + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_VERSIONS_GET_REQ ((CsrWifiSmePrim) (0x002D + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_WIFI_FLIGHTMODE_REQ ((CsrWifiSmePrim) (0x002E + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_WIFI_OFF_REQ ((CsrWifiSmePrim) (0x002F + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_WIFI_ON_REQ ((CsrWifiSmePrim) (0x0030 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_CLOAKED_SSIDS_SET_REQ ((CsrWifiSmePrim) (0x0031 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_CLOAKED_SSIDS_GET_REQ ((CsrWifiSmePrim) (0x0032 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_SME_COMMON_CONFIG_GET_REQ ((CsrWifiSmePrim) (0x0033 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_SME_COMMON_CONFIG_SET_REQ ((CsrWifiSmePrim) (0x0034 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_INTERFACE_CAPABILITY_GET_REQ ((CsrWifiSmePrim) (0x0035 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_WPS_CONFIGURATION_REQ ((CsrWifiSmePrim) (0x0036 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-#define CSR_WIFI_SME_SET_REQ ((CsrWifiSmePrim) (0x0037 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST))
-
-
-#define CSR_WIFI_SME_PRIM_DOWNSTREAM_HIGHEST (0x0037 + CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST)
-
-/* Upstream */
-#define CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST (0x0000 + CSR_PRIM_UPSTREAM)
-
-#define CSR_WIFI_SME_ACTIVATE_CFM ((CsrWifiSmePrim)(0x0000 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_ADHOC_CONFIG_GET_CFM ((CsrWifiSmePrim)(0x0001 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_ADHOC_CONFIG_SET_CFM ((CsrWifiSmePrim)(0x0002 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_ASSOCIATION_COMPLETE_IND ((CsrWifiSmePrim)(0x0003 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_ASSOCIATION_START_IND ((CsrWifiSmePrim)(0x0004 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_BLACKLIST_CFM ((CsrWifiSmePrim)(0x0005 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_CALIBRATION_DATA_GET_CFM ((CsrWifiSmePrim)(0x0006 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_CALIBRATION_DATA_SET_CFM ((CsrWifiSmePrim)(0x0007 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_CCX_CONFIG_GET_CFM ((CsrWifiSmePrim)(0x0008 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_CCX_CONFIG_SET_CFM ((CsrWifiSmePrim)(0x0009 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_COEX_CONFIG_GET_CFM ((CsrWifiSmePrim)(0x000A + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_COEX_CONFIG_SET_CFM ((CsrWifiSmePrim)(0x000B + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_COEX_INFO_GET_CFM ((CsrWifiSmePrim)(0x000C + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_CONNECT_CFM ((CsrWifiSmePrim)(0x000D + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_CONNECTION_CONFIG_GET_CFM ((CsrWifiSmePrim)(0x000E + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_CONNECTION_INFO_GET_CFM ((CsrWifiSmePrim)(0x000F + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_CONNECTION_QUALITY_IND ((CsrWifiSmePrim)(0x0010 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_CONNECTION_STATS_GET_CFM ((CsrWifiSmePrim)(0x0011 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_DEACTIVATE_CFM ((CsrWifiSmePrim)(0x0012 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_DISCONNECT_CFM ((CsrWifiSmePrim)(0x0013 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_EVENT_MASK_SET_CFM ((CsrWifiSmePrim)(0x0014 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_HOST_CONFIG_GET_CFM ((CsrWifiSmePrim)(0x0015 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_HOST_CONFIG_SET_CFM ((CsrWifiSmePrim)(0x0016 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_IBSS_STATION_IND ((CsrWifiSmePrim)(0x0017 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_KEY_CFM ((CsrWifiSmePrim)(0x0018 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_LINK_QUALITY_GET_CFM ((CsrWifiSmePrim)(0x0019 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_MEDIA_STATUS_IND ((CsrWifiSmePrim)(0x001A + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_MIB_CONFIG_GET_CFM ((CsrWifiSmePrim)(0x001B + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_MIB_CONFIG_SET_CFM ((CsrWifiSmePrim)(0x001C + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_MIB_GET_CFM ((CsrWifiSmePrim)(0x001D + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_MIB_GET_NEXT_CFM ((CsrWifiSmePrim)(0x001E + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_MIB_SET_CFM ((CsrWifiSmePrim)(0x001F + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_MIC_FAILURE_IND ((CsrWifiSmePrim)(0x0020 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_MULTICAST_ADDRESS_CFM ((CsrWifiSmePrim)(0x0021 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_PACKET_FILTER_SET_CFM ((CsrWifiSmePrim)(0x0022 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_PERMANENT_MAC_ADDRESS_GET_CFM ((CsrWifiSmePrim)(0x0023 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_PMKID_CANDIDATE_LIST_IND ((CsrWifiSmePrim)(0x0024 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_PMKID_CFM ((CsrWifiSmePrim)(0x0025 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_POWER_CONFIG_GET_CFM ((CsrWifiSmePrim)(0x0026 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_POWER_CONFIG_SET_CFM ((CsrWifiSmePrim)(0x0027 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_REGULATORY_DOMAIN_INFO_GET_CFM ((CsrWifiSmePrim)(0x0028 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_ROAM_COMPLETE_IND ((CsrWifiSmePrim)(0x0029 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_ROAM_START_IND ((CsrWifiSmePrim)(0x002A + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_ROAMING_CONFIG_GET_CFM ((CsrWifiSmePrim)(0x002B + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_ROAMING_CONFIG_SET_CFM ((CsrWifiSmePrim)(0x002C + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_SCAN_CONFIG_GET_CFM ((CsrWifiSmePrim)(0x002D + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_SCAN_CONFIG_SET_CFM ((CsrWifiSmePrim)(0x002E + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_SCAN_FULL_CFM ((CsrWifiSmePrim)(0x002F + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_SCAN_RESULT_IND ((CsrWifiSmePrim)(0x0030 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_SCAN_RESULTS_FLUSH_CFM ((CsrWifiSmePrim)(0x0031 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_SCAN_RESULTS_GET_CFM ((CsrWifiSmePrim)(0x0032 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_SME_STA_CONFIG_GET_CFM ((CsrWifiSmePrim)(0x0033 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_SME_STA_CONFIG_SET_CFM ((CsrWifiSmePrim)(0x0034 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_STATION_MAC_ADDRESS_GET_CFM ((CsrWifiSmePrim)(0x0035 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_TSPEC_IND ((CsrWifiSmePrim)(0x0036 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_TSPEC_CFM ((CsrWifiSmePrim)(0x0037 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_VERSIONS_GET_CFM ((CsrWifiSmePrim)(0x0038 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_WIFI_FLIGHTMODE_CFM ((CsrWifiSmePrim)(0x0039 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_WIFI_OFF_IND ((CsrWifiSmePrim)(0x003A + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_WIFI_OFF_CFM ((CsrWifiSmePrim)(0x003B + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_WIFI_ON_CFM ((CsrWifiSmePrim)(0x003C + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_CLOAKED_SSIDS_SET_CFM ((CsrWifiSmePrim)(0x003D + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_CLOAKED_SSIDS_GET_CFM ((CsrWifiSmePrim)(0x003E + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_WIFI_ON_IND ((CsrWifiSmePrim)(0x003F + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_SME_COMMON_CONFIG_GET_CFM ((CsrWifiSmePrim)(0x0040 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_SME_COMMON_CONFIG_SET_CFM ((CsrWifiSmePrim)(0x0041 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_INTERFACE_CAPABILITY_GET_CFM ((CsrWifiSmePrim)(0x0042 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_ERROR_IND ((CsrWifiSmePrim)(0x0043 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_INFO_IND ((CsrWifiSmePrim)(0x0044 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_CORE_DUMP_IND ((CsrWifiSmePrim)(0x0045 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_AMP_STATUS_CHANGE_IND ((CsrWifiSmePrim)(0x0046 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-#define CSR_WIFI_SME_WPS_CONFIGURATION_CFM ((CsrWifiSmePrim)(0x0047 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST))
-
-#define CSR_WIFI_SME_PRIM_UPSTREAM_HIGHEST (0x0047 + CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST)
-
-#define CSR_WIFI_SME_PRIM_DOWNSTREAM_COUNT (CSR_WIFI_SME_PRIM_DOWNSTREAM_HIGHEST + 1 - CSR_WIFI_SME_PRIM_DOWNSTREAM_LOWEST)
-#define CSR_WIFI_SME_PRIM_UPSTREAM_COUNT (CSR_WIFI_SME_PRIM_UPSTREAM_HIGHEST + 1 - CSR_WIFI_SME_PRIM_UPSTREAM_LOWEST)
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeActivateReq
-
- DESCRIPTION
- The WMA sends this primitive to activate the SME.
- The WMA must activate the SME before it can send any other primitive.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeActivateReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAdhocConfigGetReq
-
- DESCRIPTION
- This primitive gets the value of the adHocConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeAdhocConfigGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAdhocConfigSetReq
-
- DESCRIPTION
- This primitive sets the value of the adHocConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- adHocConfig - Sets the values to use when starting an ad hoc network.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiSmeAdHocConfig adHocConfig;
-} CsrWifiSmeAdhocConfigSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeBlacklistReq
-
- DESCRIPTION
- The wireless manager application should call this primitive to notify the
- driver of any networks that should not be connected to. The interface
- allows the wireless manager application to query, add, remove, and flush
- the BSSIDs that the driver may not connect or roam to.
- When this primitive adds to the black list the BSSID to which the SME is
- currently connected, the SME will try to roam, if applicable, to another
- BSSID in the same ESS; if the roaming procedure fails, the SME will
- disconnect.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- action - The value of the CsrWifiSmeListAction parameter instructs
- the driver to modify or provide the list of blacklisted
- networks.
- setAddressCount - Number of BSSIDs sent with this primitive
- setAddresses - Pointer to the list of BBSIDs sent with the primitive, set
- to NULL if none is sent.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeListAction action;
- u8 setAddressCount;
- CsrWifiMacAddress *setAddresses;
-} CsrWifiSmeBlacklistReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCalibrationDataGetReq
-
- DESCRIPTION
- This primitive retrieves the Wi-Fi radio calibration data.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeCalibrationDataGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCalibrationDataSetReq
-
- DESCRIPTION
- This primitive sets the Wi-Fi radio calibration data.
- The usage of the primitive with proper calibration data will avoid
- time-consuming configuration after power-up.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- calibrationDataLength - Number of bytes in the buffer pointed by
- calibrationData
- calibrationData - Pointer to a buffer of length calibrationDataLength
- containing the calibration data
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 calibrationDataLength;
- u8 *calibrationData;
-} CsrWifiSmeCalibrationDataSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCcxConfigGetReq
-
- DESCRIPTION
- This primitive gets the value of the CcxConfig parameter.
- CURRENTLY NOT SUPPORTED.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiSmeCcxConfigGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCcxConfigSetReq
-
- DESCRIPTION
- This primitive sets the value of the CcxConfig parameter.
- CURRENTLY NOT SUPPORTED.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- ccxConfig - Currently not supported
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeCcxConfig ccxConfig;
-} CsrWifiSmeCcxConfigSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexConfigGetReq
-
- DESCRIPTION
- This primitive gets the value of the CoexConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeCoexConfigGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexConfigSetReq
-
- DESCRIPTION
- This primitive sets the value of the CoexConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- coexConfig - Configures the coexistence behaviour
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiSmeCoexConfig coexConfig;
-} CsrWifiSmeCoexConfigSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexInfoGetReq
-
- DESCRIPTION
- This primitive gets the value of the CoexInfo parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeCoexInfoGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectReq
-
- DESCRIPTION
- The wireless manager application calls this primitive to start the
- process of joining an 802.11 wireless network or to start an ad hoc
- network.
- The structure pointed by connectionConfig contains parameters describing
- the network to join or, in case of an ad hoc network, to host or join.
- The SME will select a network, perform the IEEE 802.11 Join, Authenticate
- and Associate exchanges.
- The SME selects the networks from the current scan list that match both
- the SSID and BSSID, however either or both of these may be the wildcard
- value. Using this rule, the following operations are possible:
- * To connect to a network by name, specify the SSID and set the BSSID to
- 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF. If there are two or more networks visible,
- the SME will select the one with the strongest signal.
- * To connect to a specific network, specify the BSSID. The SSID is
- optional, but if given it must match the SSID of the network. An empty
- SSID may be specified by setting the SSID length to zero. Please note
- that if the BSSID is specified (i.e. not equal to 0xFF 0xFF 0xFF 0xFF
- 0xFF 0xFF), the SME will not attempt to roam if signal conditions become
- poor, even if there is an alternative AP with an SSID that matches the
- current network SSID.
- * To connect to any network matching the other parameters (i.e. security,
- etc), set the SSID length to zero and set the BSSID to 0xFF 0xFF 0xFF
- 0xFF 0xFF 0xFF. In this case, the SME will order all available networks
- by their signal strengths and will iterate through this list until it
- successfully connects.
- NOTE: Specifying the BSSID will restrict the selection to one specific
- network. If SSID and BSSID are given, they must both match the network
- for it to be selected. To select a network based on the SSID only, the
- wireless manager application must set the BSSID to 0xFF 0xFF 0xFF 0xFF
- 0xFF 0xFF.
- The SME will try to connect to each network that matches the provided
- parameters, one by one, until it succeeds or has tried unsuccessfully
- with all the matching networks.
- If there is no network that matches the parameters and the request allows
- to host an ad hoc network, the SME will advertise a new ad hoc network
- instead.
- If the SME cannot connect, it will notify the failure in the confirm.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- connectionConfig - Describes the candidate network to join or to host.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeConnectionConfig connectionConfig;
-} CsrWifiSmeConnectReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionConfigGetReq
-
- DESCRIPTION
- This primitive gets the value of the ConnectionConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiSmeConnectionConfigGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionInfoGetReq
-
- DESCRIPTION
- This primitive gets the value of the ConnectionInfo parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiSmeConnectionInfoGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionStatsGetReq
-
- DESCRIPTION
- This primitive gets the value of the ConnectionStats parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiSmeConnectionStatsGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeDeactivateReq
-
- DESCRIPTION
- The WMA sends this primitive to deactivate the SME.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeDeactivateReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeDisconnectReq
-
- DESCRIPTION
- The wireless manager application may disconnect from the current network
- by calling this primitive
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiSmeDisconnectReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeEventMaskSetReq
-
- DESCRIPTION
- The wireless manager application may register with the SME to receive
- notification of interesting events. Indications will be sent only if the
- wireless manager explicitly registers to be notified of that event.
- indMask is a bit mask of values defined in CsrWifiSmeIndicationsMask.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- indMask - Set mask with values from CsrWifiSmeIndications
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiSmeIndicationsMask indMask;
-} CsrWifiSmeEventMaskSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeHostConfigGetReq
-
- DESCRIPTION
- This primitive gets the value of the hostConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiSmeHostConfigGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeHostConfigSetReq
-
- DESCRIPTION
- This primitive sets the value of the hostConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- hostConfig - Communicates a change of host power state (for example, on
- mains power, on battery power etc) and of the periodicity of
- traffic data
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeHostConfig hostConfig;
-} CsrWifiSmeHostConfigSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeKeyReq
-
- DESCRIPTION
- The wireless manager application calls this primitive to add or remove
- keys that the chip should use for encryption of data.
- The interface allows the wireless manager application to add and remove
- keys according to the specified action.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- action - The value of the CsrWifiSmeListAction parameter instructs the
- driver to modify or provide the list of keys.
- CSR_WIFI_SME_LIST_ACTION_GET is not supported here.
- key - Key to be added or removed
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeListAction action;
- CsrWifiSmeKey key;
-} CsrWifiSmeKeyReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeLinkQualityGetReq
-
- DESCRIPTION
- This primitive gets the value of the LinkQuality parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiSmeLinkQualityGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibConfigGetReq
-
- DESCRIPTION
- This primitive gets the value of the MibConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeMibConfigGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibConfigSetReq
-
- DESCRIPTION
- This primitive sets the value of the MibConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- mibConfig - Conveys the desired value of various IEEE 802.11 attributes as
- currently configured
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiSmeMibConfig mibConfig;
-} CsrWifiSmeMibConfigSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibGetNextReq
-
- DESCRIPTION
- To read a sequence of MIB parameters, for example a table, call this
- primitive to find the name of the next MIB variable
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- mibAttributeLength - Length of mibAttribute
- mibAttribute - Points to a VarBind or VarBindList containing the
- name(s) of the MIB variable(s) to search from.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 mibAttributeLength;
- u8 *mibAttribute;
-} CsrWifiSmeMibGetNextReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibGetReq
-
- DESCRIPTION
- The wireless manager application calls this primitive to retrieve one or
- more MIB variables.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- mibAttributeLength - Length of mibAttribute
- mibAttribute - Points to the VarBind or VarBindList containing the
- names of the MIB variables to be retrieved
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 mibAttributeLength;
- u8 *mibAttribute;
-} CsrWifiSmeMibGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibSetReq
-
- DESCRIPTION
- The SME provides raw access to the MIB on the chip, which may be used by
- some configuration or diagnostic utilities, but is not normally needed by
- the wireless manager application.
- The MIB access functions use BER encoded names (OID) of the MIB
- parameters and BER encoded values, as described in the chip Host
- Interface Protocol Specification.
- The MIB parameters are described in 'Wi-Fi 5.0.0 Management Information
- Base Reference Guide'.
- The wireless manager application calls this primitive to set one or more
- MIB variables
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- mibAttributeLength - Length of mibAttribute
- mibAttribute - Points to the VarBind or VarBindList containing the
- names and values of the MIB variables to set
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 mibAttributeLength;
- u8 *mibAttribute;
-} CsrWifiSmeMibSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMulticastAddressReq
-
- DESCRIPTION
- The wireless manager application calls this primitive to specify the
- multicast addresses which the chip should recognise. The interface allows
- the wireless manager application to query, add, remove and flush the
- multicast addresses for the network interface according to the specified
- action.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- action - The value of the CsrWifiSmeListAction parameter
- instructs the driver to modify or provide the list of
- MAC addresses.
- setAddressesCount - Number of MAC addresses sent with the primitive
- setAddresses - Pointer to the list of MAC Addresses sent with the
- primitive, set to NULL if none is sent.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeListAction action;
- u8 setAddressesCount;
- CsrWifiMacAddress *setAddresses;
-} CsrWifiSmeMulticastAddressReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePacketFilterSetReq
-
- DESCRIPTION
- The wireless manager application should call this primitive to enable or
- disable filtering of broadcast packets: uninteresting broadcast packets
- will be dropped by the Wi-Fi chip, instead of passing them up to the
- host.
- This has the advantage of saving power in the host application processor
- as it removes the need to process unwanted packets.
- All broadcast packets are filtered according to the filter and the filter
- mode provided, except ARP packets, which are filtered using
- arpFilterAddress.
- Filters are not cumulative: only the parameters specified in the most
- recent successful request are significant.
- For more information, see 'UniFi Firmware API Specification'.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- filterLength - Length of the filter in bytes.
- filterLength=0 disables the filter previously set
- filter - Points to the first byte of the filter provided, if any.
- This shall include zero or more instance of the
- information elements of one of these types
- * Traffic Classification (TCLAS) elements
- * WMM-SA TCLAS elements
- mode - Specifies whether the filter selects or excludes packets
- matching the filter
- arpFilterAddress - IPv4 address to be used for filtering the ARP packets.
- * If the specified address is the IPv4 broadcast address
- (255.255.255.255), all ARP packets are reported to the
- host,
- * If the specified address is NOT the IPv4 broadcast
- address, only ARP packets with the specified address in
- the Source or Target Protocol Address fields are reported
- to the host
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u16 filterLength;
- u8 *filter;
- CsrWifiSmePacketFilterMode mode;
- CsrWifiIp4Address arpFilterAddress;
-} CsrWifiSmePacketFilterSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePermanentMacAddressGetReq
-
- DESCRIPTION
- This primitive retrieves the MAC address stored in EEPROM
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmePermanentMacAddressGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePmkidReq
-
- DESCRIPTION
- The wireless manager application calls this primitive to request an
- operation on the SME PMKID list.
- The action argument specifies the operation to perform.
- When the connection is complete, the wireless manager application may
- then send and receive EAPOL packets to complete WPA or WPA2
- authentication if appropriate.
- The wireless manager application can then pass the resulting encryption
- keys using this primitive.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- action - The value of the CsrWifiSmeListAction parameter instructs
- the driver to modify or provide the list of PMKIDs.
- setPmkidsCount - Number of PMKIDs sent with the primitive
- setPmkids - Pointer to the list of PMKIDs sent with the primitive, set
- to NULL if none is sent.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeListAction action;
- u8 setPmkidsCount;
- CsrWifiSmePmkid *setPmkids;
-} CsrWifiSmePmkidReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePowerConfigGetReq
-
- DESCRIPTION
- This primitive gets the value of the PowerConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmePowerConfigGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePowerConfigSetReq
-
- DESCRIPTION
- This primitive sets the value of the PowerConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- powerConfig - Power saving configuration
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiSmePowerConfig powerConfig;
-} CsrWifiSmePowerConfigSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRegulatoryDomainInfoGetReq
-
- DESCRIPTION
- This primitive gets the value of the RegulatoryDomainInfo parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeRegulatoryDomainInfoGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamingConfigGetReq
-
- DESCRIPTION
- This primitive gets the value of the RoamingConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiSmeRoamingConfigGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamingConfigSetReq
-
- DESCRIPTION
- This primitive sets the value of the RoamingConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- roamingConfig - Desired roaming behaviour values
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeRoamingConfig roamingConfig;
-} CsrWifiSmeRoamingConfigSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanConfigGetReq
-
- DESCRIPTION
- This primitive gets the value of the ScanConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeScanConfigGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanConfigSetReq
-
- DESCRIPTION
- This primitive sets the value of the ScanConfig parameter.
- The SME normally configures the firmware to perform autonomous scanning
- without involving the host.
- The firmware passes beacon / probe response or indicates loss of beacon
- on certain changes of state, for example:
- * A new AP is seen for the first time
- * An AP is no longer visible
- * The signal strength of an AP changes by more than a certain amount, as
- configured by the thresholds in the scanConfig parameter
- In addition to the autonomous scan, the wireless manager application may
- request a scan at any time using CSR_WIFI_SME_SCAN_FULL_REQ.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- scanConfig - Reports the configuration for the autonomous scanning behaviour
- of the firmware
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiSmeScanConfig scanConfig;
-} CsrWifiSmeScanConfigSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanFullReq
-
- DESCRIPTION
- The wireless manager application should call this primitive to request a
- full scan.
- Channels are scanned actively or passively according to the requirement
- set by regulatory domain.
- If the SME receives this primitive while a full scan is going on, the new
- request is buffered and it will be served after the current full scan is
- completed.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- ssidCount - Number of SSIDs provided.
- If it is 0, the SME will attempt to detect any network
- ssid - Points to the first SSID provided, if any.
- bssid - BSS identifier.
- If it is equal to FF-FF-FF-FF-FF, the SME will listen for
- messages from any BSS.
- If it is different from FF-FF-FF-FF-FF and any SSID is
- provided, one SSID must match the network of the BSS.
- forceScan - Forces the scan even if the SME is in a state which would
- normally prevent it (e.g. autonomous scan is running).
- bssType - Type of BSS to scan for
- scanType - Type of scan to perform
- channelListCount - Number of channels provided.
- If it is 0, the SME will initiate a scan of all the
- supported channels that are permitted by the current
- regulatory domain.
- channelList - Points to the first channel , or NULL if channelListCount
- is zero.
- probeIeLength - Length of the information element in bytes to be sent
- with the probe message.
- probeIe - Points to the first byte of the information element to be
- sent with the probe message.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u8 ssidCount;
- CsrWifiSsid *ssid;
- CsrWifiMacAddress bssid;
- u8 forceScan;
- CsrWifiSmeBssType bssType;
- CsrWifiSmeScanType scanType;
- u16 channelListCount;
- u8 *channelList;
- u16 probeIeLength;
- u8 *probeIe;
-} CsrWifiSmeScanFullReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanResultsFlushReq
-
- DESCRIPTION
- The Wireless Manager calls this primitive to ask the SME to delete all
- scan results from its cache, except for the scan result of any currently
- connected network.
- As scan results are received by the SME from the firmware, they are
- cached in the SME memory.
- Any time the Wireless Manager requests scan results, they are returned
- from the SME internal cache.
- For some applications it may be desirable to clear this cache prior to
- requesting that a scan be performed; this will ensure that the cache then
- only contains the networks detected in the most recent scan.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeScanResultsFlushReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanResultsGetReq
-
- DESCRIPTION
- The wireless manager application calls this primitive to retrieve the
- current set of scan results, either after receiving a successful
- CSR_WIFI_SME_SCAN_FULL_CFM, or to get autonomous scan results.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeScanResultsGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeStaConfigGetReq
-
- DESCRIPTION
- This primitive gets the value of the SmeStaConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
-} CsrWifiSmeSmeStaConfigGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeStaConfigSetReq
-
- DESCRIPTION
- This primitive sets the value of the SmeConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- smeConfig - SME Station Parameters to be set
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeStaConfig smeConfig;
-} CsrWifiSmeSmeStaConfigSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeStationMacAddressGetReq
-
- DESCRIPTION
- This primitives is used to retrieve the current MAC address used by the
- station.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeStationMacAddressGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeTspecReq
-
- DESCRIPTION
- The wireless manager application should call this primitive to use the
- TSPEC feature.
- The chip supports the use of TSPECs and TCLAS for the use of IEEE
- 802.11/WMM Quality of Service features.
- The API allows the wireless manager application to supply a correctly
- formatted TSPEC and TCLAS pair to the driver.
- After performing basic validation, the driver negotiates the installation
- of the TSPEC with the AP as defined by the 802.11 specification.
- The driver retains all TSPEC and TCLAS pairs until they are specifically
- removed.
- It is not compulsory for a TSPEC to have a TCLAS (NULL is used to
- indicate that no TCLAS is supplied), while a TCLASS always require a
- TSPEC.
- The format of the TSPEC element is specified in 'WMM (including WMM Power
- Save) Specification - Version 1.1' and 'ANSI/IEEE Std 802.11-REVmb/D3.0'.
- For more information, see 'UniFi Configuring WMM and WMM-PS'.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- action - Specifies the action to be carried out on the list of TSPECs.
- CSR_WIFI_SME_LIST_ACTION_FLUSH is not applicable here.
- transactionId - Unique Transaction ID for the TSPEC, as assigned by the
- driver
- strict - If it set to false, allows the SME to perform automatic
- TSPEC negotiation
- ctrlMask - Additional TSPEC configuration for CCX.
- Set mask with values from CsrWifiSmeTspecCtrl.
- CURRENTLY NOT SUPPORTED
- tspecLength - Length of the TSPEC.
- tspec - Points to the first byte of the TSPEC
- tclasLength - Length of the TCLAS.
- If it is equal to 0, no TCLASS is provided for the TSPEC
- tclas - Points to the first byte of the TCLAS, if any.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeListAction action;
- u32 transactionId;
- u8 strict;
- CsrWifiSmeTspecCtrlMask ctrlMask;
- u16 tspecLength;
- u8 *tspec;
- u16 tclasLength;
- u8 *tclas;
-} CsrWifiSmeTspecReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeVersionsGetReq
-
- DESCRIPTION
- This primitive gets the value of the Versions parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeVersionsGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiFlightmodeReq
-
- DESCRIPTION
- The wireless manager application may call this primitive on boot-up of
- the platform to ensure that the chip is placed in a mode that prevents
- any emission of RF energy.
- This primitive is an alternative to CSR_WIFI_SME_WIFI_ON_REQ.
- As in CSR_WIFI_SME_WIFI_ON_REQ, it causes the download of the patch file
- (if any) and the programming of the initial MIB settings (if supplied by
- the WMA), but it also ensures that the chip is left in its lowest
- possible power-mode with the radio subsystems disabled.
- This feature is useful on platforms where power cannot be removed from
- the chip (leaving the chip not initialised will cause it to consume more
- power so calling this function ensures that the chip is initialised into
- a low power mode but without entering a state where it could emit any RF
- energy).
- NOTE: this primitive does not cause the Wi-Fi to change state: Wi-Fi
- stays conceptually off. Configuration primitives can be sent after
- CSR_WIFI_SME_WIFI_FLIGHTMODE_REQ and the configuration will be maintained.
- Requests that require the state of the Wi-Fi to be ON will return
- CSR_WIFI_SME_STATUS_WIFI_OFF in their confirms.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- address - Optionally specifies a station MAC address.
- In normal use, the manager should set the address to 0xFF
- 0xFF 0xFF 0xFF 0xFF 0xFF, which will cause the chip to use
- the MAC address in the MIB.
- mibFilesCount - Number of provided data blocks with initial MIB values
- mibFiles - Points to the first data block with initial MIB values.
- These data blocks are typically the contents of the provided
- files ufmib.dat and localmib.dat, available from the host
- file system, if they exist.
- These files typically contain radio tuning and calibration
- values.
- More values can be created using the Host Tools.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiMacAddress address;
- u16 mibFilesCount;
- CsrWifiSmeDataBlock *mibFiles;
-} CsrWifiSmeWifiFlightmodeReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiOffReq
-
- DESCRIPTION
- The wireless manager application calls this primitive to turn off the
- chip, thus saving power when Wi-Fi is not in use.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeWifiOffReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiOnReq
-
- DESCRIPTION
- The wireless manager application calls this primitive to turn on the
- Wi-Fi chip.
- If the Wi-Fi chip is currently off, the SME turns the Wi-Fi chip on,
- downloads the patch file (if any), and programs the initial MIB settings
- (if supplied by the WMA).
- The patch file is not provided with the SME API; its downloading is
- automatic and handled internally by the system.
- The MIB settings, when provided, override the default values that the
- firmware loads from EEPROM.
- If the Wi-Fi chip is already on, the SME takes no action and returns a
- successful status in the confirm.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- address - Optionally specifies a station MAC address.
- In normal use, the manager should set the address to 0xFF
- 0xFF 0xFF 0xFF 0xFF 0xFF, which will cause the chip to use
- the MAC address in the MIB
- mibFilesCount - Number of provided data blocks with initial MIB values
- mibFiles - Points to the first data block with initial MIB values.
- These data blocks are typically the contents of the provided
- files ufmib.dat and localmib.dat, available from the host
- file system, if they exist.
- These files typically contain radio tuning and calibration
- values.
- More values can be created using the Host Tools.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiMacAddress address;
- u16 mibFilesCount;
- CsrWifiSmeDataBlock *mibFiles;
-} CsrWifiSmeWifiOnReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCloakedSsidsSetReq
-
- DESCRIPTION
- This primitive sets the list of cloaked SSIDs for which the WMA possesses
- profiles.
- When the driver detects a cloaked AP, the SME will explicitly scan for it
- using the list of cloaked SSIDs provided it, and, if the scan succeeds,
- it will report the AP to the WMA either via CSR_WIFI_SME_SCAN_RESULT_IND
- (if registered) or via CSR_WIFI_SCAN_RESULT_GET_CFM.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- cloakedSsids - Sets the list of cloaked SSIDs
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiSmeCloakedSsidConfig cloakedSsids;
-} CsrWifiSmeCloakedSsidsSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCloakedSsidsGetReq
-
- DESCRIPTION
- This primitive gets the value of the CloakedSsids parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeCloakedSsidsGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeCommonConfigGetReq
-
- DESCRIPTION
- This primitive gets the value of the Sme common parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeSmeCommonConfigGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeCommonConfigSetReq
-
- DESCRIPTION
- This primitive sets the value of the Sme common.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- deviceConfig - Configuration options in the SME
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiSmeDeviceConfig deviceConfig;
-} CsrWifiSmeSmeCommonConfigSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeInterfaceCapabilityGetReq
-
- DESCRIPTION
- The Wireless Manager calls this primitive to ask the SME for the
- capabilities of the supported interfaces
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
-} CsrWifiSmeInterfaceCapabilityGetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWpsConfigurationReq
-
- DESCRIPTION
- This primitive passes the WPS information for the device to SME. This may
- be accepted only if no interface is active.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- wpsConfig - WPS config.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiSmeWpsConfig wpsConfig;
-} CsrWifiSmeWpsConfigurationReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSetReq
-
- DESCRIPTION
- Used to pass custom data to the SME. Format is the same as 802.11 Info
- Elements => | Id | Length | Data
- 1) Cmanr Test Mode "Id:0 Length:1 Data:0x00 = OFF 0x01 = ON" "0x00 0x01
- (0x00|0x01)"
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- dataLength - Number of bytes in the buffer pointed to by 'data'
- data - Pointer to the buffer containing 'dataLength' bytes
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u32 dataLength;
- u8 *data;
-} CsrWifiSmeSetReq;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeActivateCfm
-
- DESCRIPTION
- The SME sends this primitive when the activation is complete.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeActivateCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAdhocConfigGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- adHocConfig - Contains the values used when starting an Ad-hoc (IBSS)
- connection.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- CsrWifiSmeAdHocConfig adHocConfig;
-} CsrWifiSmeAdhocConfigGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAdhocConfigSetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeAdhocConfigSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAssociationCompleteInd
-
- DESCRIPTION
- The SME will send this primitive to all the tasks that have registered to
- receive it whenever it completes an attempt to associate with an AP. If
- the association was successful, status will be set to
- CSR_WIFI_SME_STATUS_SUCCESS, otherwise status and deauthReason shall be
- set to appropriate error codes.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the association procedure
- connectionInfo - This parameter is relevant only if result is
- CSR_WIFI_SME_STATUS_SUCCESS:
- it points to the connection information for the new network
- deauthReason - This parameter is relevant only if result is not
- CSR_WIFI_SME_STATUS_SUCCESS:
- if the AP deauthorised the station, it gives the reason of
- the deauthorization
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSmeConnectionInfo connectionInfo;
- CsrWifiSmeIEEE80211Reason deauthReason;
-} CsrWifiSmeAssociationCompleteInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAssociationStartInd
-
- DESCRIPTION
- The SME will send this primitive to all the tasks that have registered to
- receive it whenever it begins an attempt to associate with an AP.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- address - BSSID of the associating network
- ssid - Service Set identifier of the associating network
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiMacAddress address;
- CsrWifiSsid ssid;
-} CsrWifiSmeAssociationStartInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeBlacklistCfm
-
- DESCRIPTION
- The SME will call this primitive when the action on the blacklist has
- completed. For a GET action, this primitive also reports the list of
- BBSIDs in the blacklist.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- action - Action in the request
- getAddressCount - This parameter is only relevant if action is
- CSR_WIFI_SME_LIST_ACTION_GET:
- number of BSSIDs sent with this primitive
- getAddresses - Pointer to the list of BBSIDs sent with the primitive, set
- to NULL if none is sent.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSmeListAction action;
- u8 getAddressCount;
- CsrWifiMacAddress *getAddresses;
-} CsrWifiSmeBlacklistCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCalibrationDataGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- calibrationDataLength - Number of bytes in the buffer pointed by
- calibrationData
- calibrationData - Pointer to a buffer of length calibrationDataLength
- containing the calibration data
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- u16 calibrationDataLength;
- u8 *calibrationData;
-} CsrWifiSmeCalibrationDataGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCalibrationDataSetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeCalibrationDataSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCcxConfigGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- ccxConfig - Currently not supported
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSmeCcxConfig ccxConfig;
-} CsrWifiSmeCcxConfigGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCcxConfigSetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiSmeCcxConfigSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexConfigGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- coexConfig - Reports the parameters used to configure the coexistence
- behaviour
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- CsrWifiSmeCoexConfig coexConfig;
-} CsrWifiSmeCoexConfigGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexConfigSetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeCoexConfigSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoexInfoGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- coexInfo - Reports information and state related to coexistence.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- CsrWifiSmeCoexInfo coexInfo;
-} CsrWifiSmeCoexInfoGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectCfm
-
- DESCRIPTION
- The SME calls this primitive when the connection exchange is complete or
- all connection attempts fail.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request.
- CSR_WIFI_SME_STATUS_NOT_FOUND: all attempts by the SME to
- locate the requested AP failed
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiSmeConnectCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionConfigGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- connectionConfig - Parameters used by the SME for selecting a network
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSmeConnectionConfig connectionConfig;
-} CsrWifiSmeConnectionConfigGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionInfoGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- connectionInfo - Information about the current connection
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSmeConnectionInfo connectionInfo;
-} CsrWifiSmeConnectionInfoGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionQualityInd
-
- DESCRIPTION
- The SME sends this primitive to all the tasks that have registered to
- receive it whenever the value of the current connection quality
- parameters change by more than a certain configurable amount.
- The wireless manager application may configure the trigger thresholds for
- this indication using the field in smeConfig parameter of
- CSR_WIFI_SME_SME_CONFIG_SET_REQ.
- Connection quality messages can be suppressed by setting both thresholds
- to zero.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- linkQuality - Indicates the quality of the link
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeLinkQuality linkQuality;
-} CsrWifiSmeConnectionQualityInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeConnectionStatsGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- connectionStats - Statistics for current connection.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSmeConnectionStats connectionStats;
-} CsrWifiSmeConnectionStatsGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeDeactivateCfm
-
- DESCRIPTION
- The SME sends this primitive when the deactivation is complete.
- The WMA cannot send any more primitives until it actives the SME again
- sending another CSR_WIFI_SME_ACTIVATE_REQ.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeDeactivateCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeDisconnectCfm
-
- DESCRIPTION
- On reception of CSR_WIFI_SME_DISCONNECT_REQ the SME will perform a
- disconnect operation, sending a CsrWifiSmeMediaStatusInd with
- CSR_WIFI_SME_MEDIA_STATUS_DISCONNECTED and then call this primitive when
- disconnection is complete.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiSmeDisconnectCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeEventMaskSetCfm
-
- DESCRIPTION
- The SME calls the primitive to report the result of the request
- primitive.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeEventMaskSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeHostConfigGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- hostConfig - Current host power state.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSmeHostConfig hostConfig;
-} CsrWifiSmeHostConfigGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeHostConfigSetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiSmeHostConfigSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeIbssStationInd
-
- DESCRIPTION
- The SME will send this primitive to indicate that a station has joined or
- left the ad-hoc network.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- address - MAC address of the station that has joined or left
- isconnected - TRUE if the station joined, FALSE if the station left
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiMacAddress address;
- u8 isconnected;
-} CsrWifiSmeIbssStationInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeKeyCfm
-
- DESCRIPTION
- The SME calls the primitive to report the result of the request
- primitive.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- action - Action in the request
- keyType - Type of the key added/deleted
- peerMacAddress - Peer MAC Address of the key added/deleted
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSmeListAction action;
- CsrWifiSmeKeyType keyType;
- CsrWifiMacAddress peerMacAddress;
-} CsrWifiSmeKeyCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeLinkQualityGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- linkQuality - Indicates the quality of the link
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSmeLinkQuality linkQuality;
-} CsrWifiSmeLinkQualityGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMediaStatusInd
-
- DESCRIPTION
- The SME sends this primitive to all the tasks that have registered to
- receive it when a network connection is established, lost or has moved to
- another AP.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- mediaStatus - Indicates the media status
- connectionInfo - This parameter is relevant only if the mediaStatus is
- CSR_WIFI_SME_MEDIA_STATUS_CONNECTED:
- it points to the connection information for the new network
- disassocReason - This parameter is relevant only if the mediaStatus is
- CSR_WIFI_SME_MEDIA_STATUS_DISCONNECTED:
- if a disassociation has occurred it gives the reason of the
- disassociation
- deauthReason - This parameter is relevant only if the mediaStatus is
- CSR_WIFI_SME_MEDIA_STATUS_DISCONNECTED:
- if a deauthentication has occurred it gives the reason of
- the deauthentication
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeMediaStatus mediaStatus;
- CsrWifiSmeConnectionInfo connectionInfo;
- CsrWifiSmeIEEE80211Reason disassocReason;
- CsrWifiSmeIEEE80211Reason deauthReason;
-} CsrWifiSmeMediaStatusInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibConfigGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- mibConfig - Reports various IEEE 802.11 attributes as currently configured
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- CsrWifiSmeMibConfig mibConfig;
-} CsrWifiSmeMibConfigGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibConfigSetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeMibConfigSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibGetCfm
-
- DESCRIPTION
- The SME calls this primitive to return the requested MIB variable values.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- mibAttributeLength - Length of mibAttribute
- mibAttribute - Points to the VarBind or VarBindList containing the
- names and values of the MIB variables requested
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- u16 mibAttributeLength;
- u8 *mibAttribute;
-} CsrWifiSmeMibGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibGetNextCfm
-
- DESCRIPTION
- The SME calls this primitive to return the requested MIB name(s).
- The wireless manager application can then read the value of the MIB
- variable using CSR_WIFI_SME_MIB_GET_REQ, using the names provided.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- mibAttributeLength - Length of mibAttribute
- mibAttribute - Points to a VarBind or VarBindList containing the
- name(s) of the MIB variable(s) lexicographically
- following the name(s) given in the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- u16 mibAttributeLength;
- u8 *mibAttribute;
-} CsrWifiSmeMibGetNextCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMibSetCfm
-
- DESCRIPTION
- The SME calls the primitive to report the result of the set primitive.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeMibSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMicFailureInd
-
- DESCRIPTION
- The SME sends this primitive to all the tasks that have registered to
- receive it whenever the chip firmware reports a MIC failure.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- secondFailure - TRUE if this indication is for a second failure in 60
- seconds
- count - The number of MIC failure events since the connection was
- established
- address - MAC address of the transmitter that caused the MIC failure
- keyType - Type of key for which the failure occurred
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u8 secondFailure;
- u16 count;
- CsrWifiMacAddress address;
- CsrWifiSmeKeyType keyType;
-} CsrWifiSmeMicFailureInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeMulticastAddressCfm
-
- DESCRIPTION
- The SME will call this primitive when the operation is complete. For a
- GET action, this primitive reports the current list of MAC addresses.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- action - Action in the request
- getAddressesCount - This parameter is only relevant if action is
- CSR_WIFI_SME_LIST_ACTION_GET:
- number of MAC addresses sent with the primitive
- getAddresses - Pointer to the list of MAC Addresses sent with the
- primitive, set to NULL if none is sent.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSmeListAction action;
- u8 getAddressesCount;
- CsrWifiMacAddress *getAddresses;
-} CsrWifiSmeMulticastAddressCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePacketFilterSetCfm
-
- DESCRIPTION
- The SME calls the primitive to report the result of the set primitive.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiSmePacketFilterSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePermanentMacAddressGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- permanentMacAddress - MAC address stored in the EEPROM
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- CsrWifiMacAddress permanentMacAddress;
-} CsrWifiSmePermanentMacAddressGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePmkidCandidateListInd
-
- DESCRIPTION
- The SME will send this primitive to all the tasks that have registered to
- receive it when a new network supporting preauthentication and/or PMK
- caching is seen.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an
- interface
- pmkidCandidatesCount - Number of PMKID candidates provided
- pmkidCandidates - Points to the first PMKID candidate
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u8 pmkidCandidatesCount;
- CsrWifiSmePmkidCandidate *pmkidCandidates;
-} CsrWifiSmePmkidCandidateListInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePmkidCfm
-
- DESCRIPTION
- The SME will call this primitive when the operation is complete. For a
- GET action, this primitive reports the current list of PMKIDs
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- action - Action in the request
- getPmkidsCount - This parameter is only relevant if action is
- CSR_WIFI_SME_LIST_ACTION_GET:
- number of PMKIDs sent with the primitive
- getPmkids - Pointer to the list of PMKIDs sent with the primitive, set
- to NULL if none is sent.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSmeListAction action;
- u8 getPmkidsCount;
- CsrWifiSmePmkid *getPmkids;
-} CsrWifiSmePmkidCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePowerConfigGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- powerConfig - Returns the current parameters for the power configuration of
- the firmware
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- CsrWifiSmePowerConfig powerConfig;
-} CsrWifiSmePowerConfigGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmePowerConfigSetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmePowerConfigSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRegulatoryDomainInfoGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- regDomInfo - Reports information and state related to regulatory domain
- operation.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- CsrWifiSmeRegulatoryDomainInfo regDomInfo;
-} CsrWifiSmeRegulatoryDomainInfoGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamCompleteInd
-
- DESCRIPTION
- The SME will send this primitive to all the tasks that have registered to
- receive it whenever it completes an attempt to roam to an AP. If the roam
- attempt was successful, status will be set to CSR_WIFI_SME_SUCCESS,
- otherwise it shall be set to the appropriate error code.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the roaming procedure
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiSmeRoamCompleteInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamStartInd
-
- DESCRIPTION
- The SME will send this primitive to all the tasks that have registered to
- receive it whenever it begins an attempt to roam to an AP.
- If the wireless manager application connect request specified the SSID
- and the BSSID was set to the broadcast address (0xFF 0xFF 0xFF 0xFF 0xFF
- 0xFF), the SME monitors the signal quality and maintains a list of
- candidates to roam to. When the signal quality of the current connection
- falls below a threshold, and there is a candidate with better quality,
- the SME will attempt to the candidate AP.
- If the roaming procedure succeeds, the SME will also issue a Media
- Connect indication to inform the wireless manager application of the
- change.
- NOTE: to prevent the SME from initiating roaming the WMA must specify the
- BSSID in the connection request; this forces the SME to connect only to
- that AP.
- The wireless manager application can obtain statistics for roaming
- purposes using CSR_WIFI_SME_CONNECTION_QUALITY_IND and
- CSR_WIFI_SME_CONNECTION_STATS_GET_REQ.
- When the wireless manager application wishes to roam to another AP, it
- must issue a connection request specifying the BSSID of the desired AP.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- roamReason - Indicates the reason for starting the roaming procedure
- reason80211 - Indicates the reason for deauthentication or disassociation
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeRoamReason roamReason;
- CsrWifiSmeIEEE80211Reason reason80211;
-} CsrWifiSmeRoamStartInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamingConfigGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- roamingConfig - Reports the roaming behaviour of the driver and firmware
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSmeRoamingConfig roamingConfig;
-} CsrWifiSmeRoamingConfigGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeRoamingConfigSetCfm
-
- DESCRIPTION
- This primitive sets the value of the RoamingConfig parameter.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiSmeRoamingConfigSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanConfigGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- scanConfig - Returns the current parameters for the autonomous scanning
- behaviour of the firmware
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- CsrWifiSmeScanConfig scanConfig;
-} CsrWifiSmeScanConfigGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanConfigSetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeScanConfigSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanFullCfm
-
- DESCRIPTION
- The SME calls this primitive when the results from the scan are
- available.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeScanFullCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanResultInd
-
- DESCRIPTION
- The SME sends this primitive to all the tasks that have registered to
- receive it whenever a scan indication is received from the firmware.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- result - Points to a buffer containing a scan result.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiSmeScanResult result;
-} CsrWifiSmeScanResultInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanResultsFlushCfm
-
- DESCRIPTION
- The SME will call this primitive when the cache has been cleared.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeScanResultsFlushCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeScanResultsGetCfm
-
- DESCRIPTION
- The SME sends this primitive to provide the current set of scan results.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- scanResultsCount - Number of scan results
- scanResults - Points to a buffer containing an array of
- CsrWifiSmeScanResult structures.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- u16 scanResultsCount;
- CsrWifiSmeScanResult *scanResults;
-} CsrWifiSmeScanResultsGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeStaConfigGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- smeConfig - Current SME Station Parameters
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- CsrWifiSmeStaConfig smeConfig;
-} CsrWifiSmeSmeStaConfigGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeStaConfigSetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
-} CsrWifiSmeSmeStaConfigSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeStationMacAddressGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- stationMacAddress - Current MAC address of the station.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- CsrWifiMacAddress stationMacAddress[2];
-} CsrWifiSmeStationMacAddressGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeTspecInd
-
- DESCRIPTION
- The SME will send this primitive to all the task that have registered to
- receive it when a status change in the TSPEC occurs.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- transactionId - Unique Transaction ID for the TSPEC, as assigned by the
- driver
- tspecResultCode - Specifies the TSPEC operation requested by the peer
- station
- tspecLength - Length of the TSPEC.
- tspec - Points to the first byte of the TSPEC
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- u32 transactionId;
- CsrWifiSmeTspecResultCode tspecResultCode;
- u16 tspecLength;
- u8 *tspec;
-} CsrWifiSmeTspecInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeTspecCfm
-
- DESCRIPTION
- The SME calls the primitive to report the result of the TSpec primitive
- request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface Identifier; unique identifier of an interface
- status - Reports the result of the request
- transactionId - Unique Transaction ID for the TSPEC, as assigned by the
- driver
- tspecResultCode - Specifies the result of the negotiated TSPEC operation
- tspecLength - Length of the TSPEC.
- tspec - Points to the first byte of the TSPEC
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrResult status;
- u32 transactionId;
- CsrWifiSmeTspecResultCode tspecResultCode;
- u16 tspecLength;
- u8 *tspec;
-} CsrWifiSmeTspecCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeVersionsGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- versions - Version IDs of the product
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- CsrWifiSmeVersions versions;
-} CsrWifiSmeVersionsGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiFlightmodeCfm
-
- DESCRIPTION
- The SME calls this primitive when the chip is initialised for low power
- mode and with the radio subsystem disabled. To leave flight mode, and
- enable Wi-Fi, the wireless manager application should call
- CSR_WIFI_SME_WIFI_ON_REQ.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeWifiFlightmodeCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiOffInd
-
- DESCRIPTION
- The SME sends this primitive to all the tasks that have registered to
- receive it to report that the chip has been turned off.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- reason - Indicates the reason why the Wi-Fi has been switched off.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiSmeControlIndication reason;
-} CsrWifiSmeWifiOffInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiOffCfm
-
- DESCRIPTION
- After receiving CSR_WIFI_SME_WIFI_OFF_REQ, if the chip is connected to a
- network, the SME will perform a disconnect operation, will send a
- CSR_WIFI_SME_MEDIA_STATUS_IND with
- CSR_WIFI_SME_MEDIA_STATUS_DISCONNECTED, and then will call
- CSR_WIFI_SME_WIFI_OFF_CFM when the chip is off.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeWifiOffCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiOnCfm
-
- DESCRIPTION
- The SME sends this primitive to the task that has sent the request once
- the chip has been initialised and is available for use.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeWifiOnCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCloakedSsidsSetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeCloakedSsidsSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCloakedSsidsGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- cloakedSsids - Reports list of cloaked SSIDs that are explicitly scanned for
- by the driver
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- CsrWifiSmeCloakedSsidConfig cloakedSsids;
-} CsrWifiSmeCloakedSsidsGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWifiOnInd
-
- DESCRIPTION
- The SME sends this primitive to all tasks that have registered to receive
- it once the chip becomes available and ready to use.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- address - Current MAC address
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrWifiMacAddress address;
-} CsrWifiSmeWifiOnInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeCommonConfigGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
- deviceConfig - Configuration options in the SME
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- CsrWifiSmeDeviceConfig deviceConfig;
-} CsrWifiSmeSmeCommonConfigGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeSmeCommonConfigSetCfm
-
- DESCRIPTION
- Reports the result of the request
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Reports the result of the request
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeSmeCommonConfigSetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeInterfaceCapabilityGetCfm
-
- DESCRIPTION
- This primitive reports the result of the request.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Result of the request
- numInterfaces - Number of the interfaces supported
- capBitmap - Points to the list of capabilities bitmaps provided for each
- interface.
- The bits represent the following capabilities:
- -bits 7 to 4-Reserved
- -bit 3-AMP
- -bit 2-P2P
- -bit 1-AP
- -bit 0-STA
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
- u16 numInterfaces;
- u8 capBitmap[2];
-} CsrWifiSmeInterfaceCapabilityGetCfm;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeErrorInd
-
- DESCRIPTION
- Important error message indicating a error of some importance
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- errorMessage - Contains the error message.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- char *errorMessage;
-} CsrWifiSmeErrorInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeInfoInd
-
- DESCRIPTION
- Message indicating a some info about current activity. Mostly of interest
- in testing but may be useful in the field.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- infoMessage - Contains the message.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- char *infoMessage;
-} CsrWifiSmeInfoInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeCoreDumpInd
-
- DESCRIPTION
- The SME will send this primitive to all the tasks that have registered to
- receive Wi-Fi Chip core dump data.
- The core dump data may be fragmented and sent using more than one
- indication.
- To indicate that all the data has been sent, the last indication contains
- a 'length' of 0 and 'data' of NULL.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- dataLength - Number of bytes in the buffer pointed to by 'data'
- data - Pointer to the buffer containing 'dataLength' bytes of core
- dump data
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u32 dataLength;
- u8 *data;
-} CsrWifiSmeCoreDumpInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeAmpStatusChangeInd
-
- DESCRIPTION
- Indication of change to AMP activity.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- interfaceTag - Interface on which the AMP activity changed.
- ampStatus - The new status of AMP activity.Range: {AMP_ACTIVE,
- AMP_INACTIVE}.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- u16 interfaceTag;
- CsrWifiSmeAmpStatus ampStatus;
-} CsrWifiSmeAmpStatusChangeInd;
-
-/*******************************************************************************
-
- NAME
- CsrWifiSmeWpsConfigurationCfm
-
- DESCRIPTION
- Confirm.
-
- MEMBERS
- common - Common header for use with the CsrWifiFsm Module
- status - Status of the request.
-
-*******************************************************************************/
-typedef struct
-{
- CsrWifiFsmEvent common;
- CsrResult status;
-} CsrWifiSmeWpsConfigurationCfm;
-
-#endif /* CSR_WIFI_SME_PRIM_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_sme_sef.c b/drivers/staging/csr/csr_wifi_sme_sef.c
deleted file mode 100644
index cf32254335c4..000000000000
--- a/drivers/staging/csr/csr_wifi_sme_sef.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- Confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
- *****************************************************************************/
-#include "csr_wifi_sme_sef.h"
-
-const CsrWifiSmeStateHandlerType CsrWifiSmeUpstreamStateHandlers[CSR_WIFI_SME_PRIM_UPSTREAM_COUNT] =
-{
- /* 0x8000 */ CsrWifiSmeActivateCfmHandler,
- /* 0x8001 */ CsrWifiSmeAdhocConfigGetCfmHandler,
- /* 0x8002 */ CsrWifiSmeAdhocConfigSetCfmHandler,
- /* 0x8003 */ CsrWifiSmeAssociationCompleteIndHandler,
- /* 0x8004 */ CsrWifiSmeAssociationStartIndHandler,
- /* 0x8005 */ CsrWifiSmeBlacklistCfmHandler,
- /* 0x8006 */ CsrWifiSmeCalibrationDataGetCfmHandler,
- /* 0x8007 */ CsrWifiSmeCalibrationDataSetCfmHandler,
- /* 0x8008 */ CsrWifiSmeCcxConfigGetCfmHandler,
- /* 0x8009 */ CsrWifiSmeCcxConfigSetCfmHandler,
- /* 0x800A */ CsrWifiSmeCoexConfigGetCfmHandler,
- /* 0x800B */ CsrWifiSmeCoexConfigSetCfmHandler,
- /* 0x800C */ CsrWifiSmeCoexInfoGetCfmHandler,
- /* 0x800D */ CsrWifiSmeConnectCfmHandler,
- /* 0x800E */ CsrWifiSmeConnectionConfigGetCfmHandler,
- /* 0x800F */ CsrWifiSmeConnectionInfoGetCfmHandler,
- /* 0x8010 */ CsrWifiSmeConnectionQualityIndHandler,
- /* 0x8011 */ CsrWifiSmeConnectionStatsGetCfmHandler,
- /* 0x8012 */ CsrWifiSmeDeactivateCfmHandler,
- /* 0x8013 */ CsrWifiSmeDisconnectCfmHandler,
- /* 0x8014 */ CsrWifiSmeEventMaskSetCfmHandler,
- /* 0x8015 */ CsrWifiSmeHostConfigGetCfmHandler,
- /* 0x8016 */ CsrWifiSmeHostConfigSetCfmHandler,
- /* 0x8017 */ CsrWifiSmeIbssStationIndHandler,
- /* 0x8018 */ CsrWifiSmeKeyCfmHandler,
- /* 0x8019 */ CsrWifiSmeLinkQualityGetCfmHandler,
- /* 0x801A */ CsrWifiSmeMediaStatusIndHandler,
- /* 0x801B */ CsrWifiSmeMibConfigGetCfmHandler,
- /* 0x801C */ CsrWifiSmeMibConfigSetCfmHandler,
- /* 0x801D */ CsrWifiSmeMibGetCfmHandler,
- /* 0x801E */ CsrWifiSmeMibGetNextCfmHandler,
- /* 0x801F */ CsrWifiSmeMibSetCfmHandler,
- /* 0x8020 */ CsrWifiSmeMicFailureIndHandler,
- /* 0x8021 */ CsrWifiSmeMulticastAddressCfmHandler,
- /* 0x8022 */ CsrWifiSmePacketFilterSetCfmHandler,
- /* 0x8023 */ CsrWifiSmePermanentMacAddressGetCfmHandler,
- /* 0x8024 */ CsrWifiSmePmkidCandidateListIndHandler,
- /* 0x8025 */ CsrWifiSmePmkidCfmHandler,
- /* 0x8026 */ CsrWifiSmePowerConfigGetCfmHandler,
- /* 0x8027 */ CsrWifiSmePowerConfigSetCfmHandler,
- /* 0x8028 */ CsrWifiSmeRegulatoryDomainInfoGetCfmHandler,
- /* 0x8029 */ CsrWifiSmeRoamCompleteIndHandler,
- /* 0x802A */ CsrWifiSmeRoamStartIndHandler,
- /* 0x802B */ CsrWifiSmeRoamingConfigGetCfmHandler,
- /* 0x802C */ CsrWifiSmeRoamingConfigSetCfmHandler,
- /* 0x802D */ CsrWifiSmeScanConfigGetCfmHandler,
- /* 0x802E */ CsrWifiSmeScanConfigSetCfmHandler,
- /* 0x802F */ CsrWifiSmeScanFullCfmHandler,
- /* 0x8030 */ CsrWifiSmeScanResultIndHandler,
- /* 0x8031 */ CsrWifiSmeScanResultsFlushCfmHandler,
- /* 0x8032 */ CsrWifiSmeScanResultsGetCfmHandler,
- /* 0x8033 */ CsrWifiSmeSmeStaConfigGetCfmHandler,
- /* 0x8034 */ CsrWifiSmeSmeStaConfigSetCfmHandler,
- /* 0x8035 */ CsrWifiSmeStationMacAddressGetCfmHandler,
- /* 0x8036 */ CsrWifiSmeTspecIndHandler,
- /* 0x8037 */ CsrWifiSmeTspecCfmHandler,
- /* 0x8038 */ CsrWifiSmeVersionsGetCfmHandler,
- /* 0x8039 */ CsrWifiSmeWifiFlightmodeCfmHandler,
- /* 0x803A */ CsrWifiSmeWifiOffIndHandler,
- /* 0x803B */ CsrWifiSmeWifiOffCfmHandler,
- /* 0x803C */ CsrWifiSmeWifiOnCfmHandler,
- /* 0x803D */ CsrWifiSmeCloakedSsidsSetCfmHandler,
- /* 0x803E */ CsrWifiSmeCloakedSsidsGetCfmHandler,
- /* 0x803F */ CsrWifiSmeWifiOnIndHandler,
- /* 0x8040 */ CsrWifiSmeSmeCommonConfigGetCfmHandler,
- /* 0x8041 */ CsrWifiSmeSmeCommonConfigSetCfmHandler,
- /* 0x8042 */ CsrWifiSmeGetInterfaceCapabilityCfmHandler,
- /* 0x8043 */ CsrWifiSmeErrorIndHandler,
- /* 0x8044 */ CsrWifiSmeInfoIndHandler,
- /* 0x8045 */ CsrWifiSmeCoreDumpIndHandler,
- /* 0x8046 */ CsrWifiSmeAmpStatusChangeIndHandler,
-};
diff --git a/drivers/staging/csr/csr_wifi_sme_sef.h b/drivers/staging/csr/csr_wifi_sme_sef.h
deleted file mode 100644
index 78b88c067236..000000000000
--- a/drivers/staging/csr/csr_wifi_sme_sef.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2010
- Confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-#ifndef CSR_WIFI_ROUTER_SEF_CSR_WIFI_SME_H__
-#define CSR_WIFI_ROUTER_SEF_CSR_WIFI_SME_H__
-
-#include "csr_wifi_sme_prim.h"
-
-typedef void (*CsrWifiSmeStateHandlerType)(void *drvpriv, CsrWifiFsmEvent *msg);
-
-extern const CsrWifiSmeStateHandlerType
- CsrWifiSmeUpstreamStateHandlers[CSR_WIFI_SME_PRIM_UPSTREAM_COUNT];
-
-
-extern void CsrWifiSmeActivateCfmHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeAdhocConfigGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeAdhocConfigSetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeAssociationCompleteIndHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeAssociationStartIndHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeBlacklistCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeCalibrationDataGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeCalibrationDataSetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeCcxConfigGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeCcxConfigSetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeCoexConfigGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeCoexConfigSetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeCoexInfoGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeConnectCfmHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeConnectionConfigGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeConnectionInfoGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeConnectionQualityIndHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeConnectionStatsGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeDeactivateCfmHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeDisconnectCfmHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeEventMaskSetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeHostConfigGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeHostConfigSetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeIbssStationIndHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeKeyCfmHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeLinkQualityGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeMediaStatusIndHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeMibConfigGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeMibConfigSetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeMibGetCfmHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeMibGetNextCfmHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeMibSetCfmHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeMicFailureIndHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeMulticastAddressCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmePacketFilterSetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmePermanentMacAddressGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmePmkidCandidateListIndHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmePmkidCfmHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmePowerConfigGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmePowerConfigSetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeRegulatoryDomainInfoGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeRoamCompleteIndHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeRoamStartIndHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeRoamingConfigGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeRoamingConfigSetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeScanConfigGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeScanConfigSetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeScanFullCfmHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeScanResultIndHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeScanResultsFlushCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeScanResultsGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeSmeStaConfigGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeSmeStaConfigSetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeStationMacAddressGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeTspecIndHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeTspecCfmHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeVersionsGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeWifiFlightmodeCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeWifiOffIndHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeWifiOffCfmHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeWifiOnCfmHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeCloakedSsidsSetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeCloakedSsidsGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeWifiOnIndHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeSmeCommonConfigGetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeSmeCommonConfigSetCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeGetInterfaceCapabilityCfmHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeErrorIndHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeInfoIndHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeCoreDumpIndHandler(void *drvpriv, CsrWifiFsmEvent *msg);
-extern void CsrWifiSmeAmpStatusChangeIndHandler(void *drvpriv,
- CsrWifiFsmEvent *msg);
-
-#endif /* CSR_WIFI_ROUTER_SEF_CSR_WIFI_SME_H__ */
diff --git a/drivers/staging/csr/csr_wifi_sme_serialize.c b/drivers/staging/csr/csr_wifi_sme_serialize.c
deleted file mode 100644
index 7d7e1d8b5ed3..000000000000
--- a/drivers/staging/csr/csr_wifi_sme_serialize.c
+++ /dev/null
@@ -1,5809 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-#include <linux/string.h>
-#include <linux/slab.h>
-#include "csr_msgconv.h"
-#include "csr_wifi_sme_prim.h"
-#include "csr_wifi_sme_serialize.h"
-
-void CsrWifiSmePfree(void *ptr)
-{
- kfree(ptr);
-}
-
-
-size_t CsrWifiSmeAdhocConfigSetReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 11) */
- bufferSize += 2; /* u16 primitive->adHocConfig.atimWindowTu */
- bufferSize += 2; /* u16 primitive->adHocConfig.beaconPeriodTu */
- bufferSize += 2; /* u16 primitive->adHocConfig.joinOnlyAttempts */
- bufferSize += 2; /* u16 primitive->adHocConfig.joinAttemptIntervalMs */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeAdhocConfigSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeAdhocConfigSetReq *primitive = (CsrWifiSmeAdhocConfigSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->adHocConfig.atimWindowTu);
- CsrUint16Ser(ptr, len, (u16) primitive->adHocConfig.beaconPeriodTu);
- CsrUint16Ser(ptr, len, (u16) primitive->adHocConfig.joinOnlyAttempts);
- CsrUint16Ser(ptr, len, (u16) primitive->adHocConfig.joinAttemptIntervalMs);
- return(ptr);
-}
-
-
-void* CsrWifiSmeAdhocConfigSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeAdhocConfigSetReq *primitive = kmalloc(sizeof(CsrWifiSmeAdhocConfigSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->adHocConfig.atimWindowTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->adHocConfig.beaconPeriodTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->adHocConfig.joinOnlyAttempts, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->adHocConfig.joinAttemptIntervalMs, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeBlacklistReqSizeof(void *msg)
-{
- CsrWifiSmeBlacklistReq *primitive = (CsrWifiSmeBlacklistReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiSmeListAction primitive->action */
- bufferSize += 1; /* u8 primitive->setAddressCount */
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->setAddressCount; i1++)
- {
- bufferSize += 6; /* u8 primitive->setAddresses[i1].a[6] */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeBlacklistReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeBlacklistReq *primitive = (CsrWifiSmeBlacklistReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->action);
- CsrUint8Ser(ptr, len, (u8) primitive->setAddressCount);
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->setAddressCount; i1++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->setAddresses[i1].a, ((u16) (6)));
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeBlacklistReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeBlacklistReq *primitive = kmalloc(sizeof(CsrWifiSmeBlacklistReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->action, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->setAddressCount, buffer, &offset);
- primitive->setAddresses = NULL;
- if (primitive->setAddressCount)
- {
- primitive->setAddresses = kmalloc(sizeof(CsrWifiMacAddress) * primitive->setAddressCount, GFP_KERNEL);
- }
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->setAddressCount; i1++)
- {
- CsrMemCpyDes(primitive->setAddresses[i1].a, buffer, &offset, ((u16) (6)));
- }
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeBlacklistReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeBlacklistReq *primitive = (CsrWifiSmeBlacklistReq *) voidPrimitivePointer;
- kfree(primitive->setAddresses);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeCalibrationDataSetReqSizeof(void *msg)
-{
- CsrWifiSmeCalibrationDataSetReq *primitive = (CsrWifiSmeCalibrationDataSetReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 6) */
- bufferSize += 2; /* u16 primitive->calibrationDataLength */
- bufferSize += primitive->calibrationDataLength; /* u8 primitive->calibrationData */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeCalibrationDataSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeCalibrationDataSetReq *primitive = (CsrWifiSmeCalibrationDataSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->calibrationDataLength);
- if (primitive->calibrationDataLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->calibrationData, ((u16) (primitive->calibrationDataLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeCalibrationDataSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeCalibrationDataSetReq *primitive = kmalloc(sizeof(CsrWifiSmeCalibrationDataSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->calibrationDataLength, buffer, &offset);
- if (primitive->calibrationDataLength)
- {
- primitive->calibrationData = kmalloc(primitive->calibrationDataLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->calibrationData, buffer, &offset, ((u16) (primitive->calibrationDataLength)));
- }
- else
- {
- primitive->calibrationData = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeCalibrationDataSetReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeCalibrationDataSetReq *primitive = (CsrWifiSmeCalibrationDataSetReq *) voidPrimitivePointer;
- kfree(primitive->calibrationData);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeCcxConfigSetReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 9) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* u8 primitive->ccxConfig.keepAliveTimeMs */
- bufferSize += 1; /* u8 primitive->ccxConfig.apRoamingEnabled */
- bufferSize += 1; /* u8 primitive->ccxConfig.measurementsMask */
- bufferSize += 1; /* u8 primitive->ccxConfig.ccxRadioMgtEnabled */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeCcxConfigSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeCcxConfigSetReq *primitive = (CsrWifiSmeCcxConfigSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->ccxConfig.keepAliveTimeMs);
- CsrUint8Ser(ptr, len, (u8) primitive->ccxConfig.apRoamingEnabled);
- CsrUint8Ser(ptr, len, (u8) primitive->ccxConfig.measurementsMask);
- CsrUint8Ser(ptr, len, (u8) primitive->ccxConfig.ccxRadioMgtEnabled);
- return(ptr);
-}
-
-
-void* CsrWifiSmeCcxConfigSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeCcxConfigSetReq *primitive = kmalloc(sizeof(CsrWifiSmeCcxConfigSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->ccxConfig.keepAliveTimeMs, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->ccxConfig.apRoamingEnabled, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->ccxConfig.measurementsMask, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->ccxConfig.ccxRadioMgtEnabled, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeCoexConfigSetReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 29) */
- bufferSize += 1; /* u8 primitive->coexConfig.coexEnableSchemeManagement */
- bufferSize += 1; /* u8 primitive->coexConfig.coexPeriodicWakeHost */
- bufferSize += 2; /* u16 primitive->coexConfig.coexTrafficBurstyLatencyMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexTrafficContinuousLatencyMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexObexBlackoutDurationMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexObexBlackoutPeriodMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexA2dpBrBlackoutDurationMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexA2dpBrBlackoutPeriodMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexA2dpEdrBlackoutDurationMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexA2dpEdrBlackoutPeriodMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexPagingBlackoutDurationMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexPagingBlackoutPeriodMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexInquiryBlackoutDurationMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexInquiryBlackoutPeriodMs */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeCoexConfigSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeCoexConfigSetReq *primitive = (CsrWifiSmeCoexConfigSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint8Ser(ptr, len, (u8) primitive->coexConfig.coexEnableSchemeManagement);
- CsrUint8Ser(ptr, len, (u8) primitive->coexConfig.coexPeriodicWakeHost);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexTrafficBurstyLatencyMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexTrafficContinuousLatencyMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexObexBlackoutDurationMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexObexBlackoutPeriodMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexA2dpBrBlackoutDurationMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexA2dpBrBlackoutPeriodMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexA2dpEdrBlackoutDurationMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexA2dpEdrBlackoutPeriodMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexPagingBlackoutDurationMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexPagingBlackoutPeriodMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexInquiryBlackoutDurationMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexInquiryBlackoutPeriodMs);
- return(ptr);
-}
-
-
-void* CsrWifiSmeCoexConfigSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeCoexConfigSetReq *primitive = kmalloc(sizeof(CsrWifiSmeCoexConfigSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->coexConfig.coexEnableSchemeManagement, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->coexConfig.coexPeriodicWakeHost, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexTrafficBurstyLatencyMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexTrafficContinuousLatencyMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexObexBlackoutDurationMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexObexBlackoutPeriodMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexA2dpBrBlackoutDurationMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexA2dpBrBlackoutPeriodMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexA2dpEdrBlackoutDurationMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexA2dpEdrBlackoutPeriodMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexPagingBlackoutDurationMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexPagingBlackoutPeriodMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexInquiryBlackoutDurationMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexInquiryBlackoutPeriodMs, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeConnectReqSizeof(void *msg)
-{
- CsrWifiSmeConnectReq *primitive = (CsrWifiSmeConnectReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 57) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 32; /* u8 primitive->connectionConfig.ssid.ssid[32] */
- bufferSize += 1; /* u8 primitive->connectionConfig.ssid.length */
- bufferSize += 6; /* u8 primitive->connectionConfig.bssid.a[6] */
- bufferSize += 1; /* CsrWifiSmeBssType primitive->connectionConfig.bssType */
- bufferSize += 1; /* CsrWifiSmeRadioIF primitive->connectionConfig.ifIndex */
- bufferSize += 1; /* CsrWifiSme80211PrivacyMode primitive->connectionConfig.privacyMode */
- bufferSize += 2; /* CsrWifiSmeAuthModeMask primitive->connectionConfig.authModeMask */
- bufferSize += 2; /* CsrWifiSmeEncryptionMask primitive->connectionConfig.encryptionModeMask */
- bufferSize += 2; /* u16 primitive->connectionConfig.mlmeAssociateReqInformationElementsLength */
- bufferSize += primitive->connectionConfig.mlmeAssociateReqInformationElementsLength; /* u8 primitive->connectionConfig.mlmeAssociateReqInformationElements */
- bufferSize += 1; /* CsrWifiSmeWmmQosInfoMask primitive->connectionConfig.wmmQosInfo */
- bufferSize += 1; /* u8 primitive->connectionConfig.adhocJoinOnly */
- bufferSize += 1; /* u8 primitive->connectionConfig.adhocChannel */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeConnectReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeConnectReq *primitive = (CsrWifiSmeConnectReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionConfig.ssid.ssid, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->connectionConfig.ssid.length);
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionConfig.bssid.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->connectionConfig.bssType);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionConfig.ifIndex);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionConfig.privacyMode);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionConfig.authModeMask);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionConfig.encryptionModeMask);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionConfig.mlmeAssociateReqInformationElementsLength);
- if (primitive->connectionConfig.mlmeAssociateReqInformationElementsLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionConfig.mlmeAssociateReqInformationElements, ((u16) (primitive->connectionConfig.mlmeAssociateReqInformationElementsLength)));
- }
- CsrUint8Ser(ptr, len, (u8) primitive->connectionConfig.wmmQosInfo);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionConfig.adhocJoinOnly);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionConfig.adhocChannel);
- return(ptr);
-}
-
-
-void* CsrWifiSmeConnectReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeConnectReq *primitive = kmalloc(sizeof(CsrWifiSmeConnectReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrMemCpyDes(primitive->connectionConfig.ssid.ssid, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->connectionConfig.ssid.length, buffer, &offset);
- CsrMemCpyDes(primitive->connectionConfig.bssid.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->connectionConfig.bssType, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionConfig.ifIndex, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionConfig.privacyMode, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionConfig.authModeMask, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionConfig.encryptionModeMask, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionConfig.mlmeAssociateReqInformationElementsLength, buffer, &offset);
- if (primitive->connectionConfig.mlmeAssociateReqInformationElementsLength)
- {
- primitive->connectionConfig.mlmeAssociateReqInformationElements = kmalloc(primitive->connectionConfig.mlmeAssociateReqInformationElementsLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionConfig.mlmeAssociateReqInformationElements, buffer, &offset, ((u16) (primitive->connectionConfig.mlmeAssociateReqInformationElementsLength)));
- }
- else
- {
- primitive->connectionConfig.mlmeAssociateReqInformationElements = NULL;
- }
- CsrUint8Des((u8 *) &primitive->connectionConfig.wmmQosInfo, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionConfig.adhocJoinOnly, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionConfig.adhocChannel, buffer, &offset);
-
- return primitive;
-}
-
-
-void CsrWifiSmeConnectReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeConnectReq *primitive = (CsrWifiSmeConnectReq *) voidPrimitivePointer;
- kfree(primitive->connectionConfig.mlmeAssociateReqInformationElements);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeHostConfigSetReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 8) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiSmeHostPowerMode primitive->hostConfig.powerMode */
- bufferSize += 2; /* u16 primitive->hostConfig.applicationDataPeriodMs */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeHostConfigSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeHostConfigSetReq *primitive = (CsrWifiSmeHostConfigSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->hostConfig.powerMode);
- CsrUint16Ser(ptr, len, (u16) primitive->hostConfig.applicationDataPeriodMs);
- return(ptr);
-}
-
-
-void* CsrWifiSmeHostConfigSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeHostConfigSetReq *primitive = kmalloc(sizeof(CsrWifiSmeHostConfigSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->hostConfig.powerMode, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->hostConfig.applicationDataPeriodMs, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeKeyReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 65) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiSmeListAction primitive->action */
- bufferSize += 1; /* CsrWifiSmeKeyType primitive->key.keyType */
- bufferSize += 1; /* u8 primitive->key.keyIndex */
- bufferSize += 1; /* u8 primitive->key.wepTxKey */
- {
- u16 i2;
- for (i2 = 0; i2 < 8; i2++)
- {
- bufferSize += 2; /* u16 primitive->key.keyRsc[8] */
- }
- }
- bufferSize += 1; /* u8 primitive->key.authenticator */
- bufferSize += 6; /* u8 primitive->key.address.a[6] */
- bufferSize += 1; /* u8 primitive->key.keyLength */
- bufferSize += 32; /* u8 primitive->key.key[32] */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeKeyReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeKeyReq *primitive = (CsrWifiSmeKeyReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->action);
- CsrUint8Ser(ptr, len, (u8) primitive->key.keyType);
- CsrUint8Ser(ptr, len, (u8) primitive->key.keyIndex);
- CsrUint8Ser(ptr, len, (u8) primitive->key.wepTxKey);
- {
- u16 i2;
- for (i2 = 0; i2 < 8; i2++)
- {
- CsrUint16Ser(ptr, len, (u16) primitive->key.keyRsc[i2]);
- }
- }
- CsrUint8Ser(ptr, len, (u8) primitive->key.authenticator);
- CsrMemCpySer(ptr, len, (const void *) primitive->key.address.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->key.keyLength);
- CsrMemCpySer(ptr, len, (const void *) primitive->key.key, ((u16) (32)));
- return(ptr);
-}
-
-
-void* CsrWifiSmeKeyReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeKeyReq *primitive = kmalloc(sizeof(CsrWifiSmeKeyReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->action, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->key.keyType, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->key.keyIndex, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->key.wepTxKey, buffer, &offset);
- {
- u16 i2;
- for (i2 = 0; i2 < 8; i2++)
- {
- CsrUint16Des((u16 *) &primitive->key.keyRsc[i2], buffer, &offset);
- }
- }
- CsrUint8Des((u8 *) &primitive->key.authenticator, buffer, &offset);
- CsrMemCpyDes(primitive->key.address.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->key.keyLength, buffer, &offset);
- CsrMemCpyDes(primitive->key.key, buffer, &offset, ((u16) (32)));
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeMibConfigSetReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 11) */
- bufferSize += 1; /* u8 primitive->mibConfig.unifiFixMaxTxDataRate */
- bufferSize += 1; /* u8 primitive->mibConfig.unifiFixTxDataRate */
- bufferSize += 2; /* u16 primitive->mibConfig.dot11RtsThreshold */
- bufferSize += 2; /* u16 primitive->mibConfig.dot11FragmentationThreshold */
- bufferSize += 2; /* u16 primitive->mibConfig.dot11CurrentTxPowerLevel */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeMibConfigSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeMibConfigSetReq *primitive = (CsrWifiSmeMibConfigSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint8Ser(ptr, len, (u8) primitive->mibConfig.unifiFixMaxTxDataRate);
- CsrUint8Ser(ptr, len, (u8) primitive->mibConfig.unifiFixTxDataRate);
- CsrUint16Ser(ptr, len, (u16) primitive->mibConfig.dot11RtsThreshold);
- CsrUint16Ser(ptr, len, (u16) primitive->mibConfig.dot11FragmentationThreshold);
- CsrUint16Ser(ptr, len, (u16) primitive->mibConfig.dot11CurrentTxPowerLevel);
- return(ptr);
-}
-
-
-void* CsrWifiSmeMibConfigSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeMibConfigSetReq *primitive = kmalloc(sizeof(CsrWifiSmeMibConfigSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->mibConfig.unifiFixMaxTxDataRate, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->mibConfig.unifiFixTxDataRate, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->mibConfig.dot11RtsThreshold, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->mibConfig.dot11FragmentationThreshold, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->mibConfig.dot11CurrentTxPowerLevel, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeMibGetNextReqSizeof(void *msg)
-{
- CsrWifiSmeMibGetNextReq *primitive = (CsrWifiSmeMibGetNextReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 6) */
- bufferSize += 2; /* u16 primitive->mibAttributeLength */
- bufferSize += primitive->mibAttributeLength; /* u8 primitive->mibAttribute */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeMibGetNextReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeMibGetNextReq *primitive = (CsrWifiSmeMibGetNextReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->mibAttributeLength);
- if (primitive->mibAttributeLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->mibAttribute, ((u16) (primitive->mibAttributeLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeMibGetNextReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeMibGetNextReq *primitive = kmalloc(sizeof(CsrWifiSmeMibGetNextReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->mibAttributeLength, buffer, &offset);
- if (primitive->mibAttributeLength)
- {
- primitive->mibAttribute = kmalloc(primitive->mibAttributeLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->mibAttribute, buffer, &offset, ((u16) (primitive->mibAttributeLength)));
- }
- else
- {
- primitive->mibAttribute = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeMibGetNextReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeMibGetNextReq *primitive = (CsrWifiSmeMibGetNextReq *) voidPrimitivePointer;
- kfree(primitive->mibAttribute);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeMibGetReqSizeof(void *msg)
-{
- CsrWifiSmeMibGetReq *primitive = (CsrWifiSmeMibGetReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 6) */
- bufferSize += 2; /* u16 primitive->mibAttributeLength */
- bufferSize += primitive->mibAttributeLength; /* u8 primitive->mibAttribute */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeMibGetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeMibGetReq *primitive = (CsrWifiSmeMibGetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->mibAttributeLength);
- if (primitive->mibAttributeLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->mibAttribute, ((u16) (primitive->mibAttributeLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeMibGetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeMibGetReq *primitive = kmalloc(sizeof(CsrWifiSmeMibGetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->mibAttributeLength, buffer, &offset);
- if (primitive->mibAttributeLength)
- {
- primitive->mibAttribute = kmalloc(primitive->mibAttributeLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->mibAttribute, buffer, &offset, ((u16) (primitive->mibAttributeLength)));
- }
- else
- {
- primitive->mibAttribute = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeMibGetReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeMibGetReq *primitive = (CsrWifiSmeMibGetReq *) voidPrimitivePointer;
- kfree(primitive->mibAttribute);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeMibSetReqSizeof(void *msg)
-{
- CsrWifiSmeMibSetReq *primitive = (CsrWifiSmeMibSetReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 6) */
- bufferSize += 2; /* u16 primitive->mibAttributeLength */
- bufferSize += primitive->mibAttributeLength; /* u8 primitive->mibAttribute */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeMibSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeMibSetReq *primitive = (CsrWifiSmeMibSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->mibAttributeLength);
- if (primitive->mibAttributeLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->mibAttribute, ((u16) (primitive->mibAttributeLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeMibSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeMibSetReq *primitive = kmalloc(sizeof(CsrWifiSmeMibSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->mibAttributeLength, buffer, &offset);
- if (primitive->mibAttributeLength)
- {
- primitive->mibAttribute = kmalloc(primitive->mibAttributeLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->mibAttribute, buffer, &offset, ((u16) (primitive->mibAttributeLength)));
- }
- else
- {
- primitive->mibAttribute = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeMibSetReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeMibSetReq *primitive = (CsrWifiSmeMibSetReq *) voidPrimitivePointer;
- kfree(primitive->mibAttribute);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeMulticastAddressReqSizeof(void *msg)
-{
- CsrWifiSmeMulticastAddressReq *primitive = (CsrWifiSmeMulticastAddressReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiSmeListAction primitive->action */
- bufferSize += 1; /* u8 primitive->setAddressesCount */
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->setAddressesCount; i1++)
- {
- bufferSize += 6; /* u8 primitive->setAddresses[i1].a[6] */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeMulticastAddressReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeMulticastAddressReq *primitive = (CsrWifiSmeMulticastAddressReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->action);
- CsrUint8Ser(ptr, len, (u8) primitive->setAddressesCount);
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->setAddressesCount; i1++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->setAddresses[i1].a, ((u16) (6)));
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeMulticastAddressReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeMulticastAddressReq *primitive = kmalloc(sizeof(CsrWifiSmeMulticastAddressReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->action, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->setAddressesCount, buffer, &offset);
- primitive->setAddresses = NULL;
- if (primitive->setAddressesCount)
- {
- primitive->setAddresses = kmalloc(sizeof(CsrWifiMacAddress) * primitive->setAddressesCount, GFP_KERNEL);
- }
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->setAddressesCount; i1++)
- {
- CsrMemCpyDes(primitive->setAddresses[i1].a, buffer, &offset, ((u16) (6)));
- }
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeMulticastAddressReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeMulticastAddressReq *primitive = (CsrWifiSmeMulticastAddressReq *) voidPrimitivePointer;
- kfree(primitive->setAddresses);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmePacketFilterSetReqSizeof(void *msg)
-{
- CsrWifiSmePacketFilterSetReq *primitive = (CsrWifiSmePacketFilterSetReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* u16 primitive->filterLength */
- bufferSize += primitive->filterLength; /* u8 primitive->filter */
- bufferSize += 1; /* CsrWifiSmePacketFilterMode primitive->mode */
- bufferSize += 4; /* u8 primitive->arpFilterAddress.a[4] */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmePacketFilterSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmePacketFilterSetReq *primitive = (CsrWifiSmePacketFilterSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->filterLength);
- if (primitive->filterLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->filter, ((u16) (primitive->filterLength)));
- }
- CsrUint8Ser(ptr, len, (u8) primitive->mode);
- CsrMemCpySer(ptr, len, (const void *) primitive->arpFilterAddress.a, ((u16) (4)));
- return(ptr);
-}
-
-
-void* CsrWifiSmePacketFilterSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmePacketFilterSetReq *primitive = kmalloc(sizeof(CsrWifiSmePacketFilterSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->filterLength, buffer, &offset);
- if (primitive->filterLength)
- {
- primitive->filter = kmalloc(primitive->filterLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->filter, buffer, &offset, ((u16) (primitive->filterLength)));
- }
- else
- {
- primitive->filter = NULL;
- }
- CsrUint8Des((u8 *) &primitive->mode, buffer, &offset);
- CsrMemCpyDes(primitive->arpFilterAddress.a, buffer, &offset, ((u16) (4)));
-
- return primitive;
-}
-
-
-void CsrWifiSmePacketFilterSetReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmePacketFilterSetReq *primitive = (CsrWifiSmePacketFilterSetReq *) voidPrimitivePointer;
- kfree(primitive->filter);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmePmkidReqSizeof(void *msg)
-{
- CsrWifiSmePmkidReq *primitive = (CsrWifiSmePmkidReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 29) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiSmeListAction primitive->action */
- bufferSize += 1; /* u8 primitive->setPmkidsCount */
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->setPmkidsCount; i1++)
- {
- bufferSize += 6; /* u8 primitive->setPmkids[i1].bssid.a[6] */
- bufferSize += 16; /* u8 primitive->setPmkids[i1].pmkid[16] */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmePmkidReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmePmkidReq *primitive = (CsrWifiSmePmkidReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->action);
- CsrUint8Ser(ptr, len, (u8) primitive->setPmkidsCount);
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->setPmkidsCount; i1++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->setPmkids[i1].bssid.a, ((u16) (6)));
- CsrMemCpySer(ptr, len, (const void *) primitive->setPmkids[i1].pmkid, ((u16) (16)));
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmePmkidReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmePmkidReq *primitive = kmalloc(sizeof(CsrWifiSmePmkidReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->action, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->setPmkidsCount, buffer, &offset);
- primitive->setPmkids = NULL;
- if (primitive->setPmkidsCount)
- {
- primitive->setPmkids = kmalloc(sizeof(CsrWifiSmePmkid) * primitive->setPmkidsCount, GFP_KERNEL);
- }
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->setPmkidsCount; i1++)
- {
- CsrMemCpyDes(primitive->setPmkids[i1].bssid.a, buffer, &offset, ((u16) (6)));
- CsrMemCpyDes(primitive->setPmkids[i1].pmkid, buffer, &offset, ((u16) (16)));
- }
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmePmkidReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmePmkidReq *primitive = (CsrWifiSmePmkidReq *) voidPrimitivePointer;
- kfree(primitive->setPmkids);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmePowerConfigSetReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 11) */
- bufferSize += 1; /* CsrWifiSmePowerSaveLevel primitive->powerConfig.powerSaveLevel */
- bufferSize += 2; /* u16 primitive->powerConfig.listenIntervalTu */
- bufferSize += 1; /* u8 primitive->powerConfig.rxDtims */
- bufferSize += 1; /* CsrWifiSmeD3AutoScanMode primitive->powerConfig.d3AutoScanMode */
- bufferSize += 1; /* u8 primitive->powerConfig.clientTrafficWindow */
- bufferSize += 1; /* u8 primitive->powerConfig.opportunisticPowerSave */
- bufferSize += 1; /* u8 primitive->powerConfig.noticeOfAbsence */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmePowerConfigSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmePowerConfigSetReq *primitive = (CsrWifiSmePowerConfigSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint8Ser(ptr, len, (u8) primitive->powerConfig.powerSaveLevel);
- CsrUint16Ser(ptr, len, (u16) primitive->powerConfig.listenIntervalTu);
- CsrUint8Ser(ptr, len, (u8) primitive->powerConfig.rxDtims);
- CsrUint8Ser(ptr, len, (u8) primitive->powerConfig.d3AutoScanMode);
- CsrUint8Ser(ptr, len, (u8) primitive->powerConfig.clientTrafficWindow);
- CsrUint8Ser(ptr, len, (u8) primitive->powerConfig.opportunisticPowerSave);
- CsrUint8Ser(ptr, len, (u8) primitive->powerConfig.noticeOfAbsence);
- return(ptr);
-}
-
-
-void* CsrWifiSmePowerConfigSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmePowerConfigSetReq *primitive = kmalloc(sizeof(CsrWifiSmePowerConfigSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->powerConfig.powerSaveLevel, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->powerConfig.listenIntervalTu, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->powerConfig.rxDtims, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->powerConfig.d3AutoScanMode, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->powerConfig.clientTrafficWindow, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->powerConfig.opportunisticPowerSave, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->powerConfig.noticeOfAbsence, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeRoamingConfigSetReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 70) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- {
- u16 i2;
- for (i2 = 0; i2 < 3; i2++)
- {
- bufferSize += 2; /* s16 primitive->roamingConfig.roamingBands[i2].rssiHighThreshold */
- bufferSize += 2; /* s16 primitive->roamingConfig.roamingBands[i2].rssiLowThreshold */
- bufferSize += 2; /* s16 primitive->roamingConfig.roamingBands[i2].snrHighThreshold */
- bufferSize += 2; /* s16 primitive->roamingConfig.roamingBands[i2].snrLowThreshold */
- }
- }
- bufferSize += 1; /* u8 primitive->roamingConfig.disableSmoothRoaming */
- bufferSize += 1; /* u8 primitive->roamingConfig.disableRoamScans */
- bufferSize += 1; /* u8 primitive->roamingConfig.reconnectLimit */
- bufferSize += 2; /* u16 primitive->roamingConfig.reconnectLimitIntervalMs */
- {
- u16 i2;
- for (i2 = 0; i2 < 3; i2++)
- {
- bufferSize += 2; /* u16 primitive->roamingConfig.roamScanCfg[i2].intervalSeconds */
- bufferSize += 2; /* u16 primitive->roamingConfig.roamScanCfg[i2].validitySeconds */
- bufferSize += 2; /* u16 primitive->roamingConfig.roamScanCfg[i2].minActiveChannelTimeTu */
- bufferSize += 2; /* u16 primitive->roamingConfig.roamScanCfg[i2].maxActiveChannelTimeTu */
- bufferSize += 2; /* u16 primitive->roamingConfig.roamScanCfg[i2].minPassiveChannelTimeTu */
- bufferSize += 2; /* u16 primitive->roamingConfig.roamScanCfg[i2].maxPassiveChannelTimeTu */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeRoamingConfigSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeRoamingConfigSetReq *primitive = (CsrWifiSmeRoamingConfigSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- {
- u16 i2;
- for (i2 = 0; i2 < 3; i2++)
- {
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamingBands[i2].rssiHighThreshold);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamingBands[i2].rssiLowThreshold);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamingBands[i2].snrHighThreshold);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamingBands[i2].snrLowThreshold);
- }
- }
- CsrUint8Ser(ptr, len, (u8) primitive->roamingConfig.disableSmoothRoaming);
- CsrUint8Ser(ptr, len, (u8) primitive->roamingConfig.disableRoamScans);
- CsrUint8Ser(ptr, len, (u8) primitive->roamingConfig.reconnectLimit);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.reconnectLimitIntervalMs);
- {
- u16 i2;
- for (i2 = 0; i2 < 3; i2++)
- {
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamScanCfg[i2].intervalSeconds);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamScanCfg[i2].validitySeconds);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamScanCfg[i2].minActiveChannelTimeTu);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamScanCfg[i2].maxActiveChannelTimeTu);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamScanCfg[i2].minPassiveChannelTimeTu);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamScanCfg[i2].maxPassiveChannelTimeTu);
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeRoamingConfigSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeRoamingConfigSetReq *primitive = kmalloc(sizeof(CsrWifiSmeRoamingConfigSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- {
- u16 i2;
- for (i2 = 0; i2 < 3; i2++)
- {
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamingBands[i2].rssiHighThreshold, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamingBands[i2].rssiLowThreshold, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamingBands[i2].snrHighThreshold, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamingBands[i2].snrLowThreshold, buffer, &offset);
- }
- }
- CsrUint8Des((u8 *) &primitive->roamingConfig.disableSmoothRoaming, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->roamingConfig.disableRoamScans, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->roamingConfig.reconnectLimit, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.reconnectLimitIntervalMs, buffer, &offset);
- {
- u16 i2;
- for (i2 = 0; i2 < 3; i2++)
- {
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamScanCfg[i2].intervalSeconds, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamScanCfg[i2].validitySeconds, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamScanCfg[i2].minActiveChannelTimeTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamScanCfg[i2].maxActiveChannelTimeTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamScanCfg[i2].minPassiveChannelTimeTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamScanCfg[i2].maxPassiveChannelTimeTu, buffer, &offset);
- }
- }
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeScanConfigSetReqSizeof(void *msg)
-{
- CsrWifiSmeScanConfigSetReq *primitive = (CsrWifiSmeScanConfigSetReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 63) */
- {
- u16 i2;
- for (i2 = 0; i2 < 4; i2++)
- {
- bufferSize += 2; /* u16 primitive->scanConfig.scanCfg[i2].intervalSeconds */
- bufferSize += 2; /* u16 primitive->scanConfig.scanCfg[i2].validitySeconds */
- bufferSize += 2; /* u16 primitive->scanConfig.scanCfg[i2].minActiveChannelTimeTu */
- bufferSize += 2; /* u16 primitive->scanConfig.scanCfg[i2].maxActiveChannelTimeTu */
- bufferSize += 2; /* u16 primitive->scanConfig.scanCfg[i2].minPassiveChannelTimeTu */
- bufferSize += 2; /* u16 primitive->scanConfig.scanCfg[i2].maxPassiveChannelTimeTu */
- }
- }
- bufferSize += 1; /* u8 primitive->scanConfig.disableAutonomousScans */
- bufferSize += 2; /* u16 primitive->scanConfig.maxResults */
- bufferSize += 1; /* s8 primitive->scanConfig.highRssiThreshold */
- bufferSize += 1; /* s8 primitive->scanConfig.lowRssiThreshold */
- bufferSize += 1; /* s8 primitive->scanConfig.deltaRssiThreshold */
- bufferSize += 1; /* s8 primitive->scanConfig.highSnrThreshold */
- bufferSize += 1; /* s8 primitive->scanConfig.lowSnrThreshold */
- bufferSize += 1; /* s8 primitive->scanConfig.deltaSnrThreshold */
- bufferSize += 2; /* u16 primitive->scanConfig.passiveChannelListCount */
- bufferSize += primitive->scanConfig.passiveChannelListCount; /* u8 primitive->scanConfig.passiveChannelList */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeScanConfigSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeScanConfigSetReq *primitive = (CsrWifiSmeScanConfigSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- {
- u16 i2;
- for (i2 = 0; i2 < 4; i2++)
- {
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.scanCfg[i2].intervalSeconds);
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.scanCfg[i2].validitySeconds);
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.scanCfg[i2].minActiveChannelTimeTu);
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.scanCfg[i2].maxActiveChannelTimeTu);
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.scanCfg[i2].minPassiveChannelTimeTu);
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.scanCfg[i2].maxPassiveChannelTimeTu);
- }
- }
- CsrUint8Ser(ptr, len, (u8) primitive->scanConfig.disableAutonomousScans);
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.maxResults);
- CsrUint8Ser(ptr, len, (u8) primitive->scanConfig.highRssiThreshold);
- CsrUint8Ser(ptr, len, (u8) primitive->scanConfig.lowRssiThreshold);
- CsrUint8Ser(ptr, len, (u8) primitive->scanConfig.deltaRssiThreshold);
- CsrUint8Ser(ptr, len, (u8) primitive->scanConfig.highSnrThreshold);
- CsrUint8Ser(ptr, len, (u8) primitive->scanConfig.lowSnrThreshold);
- CsrUint8Ser(ptr, len, (u8) primitive->scanConfig.deltaSnrThreshold);
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.passiveChannelListCount);
- if (primitive->scanConfig.passiveChannelListCount)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->scanConfig.passiveChannelList, ((u16) (primitive->scanConfig.passiveChannelListCount)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeScanConfigSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeScanConfigSetReq *primitive = kmalloc(sizeof(CsrWifiSmeScanConfigSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- {
- u16 i2;
- for (i2 = 0; i2 < 4; i2++)
- {
- CsrUint16Des((u16 *) &primitive->scanConfig.scanCfg[i2].intervalSeconds, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanConfig.scanCfg[i2].validitySeconds, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanConfig.scanCfg[i2].minActiveChannelTimeTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanConfig.scanCfg[i2].maxActiveChannelTimeTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanConfig.scanCfg[i2].minPassiveChannelTimeTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanConfig.scanCfg[i2].maxPassiveChannelTimeTu, buffer, &offset);
- }
- }
- CsrUint8Des((u8 *) &primitive->scanConfig.disableAutonomousScans, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanConfig.maxResults, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanConfig.highRssiThreshold, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanConfig.lowRssiThreshold, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanConfig.deltaRssiThreshold, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanConfig.highSnrThreshold, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanConfig.lowSnrThreshold, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanConfig.deltaSnrThreshold, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanConfig.passiveChannelListCount, buffer, &offset);
- if (primitive->scanConfig.passiveChannelListCount)
- {
- primitive->scanConfig.passiveChannelList = kmalloc(primitive->scanConfig.passiveChannelListCount, GFP_KERNEL);
- CsrMemCpyDes(primitive->scanConfig.passiveChannelList, buffer, &offset, ((u16) (primitive->scanConfig.passiveChannelListCount)));
- }
- else
- {
- primitive->scanConfig.passiveChannelList = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeScanConfigSetReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeScanConfigSetReq *primitive = (CsrWifiSmeScanConfigSetReq *) voidPrimitivePointer;
- kfree(primitive->scanConfig.passiveChannelList);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeScanFullReqSizeof(void *msg)
-{
- CsrWifiSmeScanFullReq *primitive = (CsrWifiSmeScanFullReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 52) */
- bufferSize += 1; /* u8 primitive->ssidCount */
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->ssidCount; i1++)
- {
- bufferSize += 32; /* u8 primitive->ssid[i1].ssid[32] */
- bufferSize += 1; /* u8 primitive->ssid[i1].length */
- }
- }
- bufferSize += 6; /* u8 primitive->bssid.a[6] */
- bufferSize += 1; /* u8 primitive->forceScan */
- bufferSize += 1; /* CsrWifiSmeBssType primitive->bssType */
- bufferSize += 1; /* CsrWifiSmeScanType primitive->scanType */
- bufferSize += 2; /* u16 primitive->channelListCount */
- bufferSize += primitive->channelListCount; /* u8 primitive->channelList */
- bufferSize += 2; /* u16 primitive->probeIeLength */
- bufferSize += primitive->probeIeLength; /* u8 primitive->probeIe */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeScanFullReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeScanFullReq *primitive = (CsrWifiSmeScanFullReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint8Ser(ptr, len, (u8) primitive->ssidCount);
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->ssidCount; i1++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->ssid[i1].ssid, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->ssid[i1].length);
- }
- }
- CsrMemCpySer(ptr, len, (const void *) primitive->bssid.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->forceScan);
- CsrUint8Ser(ptr, len, (u8) primitive->bssType);
- CsrUint8Ser(ptr, len, (u8) primitive->scanType);
- CsrUint16Ser(ptr, len, (u16) primitive->channelListCount);
- if (primitive->channelListCount)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->channelList, ((u16) (primitive->channelListCount)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->probeIeLength);
- if (primitive->probeIeLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->probeIe, ((u16) (primitive->probeIeLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeScanFullReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeScanFullReq *primitive = kmalloc(sizeof(CsrWifiSmeScanFullReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->ssidCount, buffer, &offset);
- primitive->ssid = NULL;
- if (primitive->ssidCount)
- {
- primitive->ssid = kmalloc(sizeof(CsrWifiSsid) * primitive->ssidCount, GFP_KERNEL);
- }
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->ssidCount; i1++)
- {
- CsrMemCpyDes(primitive->ssid[i1].ssid, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->ssid[i1].length, buffer, &offset);
- }
- }
- CsrMemCpyDes(primitive->bssid.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->forceScan, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->bssType, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanType, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->channelListCount, buffer, &offset);
- if (primitive->channelListCount)
- {
- primitive->channelList = kmalloc(primitive->channelListCount, GFP_KERNEL);
- CsrMemCpyDes(primitive->channelList, buffer, &offset, ((u16) (primitive->channelListCount)));
- }
- else
- {
- primitive->channelList = NULL;
- }
- CsrUint16Des((u16 *) &primitive->probeIeLength, buffer, &offset);
- if (primitive->probeIeLength)
- {
- primitive->probeIe = kmalloc(primitive->probeIeLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->probeIe, buffer, &offset, ((u16) (primitive->probeIeLength)));
- }
- else
- {
- primitive->probeIe = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeScanFullReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeScanFullReq *primitive = (CsrWifiSmeScanFullReq *) voidPrimitivePointer;
- kfree(primitive->ssid);
- kfree(primitive->channelList);
- kfree(primitive->probeIe);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeSmeStaConfigSetReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 11) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* u8 primitive->smeConfig.connectionQualityRssiChangeTrigger */
- bufferSize += 1; /* u8 primitive->smeConfig.connectionQualitySnrChangeTrigger */
- bufferSize += 1; /* CsrWifiSmeWmmModeMask primitive->smeConfig.wmmModeMask */
- bufferSize += 1; /* CsrWifiSmeRadioIF primitive->smeConfig.ifIndex */
- bufferSize += 1; /* u8 primitive->smeConfig.allowUnicastUseGroupCipher */
- bufferSize += 1; /* u8 primitive->smeConfig.enableOpportunisticKeyCaching */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeSmeStaConfigSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeSmeStaConfigSetReq *primitive = (CsrWifiSmeSmeStaConfigSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->smeConfig.connectionQualityRssiChangeTrigger);
- CsrUint8Ser(ptr, len, (u8) primitive->smeConfig.connectionQualitySnrChangeTrigger);
- CsrUint8Ser(ptr, len, (u8) primitive->smeConfig.wmmModeMask);
- CsrUint8Ser(ptr, len, (u8) primitive->smeConfig.ifIndex);
- CsrUint8Ser(ptr, len, (u8) primitive->smeConfig.allowUnicastUseGroupCipher);
- CsrUint8Ser(ptr, len, (u8) primitive->smeConfig.enableOpportunisticKeyCaching);
- return(ptr);
-}
-
-
-void* CsrWifiSmeSmeStaConfigSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeSmeStaConfigSetReq *primitive = kmalloc(sizeof(CsrWifiSmeSmeStaConfigSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->smeConfig.connectionQualityRssiChangeTrigger, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->smeConfig.connectionQualitySnrChangeTrigger, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->smeConfig.wmmModeMask, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->smeConfig.ifIndex, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->smeConfig.allowUnicastUseGroupCipher, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->smeConfig.enableOpportunisticKeyCaching, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeTspecReqSizeof(void *msg)
-{
- CsrWifiSmeTspecReq *primitive = (CsrWifiSmeTspecReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 18) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiSmeListAction primitive->action */
- bufferSize += 4; /* u32 primitive->transactionId */
- bufferSize += 1; /* u8 primitive->strict */
- bufferSize += 1; /* CsrWifiSmeTspecCtrlMask primitive->ctrlMask */
- bufferSize += 2; /* u16 primitive->tspecLength */
- bufferSize += primitive->tspecLength; /* u8 primitive->tspec */
- bufferSize += 2; /* u16 primitive->tclasLength */
- bufferSize += primitive->tclasLength; /* u8 primitive->tclas */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeTspecReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeTspecReq *primitive = (CsrWifiSmeTspecReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->action);
- CsrUint32Ser(ptr, len, (u32) primitive->transactionId);
- CsrUint8Ser(ptr, len, (u8) primitive->strict);
- CsrUint8Ser(ptr, len, (u8) primitive->ctrlMask);
- CsrUint16Ser(ptr, len, (u16) primitive->tspecLength);
- if (primitive->tspecLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->tspec, ((u16) (primitive->tspecLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->tclasLength);
- if (primitive->tclasLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->tclas, ((u16) (primitive->tclasLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeTspecReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeTspecReq *primitive = kmalloc(sizeof(CsrWifiSmeTspecReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->action, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->transactionId, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->strict, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->ctrlMask, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->tspecLength, buffer, &offset);
- if (primitive->tspecLength)
- {
- primitive->tspec = kmalloc(primitive->tspecLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->tspec, buffer, &offset, ((u16) (primitive->tspecLength)));
- }
- else
- {
- primitive->tspec = NULL;
- }
- CsrUint16Des((u16 *) &primitive->tclasLength, buffer, &offset);
- if (primitive->tclasLength)
- {
- primitive->tclas = kmalloc(primitive->tclasLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->tclas, buffer, &offset, ((u16) (primitive->tclasLength)));
- }
- else
- {
- primitive->tclas = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeTspecReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeTspecReq *primitive = (CsrWifiSmeTspecReq *) voidPrimitivePointer;
- kfree(primitive->tspec);
- kfree(primitive->tclas);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeWifiFlightmodeReqSizeof(void *msg)
-{
- CsrWifiSmeWifiFlightmodeReq *primitive = (CsrWifiSmeWifiFlightmodeReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 14) */
- bufferSize += 6; /* u8 primitive->address.a[6] */
- bufferSize += 2; /* u16 primitive->mibFilesCount */
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->mibFilesCount; i1++)
- {
- bufferSize += 2; /* u16 primitive->mibFiles[i1].length */
- bufferSize += primitive->mibFiles[i1].length; /* u8 primitive->mibFiles[i1].data */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeWifiFlightmodeReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeWifiFlightmodeReq *primitive = (CsrWifiSmeWifiFlightmodeReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrMemCpySer(ptr, len, (const void *) primitive->address.a, ((u16) (6)));
- CsrUint16Ser(ptr, len, (u16) primitive->mibFilesCount);
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->mibFilesCount; i1++)
- {
- CsrUint16Ser(ptr, len, (u16) primitive->mibFiles[i1].length);
- if (primitive->mibFiles[i1].length)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->mibFiles[i1].data, ((u16) (primitive->mibFiles[i1].length)));
- }
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeWifiFlightmodeReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeWifiFlightmodeReq *primitive = kmalloc(sizeof(CsrWifiSmeWifiFlightmodeReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrMemCpyDes(primitive->address.a, buffer, &offset, ((u16) (6)));
- CsrUint16Des((u16 *) &primitive->mibFilesCount, buffer, &offset);
- primitive->mibFiles = NULL;
- if (primitive->mibFilesCount)
- {
- primitive->mibFiles = kmalloc(sizeof(CsrWifiSmeDataBlock) * primitive->mibFilesCount, GFP_KERNEL);
- }
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->mibFilesCount; i1++)
- {
- CsrUint16Des((u16 *) &primitive->mibFiles[i1].length, buffer, &offset);
- if (primitive->mibFiles[i1].length)
- {
- primitive->mibFiles[i1].data = kmalloc(primitive->mibFiles[i1].length, GFP_KERNEL);
- CsrMemCpyDes(primitive->mibFiles[i1].data, buffer, &offset, ((u16) (primitive->mibFiles[i1].length)));
- }
- else
- {
- primitive->mibFiles[i1].data = NULL;
- }
- }
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeWifiFlightmodeReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeWifiFlightmodeReq *primitive = (CsrWifiSmeWifiFlightmodeReq *) voidPrimitivePointer;
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->mibFilesCount; i1++)
- {
- kfree(primitive->mibFiles[i1].data);
- }
- }
- kfree(primitive->mibFiles);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeWifiOnReqSizeof(void *msg)
-{
- CsrWifiSmeWifiOnReq *primitive = (CsrWifiSmeWifiOnReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 14) */
- bufferSize += 6; /* u8 primitive->address.a[6] */
- bufferSize += 2; /* u16 primitive->mibFilesCount */
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->mibFilesCount; i1++)
- {
- bufferSize += 2; /* u16 primitive->mibFiles[i1].length */
- bufferSize += primitive->mibFiles[i1].length; /* u8 primitive->mibFiles[i1].data */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeWifiOnReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeWifiOnReq *primitive = (CsrWifiSmeWifiOnReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrMemCpySer(ptr, len, (const void *) primitive->address.a, ((u16) (6)));
- CsrUint16Ser(ptr, len, (u16) primitive->mibFilesCount);
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->mibFilesCount; i1++)
- {
- CsrUint16Ser(ptr, len, (u16) primitive->mibFiles[i1].length);
- if (primitive->mibFiles[i1].length)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->mibFiles[i1].data, ((u16) (primitive->mibFiles[i1].length)));
- }
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeWifiOnReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeWifiOnReq *primitive = kmalloc(sizeof(CsrWifiSmeWifiOnReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrMemCpyDes(primitive->address.a, buffer, &offset, ((u16) (6)));
- CsrUint16Des((u16 *) &primitive->mibFilesCount, buffer, &offset);
- primitive->mibFiles = NULL;
- if (primitive->mibFilesCount)
- {
- primitive->mibFiles = kmalloc(sizeof(CsrWifiSmeDataBlock) * primitive->mibFilesCount, GFP_KERNEL);
- }
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->mibFilesCount; i1++)
- {
- CsrUint16Des((u16 *) &primitive->mibFiles[i1].length, buffer, &offset);
- if (primitive->mibFiles[i1].length)
- {
- primitive->mibFiles[i1].data = kmalloc(primitive->mibFiles[i1].length, GFP_KERNEL);
- CsrMemCpyDes(primitive->mibFiles[i1].data, buffer, &offset, ((u16) (primitive->mibFiles[i1].length)));
- }
- else
- {
- primitive->mibFiles[i1].data = NULL;
- }
- }
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeWifiOnReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeWifiOnReq *primitive = (CsrWifiSmeWifiOnReq *) voidPrimitivePointer;
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->mibFilesCount; i1++)
- {
- kfree(primitive->mibFiles[i1].data);
- }
- }
- kfree(primitive->mibFiles);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeCloakedSsidsSetReqSizeof(void *msg)
-{
- CsrWifiSmeCloakedSsidsSetReq *primitive = (CsrWifiSmeCloakedSsidsSetReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 37) */
- bufferSize += 1; /* u8 primitive->cloakedSsids.cloakedSsidsCount */
- {
- u16 i2;
- for (i2 = 0; i2 < primitive->cloakedSsids.cloakedSsidsCount; i2++)
- {
- bufferSize += 32; /* u8 primitive->cloakedSsids.cloakedSsids[i2].ssid[32] */
- bufferSize += 1; /* u8 primitive->cloakedSsids.cloakedSsids[i2].length */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeCloakedSsidsSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeCloakedSsidsSetReq *primitive = (CsrWifiSmeCloakedSsidsSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint8Ser(ptr, len, (u8) primitive->cloakedSsids.cloakedSsidsCount);
- {
- u16 i2;
- for (i2 = 0; i2 < primitive->cloakedSsids.cloakedSsidsCount; i2++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->cloakedSsids.cloakedSsids[i2].ssid, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->cloakedSsids.cloakedSsids[i2].length);
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeCloakedSsidsSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeCloakedSsidsSetReq *primitive = kmalloc(sizeof(CsrWifiSmeCloakedSsidsSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->cloakedSsids.cloakedSsidsCount, buffer, &offset);
- primitive->cloakedSsids.cloakedSsids = NULL;
- if (primitive->cloakedSsids.cloakedSsidsCount)
- {
- primitive->cloakedSsids.cloakedSsids = kmalloc(sizeof(CsrWifiSsid) * primitive->cloakedSsids.cloakedSsidsCount, GFP_KERNEL);
- }
- {
- u16 i2;
- for (i2 = 0; i2 < primitive->cloakedSsids.cloakedSsidsCount; i2++)
- {
- CsrMemCpyDes(primitive->cloakedSsids.cloakedSsids[i2].ssid, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->cloakedSsids.cloakedSsids[i2].length, buffer, &offset);
- }
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeCloakedSsidsSetReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeCloakedSsidsSetReq *primitive = (CsrWifiSmeCloakedSsidsSetReq *) voidPrimitivePointer;
- kfree(primitive->cloakedSsids.cloakedSsids);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeSmeCommonConfigSetReqSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 8) */
- bufferSize += 1; /* CsrWifiSme80211dTrustLevel primitive->deviceConfig.trustLevel */
- bufferSize += 2; /* u8 primitive->deviceConfig.countryCode[2] */
- bufferSize += 1; /* CsrWifiSmeFirmwareDriverInterface primitive->deviceConfig.firmwareDriverInterface */
- bufferSize += 1; /* u8 primitive->deviceConfig.enableStrictDraftN */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeSmeCommonConfigSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeSmeCommonConfigSetReq *primitive = (CsrWifiSmeSmeCommonConfigSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint8Ser(ptr, len, (u8) primitive->deviceConfig.trustLevel);
- CsrMemCpySer(ptr, len, (const void *) primitive->deviceConfig.countryCode, ((u16) (2)));
- CsrUint8Ser(ptr, len, (u8) primitive->deviceConfig.firmwareDriverInterface);
- CsrUint8Ser(ptr, len, (u8) primitive->deviceConfig.enableStrictDraftN);
- return(ptr);
-}
-
-
-void* CsrWifiSmeSmeCommonConfigSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeSmeCommonConfigSetReq *primitive = kmalloc(sizeof(CsrWifiSmeSmeCommonConfigSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->deviceConfig.trustLevel, buffer, &offset);
- CsrMemCpyDes(primitive->deviceConfig.countryCode, buffer, &offset, ((u16) (2)));
- CsrUint8Des((u8 *) &primitive->deviceConfig.firmwareDriverInterface, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->deviceConfig.enableStrictDraftN, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeWpsConfigurationReqSizeof(void *msg)
-{
- CsrWifiSmeWpsConfigurationReq *primitive = (CsrWifiSmeWpsConfigurationReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 240) */
- bufferSize += 1; /* u8 primitive->wpsConfig.wpsVersion */
- bufferSize += 16; /* u8 primitive->wpsConfig.uuid[16] */
- bufferSize += 32; /* u8 primitive->wpsConfig.deviceName[32] */
- bufferSize += 1; /* u8 primitive->wpsConfig.deviceNameLength */
- bufferSize += 64; /* u8 primitive->wpsConfig.manufacturer[64] */
- bufferSize += 1; /* u8 primitive->wpsConfig.manufacturerLength */
- bufferSize += 32; /* u8 primitive->wpsConfig.modelName[32] */
- bufferSize += 1; /* u8 primitive->wpsConfig.modelNameLength */
- bufferSize += 32; /* u8 primitive->wpsConfig.modelNumber[32] */
- bufferSize += 1; /* u8 primitive->wpsConfig.modelNumberLength */
- bufferSize += 32; /* u8 primitive->wpsConfig.serialNumber[32] */
- bufferSize += 8; /* u8 primitive->wpsConfig.primDeviceType.deviceDetails[8] */
- bufferSize += 1; /* u8 primitive->wpsConfig.secondaryDeviceTypeCount */
- {
- u16 i2;
- for (i2 = 0; i2 < primitive->wpsConfig.secondaryDeviceTypeCount; i2++)
- {
- bufferSize += 8; /* u8 primitive->wpsConfig.secondaryDeviceType[i2].deviceDetails[8] */
- }
- }
- bufferSize += 2; /* CsrWifiSmeWpsConfigTypeMask primitive->wpsConfig.configMethods */
- bufferSize += 1; /* u8 primitive->wpsConfig.rfBands */
- bufferSize += 4; /* u8 primitive->wpsConfig.osVersion[4] */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeWpsConfigurationReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeWpsConfigurationReq *primitive = (CsrWifiSmeWpsConfigurationReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint8Ser(ptr, len, (u8) primitive->wpsConfig.wpsVersion);
- CsrMemCpySer(ptr, len, (const void *) primitive->wpsConfig.uuid, ((u16) (16)));
- CsrMemCpySer(ptr, len, (const void *) primitive->wpsConfig.deviceName, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->wpsConfig.deviceNameLength);
- CsrMemCpySer(ptr, len, (const void *) primitive->wpsConfig.manufacturer, ((u16) (64)));
- CsrUint8Ser(ptr, len, (u8) primitive->wpsConfig.manufacturerLength);
- CsrMemCpySer(ptr, len, (const void *) primitive->wpsConfig.modelName, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->wpsConfig.modelNameLength);
- CsrMemCpySer(ptr, len, (const void *) primitive->wpsConfig.modelNumber, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->wpsConfig.modelNumberLength);
- CsrMemCpySer(ptr, len, (const void *) primitive->wpsConfig.serialNumber, ((u16) (32)));
- CsrMemCpySer(ptr, len, (const void *) primitive->wpsConfig.primDeviceType.deviceDetails, ((u16) (8)));
- CsrUint8Ser(ptr, len, (u8) primitive->wpsConfig.secondaryDeviceTypeCount);
- {
- u16 i2;
- for (i2 = 0; i2 < primitive->wpsConfig.secondaryDeviceTypeCount; i2++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->wpsConfig.secondaryDeviceType[i2].deviceDetails, ((u16) (8)));
- }
- }
- CsrUint16Ser(ptr, len, (u16) primitive->wpsConfig.configMethods);
- CsrUint8Ser(ptr, len, (u8) primitive->wpsConfig.rfBands);
- CsrMemCpySer(ptr, len, (const void *) primitive->wpsConfig.osVersion, ((u16) (4)));
- return(ptr);
-}
-
-
-void* CsrWifiSmeWpsConfigurationReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeWpsConfigurationReq *primitive = kmalloc(sizeof(CsrWifiSmeWpsConfigurationReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->wpsConfig.wpsVersion, buffer, &offset);
- CsrMemCpyDes(primitive->wpsConfig.uuid, buffer, &offset, ((u16) (16)));
- CsrMemCpyDes(primitive->wpsConfig.deviceName, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->wpsConfig.deviceNameLength, buffer, &offset);
- CsrMemCpyDes(primitive->wpsConfig.manufacturer, buffer, &offset, ((u16) (64)));
- CsrUint8Des((u8 *) &primitive->wpsConfig.manufacturerLength, buffer, &offset);
- CsrMemCpyDes(primitive->wpsConfig.modelName, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->wpsConfig.modelNameLength, buffer, &offset);
- CsrMemCpyDes(primitive->wpsConfig.modelNumber, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->wpsConfig.modelNumberLength, buffer, &offset);
- CsrMemCpyDes(primitive->wpsConfig.serialNumber, buffer, &offset, ((u16) (32)));
- CsrMemCpyDes(primitive->wpsConfig.primDeviceType.deviceDetails, buffer, &offset, ((u16) (8)));
- CsrUint8Des((u8 *) &primitive->wpsConfig.secondaryDeviceTypeCount, buffer, &offset);
- primitive->wpsConfig.secondaryDeviceType = NULL;
- if (primitive->wpsConfig.secondaryDeviceTypeCount)
- {
- primitive->wpsConfig.secondaryDeviceType = kmalloc(sizeof(CsrWifiSmeWpsDeviceType) * primitive->wpsConfig.secondaryDeviceTypeCount, GFP_KERNEL);
- }
- {
- u16 i2;
- for (i2 = 0; i2 < primitive->wpsConfig.secondaryDeviceTypeCount; i2++)
- {
- CsrMemCpyDes(primitive->wpsConfig.secondaryDeviceType[i2].deviceDetails, buffer, &offset, ((u16) (8)));
- }
- }
- CsrUint16Des((u16 *) &primitive->wpsConfig.configMethods, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->wpsConfig.rfBands, buffer, &offset);
- CsrMemCpyDes(primitive->wpsConfig.osVersion, buffer, &offset, ((u16) (4)));
-
- return primitive;
-}
-
-
-void CsrWifiSmeWpsConfigurationReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeWpsConfigurationReq *primitive = (CsrWifiSmeWpsConfigurationReq *) voidPrimitivePointer;
- kfree(primitive->wpsConfig.secondaryDeviceType);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeSetReqSizeof(void *msg)
-{
- CsrWifiSmeSetReq *primitive = (CsrWifiSmeSetReq *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 8) */
- bufferSize += 4; /* u32 primitive->dataLength */
- bufferSize += primitive->dataLength; /* u8 primitive->data */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeSetReqSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeSetReq *primitive = (CsrWifiSmeSetReq *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint32Ser(ptr, len, (u32) primitive->dataLength);
- if (primitive->dataLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->data, ((u16) (primitive->dataLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeSetReqDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeSetReq *primitive = kmalloc(sizeof(CsrWifiSmeSetReq), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->dataLength, buffer, &offset);
- if (primitive->dataLength)
- {
- primitive->data = kmalloc(primitive->dataLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->data, buffer, &offset, ((u16) (primitive->dataLength)));
- }
- else
- {
- primitive->data = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeSetReqSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeSetReq *primitive = (CsrWifiSmeSetReq *) voidPrimitivePointer;
- kfree(primitive->data);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeAdhocConfigGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 2; /* u16 primitive->adHocConfig.atimWindowTu */
- bufferSize += 2; /* u16 primitive->adHocConfig.beaconPeriodTu */
- bufferSize += 2; /* u16 primitive->adHocConfig.joinOnlyAttempts */
- bufferSize += 2; /* u16 primitive->adHocConfig.joinAttemptIntervalMs */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeAdhocConfigGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeAdhocConfigGetCfm *primitive = (CsrWifiSmeAdhocConfigGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint16Ser(ptr, len, (u16) primitive->adHocConfig.atimWindowTu);
- CsrUint16Ser(ptr, len, (u16) primitive->adHocConfig.beaconPeriodTu);
- CsrUint16Ser(ptr, len, (u16) primitive->adHocConfig.joinOnlyAttempts);
- CsrUint16Ser(ptr, len, (u16) primitive->adHocConfig.joinAttemptIntervalMs);
- return(ptr);
-}
-
-
-void* CsrWifiSmeAdhocConfigGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeAdhocConfigGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeAdhocConfigGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->adHocConfig.atimWindowTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->adHocConfig.beaconPeriodTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->adHocConfig.joinOnlyAttempts, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->adHocConfig.joinAttemptIntervalMs, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeAssociationCompleteIndSizeof(void *msg)
-{
- CsrWifiSmeAssociationCompleteInd *primitive = (CsrWifiSmeAssociationCompleteInd *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 98) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 32; /* u8 primitive->connectionInfo.ssid.ssid[32] */
- bufferSize += 1; /* u8 primitive->connectionInfo.ssid.length */
- bufferSize += 6; /* u8 primitive->connectionInfo.bssid.a[6] */
- bufferSize += 1; /* CsrWifiSme80211NetworkType primitive->connectionInfo.networkType80211 */
- bufferSize += 1; /* u8 primitive->connectionInfo.channelNumber */
- bufferSize += 2; /* u16 primitive->connectionInfo.channelFrequency */
- bufferSize += 2; /* CsrWifiSmeAuthMode primitive->connectionInfo.authMode */
- bufferSize += 2; /* CsrWifiSmeEncryption primitive->connectionInfo.pairwiseCipher */
- bufferSize += 2; /* CsrWifiSmeEncryption primitive->connectionInfo.groupCipher */
- bufferSize += 1; /* CsrWifiSmeRadioIF primitive->connectionInfo.ifIndex */
- bufferSize += 2; /* u16 primitive->connectionInfo.atimWindowTu */
- bufferSize += 2; /* u16 primitive->connectionInfo.beaconPeriodTu */
- bufferSize += 1; /* u8 primitive->connectionInfo.reassociation */
- bufferSize += 2; /* u16 primitive->connectionInfo.beaconFrameLength */
- bufferSize += primitive->connectionInfo.beaconFrameLength; /* u8 primitive->connectionInfo.beaconFrame */
- bufferSize += 2; /* u16 primitive->connectionInfo.associationReqFrameLength */
- bufferSize += primitive->connectionInfo.associationReqFrameLength; /* u8 primitive->connectionInfo.associationReqFrame */
- bufferSize += 2; /* u16 primitive->connectionInfo.associationRspFrameLength */
- bufferSize += primitive->connectionInfo.associationRspFrameLength; /* u8 primitive->connectionInfo.associationRspFrame */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocScanInfoElementsLength */
- bufferSize += primitive->connectionInfo.assocScanInfoElementsLength; /* u8 primitive->connectionInfo.assocScanInfoElements */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocReqCapabilities */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocReqListenIntervalTu */
- bufferSize += 6; /* u8 primitive->connectionInfo.assocReqApAddress.a[6] */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocReqInfoElementsLength */
- bufferSize += primitive->connectionInfo.assocReqInfoElementsLength; /* u8 primitive->connectionInfo.assocReqInfoElements */
- bufferSize += 2; /* CsrWifiSmeIEEE80211Result primitive->connectionInfo.assocRspResult */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocRspCapabilityInfo */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocRspAssociationId */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocRspInfoElementsLength */
- bufferSize += primitive->connectionInfo.assocRspInfoElementsLength; /* u8 primitive->connectionInfo.assocRspInfoElements */
- bufferSize += 2; /* CsrWifiSmeIEEE80211Reason primitive->deauthReason */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeAssociationCompleteIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeAssociationCompleteInd *primitive = (CsrWifiSmeAssociationCompleteInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.ssid.ssid, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.ssid.length);
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.bssid.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.networkType80211);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.channelNumber);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.channelFrequency);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.authMode);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.pairwiseCipher);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.groupCipher);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.ifIndex);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.atimWindowTu);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.beaconPeriodTu);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.reassociation);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.beaconFrameLength);
- if (primitive->connectionInfo.beaconFrameLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.beaconFrame, ((u16) (primitive->connectionInfo.beaconFrameLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.associationReqFrameLength);
- if (primitive->connectionInfo.associationReqFrameLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.associationReqFrame, ((u16) (primitive->connectionInfo.associationReqFrameLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.associationRspFrameLength);
- if (primitive->connectionInfo.associationRspFrameLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.associationRspFrame, ((u16) (primitive->connectionInfo.associationRspFrameLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocScanInfoElementsLength);
- if (primitive->connectionInfo.assocScanInfoElementsLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.assocScanInfoElements, ((u16) (primitive->connectionInfo.assocScanInfoElementsLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocReqCapabilities);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocReqListenIntervalTu);
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.assocReqApAddress.a, ((u16) (6)));
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocReqInfoElementsLength);
- if (primitive->connectionInfo.assocReqInfoElementsLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.assocReqInfoElements, ((u16) (primitive->connectionInfo.assocReqInfoElementsLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocRspResult);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocRspCapabilityInfo);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocRspAssociationId);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocRspInfoElementsLength);
- if (primitive->connectionInfo.assocRspInfoElementsLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.assocRspInfoElements, ((u16) (primitive->connectionInfo.assocRspInfoElementsLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->deauthReason);
- return(ptr);
-}
-
-
-void* CsrWifiSmeAssociationCompleteIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeAssociationCompleteInd *primitive = kmalloc(sizeof(CsrWifiSmeAssociationCompleteInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrMemCpyDes(primitive->connectionInfo.ssid.ssid, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->connectionInfo.ssid.length, buffer, &offset);
- CsrMemCpyDes(primitive->connectionInfo.bssid.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->connectionInfo.networkType80211, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionInfo.channelNumber, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.channelFrequency, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.authMode, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.pairwiseCipher, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.groupCipher, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionInfo.ifIndex, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.atimWindowTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.beaconPeriodTu, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionInfo.reassociation, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.beaconFrameLength, buffer, &offset);
- if (primitive->connectionInfo.beaconFrameLength)
- {
- primitive->connectionInfo.beaconFrame = kmalloc(primitive->connectionInfo.beaconFrameLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.beaconFrame, buffer, &offset, ((u16) (primitive->connectionInfo.beaconFrameLength)));
- }
- else
- {
- primitive->connectionInfo.beaconFrame = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.associationReqFrameLength, buffer, &offset);
- if (primitive->connectionInfo.associationReqFrameLength)
- {
- primitive->connectionInfo.associationReqFrame = kmalloc(primitive->connectionInfo.associationReqFrameLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.associationReqFrame, buffer, &offset, ((u16) (primitive->connectionInfo.associationReqFrameLength)));
- }
- else
- {
- primitive->connectionInfo.associationReqFrame = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.associationRspFrameLength, buffer, &offset);
- if (primitive->connectionInfo.associationRspFrameLength)
- {
- primitive->connectionInfo.associationRspFrame = kmalloc(primitive->connectionInfo.associationRspFrameLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.associationRspFrame, buffer, &offset, ((u16) (primitive->connectionInfo.associationRspFrameLength)));
- }
- else
- {
- primitive->connectionInfo.associationRspFrame = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocScanInfoElementsLength, buffer, &offset);
- if (primitive->connectionInfo.assocScanInfoElementsLength)
- {
- primitive->connectionInfo.assocScanInfoElements = kmalloc(primitive->connectionInfo.assocScanInfoElementsLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.assocScanInfoElements, buffer, &offset, ((u16) (primitive->connectionInfo.assocScanInfoElementsLength)));
- }
- else
- {
- primitive->connectionInfo.assocScanInfoElements = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocReqCapabilities, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocReqListenIntervalTu, buffer, &offset);
- CsrMemCpyDes(primitive->connectionInfo.assocReqApAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocReqInfoElementsLength, buffer, &offset);
- if (primitive->connectionInfo.assocReqInfoElementsLength)
- {
- primitive->connectionInfo.assocReqInfoElements = kmalloc(primitive->connectionInfo.assocReqInfoElementsLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.assocReqInfoElements, buffer, &offset, ((u16) (primitive->connectionInfo.assocReqInfoElementsLength)));
- }
- else
- {
- primitive->connectionInfo.assocReqInfoElements = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocRspResult, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocRspCapabilityInfo, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocRspAssociationId, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocRspInfoElementsLength, buffer, &offset);
- if (primitive->connectionInfo.assocRspInfoElementsLength)
- {
- primitive->connectionInfo.assocRspInfoElements = kmalloc(primitive->connectionInfo.assocRspInfoElementsLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.assocRspInfoElements, buffer, &offset, ((u16) (primitive->connectionInfo.assocRspInfoElementsLength)));
- }
- else
- {
- primitive->connectionInfo.assocRspInfoElements = NULL;
- }
- CsrUint16Des((u16 *) &primitive->deauthReason, buffer, &offset);
-
- return primitive;
-}
-
-
-void CsrWifiSmeAssociationCompleteIndSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeAssociationCompleteInd *primitive = (CsrWifiSmeAssociationCompleteInd *) voidPrimitivePointer;
- kfree(primitive->connectionInfo.beaconFrame);
- kfree(primitive->connectionInfo.associationReqFrame);
- kfree(primitive->connectionInfo.associationRspFrame);
- kfree(primitive->connectionInfo.assocScanInfoElements);
- kfree(primitive->connectionInfo.assocReqInfoElements);
- kfree(primitive->connectionInfo.assocRspInfoElements);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeAssociationStartIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 44) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 6; /* u8 primitive->address.a[6] */
- bufferSize += 32; /* u8 primitive->ssid.ssid[32] */
- bufferSize += 1; /* u8 primitive->ssid.length */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeAssociationStartIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeAssociationStartInd *primitive = (CsrWifiSmeAssociationStartInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrMemCpySer(ptr, len, (const void *) primitive->address.a, ((u16) (6)));
- CsrMemCpySer(ptr, len, (const void *) primitive->ssid.ssid, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->ssid.length);
- return(ptr);
-}
-
-
-void* CsrWifiSmeAssociationStartIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeAssociationStartInd *primitive = kmalloc(sizeof(CsrWifiSmeAssociationStartInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrMemCpyDes(primitive->address.a, buffer, &offset, ((u16) (6)));
- CsrMemCpyDes(primitive->ssid.ssid, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->ssid.length, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeBlacklistCfmSizeof(void *msg)
-{
- CsrWifiSmeBlacklistCfm *primitive = (CsrWifiSmeBlacklistCfm *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 15) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* CsrWifiSmeListAction primitive->action */
- bufferSize += 1; /* u8 primitive->getAddressCount */
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->getAddressCount; i1++)
- {
- bufferSize += 6; /* u8 primitive->getAddresses[i1].a[6] */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeBlacklistCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeBlacklistCfm *primitive = (CsrWifiSmeBlacklistCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->action);
- CsrUint8Ser(ptr, len, (u8) primitive->getAddressCount);
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->getAddressCount; i1++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->getAddresses[i1].a, ((u16) (6)));
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeBlacklistCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeBlacklistCfm *primitive = kmalloc(sizeof(CsrWifiSmeBlacklistCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->action, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->getAddressCount, buffer, &offset);
- primitive->getAddresses = NULL;
- if (primitive->getAddressCount)
- {
- primitive->getAddresses = kmalloc(sizeof(CsrWifiMacAddress) * primitive->getAddressCount, GFP_KERNEL);
- }
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->getAddressCount; i1++)
- {
- CsrMemCpyDes(primitive->getAddresses[i1].a, buffer, &offset, ((u16) (6)));
- }
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeBlacklistCfmSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeBlacklistCfm *primitive = (CsrWifiSmeBlacklistCfm *) voidPrimitivePointer;
- kfree(primitive->getAddresses);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeCalibrationDataGetCfmSizeof(void *msg)
-{
- CsrWifiSmeCalibrationDataGetCfm *primitive = (CsrWifiSmeCalibrationDataGetCfm *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 8) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 2; /* u16 primitive->calibrationDataLength */
- bufferSize += primitive->calibrationDataLength; /* u8 primitive->calibrationData */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeCalibrationDataGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeCalibrationDataGetCfm *primitive = (CsrWifiSmeCalibrationDataGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint16Ser(ptr, len, (u16) primitive->calibrationDataLength);
- if (primitive->calibrationDataLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->calibrationData, ((u16) (primitive->calibrationDataLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeCalibrationDataGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeCalibrationDataGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeCalibrationDataGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->calibrationDataLength, buffer, &offset);
- if (primitive->calibrationDataLength)
- {
- primitive->calibrationData = kmalloc(primitive->calibrationDataLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->calibrationData, buffer, &offset, ((u16) (primitive->calibrationDataLength)));
- }
- else
- {
- primitive->calibrationData = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeCalibrationDataGetCfmSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeCalibrationDataGetCfm *primitive = (CsrWifiSmeCalibrationDataGetCfm *) voidPrimitivePointer;
- kfree(primitive->calibrationData);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeCcxConfigGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 11) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* u8 primitive->ccxConfig.keepAliveTimeMs */
- bufferSize += 1; /* u8 primitive->ccxConfig.apRoamingEnabled */
- bufferSize += 1; /* u8 primitive->ccxConfig.measurementsMask */
- bufferSize += 1; /* u8 primitive->ccxConfig.ccxRadioMgtEnabled */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeCcxConfigGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeCcxConfigGetCfm *primitive = (CsrWifiSmeCcxConfigGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->ccxConfig.keepAliveTimeMs);
- CsrUint8Ser(ptr, len, (u8) primitive->ccxConfig.apRoamingEnabled);
- CsrUint8Ser(ptr, len, (u8) primitive->ccxConfig.measurementsMask);
- CsrUint8Ser(ptr, len, (u8) primitive->ccxConfig.ccxRadioMgtEnabled);
- return(ptr);
-}
-
-
-void* CsrWifiSmeCcxConfigGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeCcxConfigGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeCcxConfigGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->ccxConfig.keepAliveTimeMs, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->ccxConfig.apRoamingEnabled, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->ccxConfig.measurementsMask, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->ccxConfig.ccxRadioMgtEnabled, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeCcxConfigSetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeCcxConfigSetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeCcxConfigSetCfm *primitive = (CsrWifiSmeCcxConfigSetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiSmeCcxConfigSetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeCcxConfigSetCfm *primitive = kmalloc(sizeof(CsrWifiSmeCcxConfigSetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeCoexConfigGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 31) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* u8 primitive->coexConfig.coexEnableSchemeManagement */
- bufferSize += 1; /* u8 primitive->coexConfig.coexPeriodicWakeHost */
- bufferSize += 2; /* u16 primitive->coexConfig.coexTrafficBurstyLatencyMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexTrafficContinuousLatencyMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexObexBlackoutDurationMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexObexBlackoutPeriodMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexA2dpBrBlackoutDurationMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexA2dpBrBlackoutPeriodMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexA2dpEdrBlackoutDurationMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexA2dpEdrBlackoutPeriodMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexPagingBlackoutDurationMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexPagingBlackoutPeriodMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexInquiryBlackoutDurationMs */
- bufferSize += 2; /* u16 primitive->coexConfig.coexInquiryBlackoutPeriodMs */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeCoexConfigGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeCoexConfigGetCfm *primitive = (CsrWifiSmeCoexConfigGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->coexConfig.coexEnableSchemeManagement);
- CsrUint8Ser(ptr, len, (u8) primitive->coexConfig.coexPeriodicWakeHost);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexTrafficBurstyLatencyMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexTrafficContinuousLatencyMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexObexBlackoutDurationMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexObexBlackoutPeriodMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexA2dpBrBlackoutDurationMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexA2dpBrBlackoutPeriodMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexA2dpEdrBlackoutDurationMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexA2dpEdrBlackoutPeriodMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexPagingBlackoutDurationMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexPagingBlackoutPeriodMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexInquiryBlackoutDurationMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexConfig.coexInquiryBlackoutPeriodMs);
- return(ptr);
-}
-
-
-void* CsrWifiSmeCoexConfigGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeCoexConfigGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeCoexConfigGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->coexConfig.coexEnableSchemeManagement, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->coexConfig.coexPeriodicWakeHost, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexTrafficBurstyLatencyMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexTrafficContinuousLatencyMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexObexBlackoutDurationMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexObexBlackoutPeriodMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexA2dpBrBlackoutDurationMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexA2dpBrBlackoutPeriodMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexA2dpEdrBlackoutDurationMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexA2dpEdrBlackoutPeriodMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexPagingBlackoutDurationMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexPagingBlackoutPeriodMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexInquiryBlackoutDurationMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexConfig.coexInquiryBlackoutPeriodMs, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeCoexInfoGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 24) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* u8 primitive->coexInfo.hasTrafficData */
- bufferSize += 1; /* CsrWifiSmeTrafficType primitive->coexInfo.currentTrafficType */
- bufferSize += 2; /* u16 primitive->coexInfo.currentPeriodMs */
- bufferSize += 1; /* CsrWifiSmePowerSaveLevel primitive->coexInfo.currentPowerSave */
- bufferSize += 2; /* u16 primitive->coexInfo.currentCoexPeriodMs */
- bufferSize += 2; /* u16 primitive->coexInfo.currentCoexLatencyMs */
- bufferSize += 1; /* u8 primitive->coexInfo.hasBtDevice */
- bufferSize += 4; /* u32 primitive->coexInfo.currentBlackoutDurationUs */
- bufferSize += 4; /* u32 primitive->coexInfo.currentBlackoutPeriodUs */
- bufferSize += 1; /* CsrWifiSmeCoexScheme primitive->coexInfo.currentCoexScheme */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeCoexInfoGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeCoexInfoGetCfm *primitive = (CsrWifiSmeCoexInfoGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->coexInfo.hasTrafficData);
- CsrUint8Ser(ptr, len, (u8) primitive->coexInfo.currentTrafficType);
- CsrUint16Ser(ptr, len, (u16) primitive->coexInfo.currentPeriodMs);
- CsrUint8Ser(ptr, len, (u8) primitive->coexInfo.currentPowerSave);
- CsrUint16Ser(ptr, len, (u16) primitive->coexInfo.currentCoexPeriodMs);
- CsrUint16Ser(ptr, len, (u16) primitive->coexInfo.currentCoexLatencyMs);
- CsrUint8Ser(ptr, len, (u8) primitive->coexInfo.hasBtDevice);
- CsrUint32Ser(ptr, len, (u32) primitive->coexInfo.currentBlackoutDurationUs);
- CsrUint32Ser(ptr, len, (u32) primitive->coexInfo.currentBlackoutPeriodUs);
- CsrUint8Ser(ptr, len, (u8) primitive->coexInfo.currentCoexScheme);
- return(ptr);
-}
-
-
-void* CsrWifiSmeCoexInfoGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeCoexInfoGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeCoexInfoGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->coexInfo.hasTrafficData, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->coexInfo.currentTrafficType, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexInfo.currentPeriodMs, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->coexInfo.currentPowerSave, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexInfo.currentCoexPeriodMs, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->coexInfo.currentCoexLatencyMs, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->coexInfo.hasBtDevice, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->coexInfo.currentBlackoutDurationUs, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->coexInfo.currentBlackoutPeriodUs, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->coexInfo.currentCoexScheme, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeConnectCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeConnectCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeConnectCfm *primitive = (CsrWifiSmeConnectCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiSmeConnectCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeConnectCfm *primitive = kmalloc(sizeof(CsrWifiSmeConnectCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeConnectionConfigGetCfmSizeof(void *msg)
-{
- CsrWifiSmeConnectionConfigGetCfm *primitive = (CsrWifiSmeConnectionConfigGetCfm *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 59) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 32; /* u8 primitive->connectionConfig.ssid.ssid[32] */
- bufferSize += 1; /* u8 primitive->connectionConfig.ssid.length */
- bufferSize += 6; /* u8 primitive->connectionConfig.bssid.a[6] */
- bufferSize += 1; /* CsrWifiSmeBssType primitive->connectionConfig.bssType */
- bufferSize += 1; /* CsrWifiSmeRadioIF primitive->connectionConfig.ifIndex */
- bufferSize += 1; /* CsrWifiSme80211PrivacyMode primitive->connectionConfig.privacyMode */
- bufferSize += 2; /* CsrWifiSmeAuthModeMask primitive->connectionConfig.authModeMask */
- bufferSize += 2; /* CsrWifiSmeEncryptionMask primitive->connectionConfig.encryptionModeMask */
- bufferSize += 2; /* u16 primitive->connectionConfig.mlmeAssociateReqInformationElementsLength */
- bufferSize += primitive->connectionConfig.mlmeAssociateReqInformationElementsLength; /* u8 primitive->connectionConfig.mlmeAssociateReqInformationElements */
- bufferSize += 1; /* CsrWifiSmeWmmQosInfoMask primitive->connectionConfig.wmmQosInfo */
- bufferSize += 1; /* u8 primitive->connectionConfig.adhocJoinOnly */
- bufferSize += 1; /* u8 primitive->connectionConfig.adhocChannel */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeConnectionConfigGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeConnectionConfigGetCfm *primitive = (CsrWifiSmeConnectionConfigGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionConfig.ssid.ssid, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->connectionConfig.ssid.length);
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionConfig.bssid.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->connectionConfig.bssType);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionConfig.ifIndex);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionConfig.privacyMode);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionConfig.authModeMask);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionConfig.encryptionModeMask);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionConfig.mlmeAssociateReqInformationElementsLength);
- if (primitive->connectionConfig.mlmeAssociateReqInformationElementsLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionConfig.mlmeAssociateReqInformationElements, ((u16) (primitive->connectionConfig.mlmeAssociateReqInformationElementsLength)));
- }
- CsrUint8Ser(ptr, len, (u8) primitive->connectionConfig.wmmQosInfo);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionConfig.adhocJoinOnly);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionConfig.adhocChannel);
- return(ptr);
-}
-
-
-void* CsrWifiSmeConnectionConfigGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeConnectionConfigGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeConnectionConfigGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrMemCpyDes(primitive->connectionConfig.ssid.ssid, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->connectionConfig.ssid.length, buffer, &offset);
- CsrMemCpyDes(primitive->connectionConfig.bssid.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->connectionConfig.bssType, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionConfig.ifIndex, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionConfig.privacyMode, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionConfig.authModeMask, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionConfig.encryptionModeMask, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionConfig.mlmeAssociateReqInformationElementsLength, buffer, &offset);
- if (primitive->connectionConfig.mlmeAssociateReqInformationElementsLength)
- {
- primitive->connectionConfig.mlmeAssociateReqInformationElements = kmalloc(primitive->connectionConfig.mlmeAssociateReqInformationElementsLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionConfig.mlmeAssociateReqInformationElements, buffer, &offset, ((u16) (primitive->connectionConfig.mlmeAssociateReqInformationElementsLength)));
- }
- else
- {
- primitive->connectionConfig.mlmeAssociateReqInformationElements = NULL;
- }
- CsrUint8Des((u8 *) &primitive->connectionConfig.wmmQosInfo, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionConfig.adhocJoinOnly, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionConfig.adhocChannel, buffer, &offset);
-
- return primitive;
-}
-
-
-void CsrWifiSmeConnectionConfigGetCfmSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeConnectionConfigGetCfm *primitive = (CsrWifiSmeConnectionConfigGetCfm *) voidPrimitivePointer;
- kfree(primitive->connectionConfig.mlmeAssociateReqInformationElements);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeConnectionInfoGetCfmSizeof(void *msg)
-{
- CsrWifiSmeConnectionInfoGetCfm *primitive = (CsrWifiSmeConnectionInfoGetCfm *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 96) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 32; /* u8 primitive->connectionInfo.ssid.ssid[32] */
- bufferSize += 1; /* u8 primitive->connectionInfo.ssid.length */
- bufferSize += 6; /* u8 primitive->connectionInfo.bssid.a[6] */
- bufferSize += 1; /* CsrWifiSme80211NetworkType primitive->connectionInfo.networkType80211 */
- bufferSize += 1; /* u8 primitive->connectionInfo.channelNumber */
- bufferSize += 2; /* u16 primitive->connectionInfo.channelFrequency */
- bufferSize += 2; /* CsrWifiSmeAuthMode primitive->connectionInfo.authMode */
- bufferSize += 2; /* CsrWifiSmeEncryption primitive->connectionInfo.pairwiseCipher */
- bufferSize += 2; /* CsrWifiSmeEncryption primitive->connectionInfo.groupCipher */
- bufferSize += 1; /* CsrWifiSmeRadioIF primitive->connectionInfo.ifIndex */
- bufferSize += 2; /* u16 primitive->connectionInfo.atimWindowTu */
- bufferSize += 2; /* u16 primitive->connectionInfo.beaconPeriodTu */
- bufferSize += 1; /* u8 primitive->connectionInfo.reassociation */
- bufferSize += 2; /* u16 primitive->connectionInfo.beaconFrameLength */
- bufferSize += primitive->connectionInfo.beaconFrameLength; /* u8 primitive->connectionInfo.beaconFrame */
- bufferSize += 2; /* u16 primitive->connectionInfo.associationReqFrameLength */
- bufferSize += primitive->connectionInfo.associationReqFrameLength; /* u8 primitive->connectionInfo.associationReqFrame */
- bufferSize += 2; /* u16 primitive->connectionInfo.associationRspFrameLength */
- bufferSize += primitive->connectionInfo.associationRspFrameLength; /* u8 primitive->connectionInfo.associationRspFrame */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocScanInfoElementsLength */
- bufferSize += primitive->connectionInfo.assocScanInfoElementsLength; /* u8 primitive->connectionInfo.assocScanInfoElements */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocReqCapabilities */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocReqListenIntervalTu */
- bufferSize += 6; /* u8 primitive->connectionInfo.assocReqApAddress.a[6] */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocReqInfoElementsLength */
- bufferSize += primitive->connectionInfo.assocReqInfoElementsLength; /* u8 primitive->connectionInfo.assocReqInfoElements */
- bufferSize += 2; /* CsrWifiSmeIEEE80211Result primitive->connectionInfo.assocRspResult */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocRspCapabilityInfo */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocRspAssociationId */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocRspInfoElementsLength */
- bufferSize += primitive->connectionInfo.assocRspInfoElementsLength; /* u8 primitive->connectionInfo.assocRspInfoElements */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeConnectionInfoGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeConnectionInfoGetCfm *primitive = (CsrWifiSmeConnectionInfoGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.ssid.ssid, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.ssid.length);
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.bssid.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.networkType80211);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.channelNumber);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.channelFrequency);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.authMode);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.pairwiseCipher);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.groupCipher);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.ifIndex);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.atimWindowTu);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.beaconPeriodTu);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.reassociation);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.beaconFrameLength);
- if (primitive->connectionInfo.beaconFrameLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.beaconFrame, ((u16) (primitive->connectionInfo.beaconFrameLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.associationReqFrameLength);
- if (primitive->connectionInfo.associationReqFrameLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.associationReqFrame, ((u16) (primitive->connectionInfo.associationReqFrameLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.associationRspFrameLength);
- if (primitive->connectionInfo.associationRspFrameLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.associationRspFrame, ((u16) (primitive->connectionInfo.associationRspFrameLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocScanInfoElementsLength);
- if (primitive->connectionInfo.assocScanInfoElementsLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.assocScanInfoElements, ((u16) (primitive->connectionInfo.assocScanInfoElementsLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocReqCapabilities);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocReqListenIntervalTu);
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.assocReqApAddress.a, ((u16) (6)));
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocReqInfoElementsLength);
- if (primitive->connectionInfo.assocReqInfoElementsLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.assocReqInfoElements, ((u16) (primitive->connectionInfo.assocReqInfoElementsLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocRspResult);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocRspCapabilityInfo);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocRspAssociationId);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocRspInfoElementsLength);
- if (primitive->connectionInfo.assocRspInfoElementsLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.assocRspInfoElements, ((u16) (primitive->connectionInfo.assocRspInfoElementsLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeConnectionInfoGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeConnectionInfoGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeConnectionInfoGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrMemCpyDes(primitive->connectionInfo.ssid.ssid, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->connectionInfo.ssid.length, buffer, &offset);
- CsrMemCpyDes(primitive->connectionInfo.bssid.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->connectionInfo.networkType80211, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionInfo.channelNumber, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.channelFrequency, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.authMode, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.pairwiseCipher, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.groupCipher, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionInfo.ifIndex, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.atimWindowTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.beaconPeriodTu, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionInfo.reassociation, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.beaconFrameLength, buffer, &offset);
- if (primitive->connectionInfo.beaconFrameLength)
- {
- primitive->connectionInfo.beaconFrame = kmalloc(primitive->connectionInfo.beaconFrameLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.beaconFrame, buffer, &offset, ((u16) (primitive->connectionInfo.beaconFrameLength)));
- }
- else
- {
- primitive->connectionInfo.beaconFrame = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.associationReqFrameLength, buffer, &offset);
- if (primitive->connectionInfo.associationReqFrameLength)
- {
- primitive->connectionInfo.associationReqFrame = kmalloc(primitive->connectionInfo.associationReqFrameLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.associationReqFrame, buffer, &offset, ((u16) (primitive->connectionInfo.associationReqFrameLength)));
- }
- else
- {
- primitive->connectionInfo.associationReqFrame = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.associationRspFrameLength, buffer, &offset);
- if (primitive->connectionInfo.associationRspFrameLength)
- {
- primitive->connectionInfo.associationRspFrame = kmalloc(primitive->connectionInfo.associationRspFrameLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.associationRspFrame, buffer, &offset, ((u16) (primitive->connectionInfo.associationRspFrameLength)));
- }
- else
- {
- primitive->connectionInfo.associationRspFrame = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocScanInfoElementsLength, buffer, &offset);
- if (primitive->connectionInfo.assocScanInfoElementsLength)
- {
- primitive->connectionInfo.assocScanInfoElements = kmalloc(primitive->connectionInfo.assocScanInfoElementsLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.assocScanInfoElements, buffer, &offset, ((u16) (primitive->connectionInfo.assocScanInfoElementsLength)));
- }
- else
- {
- primitive->connectionInfo.assocScanInfoElements = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocReqCapabilities, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocReqListenIntervalTu, buffer, &offset);
- CsrMemCpyDes(primitive->connectionInfo.assocReqApAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocReqInfoElementsLength, buffer, &offset);
- if (primitive->connectionInfo.assocReqInfoElementsLength)
- {
- primitive->connectionInfo.assocReqInfoElements = kmalloc(primitive->connectionInfo.assocReqInfoElementsLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.assocReqInfoElements, buffer, &offset, ((u16) (primitive->connectionInfo.assocReqInfoElementsLength)));
- }
- else
- {
- primitive->connectionInfo.assocReqInfoElements = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocRspResult, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocRspCapabilityInfo, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocRspAssociationId, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocRspInfoElementsLength, buffer, &offset);
- if (primitive->connectionInfo.assocRspInfoElementsLength)
- {
- primitive->connectionInfo.assocRspInfoElements = kmalloc(primitive->connectionInfo.assocRspInfoElementsLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.assocRspInfoElements, buffer, &offset, ((u16) (primitive->connectionInfo.assocRspInfoElementsLength)));
- }
- else
- {
- primitive->connectionInfo.assocRspInfoElements = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeConnectionInfoGetCfmSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeConnectionInfoGetCfm *primitive = (CsrWifiSmeConnectionInfoGetCfm *) voidPrimitivePointer;
- kfree(primitive->connectionInfo.beaconFrame);
- kfree(primitive->connectionInfo.associationReqFrame);
- kfree(primitive->connectionInfo.associationRspFrame);
- kfree(primitive->connectionInfo.assocScanInfoElements);
- kfree(primitive->connectionInfo.assocReqInfoElements);
- kfree(primitive->connectionInfo.assocRspInfoElements);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeConnectionQualityIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 9) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* s16 primitive->linkQuality.unifiRssi */
- bufferSize += 2; /* s16 primitive->linkQuality.unifiSnr */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeConnectionQualityIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeConnectionQualityInd *primitive = (CsrWifiSmeConnectionQualityInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->linkQuality.unifiRssi);
- CsrUint16Ser(ptr, len, (u16) primitive->linkQuality.unifiSnr);
- return(ptr);
-}
-
-
-void* CsrWifiSmeConnectionQualityIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeConnectionQualityInd *primitive = kmalloc(sizeof(CsrWifiSmeConnectionQualityInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->linkQuality.unifiRssi, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->linkQuality.unifiSnr, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeConnectionStatsGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 101) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* u8 primitive->connectionStats.unifiTxDataRate */
- bufferSize += 1; /* u8 primitive->connectionStats.unifiRxDataRate */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11RetryCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11MultipleRetryCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11AckFailureCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11FrameDuplicateCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11FcsErrorCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11RtsSuccessCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11RtsFailureCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11FailedCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11TransmittedFragmentCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11TransmittedFrameCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11WepExcludedCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11WepIcvErrorCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11WepUndecryptableCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11MulticastReceivedFrameCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11MulticastTransmittedFrameCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11ReceivedFragmentCount */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11Rsna4WayHandshakeFailures */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11RsnaTkipCounterMeasuresInvoked */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11RsnaStatsTkipLocalMicFailures */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11RsnaStatsTkipReplays */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11RsnaStatsTkipIcvErrors */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11RsnaStatsCcmpReplays */
- bufferSize += 4; /* u32 primitive->connectionStats.dot11RsnaStatsCcmpDecryptErrors */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeConnectionStatsGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeConnectionStatsGetCfm *primitive = (CsrWifiSmeConnectionStatsGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionStats.unifiTxDataRate);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionStats.unifiRxDataRate);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11RetryCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11MultipleRetryCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11AckFailureCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11FrameDuplicateCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11FcsErrorCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11RtsSuccessCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11RtsFailureCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11FailedCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11TransmittedFragmentCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11TransmittedFrameCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11WepExcludedCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11WepIcvErrorCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11WepUndecryptableCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11MulticastReceivedFrameCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11MulticastTransmittedFrameCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11ReceivedFragmentCount);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11Rsna4WayHandshakeFailures);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11RsnaTkipCounterMeasuresInvoked);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11RsnaStatsTkipLocalMicFailures);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11RsnaStatsTkipReplays);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11RsnaStatsTkipIcvErrors);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11RsnaStatsCcmpReplays);
- CsrUint32Ser(ptr, len, (u32) primitive->connectionStats.dot11RsnaStatsCcmpDecryptErrors);
- return(ptr);
-}
-
-
-void* CsrWifiSmeConnectionStatsGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeConnectionStatsGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeConnectionStatsGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionStats.unifiTxDataRate, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionStats.unifiRxDataRate, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11RetryCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11MultipleRetryCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11AckFailureCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11FrameDuplicateCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11FcsErrorCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11RtsSuccessCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11RtsFailureCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11FailedCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11TransmittedFragmentCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11TransmittedFrameCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11WepExcludedCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11WepIcvErrorCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11WepUndecryptableCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11MulticastReceivedFrameCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11MulticastTransmittedFrameCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11ReceivedFragmentCount, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11Rsna4WayHandshakeFailures, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11RsnaTkipCounterMeasuresInvoked, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11RsnaStatsTkipLocalMicFailures, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11RsnaStatsTkipReplays, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11RsnaStatsTkipIcvErrors, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11RsnaStatsCcmpReplays, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->connectionStats.dot11RsnaStatsCcmpDecryptErrors, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeDisconnectCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeDisconnectCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeDisconnectCfm *primitive = (CsrWifiSmeDisconnectCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiSmeDisconnectCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeDisconnectCfm *primitive = kmalloc(sizeof(CsrWifiSmeDisconnectCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeHostConfigGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 10) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* CsrWifiSmeHostPowerMode primitive->hostConfig.powerMode */
- bufferSize += 2; /* u16 primitive->hostConfig.applicationDataPeriodMs */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeHostConfigGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeHostConfigGetCfm *primitive = (CsrWifiSmeHostConfigGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->hostConfig.powerMode);
- CsrUint16Ser(ptr, len, (u16) primitive->hostConfig.applicationDataPeriodMs);
- return(ptr);
-}
-
-
-void* CsrWifiSmeHostConfigGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeHostConfigGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeHostConfigGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->hostConfig.powerMode, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->hostConfig.applicationDataPeriodMs, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeHostConfigSetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeHostConfigSetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeHostConfigSetCfm *primitive = (CsrWifiSmeHostConfigSetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiSmeHostConfigSetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeHostConfigSetCfm *primitive = kmalloc(sizeof(CsrWifiSmeHostConfigSetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeIbssStationIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 10) */
- bufferSize += 6; /* u8 primitive->address.a[6] */
- bufferSize += 1; /* u8 primitive->isconnected */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeIbssStationIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeIbssStationInd *primitive = (CsrWifiSmeIbssStationInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrMemCpySer(ptr, len, (const void *) primitive->address.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->isconnected);
- return(ptr);
-}
-
-
-void* CsrWifiSmeIbssStationIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeIbssStationInd *primitive = kmalloc(sizeof(CsrWifiSmeIbssStationInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrMemCpyDes(primitive->address.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->isconnected, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeKeyCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 15) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* CsrWifiSmeListAction primitive->action */
- bufferSize += 1; /* CsrWifiSmeKeyType primitive->keyType */
- bufferSize += 6; /* u8 primitive->peerMacAddress.a[6] */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeKeyCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeKeyCfm *primitive = (CsrWifiSmeKeyCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->action);
- CsrUint8Ser(ptr, len, (u8) primitive->keyType);
- CsrMemCpySer(ptr, len, (const void *) primitive->peerMacAddress.a, ((u16) (6)));
- return(ptr);
-}
-
-
-void* CsrWifiSmeKeyCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeKeyCfm *primitive = kmalloc(sizeof(CsrWifiSmeKeyCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->action, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->keyType, buffer, &offset);
- CsrMemCpyDes(primitive->peerMacAddress.a, buffer, &offset, ((u16) (6)));
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeLinkQualityGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 11) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 2; /* s16 primitive->linkQuality.unifiRssi */
- bufferSize += 2; /* s16 primitive->linkQuality.unifiSnr */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeLinkQualityGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeLinkQualityGetCfm *primitive = (CsrWifiSmeLinkQualityGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint16Ser(ptr, len, (u16) primitive->linkQuality.unifiRssi);
- CsrUint16Ser(ptr, len, (u16) primitive->linkQuality.unifiSnr);
- return(ptr);
-}
-
-
-void* CsrWifiSmeLinkQualityGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeLinkQualityGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeLinkQualityGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->linkQuality.unifiRssi, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->linkQuality.unifiSnr, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeMediaStatusIndSizeof(void *msg)
-{
- CsrWifiSmeMediaStatusInd *primitive = (CsrWifiSmeMediaStatusInd *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 99) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiSmeMediaStatus primitive->mediaStatus */
- bufferSize += 32; /* u8 primitive->connectionInfo.ssid.ssid[32] */
- bufferSize += 1; /* u8 primitive->connectionInfo.ssid.length */
- bufferSize += 6; /* u8 primitive->connectionInfo.bssid.a[6] */
- bufferSize += 1; /* CsrWifiSme80211NetworkType primitive->connectionInfo.networkType80211 */
- bufferSize += 1; /* u8 primitive->connectionInfo.channelNumber */
- bufferSize += 2; /* u16 primitive->connectionInfo.channelFrequency */
- bufferSize += 2; /* CsrWifiSmeAuthMode primitive->connectionInfo.authMode */
- bufferSize += 2; /* CsrWifiSmeEncryption primitive->connectionInfo.pairwiseCipher */
- bufferSize += 2; /* CsrWifiSmeEncryption primitive->connectionInfo.groupCipher */
- bufferSize += 1; /* CsrWifiSmeRadioIF primitive->connectionInfo.ifIndex */
- bufferSize += 2; /* u16 primitive->connectionInfo.atimWindowTu */
- bufferSize += 2; /* u16 primitive->connectionInfo.beaconPeriodTu */
- bufferSize += 1; /* u8 primitive->connectionInfo.reassociation */
- bufferSize += 2; /* u16 primitive->connectionInfo.beaconFrameLength */
- bufferSize += primitive->connectionInfo.beaconFrameLength; /* u8 primitive->connectionInfo.beaconFrame */
- bufferSize += 2; /* u16 primitive->connectionInfo.associationReqFrameLength */
- bufferSize += primitive->connectionInfo.associationReqFrameLength; /* u8 primitive->connectionInfo.associationReqFrame */
- bufferSize += 2; /* u16 primitive->connectionInfo.associationRspFrameLength */
- bufferSize += primitive->connectionInfo.associationRspFrameLength; /* u8 primitive->connectionInfo.associationRspFrame */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocScanInfoElementsLength */
- bufferSize += primitive->connectionInfo.assocScanInfoElementsLength; /* u8 primitive->connectionInfo.assocScanInfoElements */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocReqCapabilities */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocReqListenIntervalTu */
- bufferSize += 6; /* u8 primitive->connectionInfo.assocReqApAddress.a[6] */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocReqInfoElementsLength */
- bufferSize += primitive->connectionInfo.assocReqInfoElementsLength; /* u8 primitive->connectionInfo.assocReqInfoElements */
- bufferSize += 2; /* CsrWifiSmeIEEE80211Result primitive->connectionInfo.assocRspResult */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocRspCapabilityInfo */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocRspAssociationId */
- bufferSize += 2; /* u16 primitive->connectionInfo.assocRspInfoElementsLength */
- bufferSize += primitive->connectionInfo.assocRspInfoElementsLength; /* u8 primitive->connectionInfo.assocRspInfoElements */
- bufferSize += 2; /* CsrWifiSmeIEEE80211Reason primitive->disassocReason */
- bufferSize += 2; /* CsrWifiSmeIEEE80211Reason primitive->deauthReason */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeMediaStatusIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeMediaStatusInd *primitive = (CsrWifiSmeMediaStatusInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->mediaStatus);
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.ssid.ssid, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.ssid.length);
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.bssid.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.networkType80211);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.channelNumber);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.channelFrequency);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.authMode);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.pairwiseCipher);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.groupCipher);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.ifIndex);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.atimWindowTu);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.beaconPeriodTu);
- CsrUint8Ser(ptr, len, (u8) primitive->connectionInfo.reassociation);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.beaconFrameLength);
- if (primitive->connectionInfo.beaconFrameLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.beaconFrame, ((u16) (primitive->connectionInfo.beaconFrameLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.associationReqFrameLength);
- if (primitive->connectionInfo.associationReqFrameLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.associationReqFrame, ((u16) (primitive->connectionInfo.associationReqFrameLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.associationRspFrameLength);
- if (primitive->connectionInfo.associationRspFrameLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.associationRspFrame, ((u16) (primitive->connectionInfo.associationRspFrameLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocScanInfoElementsLength);
- if (primitive->connectionInfo.assocScanInfoElementsLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.assocScanInfoElements, ((u16) (primitive->connectionInfo.assocScanInfoElementsLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocReqCapabilities);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocReqListenIntervalTu);
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.assocReqApAddress.a, ((u16) (6)));
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocReqInfoElementsLength);
- if (primitive->connectionInfo.assocReqInfoElementsLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.assocReqInfoElements, ((u16) (primitive->connectionInfo.assocReqInfoElementsLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocRspResult);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocRspCapabilityInfo);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocRspAssociationId);
- CsrUint16Ser(ptr, len, (u16) primitive->connectionInfo.assocRspInfoElementsLength);
- if (primitive->connectionInfo.assocRspInfoElementsLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->connectionInfo.assocRspInfoElements, ((u16) (primitive->connectionInfo.assocRspInfoElementsLength)));
- }
- CsrUint16Ser(ptr, len, (u16) primitive->disassocReason);
- CsrUint16Ser(ptr, len, (u16) primitive->deauthReason);
- return(ptr);
-}
-
-
-void* CsrWifiSmeMediaStatusIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeMediaStatusInd *primitive = kmalloc(sizeof(CsrWifiSmeMediaStatusInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->mediaStatus, buffer, &offset);
- CsrMemCpyDes(primitive->connectionInfo.ssid.ssid, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->connectionInfo.ssid.length, buffer, &offset);
- CsrMemCpyDes(primitive->connectionInfo.bssid.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->connectionInfo.networkType80211, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionInfo.channelNumber, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.channelFrequency, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.authMode, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.pairwiseCipher, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.groupCipher, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionInfo.ifIndex, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.atimWindowTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.beaconPeriodTu, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->connectionInfo.reassociation, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.beaconFrameLength, buffer, &offset);
- if (primitive->connectionInfo.beaconFrameLength)
- {
- primitive->connectionInfo.beaconFrame = kmalloc(primitive->connectionInfo.beaconFrameLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.beaconFrame, buffer, &offset, ((u16) (primitive->connectionInfo.beaconFrameLength)));
- }
- else
- {
- primitive->connectionInfo.beaconFrame = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.associationReqFrameLength, buffer, &offset);
- if (primitive->connectionInfo.associationReqFrameLength)
- {
- primitive->connectionInfo.associationReqFrame = kmalloc(primitive->connectionInfo.associationReqFrameLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.associationReqFrame, buffer, &offset, ((u16) (primitive->connectionInfo.associationReqFrameLength)));
- }
- else
- {
- primitive->connectionInfo.associationReqFrame = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.associationRspFrameLength, buffer, &offset);
- if (primitive->connectionInfo.associationRspFrameLength)
- {
- primitive->connectionInfo.associationRspFrame = kmalloc(primitive->connectionInfo.associationRspFrameLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.associationRspFrame, buffer, &offset, ((u16) (primitive->connectionInfo.associationRspFrameLength)));
- }
- else
- {
- primitive->connectionInfo.associationRspFrame = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocScanInfoElementsLength, buffer, &offset);
- if (primitive->connectionInfo.assocScanInfoElementsLength)
- {
- primitive->connectionInfo.assocScanInfoElements = kmalloc(primitive->connectionInfo.assocScanInfoElementsLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.assocScanInfoElements, buffer, &offset, ((u16) (primitive->connectionInfo.assocScanInfoElementsLength)));
- }
- else
- {
- primitive->connectionInfo.assocScanInfoElements = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocReqCapabilities, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocReqListenIntervalTu, buffer, &offset);
- CsrMemCpyDes(primitive->connectionInfo.assocReqApAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocReqInfoElementsLength, buffer, &offset);
- if (primitive->connectionInfo.assocReqInfoElementsLength)
- {
- primitive->connectionInfo.assocReqInfoElements = kmalloc(primitive->connectionInfo.assocReqInfoElementsLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.assocReqInfoElements, buffer, &offset, ((u16) (primitive->connectionInfo.assocReqInfoElementsLength)));
- }
- else
- {
- primitive->connectionInfo.assocReqInfoElements = NULL;
- }
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocRspResult, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocRspCapabilityInfo, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocRspAssociationId, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->connectionInfo.assocRspInfoElementsLength, buffer, &offset);
- if (primitive->connectionInfo.assocRspInfoElementsLength)
- {
- primitive->connectionInfo.assocRspInfoElements = kmalloc(primitive->connectionInfo.assocRspInfoElementsLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->connectionInfo.assocRspInfoElements, buffer, &offset, ((u16) (primitive->connectionInfo.assocRspInfoElementsLength)));
- }
- else
- {
- primitive->connectionInfo.assocRspInfoElements = NULL;
- }
- CsrUint16Des((u16 *) &primitive->disassocReason, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->deauthReason, buffer, &offset);
-
- return primitive;
-}
-
-
-void CsrWifiSmeMediaStatusIndSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeMediaStatusInd *primitive = (CsrWifiSmeMediaStatusInd *) voidPrimitivePointer;
- kfree(primitive->connectionInfo.beaconFrame);
- kfree(primitive->connectionInfo.associationReqFrame);
- kfree(primitive->connectionInfo.associationRspFrame);
- kfree(primitive->connectionInfo.assocScanInfoElements);
- kfree(primitive->connectionInfo.assocReqInfoElements);
- kfree(primitive->connectionInfo.assocRspInfoElements);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeMibConfigGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* u8 primitive->mibConfig.unifiFixMaxTxDataRate */
- bufferSize += 1; /* u8 primitive->mibConfig.unifiFixTxDataRate */
- bufferSize += 2; /* u16 primitive->mibConfig.dot11RtsThreshold */
- bufferSize += 2; /* u16 primitive->mibConfig.dot11FragmentationThreshold */
- bufferSize += 2; /* u16 primitive->mibConfig.dot11CurrentTxPowerLevel */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeMibConfigGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeMibConfigGetCfm *primitive = (CsrWifiSmeMibConfigGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->mibConfig.unifiFixMaxTxDataRate);
- CsrUint8Ser(ptr, len, (u8) primitive->mibConfig.unifiFixTxDataRate);
- CsrUint16Ser(ptr, len, (u16) primitive->mibConfig.dot11RtsThreshold);
- CsrUint16Ser(ptr, len, (u16) primitive->mibConfig.dot11FragmentationThreshold);
- CsrUint16Ser(ptr, len, (u16) primitive->mibConfig.dot11CurrentTxPowerLevel);
- return(ptr);
-}
-
-
-void* CsrWifiSmeMibConfigGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeMibConfigGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeMibConfigGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->mibConfig.unifiFixMaxTxDataRate, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->mibConfig.unifiFixTxDataRate, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->mibConfig.dot11RtsThreshold, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->mibConfig.dot11FragmentationThreshold, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->mibConfig.dot11CurrentTxPowerLevel, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeMibGetCfmSizeof(void *msg)
-{
- CsrWifiSmeMibGetCfm *primitive = (CsrWifiSmeMibGetCfm *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 8) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 2; /* u16 primitive->mibAttributeLength */
- bufferSize += primitive->mibAttributeLength; /* u8 primitive->mibAttribute */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeMibGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeMibGetCfm *primitive = (CsrWifiSmeMibGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint16Ser(ptr, len, (u16) primitive->mibAttributeLength);
- if (primitive->mibAttributeLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->mibAttribute, ((u16) (primitive->mibAttributeLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeMibGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeMibGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeMibGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->mibAttributeLength, buffer, &offset);
- if (primitive->mibAttributeLength)
- {
- primitive->mibAttribute = kmalloc(primitive->mibAttributeLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->mibAttribute, buffer, &offset, ((u16) (primitive->mibAttributeLength)));
- }
- else
- {
- primitive->mibAttribute = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeMibGetCfmSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeMibGetCfm *primitive = (CsrWifiSmeMibGetCfm *) voidPrimitivePointer;
- kfree(primitive->mibAttribute);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeMibGetNextCfmSizeof(void *msg)
-{
- CsrWifiSmeMibGetNextCfm *primitive = (CsrWifiSmeMibGetNextCfm *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 8) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 2; /* u16 primitive->mibAttributeLength */
- bufferSize += primitive->mibAttributeLength; /* u8 primitive->mibAttribute */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeMibGetNextCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeMibGetNextCfm *primitive = (CsrWifiSmeMibGetNextCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint16Ser(ptr, len, (u16) primitive->mibAttributeLength);
- if (primitive->mibAttributeLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->mibAttribute, ((u16) (primitive->mibAttributeLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeMibGetNextCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeMibGetNextCfm *primitive = kmalloc(sizeof(CsrWifiSmeMibGetNextCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->mibAttributeLength, buffer, &offset);
- if (primitive->mibAttributeLength)
- {
- primitive->mibAttribute = kmalloc(primitive->mibAttributeLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->mibAttribute, buffer, &offset, ((u16) (primitive->mibAttributeLength)));
- }
- else
- {
- primitive->mibAttribute = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeMibGetNextCfmSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeMibGetNextCfm *primitive = (CsrWifiSmeMibGetNextCfm *) voidPrimitivePointer;
- kfree(primitive->mibAttribute);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeMicFailureIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 15) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* u8 primitive->secondFailure */
- bufferSize += 2; /* u16 primitive->count */
- bufferSize += 6; /* u8 primitive->address.a[6] */
- bufferSize += 1; /* CsrWifiSmeKeyType primitive->keyType */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeMicFailureIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeMicFailureInd *primitive = (CsrWifiSmeMicFailureInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->secondFailure);
- CsrUint16Ser(ptr, len, (u16) primitive->count);
- CsrMemCpySer(ptr, len, (const void *) primitive->address.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->keyType);
- return(ptr);
-}
-
-
-void* CsrWifiSmeMicFailureIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeMicFailureInd *primitive = kmalloc(sizeof(CsrWifiSmeMicFailureInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->secondFailure, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->count, buffer, &offset);
- CsrMemCpyDes(primitive->address.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->keyType, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeMulticastAddressCfmSizeof(void *msg)
-{
- CsrWifiSmeMulticastAddressCfm *primitive = (CsrWifiSmeMulticastAddressCfm *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 15) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* CsrWifiSmeListAction primitive->action */
- bufferSize += 1; /* u8 primitive->getAddressesCount */
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->getAddressesCount; i1++)
- {
- bufferSize += 6; /* u8 primitive->getAddresses[i1].a[6] */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeMulticastAddressCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeMulticastAddressCfm *primitive = (CsrWifiSmeMulticastAddressCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->action);
- CsrUint8Ser(ptr, len, (u8) primitive->getAddressesCount);
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->getAddressesCount; i1++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->getAddresses[i1].a, ((u16) (6)));
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeMulticastAddressCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeMulticastAddressCfm *primitive = kmalloc(sizeof(CsrWifiSmeMulticastAddressCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->action, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->getAddressesCount, buffer, &offset);
- primitive->getAddresses = NULL;
- if (primitive->getAddressesCount)
- {
- primitive->getAddresses = kmalloc(sizeof(CsrWifiMacAddress) * primitive->getAddressesCount, GFP_KERNEL);
- }
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->getAddressesCount; i1++)
- {
- CsrMemCpyDes(primitive->getAddresses[i1].a, buffer, &offset, ((u16) (6)));
- }
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeMulticastAddressCfmSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeMulticastAddressCfm *primitive = (CsrWifiSmeMulticastAddressCfm *) voidPrimitivePointer;
- kfree(primitive->getAddresses);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmePacketFilterSetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmePacketFilterSetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmePacketFilterSetCfm *primitive = (CsrWifiSmePacketFilterSetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiSmePacketFilterSetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmePacketFilterSetCfm *primitive = kmalloc(sizeof(CsrWifiSmePacketFilterSetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmePermanentMacAddressGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 11) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 6; /* u8 primitive->permanentMacAddress.a[6] */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmePermanentMacAddressGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmePermanentMacAddressGetCfm *primitive = (CsrWifiSmePermanentMacAddressGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrMemCpySer(ptr, len, (const void *) primitive->permanentMacAddress.a, ((u16) (6)));
- return(ptr);
-}
-
-
-void* CsrWifiSmePermanentMacAddressGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmePermanentMacAddressGetCfm *primitive = kmalloc(sizeof(CsrWifiSmePermanentMacAddressGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrMemCpyDes(primitive->permanentMacAddress.a, buffer, &offset, ((u16) (6)));
-
- return primitive;
-}
-
-
-size_t CsrWifiSmePmkidCandidateListIndSizeof(void *msg)
-{
- CsrWifiSmePmkidCandidateListInd *primitive = (CsrWifiSmePmkidCandidateListInd *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* u8 primitive->pmkidCandidatesCount */
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->pmkidCandidatesCount; i1++)
- {
- bufferSize += 6; /* u8 primitive->pmkidCandidates[i1].bssid.a[6] */
- bufferSize += 1; /* u8 primitive->pmkidCandidates[i1].preAuthAllowed */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmePmkidCandidateListIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmePmkidCandidateListInd *primitive = (CsrWifiSmePmkidCandidateListInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->pmkidCandidatesCount);
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->pmkidCandidatesCount; i1++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->pmkidCandidates[i1].bssid.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->pmkidCandidates[i1].preAuthAllowed);
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmePmkidCandidateListIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmePmkidCandidateListInd *primitive = kmalloc(sizeof(CsrWifiSmePmkidCandidateListInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->pmkidCandidatesCount, buffer, &offset);
- primitive->pmkidCandidates = NULL;
- if (primitive->pmkidCandidatesCount)
- {
- primitive->pmkidCandidates = kmalloc(sizeof(CsrWifiSmePmkidCandidate) * primitive->pmkidCandidatesCount, GFP_KERNEL);
- }
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->pmkidCandidatesCount; i1++)
- {
- CsrMemCpyDes(primitive->pmkidCandidates[i1].bssid.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->pmkidCandidates[i1].preAuthAllowed, buffer, &offset);
- }
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmePmkidCandidateListIndSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmePmkidCandidateListInd *primitive = (CsrWifiSmePmkidCandidateListInd *) voidPrimitivePointer;
- kfree(primitive->pmkidCandidates);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmePmkidCfmSizeof(void *msg)
-{
- CsrWifiSmePmkidCfm *primitive = (CsrWifiSmePmkidCfm *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 31) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* CsrWifiSmeListAction primitive->action */
- bufferSize += 1; /* u8 primitive->getPmkidsCount */
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->getPmkidsCount; i1++)
- {
- bufferSize += 6; /* u8 primitive->getPmkids[i1].bssid.a[6] */
- bufferSize += 16; /* u8 primitive->getPmkids[i1].pmkid[16] */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmePmkidCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmePmkidCfm *primitive = (CsrWifiSmePmkidCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->action);
- CsrUint8Ser(ptr, len, (u8) primitive->getPmkidsCount);
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->getPmkidsCount; i1++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->getPmkids[i1].bssid.a, ((u16) (6)));
- CsrMemCpySer(ptr, len, (const void *) primitive->getPmkids[i1].pmkid, ((u16) (16)));
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmePmkidCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmePmkidCfm *primitive = kmalloc(sizeof(CsrWifiSmePmkidCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->action, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->getPmkidsCount, buffer, &offset);
- primitive->getPmkids = NULL;
- if (primitive->getPmkidsCount)
- {
- primitive->getPmkids = kmalloc(sizeof(CsrWifiSmePmkid) * primitive->getPmkidsCount, GFP_KERNEL);
- }
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->getPmkidsCount; i1++)
- {
- CsrMemCpyDes(primitive->getPmkids[i1].bssid.a, buffer, &offset, ((u16) (6)));
- CsrMemCpyDes(primitive->getPmkids[i1].pmkid, buffer, &offset, ((u16) (16)));
- }
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmePmkidCfmSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmePmkidCfm *primitive = (CsrWifiSmePmkidCfm *) voidPrimitivePointer;
- kfree(primitive->getPmkids);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmePowerConfigGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* CsrWifiSmePowerSaveLevel primitive->powerConfig.powerSaveLevel */
- bufferSize += 2; /* u16 primitive->powerConfig.listenIntervalTu */
- bufferSize += 1; /* u8 primitive->powerConfig.rxDtims */
- bufferSize += 1; /* CsrWifiSmeD3AutoScanMode primitive->powerConfig.d3AutoScanMode */
- bufferSize += 1; /* u8 primitive->powerConfig.clientTrafficWindow */
- bufferSize += 1; /* u8 primitive->powerConfig.opportunisticPowerSave */
- bufferSize += 1; /* u8 primitive->powerConfig.noticeOfAbsence */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmePowerConfigGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmePowerConfigGetCfm *primitive = (CsrWifiSmePowerConfigGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->powerConfig.powerSaveLevel);
- CsrUint16Ser(ptr, len, (u16) primitive->powerConfig.listenIntervalTu);
- CsrUint8Ser(ptr, len, (u8) primitive->powerConfig.rxDtims);
- CsrUint8Ser(ptr, len, (u8) primitive->powerConfig.d3AutoScanMode);
- CsrUint8Ser(ptr, len, (u8) primitive->powerConfig.clientTrafficWindow);
- CsrUint8Ser(ptr, len, (u8) primitive->powerConfig.opportunisticPowerSave);
- CsrUint8Ser(ptr, len, (u8) primitive->powerConfig.noticeOfAbsence);
- return(ptr);
-}
-
-
-void* CsrWifiSmePowerConfigGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmePowerConfigGetCfm *primitive = kmalloc(sizeof(CsrWifiSmePowerConfigGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->powerConfig.powerSaveLevel, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->powerConfig.listenIntervalTu, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->powerConfig.rxDtims, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->powerConfig.d3AutoScanMode, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->powerConfig.clientTrafficWindow, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->powerConfig.opportunisticPowerSave, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->powerConfig.noticeOfAbsence, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeRegulatoryDomainInfoGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 10) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* u8 primitive->regDomInfo.dot11MultiDomainCapabilityImplemented */
- bufferSize += 1; /* u8 primitive->regDomInfo.dot11MultiDomainCapabilityEnabled */
- bufferSize += 1; /* CsrWifiSmeRegulatoryDomain primitive->regDomInfo.currentRegulatoryDomain */
- bufferSize += 2; /* u8 primitive->regDomInfo.currentCountryCode[2] */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeRegulatoryDomainInfoGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeRegulatoryDomainInfoGetCfm *primitive = (CsrWifiSmeRegulatoryDomainInfoGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->regDomInfo.dot11MultiDomainCapabilityImplemented);
- CsrUint8Ser(ptr, len, (u8) primitive->regDomInfo.dot11MultiDomainCapabilityEnabled);
- CsrUint8Ser(ptr, len, (u8) primitive->regDomInfo.currentRegulatoryDomain);
- CsrMemCpySer(ptr, len, (const void *) primitive->regDomInfo.currentCountryCode, ((u16) (2)));
- return(ptr);
-}
-
-
-void* CsrWifiSmeRegulatoryDomainInfoGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeRegulatoryDomainInfoGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeRegulatoryDomainInfoGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->regDomInfo.dot11MultiDomainCapabilityImplemented, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->regDomInfo.dot11MultiDomainCapabilityEnabled, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->regDomInfo.currentRegulatoryDomain, buffer, &offset);
- CsrMemCpyDes(primitive->regDomInfo.currentCountryCode, buffer, &offset, ((u16) (2)));
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeRoamCompleteIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeRoamCompleteIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeRoamCompleteInd *primitive = (CsrWifiSmeRoamCompleteInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiSmeRoamCompleteIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeRoamCompleteInd *primitive = kmalloc(sizeof(CsrWifiSmeRoamCompleteInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeRoamStartIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 8) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 1; /* CsrWifiSmeRoamReason primitive->roamReason */
- bufferSize += 2; /* CsrWifiSmeIEEE80211Reason primitive->reason80211 */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeRoamStartIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeRoamStartInd *primitive = (CsrWifiSmeRoamStartInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint8Ser(ptr, len, (u8) primitive->roamReason);
- CsrUint16Ser(ptr, len, (u16) primitive->reason80211);
- return(ptr);
-}
-
-
-void* CsrWifiSmeRoamStartIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeRoamStartInd *primitive = kmalloc(sizeof(CsrWifiSmeRoamStartInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->roamReason, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->reason80211, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeRoamingConfigGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 72) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- {
- u16 i2;
- for (i2 = 0; i2 < 3; i2++)
- {
- bufferSize += 2; /* s16 primitive->roamingConfig.roamingBands[i2].rssiHighThreshold */
- bufferSize += 2; /* s16 primitive->roamingConfig.roamingBands[i2].rssiLowThreshold */
- bufferSize += 2; /* s16 primitive->roamingConfig.roamingBands[i2].snrHighThreshold */
- bufferSize += 2; /* s16 primitive->roamingConfig.roamingBands[i2].snrLowThreshold */
- }
- }
- bufferSize += 1; /* u8 primitive->roamingConfig.disableSmoothRoaming */
- bufferSize += 1; /* u8 primitive->roamingConfig.disableRoamScans */
- bufferSize += 1; /* u8 primitive->roamingConfig.reconnectLimit */
- bufferSize += 2; /* u16 primitive->roamingConfig.reconnectLimitIntervalMs */
- {
- u16 i2;
- for (i2 = 0; i2 < 3; i2++)
- {
- bufferSize += 2; /* u16 primitive->roamingConfig.roamScanCfg[i2].intervalSeconds */
- bufferSize += 2; /* u16 primitive->roamingConfig.roamScanCfg[i2].validitySeconds */
- bufferSize += 2; /* u16 primitive->roamingConfig.roamScanCfg[i2].minActiveChannelTimeTu */
- bufferSize += 2; /* u16 primitive->roamingConfig.roamScanCfg[i2].maxActiveChannelTimeTu */
- bufferSize += 2; /* u16 primitive->roamingConfig.roamScanCfg[i2].minPassiveChannelTimeTu */
- bufferSize += 2; /* u16 primitive->roamingConfig.roamScanCfg[i2].maxPassiveChannelTimeTu */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeRoamingConfigGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeRoamingConfigGetCfm *primitive = (CsrWifiSmeRoamingConfigGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- {
- u16 i2;
- for (i2 = 0; i2 < 3; i2++)
- {
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamingBands[i2].rssiHighThreshold);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamingBands[i2].rssiLowThreshold);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamingBands[i2].snrHighThreshold);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamingBands[i2].snrLowThreshold);
- }
- }
- CsrUint8Ser(ptr, len, (u8) primitive->roamingConfig.disableSmoothRoaming);
- CsrUint8Ser(ptr, len, (u8) primitive->roamingConfig.disableRoamScans);
- CsrUint8Ser(ptr, len, (u8) primitive->roamingConfig.reconnectLimit);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.reconnectLimitIntervalMs);
- {
- u16 i2;
- for (i2 = 0; i2 < 3; i2++)
- {
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamScanCfg[i2].intervalSeconds);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamScanCfg[i2].validitySeconds);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamScanCfg[i2].minActiveChannelTimeTu);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamScanCfg[i2].maxActiveChannelTimeTu);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamScanCfg[i2].minPassiveChannelTimeTu);
- CsrUint16Ser(ptr, len, (u16) primitive->roamingConfig.roamScanCfg[i2].maxPassiveChannelTimeTu);
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeRoamingConfigGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeRoamingConfigGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeRoamingConfigGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- {
- u16 i2;
- for (i2 = 0; i2 < 3; i2++)
- {
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamingBands[i2].rssiHighThreshold, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamingBands[i2].rssiLowThreshold, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamingBands[i2].snrHighThreshold, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamingBands[i2].snrLowThreshold, buffer, &offset);
- }
- }
- CsrUint8Des((u8 *) &primitive->roamingConfig.disableSmoothRoaming, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->roamingConfig.disableRoamScans, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->roamingConfig.reconnectLimit, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.reconnectLimitIntervalMs, buffer, &offset);
- {
- u16 i2;
- for (i2 = 0; i2 < 3; i2++)
- {
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamScanCfg[i2].intervalSeconds, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamScanCfg[i2].validitySeconds, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamScanCfg[i2].minActiveChannelTimeTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamScanCfg[i2].maxActiveChannelTimeTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamScanCfg[i2].minPassiveChannelTimeTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->roamingConfig.roamScanCfg[i2].maxPassiveChannelTimeTu, buffer, &offset);
- }
- }
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeRoamingConfigSetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeRoamingConfigSetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeRoamingConfigSetCfm *primitive = (CsrWifiSmeRoamingConfigSetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiSmeRoamingConfigSetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeRoamingConfigSetCfm *primitive = kmalloc(sizeof(CsrWifiSmeRoamingConfigSetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeScanConfigGetCfmSizeof(void *msg)
-{
- CsrWifiSmeScanConfigGetCfm *primitive = (CsrWifiSmeScanConfigGetCfm *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 65) */
- bufferSize += 2; /* CsrResult primitive->status */
- {
- u16 i2;
- for (i2 = 0; i2 < 4; i2++)
- {
- bufferSize += 2; /* u16 primitive->scanConfig.scanCfg[i2].intervalSeconds */
- bufferSize += 2; /* u16 primitive->scanConfig.scanCfg[i2].validitySeconds */
- bufferSize += 2; /* u16 primitive->scanConfig.scanCfg[i2].minActiveChannelTimeTu */
- bufferSize += 2; /* u16 primitive->scanConfig.scanCfg[i2].maxActiveChannelTimeTu */
- bufferSize += 2; /* u16 primitive->scanConfig.scanCfg[i2].minPassiveChannelTimeTu */
- bufferSize += 2; /* u16 primitive->scanConfig.scanCfg[i2].maxPassiveChannelTimeTu */
- }
- }
- bufferSize += 1; /* u8 primitive->scanConfig.disableAutonomousScans */
- bufferSize += 2; /* u16 primitive->scanConfig.maxResults */
- bufferSize += 1; /* s8 primitive->scanConfig.highRssiThreshold */
- bufferSize += 1; /* s8 primitive->scanConfig.lowRssiThreshold */
- bufferSize += 1; /* s8 primitive->scanConfig.deltaRssiThreshold */
- bufferSize += 1; /* s8 primitive->scanConfig.highSnrThreshold */
- bufferSize += 1; /* s8 primitive->scanConfig.lowSnrThreshold */
- bufferSize += 1; /* s8 primitive->scanConfig.deltaSnrThreshold */
- bufferSize += 2; /* u16 primitive->scanConfig.passiveChannelListCount */
- bufferSize += primitive->scanConfig.passiveChannelListCount; /* u8 primitive->scanConfig.passiveChannelList */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeScanConfigGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeScanConfigGetCfm *primitive = (CsrWifiSmeScanConfigGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- {
- u16 i2;
- for (i2 = 0; i2 < 4; i2++)
- {
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.scanCfg[i2].intervalSeconds);
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.scanCfg[i2].validitySeconds);
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.scanCfg[i2].minActiveChannelTimeTu);
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.scanCfg[i2].maxActiveChannelTimeTu);
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.scanCfg[i2].minPassiveChannelTimeTu);
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.scanCfg[i2].maxPassiveChannelTimeTu);
- }
- }
- CsrUint8Ser(ptr, len, (u8) primitive->scanConfig.disableAutonomousScans);
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.maxResults);
- CsrUint8Ser(ptr, len, (u8) primitive->scanConfig.highRssiThreshold);
- CsrUint8Ser(ptr, len, (u8) primitive->scanConfig.lowRssiThreshold);
- CsrUint8Ser(ptr, len, (u8) primitive->scanConfig.deltaRssiThreshold);
- CsrUint8Ser(ptr, len, (u8) primitive->scanConfig.highSnrThreshold);
- CsrUint8Ser(ptr, len, (u8) primitive->scanConfig.lowSnrThreshold);
- CsrUint8Ser(ptr, len, (u8) primitive->scanConfig.deltaSnrThreshold);
- CsrUint16Ser(ptr, len, (u16) primitive->scanConfig.passiveChannelListCount);
- if (primitive->scanConfig.passiveChannelListCount)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->scanConfig.passiveChannelList, ((u16) (primitive->scanConfig.passiveChannelListCount)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeScanConfigGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeScanConfigGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeScanConfigGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- {
- u16 i2;
- for (i2 = 0; i2 < 4; i2++)
- {
- CsrUint16Des((u16 *) &primitive->scanConfig.scanCfg[i2].intervalSeconds, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanConfig.scanCfg[i2].validitySeconds, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanConfig.scanCfg[i2].minActiveChannelTimeTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanConfig.scanCfg[i2].maxActiveChannelTimeTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanConfig.scanCfg[i2].minPassiveChannelTimeTu, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanConfig.scanCfg[i2].maxPassiveChannelTimeTu, buffer, &offset);
- }
- }
- CsrUint8Des((u8 *) &primitive->scanConfig.disableAutonomousScans, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanConfig.maxResults, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanConfig.highRssiThreshold, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanConfig.lowRssiThreshold, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanConfig.deltaRssiThreshold, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanConfig.highSnrThreshold, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanConfig.lowSnrThreshold, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanConfig.deltaSnrThreshold, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanConfig.passiveChannelListCount, buffer, &offset);
- if (primitive->scanConfig.passiveChannelListCount)
- {
- primitive->scanConfig.passiveChannelList = kmalloc(primitive->scanConfig.passiveChannelListCount, GFP_KERNEL);
- CsrMemCpyDes(primitive->scanConfig.passiveChannelList, buffer, &offset, ((u16) (primitive->scanConfig.passiveChannelListCount)));
- }
- else
- {
- primitive->scanConfig.passiveChannelList = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeScanConfigGetCfmSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeScanConfigGetCfm *primitive = (CsrWifiSmeScanConfigGetCfm *) voidPrimitivePointer;
- kfree(primitive->scanConfig.passiveChannelList);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeScanResultIndSizeof(void *msg)
-{
- CsrWifiSmeScanResultInd *primitive = (CsrWifiSmeScanResultInd *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 149) */
- bufferSize += 32; /* u8 primitive->result.ssid.ssid[32] */
- bufferSize += 1; /* u8 primitive->result.ssid.length */
- bufferSize += 6; /* u8 primitive->result.bssid.a[6] */
- bufferSize += 2; /* s16 primitive->result.rssi */
- bufferSize += 2; /* s16 primitive->result.snr */
- bufferSize += 1; /* CsrWifiSmeRadioIF primitive->result.ifIndex */
- bufferSize += 2; /* u16 primitive->result.beaconPeriodTu */
- bufferSize += 8; /* u8 primitive->result.timeStamp.data[8] */
- bufferSize += 8; /* u8 primitive->result.localTime.data[8] */
- bufferSize += 2; /* u16 primitive->result.channelFrequency */
- bufferSize += 2; /* u16 primitive->result.capabilityInformation */
- bufferSize += 1; /* u8 primitive->result.channelNumber */
- bufferSize += 1; /* CsrWifiSmeBasicUsability primitive->result.usability */
- bufferSize += 1; /* CsrWifiSmeBssType primitive->result.bssType */
- bufferSize += 2; /* u16 primitive->result.informationElementsLength */
- bufferSize += primitive->result.informationElementsLength; /* u8 primitive->result.informationElements */
- bufferSize += 1; /* CsrWifiSmeP2pRole primitive->result.p2pDeviceRole */
- switch (primitive->result.p2pDeviceRole)
- {
- case CSR_WIFI_SME_P2P_ROLE_CLI:
- bufferSize += 1; /* u8 primitive->result.deviceInfo.reservedCli.empty */
- break;
- case CSR_WIFI_SME_P2P_ROLE_GO:
- bufferSize += 1; /* CsrWifiSmeP2pGroupCapabilityMask primitive->result.deviceInfo.groupInfo.groupCapability */
- bufferSize += 6; /* u8 primitive->result.deviceInfo.groupInfo.p2pDeviceAddress.a[6] */
- bufferSize += 1; /* u8 primitive->result.deviceInfo.groupInfo.p2pClientInfoCount */
- {
- u16 i4;
- for (i4 = 0; i4 < primitive->result.deviceInfo.groupInfo.p2pClientInfoCount; i4++)
- {
- bufferSize += 6; /* u8 primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].p2PClientInterfaceAddress.a[6] */
- bufferSize += 6; /* u8 primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceAddress.a[6] */
- bufferSize += 2; /* CsrWifiSmeWpsConfigTypeMask primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.configMethods */
- bufferSize += 1; /* CsrWifiSmeP2pCapabilityMask primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.p2PDeviceCap */
- bufferSize += 8; /* u8 primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.primDeviceType.deviceDetails[8] */
- bufferSize += 1; /* u8 primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount */
- {
- u16 i6;
- for (i6 = 0; i6 < primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount; i6++)
- {
- bufferSize += 8; /* u8 primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType[i6].deviceDetails[8] */
- }
- }
- bufferSize += 32; /* u8 primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceName[32] */
- bufferSize += 1; /* u8 primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceNameLength */
- }
- }
- break;
- case CSR_WIFI_SME_P2P_ROLE_NONE:
- bufferSize += 1; /* u8 primitive->result.deviceInfo.reservedNone.empty */
- break;
- case CSR_WIFI_SME_P2P_ROLE_STANDALONE:
- bufferSize += 6; /* u8 primitive->result.deviceInfo.standalonedevInfo.deviceAddress.a[6] */
- bufferSize += 2; /* CsrWifiSmeWpsConfigTypeMask primitive->result.deviceInfo.standalonedevInfo.configMethods */
- bufferSize += 1; /* CsrWifiSmeP2pCapabilityMask primitive->result.deviceInfo.standalonedevInfo.p2PDeviceCap */
- bufferSize += 8; /* u8 primitive->result.deviceInfo.standalonedevInfo.primDeviceType.deviceDetails[8] */
- bufferSize += 1; /* u8 primitive->result.deviceInfo.standalonedevInfo.secondaryDeviceTypeCount */
- {
- u16 i4;
- for (i4 = 0; i4 < primitive->result.deviceInfo.standalonedevInfo.secondaryDeviceTypeCount; i4++)
- {
- bufferSize += 8; /* u8 primitive->result.deviceInfo.standalonedevInfo.secDeviceType[i4].deviceDetails[8] */
- }
- }
- bufferSize += 32; /* u8 primitive->result.deviceInfo.standalonedevInfo.deviceName[32] */
- bufferSize += 1; /* u8 primitive->result.deviceInfo.standalonedevInfo.deviceNameLength */
- break;
- default:
- break;
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeScanResultIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeScanResultInd *primitive = (CsrWifiSmeScanResultInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrMemCpySer(ptr, len, (const void *) primitive->result.ssid.ssid, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->result.ssid.length);
- CsrMemCpySer(ptr, len, (const void *) primitive->result.bssid.a, ((u16) (6)));
- CsrUint16Ser(ptr, len, (u16) primitive->result.rssi);
- CsrUint16Ser(ptr, len, (u16) primitive->result.snr);
- CsrUint8Ser(ptr, len, (u8) primitive->result.ifIndex);
- CsrUint16Ser(ptr, len, (u16) primitive->result.beaconPeriodTu);
- CsrMemCpySer(ptr, len, (const void *) primitive->result.timeStamp.data, ((u16) (8)));
- CsrMemCpySer(ptr, len, (const void *) primitive->result.localTime.data, ((u16) (8)));
- CsrUint16Ser(ptr, len, (u16) primitive->result.channelFrequency);
- CsrUint16Ser(ptr, len, (u16) primitive->result.capabilityInformation);
- CsrUint8Ser(ptr, len, (u8) primitive->result.channelNumber);
- CsrUint8Ser(ptr, len, (u8) primitive->result.usability);
- CsrUint8Ser(ptr, len, (u8) primitive->result.bssType);
- CsrUint16Ser(ptr, len, (u16) primitive->result.informationElementsLength);
- if (primitive->result.informationElementsLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->result.informationElements, ((u16) (primitive->result.informationElementsLength)));
- }
- CsrUint8Ser(ptr, len, (u8) primitive->result.p2pDeviceRole);
- switch (primitive->result.p2pDeviceRole)
- {
- case CSR_WIFI_SME_P2P_ROLE_CLI:
- CsrUint8Ser(ptr, len, (u8) primitive->result.deviceInfo.reservedCli.empty);
- break;
- case CSR_WIFI_SME_P2P_ROLE_GO:
- CsrUint8Ser(ptr, len, (u8) primitive->result.deviceInfo.groupInfo.groupCapability);
- CsrMemCpySer(ptr, len, (const void *) primitive->result.deviceInfo.groupInfo.p2pDeviceAddress.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->result.deviceInfo.groupInfo.p2pClientInfoCount);
- {
- u16 i4;
- for (i4 = 0; i4 < primitive->result.deviceInfo.groupInfo.p2pClientInfoCount; i4++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].p2PClientInterfaceAddress.a, ((u16) (6)));
- CsrMemCpySer(ptr, len, (const void *) primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceAddress.a, ((u16) (6)));
- CsrUint16Ser(ptr, len, (u16) primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.configMethods);
- CsrUint8Ser(ptr, len, (u8) primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.p2PDeviceCap);
- CsrMemCpySer(ptr, len, (const void *) primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.primDeviceType.deviceDetails, ((u16) (8)));
- CsrUint8Ser(ptr, len, (u8) primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount);
- {
- u16 i6;
- for (i6 = 0; i6 < primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount; i6++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType[i6].deviceDetails, ((u16) (8)));
- }
- }
- CsrMemCpySer(ptr, len, (const void *) primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceName, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceNameLength);
- }
- }
- break;
- case CSR_WIFI_SME_P2P_ROLE_NONE:
- CsrUint8Ser(ptr, len, (u8) primitive->result.deviceInfo.reservedNone.empty);
- break;
- case CSR_WIFI_SME_P2P_ROLE_STANDALONE:
- CsrMemCpySer(ptr, len, (const void *) primitive->result.deviceInfo.standalonedevInfo.deviceAddress.a, ((u16) (6)));
- CsrUint16Ser(ptr, len, (u16) primitive->result.deviceInfo.standalonedevInfo.configMethods);
- CsrUint8Ser(ptr, len, (u8) primitive->result.deviceInfo.standalonedevInfo.p2PDeviceCap);
- CsrMemCpySer(ptr, len, (const void *) primitive->result.deviceInfo.standalonedevInfo.primDeviceType.deviceDetails, ((u16) (8)));
- CsrUint8Ser(ptr, len, (u8) primitive->result.deviceInfo.standalonedevInfo.secondaryDeviceTypeCount);
- {
- u16 i4;
- for (i4 = 0; i4 < primitive->result.deviceInfo.standalonedevInfo.secondaryDeviceTypeCount; i4++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->result.deviceInfo.standalonedevInfo.secDeviceType[i4].deviceDetails, ((u16) (8)));
- }
- }
- CsrMemCpySer(ptr, len, (const void *) primitive->result.deviceInfo.standalonedevInfo.deviceName, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->result.deviceInfo.standalonedevInfo.deviceNameLength);
- break;
- default:
- break;
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeScanResultIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeScanResultInd *primitive = kmalloc(sizeof(CsrWifiSmeScanResultInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrMemCpyDes(primitive->result.ssid.ssid, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->result.ssid.length, buffer, &offset);
- CsrMemCpyDes(primitive->result.bssid.a, buffer, &offset, ((u16) (6)));
- CsrUint16Des((u16 *) &primitive->result.rssi, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->result.snr, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->result.ifIndex, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->result.beaconPeriodTu, buffer, &offset);
- CsrMemCpyDes(primitive->result.timeStamp.data, buffer, &offset, ((u16) (8)));
- CsrMemCpyDes(primitive->result.localTime.data, buffer, &offset, ((u16) (8)));
- CsrUint16Des((u16 *) &primitive->result.channelFrequency, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->result.capabilityInformation, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->result.channelNumber, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->result.usability, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->result.bssType, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->result.informationElementsLength, buffer, &offset);
- if (primitive->result.informationElementsLength)
- {
- primitive->result.informationElements = kmalloc(primitive->result.informationElementsLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->result.informationElements, buffer, &offset, ((u16) (primitive->result.informationElementsLength)));
- }
- else
- {
- primitive->result.informationElements = NULL;
- }
- CsrUint8Des((u8 *) &primitive->result.p2pDeviceRole, buffer, &offset);
- switch (primitive->result.p2pDeviceRole)
- {
- case CSR_WIFI_SME_P2P_ROLE_CLI:
- CsrUint8Des((u8 *) &primitive->result.deviceInfo.reservedCli.empty, buffer, &offset);
- break;
- case CSR_WIFI_SME_P2P_ROLE_GO:
- CsrUint8Des((u8 *) &primitive->result.deviceInfo.groupInfo.groupCapability, buffer, &offset);
- CsrMemCpyDes(primitive->result.deviceInfo.groupInfo.p2pDeviceAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->result.deviceInfo.groupInfo.p2pClientInfoCount, buffer, &offset);
- primitive->result.deviceInfo.groupInfo.p2PClientInfo = NULL;
- if (primitive->result.deviceInfo.groupInfo.p2pClientInfoCount)
- {
- primitive->result.deviceInfo.groupInfo.p2PClientInfo = kmalloc(sizeof(CsrWifiSmeP2pClientInfoType) * primitive->result.deviceInfo.groupInfo.p2pClientInfoCount, GFP_KERNEL);
- }
- {
- u16 i4;
- for (i4 = 0; i4 < primitive->result.deviceInfo.groupInfo.p2pClientInfoCount; i4++)
- {
- CsrMemCpyDes(primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].p2PClientInterfaceAddress.a, buffer, &offset, ((u16) (6)));
- CsrMemCpyDes(primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint16Des((u16 *) &primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.configMethods, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.p2PDeviceCap, buffer, &offset);
- CsrMemCpyDes(primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.primDeviceType.deviceDetails, buffer, &offset, ((u16) (8)));
- CsrUint8Des((u8 *) &primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount, buffer, &offset);
- primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType = NULL;
- if (primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount)
- {
- primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType = kmalloc(sizeof(CsrWifiSmeWpsDeviceType) * primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount, GFP_KERNEL);
- }
- {
- u16 i6;
- for (i6 = 0; i6 < primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount; i6++)
- {
- CsrMemCpyDes(primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType[i6].deviceDetails, buffer, &offset, ((u16) (8)));
- }
- }
- CsrMemCpyDes(primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceName, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceNameLength, buffer, &offset);
- }
- }
- break;
- case CSR_WIFI_SME_P2P_ROLE_NONE:
- CsrUint8Des((u8 *) &primitive->result.deviceInfo.reservedNone.empty, buffer, &offset);
- break;
- case CSR_WIFI_SME_P2P_ROLE_STANDALONE:
- CsrMemCpyDes(primitive->result.deviceInfo.standalonedevInfo.deviceAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint16Des((u16 *) &primitive->result.deviceInfo.standalonedevInfo.configMethods, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->result.deviceInfo.standalonedevInfo.p2PDeviceCap, buffer, &offset);
- CsrMemCpyDes(primitive->result.deviceInfo.standalonedevInfo.primDeviceType.deviceDetails, buffer, &offset, ((u16) (8)));
- CsrUint8Des((u8 *) &primitive->result.deviceInfo.standalonedevInfo.secondaryDeviceTypeCount, buffer, &offset);
- primitive->result.deviceInfo.standalonedevInfo.secDeviceType = NULL;
- if (primitive->result.deviceInfo.standalonedevInfo.secondaryDeviceTypeCount)
- {
- primitive->result.deviceInfo.standalonedevInfo.secDeviceType = kmalloc(sizeof(CsrWifiSmeWpsDeviceType) * primitive->result.deviceInfo.standalonedevInfo.secondaryDeviceTypeCount, GFP_KERNEL);
- }
- {
- u16 i4;
- for (i4 = 0; i4 < primitive->result.deviceInfo.standalonedevInfo.secondaryDeviceTypeCount; i4++)
- {
- CsrMemCpyDes(primitive->result.deviceInfo.standalonedevInfo.secDeviceType[i4].deviceDetails, buffer, &offset, ((u16) (8)));
- }
- }
- CsrMemCpyDes(primitive->result.deviceInfo.standalonedevInfo.deviceName, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->result.deviceInfo.standalonedevInfo.deviceNameLength, buffer, &offset);
- break;
- default:
- break;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeScanResultIndSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeScanResultInd *primitive = (CsrWifiSmeScanResultInd *) voidPrimitivePointer;
- kfree(primitive->result.informationElements);
- switch (primitive->result.p2pDeviceRole)
- {
- case CSR_WIFI_SME_P2P_ROLE_GO:
- {
- u16 i4;
- for (i4 = 0; i4 < primitive->result.deviceInfo.groupInfo.p2pClientInfoCount; i4++)
- {
- kfree(primitive->result.deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType);
- }
- }
- kfree(primitive->result.deviceInfo.groupInfo.p2PClientInfo);
- break;
- case CSR_WIFI_SME_P2P_ROLE_STANDALONE:
- kfree(primitive->result.deviceInfo.standalonedevInfo.secDeviceType);
- break;
- default:
- break;
- }
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeScanResultsGetCfmSizeof(void *msg)
-{
- CsrWifiSmeScanResultsGetCfm *primitive = (CsrWifiSmeScanResultsGetCfm *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 153) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 2; /* u16 primitive->scanResultsCount */
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->scanResultsCount; i1++)
- {
- bufferSize += 32; /* u8 primitive->scanResults[i1].ssid.ssid[32] */
- bufferSize += 1; /* u8 primitive->scanResults[i1].ssid.length */
- bufferSize += 6; /* u8 primitive->scanResults[i1].bssid.a[6] */
- bufferSize += 2; /* s16 primitive->scanResults[i1].rssi */
- bufferSize += 2; /* s16 primitive->scanResults[i1].snr */
- bufferSize += 1; /* CsrWifiSmeRadioIF primitive->scanResults[i1].ifIndex */
- bufferSize += 2; /* u16 primitive->scanResults[i1].beaconPeriodTu */
- bufferSize += 8; /* u8 primitive->scanResults[i1].timeStamp.data[8] */
- bufferSize += 8; /* u8 primitive->scanResults[i1].localTime.data[8] */
- bufferSize += 2; /* u16 primitive->scanResults[i1].channelFrequency */
- bufferSize += 2; /* u16 primitive->scanResults[i1].capabilityInformation */
- bufferSize += 1; /* u8 primitive->scanResults[i1].channelNumber */
- bufferSize += 1; /* CsrWifiSmeBasicUsability primitive->scanResults[i1].usability */
- bufferSize += 1; /* CsrWifiSmeBssType primitive->scanResults[i1].bssType */
- bufferSize += 2; /* u16 primitive->scanResults[i1].informationElementsLength */
- bufferSize += primitive->scanResults[i1].informationElementsLength; /* u8 primitive->scanResults[i1].informationElements */
- bufferSize += 1; /* CsrWifiSmeP2pRole primitive->scanResults[i1].p2pDeviceRole */
- switch (primitive->scanResults[i1].p2pDeviceRole)
- {
- case CSR_WIFI_SME_P2P_ROLE_CLI:
- bufferSize += 1; /* u8 primitive->scanResults[i1].deviceInfo.reservedCli.empty */
- break;
- case CSR_WIFI_SME_P2P_ROLE_GO:
- bufferSize += 1; /* CsrWifiSmeP2pGroupCapabilityMask primitive->scanResults[i1].deviceInfo.groupInfo.groupCapability */
- bufferSize += 6; /* u8 primitive->scanResults[i1].deviceInfo.groupInfo.p2pDeviceAddress.a[6] */
- bufferSize += 1; /* u8 primitive->scanResults[i1].deviceInfo.groupInfo.p2pClientInfoCount */
- {
- u16 i4;
- for (i4 = 0; i4 < primitive->scanResults[i1].deviceInfo.groupInfo.p2pClientInfoCount; i4++)
- {
- bufferSize += 6; /* u8 primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].p2PClientInterfaceAddress.a[6] */
- bufferSize += 6; /* u8 primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceAddress.a[6] */
- bufferSize += 2; /* CsrWifiSmeWpsConfigTypeMask primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.configMethods */
- bufferSize += 1; /* CsrWifiSmeP2pCapabilityMask primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.p2PDeviceCap */
- bufferSize += 8; /* u8 primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.primDeviceType.deviceDetails[8] */
- bufferSize += 1; /* u8 primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount */
- {
- u16 i6;
- for (i6 = 0; i6 < primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount; i6++)
- {
- bufferSize += 8; /* u8 primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType[i6].deviceDetails[8] */
- }
- }
- bufferSize += 32; /* u8 primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceName[32] */
- bufferSize += 1; /* u8 primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceNameLength */
- }
- }
- break;
- case CSR_WIFI_SME_P2P_ROLE_NONE:
- bufferSize += 1; /* u8 primitive->scanResults[i1].deviceInfo.reservedNone.empty */
- break;
- case CSR_WIFI_SME_P2P_ROLE_STANDALONE:
- bufferSize += 6; /* u8 primitive->scanResults[i1].deviceInfo.standalonedevInfo.deviceAddress.a[6] */
- bufferSize += 2; /* CsrWifiSmeWpsConfigTypeMask primitive->scanResults[i1].deviceInfo.standalonedevInfo.configMethods */
- bufferSize += 1; /* CsrWifiSmeP2pCapabilityMask primitive->scanResults[i1].deviceInfo.standalonedevInfo.p2PDeviceCap */
- bufferSize += 8; /* u8 primitive->scanResults[i1].deviceInfo.standalonedevInfo.primDeviceType.deviceDetails[8] */
- bufferSize += 1; /* u8 primitive->scanResults[i1].deviceInfo.standalonedevInfo.secondaryDeviceTypeCount */
- {
- u16 i4;
- for (i4 = 0; i4 < primitive->scanResults[i1].deviceInfo.standalonedevInfo.secondaryDeviceTypeCount; i4++)
- {
- bufferSize += 8; /* u8 primitive->scanResults[i1].deviceInfo.standalonedevInfo.secDeviceType[i4].deviceDetails[8] */
- }
- }
- bufferSize += 32; /* u8 primitive->scanResults[i1].deviceInfo.standalonedevInfo.deviceName[32] */
- bufferSize += 1; /* u8 primitive->scanResults[i1].deviceInfo.standalonedevInfo.deviceNameLength */
- break;
- default:
- break;
- }
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeScanResultsGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeScanResultsGetCfm *primitive = (CsrWifiSmeScanResultsGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint16Ser(ptr, len, (u16) primitive->scanResultsCount);
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->scanResultsCount; i1++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].ssid.ssid, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].ssid.length);
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].bssid.a, ((u16) (6)));
- CsrUint16Ser(ptr, len, (u16) primitive->scanResults[i1].rssi);
- CsrUint16Ser(ptr, len, (u16) primitive->scanResults[i1].snr);
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].ifIndex);
- CsrUint16Ser(ptr, len, (u16) primitive->scanResults[i1].beaconPeriodTu);
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].timeStamp.data, ((u16) (8)));
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].localTime.data, ((u16) (8)));
- CsrUint16Ser(ptr, len, (u16) primitive->scanResults[i1].channelFrequency);
- CsrUint16Ser(ptr, len, (u16) primitive->scanResults[i1].capabilityInformation);
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].channelNumber);
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].usability);
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].bssType);
- CsrUint16Ser(ptr, len, (u16) primitive->scanResults[i1].informationElementsLength);
- if (primitive->scanResults[i1].informationElementsLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].informationElements, ((u16) (primitive->scanResults[i1].informationElementsLength)));
- }
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].p2pDeviceRole);
- switch (primitive->scanResults[i1].p2pDeviceRole)
- {
- case CSR_WIFI_SME_P2P_ROLE_CLI:
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].deviceInfo.reservedCli.empty);
- break;
- case CSR_WIFI_SME_P2P_ROLE_GO:
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].deviceInfo.groupInfo.groupCapability);
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].deviceInfo.groupInfo.p2pDeviceAddress.a, ((u16) (6)));
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].deviceInfo.groupInfo.p2pClientInfoCount);
- {
- u16 i4;
- for (i4 = 0; i4 < primitive->scanResults[i1].deviceInfo.groupInfo.p2pClientInfoCount; i4++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].p2PClientInterfaceAddress.a, ((u16) (6)));
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceAddress.a, ((u16) (6)));
- CsrUint16Ser(ptr, len, (u16) primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.configMethods);
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.p2PDeviceCap);
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.primDeviceType.deviceDetails, ((u16) (8)));
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount);
- {
- u16 i6;
- for (i6 = 0; i6 < primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount; i6++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType[i6].deviceDetails, ((u16) (8)));
- }
- }
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceName, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceNameLength);
- }
- }
- break;
- case CSR_WIFI_SME_P2P_ROLE_NONE:
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].deviceInfo.reservedNone.empty);
- break;
- case CSR_WIFI_SME_P2P_ROLE_STANDALONE:
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].deviceInfo.standalonedevInfo.deviceAddress.a, ((u16) (6)));
- CsrUint16Ser(ptr, len, (u16) primitive->scanResults[i1].deviceInfo.standalonedevInfo.configMethods);
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].deviceInfo.standalonedevInfo.p2PDeviceCap);
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].deviceInfo.standalonedevInfo.primDeviceType.deviceDetails, ((u16) (8)));
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].deviceInfo.standalonedevInfo.secondaryDeviceTypeCount);
- {
- u16 i4;
- for (i4 = 0; i4 < primitive->scanResults[i1].deviceInfo.standalonedevInfo.secondaryDeviceTypeCount; i4++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].deviceInfo.standalonedevInfo.secDeviceType[i4].deviceDetails, ((u16) (8)));
- }
- }
- CsrMemCpySer(ptr, len, (const void *) primitive->scanResults[i1].deviceInfo.standalonedevInfo.deviceName, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->scanResults[i1].deviceInfo.standalonedevInfo.deviceNameLength);
- break;
- default:
- break;
- }
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeScanResultsGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeScanResultsGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeScanResultsGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanResultsCount, buffer, &offset);
- primitive->scanResults = NULL;
- if (primitive->scanResultsCount)
- {
- primitive->scanResults = kmalloc(sizeof(CsrWifiSmeScanResult) * primitive->scanResultsCount, GFP_KERNEL);
- }
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->scanResultsCount; i1++)
- {
- CsrMemCpyDes(primitive->scanResults[i1].ssid.ssid, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->scanResults[i1].ssid.length, buffer, &offset);
- CsrMemCpyDes(primitive->scanResults[i1].bssid.a, buffer, &offset, ((u16) (6)));
- CsrUint16Des((u16 *) &primitive->scanResults[i1].rssi, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanResults[i1].snr, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanResults[i1].ifIndex, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanResults[i1].beaconPeriodTu, buffer, &offset);
- CsrMemCpyDes(primitive->scanResults[i1].timeStamp.data, buffer, &offset, ((u16) (8)));
- CsrMemCpyDes(primitive->scanResults[i1].localTime.data, buffer, &offset, ((u16) (8)));
- CsrUint16Des((u16 *) &primitive->scanResults[i1].channelFrequency, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanResults[i1].capabilityInformation, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanResults[i1].channelNumber, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanResults[i1].usability, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanResults[i1].bssType, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->scanResults[i1].informationElementsLength, buffer, &offset);
- if (primitive->scanResults[i1].informationElementsLength)
- {
- primitive->scanResults[i1].informationElements = kmalloc(primitive->scanResults[i1].informationElementsLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->scanResults[i1].informationElements, buffer, &offset, ((u16) (primitive->scanResults[i1].informationElementsLength)));
- }
- else
- {
- primitive->scanResults[i1].informationElements = NULL;
- }
- CsrUint8Des((u8 *) &primitive->scanResults[i1].p2pDeviceRole, buffer, &offset);
- switch (primitive->scanResults[i1].p2pDeviceRole)
- {
- case CSR_WIFI_SME_P2P_ROLE_CLI:
- CsrUint8Des((u8 *) &primitive->scanResults[i1].deviceInfo.reservedCli.empty, buffer, &offset);
- break;
- case CSR_WIFI_SME_P2P_ROLE_GO:
- CsrUint8Des((u8 *) &primitive->scanResults[i1].deviceInfo.groupInfo.groupCapability, buffer, &offset);
- CsrMemCpyDes(primitive->scanResults[i1].deviceInfo.groupInfo.p2pDeviceAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint8Des((u8 *) &primitive->scanResults[i1].deviceInfo.groupInfo.p2pClientInfoCount, buffer, &offset);
- primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo = NULL;
- if (primitive->scanResults[i1].deviceInfo.groupInfo.p2pClientInfoCount)
- {
- primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo = kmalloc(sizeof(CsrWifiSmeP2pClientInfoType) * primitive->scanResults[i1].deviceInfo.groupInfo.p2pClientInfoCount, GFP_KERNEL);
- }
- {
- u16 i4;
- for (i4 = 0; i4 < primitive->scanResults[i1].deviceInfo.groupInfo.p2pClientInfoCount; i4++)
- {
- CsrMemCpyDes(primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].p2PClientInterfaceAddress.a, buffer, &offset, ((u16) (6)));
- CsrMemCpyDes(primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint16Des((u16 *) &primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.configMethods, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.p2PDeviceCap, buffer, &offset);
- CsrMemCpyDes(primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.primDeviceType.deviceDetails, buffer, &offset, ((u16) (8)));
- CsrUint8Des((u8 *) &primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount, buffer, &offset);
- primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType = NULL;
- if (primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount)
- {
- primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType = kmalloc(sizeof(CsrWifiSmeWpsDeviceType) * primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount, GFP_KERNEL);
- }
- {
- u16 i6;
- for (i6 = 0; i6 < primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secondaryDeviceTypeCount; i6++)
- {
- CsrMemCpyDes(primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType[i6].deviceDetails, buffer, &offset, ((u16) (8)));
- }
- }
- CsrMemCpyDes(primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceName, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.deviceNameLength, buffer, &offset);
- }
- }
- break;
- case CSR_WIFI_SME_P2P_ROLE_NONE:
- CsrUint8Des((u8 *) &primitive->scanResults[i1].deviceInfo.reservedNone.empty, buffer, &offset);
- break;
- case CSR_WIFI_SME_P2P_ROLE_STANDALONE:
- CsrMemCpyDes(primitive->scanResults[i1].deviceInfo.standalonedevInfo.deviceAddress.a, buffer, &offset, ((u16) (6)));
- CsrUint16Des((u16 *) &primitive->scanResults[i1].deviceInfo.standalonedevInfo.configMethods, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->scanResults[i1].deviceInfo.standalonedevInfo.p2PDeviceCap, buffer, &offset);
- CsrMemCpyDes(primitive->scanResults[i1].deviceInfo.standalonedevInfo.primDeviceType.deviceDetails, buffer, &offset, ((u16) (8)));
- CsrUint8Des((u8 *) &primitive->scanResults[i1].deviceInfo.standalonedevInfo.secondaryDeviceTypeCount, buffer, &offset);
- primitive->scanResults[i1].deviceInfo.standalonedevInfo.secDeviceType = NULL;
- if (primitive->scanResults[i1].deviceInfo.standalonedevInfo.secondaryDeviceTypeCount)
- {
- primitive->scanResults[i1].deviceInfo.standalonedevInfo.secDeviceType = kmalloc(sizeof(CsrWifiSmeWpsDeviceType) * primitive->scanResults[i1].deviceInfo.standalonedevInfo.secondaryDeviceTypeCount, GFP_KERNEL);
- }
- {
- u16 i4;
- for (i4 = 0; i4 < primitive->scanResults[i1].deviceInfo.standalonedevInfo.secondaryDeviceTypeCount; i4++)
- {
- CsrMemCpyDes(primitive->scanResults[i1].deviceInfo.standalonedevInfo.secDeviceType[i4].deviceDetails, buffer, &offset, ((u16) (8)));
- }
- }
- CsrMemCpyDes(primitive->scanResults[i1].deviceInfo.standalonedevInfo.deviceName, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->scanResults[i1].deviceInfo.standalonedevInfo.deviceNameLength, buffer, &offset);
- break;
- default:
- break;
- }
- }
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeScanResultsGetCfmSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeScanResultsGetCfm *primitive = (CsrWifiSmeScanResultsGetCfm *) voidPrimitivePointer;
- {
- u16 i1;
- for (i1 = 0; i1 < primitive->scanResultsCount; i1++)
- {
- kfree(primitive->scanResults[i1].informationElements);
- switch (primitive->scanResults[i1].p2pDeviceRole)
- {
- case CSR_WIFI_SME_P2P_ROLE_GO:
- {
- u16 i4;
- for (i4 = 0; i4 < primitive->scanResults[i1].deviceInfo.groupInfo.p2pClientInfoCount; i4++)
- {
- kfree(primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo[i4].clientDeviceInfo.secDeviceType);
- }
- }
- kfree(primitive->scanResults[i1].deviceInfo.groupInfo.p2PClientInfo);
- break;
- case CSR_WIFI_SME_P2P_ROLE_STANDALONE:
- kfree(primitive->scanResults[i1].deviceInfo.standalonedevInfo.secDeviceType);
- break;
- default:
- break;
- }
- }
- }
- kfree(primitive->scanResults);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeSmeStaConfigGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* u8 primitive->smeConfig.connectionQualityRssiChangeTrigger */
- bufferSize += 1; /* u8 primitive->smeConfig.connectionQualitySnrChangeTrigger */
- bufferSize += 1; /* CsrWifiSmeWmmModeMask primitive->smeConfig.wmmModeMask */
- bufferSize += 1; /* CsrWifiSmeRadioIF primitive->smeConfig.ifIndex */
- bufferSize += 1; /* u8 primitive->smeConfig.allowUnicastUseGroupCipher */
- bufferSize += 1; /* u8 primitive->smeConfig.enableOpportunisticKeyCaching */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeSmeStaConfigGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeSmeStaConfigGetCfm *primitive = (CsrWifiSmeSmeStaConfigGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->smeConfig.connectionQualityRssiChangeTrigger);
- CsrUint8Ser(ptr, len, (u8) primitive->smeConfig.connectionQualitySnrChangeTrigger);
- CsrUint8Ser(ptr, len, (u8) primitive->smeConfig.wmmModeMask);
- CsrUint8Ser(ptr, len, (u8) primitive->smeConfig.ifIndex);
- CsrUint8Ser(ptr, len, (u8) primitive->smeConfig.allowUnicastUseGroupCipher);
- CsrUint8Ser(ptr, len, (u8) primitive->smeConfig.enableOpportunisticKeyCaching);
- return(ptr);
-}
-
-
-void* CsrWifiSmeSmeStaConfigGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeSmeStaConfigGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeSmeStaConfigGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->smeConfig.connectionQualityRssiChangeTrigger, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->smeConfig.connectionQualitySnrChangeTrigger, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->smeConfig.wmmModeMask, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->smeConfig.ifIndex, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->smeConfig.allowUnicastUseGroupCipher, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->smeConfig.enableOpportunisticKeyCaching, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeSmeStaConfigSetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 7) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeSmeStaConfigSetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeSmeStaConfigSetCfm *primitive = (CsrWifiSmeSmeStaConfigSetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- return(ptr);
-}
-
-
-void* CsrWifiSmeSmeStaConfigSetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeSmeStaConfigSetCfm *primitive = kmalloc(sizeof(CsrWifiSmeSmeStaConfigSetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeStationMacAddressGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 17) */
- bufferSize += 2; /* CsrResult primitive->status */
- {
- u16 i1;
- for (i1 = 0; i1 < 2; i1++)
- {
- bufferSize += 6; /* u8 primitive->stationMacAddress[i1].a[6] */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeStationMacAddressGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeStationMacAddressGetCfm *primitive = (CsrWifiSmeStationMacAddressGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- {
- u16 i1;
- for (i1 = 0; i1 < 2; i1++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->stationMacAddress[i1].a, ((u16) (6)));
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeStationMacAddressGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeStationMacAddressGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeStationMacAddressGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- {
- u16 i1;
- for (i1 = 0; i1 < 2; i1++)
- {
- CsrMemCpyDes(primitive->stationMacAddress[i1].a, buffer, &offset, ((u16) (6)));
- }
- }
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeTspecIndSizeof(void *msg)
-{
- CsrWifiSmeTspecInd *primitive = (CsrWifiSmeTspecInd *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 13) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 4; /* u32 primitive->transactionId */
- bufferSize += 1; /* CsrWifiSmeTspecResultCode primitive->tspecResultCode */
- bufferSize += 2; /* u16 primitive->tspecLength */
- bufferSize += primitive->tspecLength; /* u8 primitive->tspec */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeTspecIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeTspecInd *primitive = (CsrWifiSmeTspecInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint32Ser(ptr, len, (u32) primitive->transactionId);
- CsrUint8Ser(ptr, len, (u8) primitive->tspecResultCode);
- CsrUint16Ser(ptr, len, (u16) primitive->tspecLength);
- if (primitive->tspecLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->tspec, ((u16) (primitive->tspecLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeTspecIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeTspecInd *primitive = kmalloc(sizeof(CsrWifiSmeTspecInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->transactionId, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->tspecResultCode, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->tspecLength, buffer, &offset);
- if (primitive->tspecLength)
- {
- primitive->tspec = kmalloc(primitive->tspecLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->tspec, buffer, &offset, ((u16) (primitive->tspecLength)));
- }
- else
- {
- primitive->tspec = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeTspecIndSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeTspecInd *primitive = (CsrWifiSmeTspecInd *) voidPrimitivePointer;
- kfree(primitive->tspec);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeTspecCfmSizeof(void *msg)
-{
- CsrWifiSmeTspecCfm *primitive = (CsrWifiSmeTspecCfm *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 15) */
- bufferSize += 2; /* u16 primitive->interfaceTag */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 4; /* u32 primitive->transactionId */
- bufferSize += 1; /* CsrWifiSmeTspecResultCode primitive->tspecResultCode */
- bufferSize += 2; /* u16 primitive->tspecLength */
- bufferSize += primitive->tspecLength; /* u8 primitive->tspec */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeTspecCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeTspecCfm *primitive = (CsrWifiSmeTspecCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->interfaceTag);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint32Ser(ptr, len, (u32) primitive->transactionId);
- CsrUint8Ser(ptr, len, (u8) primitive->tspecResultCode);
- CsrUint16Ser(ptr, len, (u16) primitive->tspecLength);
- if (primitive->tspecLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->tspec, ((u16) (primitive->tspecLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeTspecCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeTspecCfm *primitive = kmalloc(sizeof(CsrWifiSmeTspecCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->interfaceTag, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->transactionId, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->tspecResultCode, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->tspecLength, buffer, &offset);
- if (primitive->tspecLength)
- {
- primitive->tspec = kmalloc(primitive->tspecLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->tspec, buffer, &offset, ((u16) (primitive->tspecLength)));
- }
- else
- {
- primitive->tspec = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeTspecCfmSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeTspecCfm *primitive = (CsrWifiSmeTspecCfm *) voidPrimitivePointer;
- kfree(primitive->tspec);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeVersionsGetCfmSizeof(void *msg)
-{
- CsrWifiSmeVersionsGetCfm *primitive = (CsrWifiSmeVersionsGetCfm *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 33) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 4; /* u32 primitive->versions.chipId */
- bufferSize += 4; /* u32 primitive->versions.chipVersion */
- bufferSize += 4; /* u32 primitive->versions.firmwareBuild */
- bufferSize += 4; /* u32 primitive->versions.firmwarePatch */
- bufferSize += 4; /* u32 primitive->versions.firmwareHip */
- bufferSize += (primitive->versions.routerBuild ? strlen(primitive->versions.routerBuild) : 0) + 1; /* char* primitive->versions.routerBuild (0 byte len + 1 for NULL Term) */
- bufferSize += 4; /* u32 primitive->versions.routerHip */
- bufferSize += (primitive->versions.smeBuild ? strlen(primitive->versions.smeBuild) : 0) + 1; /* char* primitive->versions.smeBuild (0 byte len + 1 for NULL Term) */
- bufferSize += 4; /* u32 primitive->versions.smeHip */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeVersionsGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeVersionsGetCfm *primitive = (CsrWifiSmeVersionsGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint32Ser(ptr, len, (u32) primitive->versions.chipId);
- CsrUint32Ser(ptr, len, (u32) primitive->versions.chipVersion);
- CsrUint32Ser(ptr, len, (u32) primitive->versions.firmwareBuild);
- CsrUint32Ser(ptr, len, (u32) primitive->versions.firmwarePatch);
- CsrUint32Ser(ptr, len, (u32) primitive->versions.firmwareHip);
- CsrCharStringSer(ptr, len, primitive->versions.routerBuild);
- CsrUint32Ser(ptr, len, (u32) primitive->versions.routerHip);
- CsrCharStringSer(ptr, len, primitive->versions.smeBuild);
- CsrUint32Ser(ptr, len, (u32) primitive->versions.smeHip);
- return(ptr);
-}
-
-
-void* CsrWifiSmeVersionsGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeVersionsGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeVersionsGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->versions.chipId, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->versions.chipVersion, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->versions.firmwareBuild, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->versions.firmwarePatch, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->versions.firmwareHip, buffer, &offset);
- CsrCharStringDes(&primitive->versions.routerBuild, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->versions.routerHip, buffer, &offset);
- CsrCharStringDes(&primitive->versions.smeBuild, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->versions.smeHip, buffer, &offset);
-
- return primitive;
-}
-
-
-void CsrWifiSmeVersionsGetCfmSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeVersionsGetCfm *primitive = (CsrWifiSmeVersionsGetCfm *) voidPrimitivePointer;
- kfree(primitive->versions.routerBuild);
- kfree(primitive->versions.smeBuild);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeCloakedSsidsGetCfmSizeof(void *msg)
-{
- CsrWifiSmeCloakedSsidsGetCfm *primitive = (CsrWifiSmeCloakedSsidsGetCfm *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 39) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* u8 primitive->cloakedSsids.cloakedSsidsCount */
- {
- u16 i2;
- for (i2 = 0; i2 < primitive->cloakedSsids.cloakedSsidsCount; i2++)
- {
- bufferSize += 32; /* u8 primitive->cloakedSsids.cloakedSsids[i2].ssid[32] */
- bufferSize += 1; /* u8 primitive->cloakedSsids.cloakedSsids[i2].length */
- }
- }
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeCloakedSsidsGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeCloakedSsidsGetCfm *primitive = (CsrWifiSmeCloakedSsidsGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->cloakedSsids.cloakedSsidsCount);
- {
- u16 i2;
- for (i2 = 0; i2 < primitive->cloakedSsids.cloakedSsidsCount; i2++)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->cloakedSsids.cloakedSsids[i2].ssid, ((u16) (32)));
- CsrUint8Ser(ptr, len, (u8) primitive->cloakedSsids.cloakedSsids[i2].length);
- }
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeCloakedSsidsGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeCloakedSsidsGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeCloakedSsidsGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->cloakedSsids.cloakedSsidsCount, buffer, &offset);
- primitive->cloakedSsids.cloakedSsids = NULL;
- if (primitive->cloakedSsids.cloakedSsidsCount)
- {
- primitive->cloakedSsids.cloakedSsids = kmalloc(sizeof(CsrWifiSsid) * primitive->cloakedSsids.cloakedSsidsCount, GFP_KERNEL);
- }
- {
- u16 i2;
- for (i2 = 0; i2 < primitive->cloakedSsids.cloakedSsidsCount; i2++)
- {
- CsrMemCpyDes(primitive->cloakedSsids.cloakedSsids[i2].ssid, buffer, &offset, ((u16) (32)));
- CsrUint8Des((u8 *) &primitive->cloakedSsids.cloakedSsids[i2].length, buffer, &offset);
- }
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeCloakedSsidsGetCfmSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeCloakedSsidsGetCfm *primitive = (CsrWifiSmeCloakedSsidsGetCfm *) voidPrimitivePointer;
- kfree(primitive->cloakedSsids.cloakedSsids);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeWifiOnIndSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 9) */
- bufferSize += 6; /* u8 primitive->address.a[6] */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeWifiOnIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeWifiOnInd *primitive = (CsrWifiSmeWifiOnInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrMemCpySer(ptr, len, (const void *) primitive->address.a, ((u16) (6)));
- return(ptr);
-}
-
-
-void* CsrWifiSmeWifiOnIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeWifiOnInd *primitive = kmalloc(sizeof(CsrWifiSmeWifiOnInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrMemCpyDes(primitive->address.a, buffer, &offset, ((u16) (6)));
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeSmeCommonConfigGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 10) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 1; /* CsrWifiSme80211dTrustLevel primitive->deviceConfig.trustLevel */
- bufferSize += 2; /* u8 primitive->deviceConfig.countryCode[2] */
- bufferSize += 1; /* CsrWifiSmeFirmwareDriverInterface primitive->deviceConfig.firmwareDriverInterface */
- bufferSize += 1; /* u8 primitive->deviceConfig.enableStrictDraftN */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeSmeCommonConfigGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeSmeCommonConfigGetCfm *primitive = (CsrWifiSmeSmeCommonConfigGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint8Ser(ptr, len, (u8) primitive->deviceConfig.trustLevel);
- CsrMemCpySer(ptr, len, (const void *) primitive->deviceConfig.countryCode, ((u16) (2)));
- CsrUint8Ser(ptr, len, (u8) primitive->deviceConfig.firmwareDriverInterface);
- CsrUint8Ser(ptr, len, (u8) primitive->deviceConfig.enableStrictDraftN);
- return(ptr);
-}
-
-
-void* CsrWifiSmeSmeCommonConfigGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeSmeCommonConfigGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeSmeCommonConfigGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->deviceConfig.trustLevel, buffer, &offset);
- CsrMemCpyDes(primitive->deviceConfig.countryCode, buffer, &offset, ((u16) (2)));
- CsrUint8Des((u8 *) &primitive->deviceConfig.firmwareDriverInterface, buffer, &offset);
- CsrUint8Des((u8 *) &primitive->deviceConfig.enableStrictDraftN, buffer, &offset);
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeInterfaceCapabilityGetCfmSizeof(void *msg)
-{
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 9) */
- bufferSize += 2; /* CsrResult primitive->status */
- bufferSize += 2; /* u16 primitive->numInterfaces */
- bufferSize += 2; /* u8 primitive->capBitmap[2] */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeInterfaceCapabilityGetCfmSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeInterfaceCapabilityGetCfm *primitive = (CsrWifiSmeInterfaceCapabilityGetCfm *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint16Ser(ptr, len, (u16) primitive->status);
- CsrUint16Ser(ptr, len, (u16) primitive->numInterfaces);
- CsrMemCpySer(ptr, len, (const void *) primitive->capBitmap, ((u16) (2)));
- return(ptr);
-}
-
-
-void* CsrWifiSmeInterfaceCapabilityGetCfmDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeInterfaceCapabilityGetCfm *primitive = kmalloc(sizeof(CsrWifiSmeInterfaceCapabilityGetCfm), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->status, buffer, &offset);
- CsrUint16Des((u16 *) &primitive->numInterfaces, buffer, &offset);
- CsrMemCpyDes(primitive->capBitmap, buffer, &offset, ((u16) (2)));
-
- return primitive;
-}
-
-
-size_t CsrWifiSmeErrorIndSizeof(void *msg)
-{
- CsrWifiSmeErrorInd *primitive = (CsrWifiSmeErrorInd *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 3) */
- bufferSize += (primitive->errorMessage ? strlen(primitive->errorMessage) : 0) + 1; /* char* primitive->errorMessage (0 byte len + 1 for NULL Term) */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeErrorIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeErrorInd *primitive = (CsrWifiSmeErrorInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrCharStringSer(ptr, len, primitive->errorMessage);
- return(ptr);
-}
-
-
-void* CsrWifiSmeErrorIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeErrorInd *primitive = kmalloc(sizeof(CsrWifiSmeErrorInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrCharStringDes(&primitive->errorMessage, buffer, &offset);
-
- return primitive;
-}
-
-
-void CsrWifiSmeErrorIndSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeErrorInd *primitive = (CsrWifiSmeErrorInd *) voidPrimitivePointer;
- kfree(primitive->errorMessage);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeInfoIndSizeof(void *msg)
-{
- CsrWifiSmeInfoInd *primitive = (CsrWifiSmeInfoInd *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 3) */
- bufferSize += (primitive->infoMessage ? strlen(primitive->infoMessage) : 0) + 1; /* char* primitive->infoMessage (0 byte len + 1 for NULL Term) */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeInfoIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeInfoInd *primitive = (CsrWifiSmeInfoInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrCharStringSer(ptr, len, primitive->infoMessage);
- return(ptr);
-}
-
-
-void* CsrWifiSmeInfoIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeInfoInd *primitive = kmalloc(sizeof(CsrWifiSmeInfoInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrCharStringDes(&primitive->infoMessage, buffer, &offset);
-
- return primitive;
-}
-
-
-void CsrWifiSmeInfoIndSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeInfoInd *primitive = (CsrWifiSmeInfoInd *) voidPrimitivePointer;
- kfree(primitive->infoMessage);
- kfree(primitive);
-}
-
-
-size_t CsrWifiSmeCoreDumpIndSizeof(void *msg)
-{
- CsrWifiSmeCoreDumpInd *primitive = (CsrWifiSmeCoreDumpInd *) msg;
- size_t bufferSize = 2;
-
- /* Calculate the Size of the Serialised Data. Could be more efficient (Try 8) */
- bufferSize += 4; /* u32 primitive->dataLength */
- bufferSize += primitive->dataLength; /* u8 primitive->data */
- return bufferSize;
-}
-
-
-u8* CsrWifiSmeCoreDumpIndSer(u8 *ptr, size_t *len, void *msg)
-{
- CsrWifiSmeCoreDumpInd *primitive = (CsrWifiSmeCoreDumpInd *)msg;
- *len = 0;
- CsrUint16Ser(ptr, len, primitive->common.type);
- CsrUint32Ser(ptr, len, (u32) primitive->dataLength);
- if (primitive->dataLength)
- {
- CsrMemCpySer(ptr, len, (const void *) primitive->data, ((u16) (primitive->dataLength)));
- }
- return(ptr);
-}
-
-
-void* CsrWifiSmeCoreDumpIndDes(u8 *buffer, size_t length)
-{
- CsrWifiSmeCoreDumpInd *primitive = kmalloc(sizeof(CsrWifiSmeCoreDumpInd), GFP_KERNEL);
- size_t offset;
- offset = 0;
-
- CsrUint16Des(&primitive->common.type, buffer, &offset);
- CsrUint32Des((u32 *) &primitive->dataLength, buffer, &offset);
- if (primitive->dataLength)
- {
- primitive->data = kmalloc(primitive->dataLength, GFP_KERNEL);
- CsrMemCpyDes(primitive->data, buffer, &offset, ((u16) (primitive->dataLength)));
- }
- else
- {
- primitive->data = NULL;
- }
-
- return primitive;
-}
-
-
-void CsrWifiSmeCoreDumpIndSerFree(void *voidPrimitivePointer)
-{
- CsrWifiSmeCoreDumpInd *primitive = (CsrWifiSmeCoreDumpInd *) voidPrimitivePointer;
- kfree(primitive->data);
- kfree(primitive);
-}
-
-
diff --git a/drivers/staging/csr/csr_wifi_sme_serialize.h b/drivers/staging/csr/csr_wifi_sme_serialize.h
deleted file mode 100644
index f8526269b203..000000000000
--- a/drivers/staging/csr/csr_wifi_sme_serialize.h
+++ /dev/null
@@ -1,666 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2012
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_SME_SERIALIZE_H__
-#define CSR_WIFI_SME_SERIALIZE_H__
-
-#include "csr_wifi_msgconv.h"
-#include "csr_wifi_sme_prim.h"
-
-extern void CsrWifiSmePfree(void *ptr);
-
-#define CsrWifiSmeActivateReqSer CsrWifiEventSer
-#define CsrWifiSmeActivateReqDes CsrWifiEventDes
-#define CsrWifiSmeActivateReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeActivateReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeAdhocConfigGetReqSer CsrWifiEventSer
-#define CsrWifiSmeAdhocConfigGetReqDes CsrWifiEventDes
-#define CsrWifiSmeAdhocConfigGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeAdhocConfigGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeAdhocConfigSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeAdhocConfigSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeAdhocConfigSetReqSizeof(void *msg);
-#define CsrWifiSmeAdhocConfigSetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeBlacklistReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeBlacklistReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeBlacklistReqSizeof(void *msg);
-extern void CsrWifiSmeBlacklistReqSerFree(void *msg);
-
-#define CsrWifiSmeCalibrationDataGetReqSer CsrWifiEventSer
-#define CsrWifiSmeCalibrationDataGetReqDes CsrWifiEventDes
-#define CsrWifiSmeCalibrationDataGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeCalibrationDataGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeCalibrationDataSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeCalibrationDataSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeCalibrationDataSetReqSizeof(void *msg);
-extern void CsrWifiSmeCalibrationDataSetReqSerFree(void *msg);
-
-#define CsrWifiSmeCcxConfigGetReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeCcxConfigGetReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeCcxConfigGetReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeCcxConfigGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeCcxConfigSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeCcxConfigSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeCcxConfigSetReqSizeof(void *msg);
-#define CsrWifiSmeCcxConfigSetReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeCoexConfigGetReqSer CsrWifiEventSer
-#define CsrWifiSmeCoexConfigGetReqDes CsrWifiEventDes
-#define CsrWifiSmeCoexConfigGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeCoexConfigGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeCoexConfigSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeCoexConfigSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeCoexConfigSetReqSizeof(void *msg);
-#define CsrWifiSmeCoexConfigSetReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeCoexInfoGetReqSer CsrWifiEventSer
-#define CsrWifiSmeCoexInfoGetReqDes CsrWifiEventDes
-#define CsrWifiSmeCoexInfoGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeCoexInfoGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeConnectReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeConnectReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeConnectReqSizeof(void *msg);
-extern void CsrWifiSmeConnectReqSerFree(void *msg);
-
-#define CsrWifiSmeConnectionConfigGetReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeConnectionConfigGetReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeConnectionConfigGetReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeConnectionConfigGetReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeConnectionInfoGetReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeConnectionInfoGetReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeConnectionInfoGetReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeConnectionInfoGetReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeConnectionStatsGetReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeConnectionStatsGetReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeConnectionStatsGetReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeConnectionStatsGetReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeDeactivateReqSer CsrWifiEventSer
-#define CsrWifiSmeDeactivateReqDes CsrWifiEventDes
-#define CsrWifiSmeDeactivateReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeDeactivateReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeDisconnectReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeDisconnectReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeDisconnectReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeDisconnectReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeEventMaskSetReqSer CsrWifiEventCsrUint32Ser
-#define CsrWifiSmeEventMaskSetReqDes CsrWifiEventCsrUint32Des
-#define CsrWifiSmeEventMaskSetReqSizeof CsrWifiEventCsrUint32Sizeof
-#define CsrWifiSmeEventMaskSetReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeHostConfigGetReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeHostConfigGetReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeHostConfigGetReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeHostConfigGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeHostConfigSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeHostConfigSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeHostConfigSetReqSizeof(void *msg);
-#define CsrWifiSmeHostConfigSetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeKeyReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeKeyReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeKeyReqSizeof(void *msg);
-#define CsrWifiSmeKeyReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeLinkQualityGetReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeLinkQualityGetReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeLinkQualityGetReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeLinkQualityGetReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeMibConfigGetReqSer CsrWifiEventSer
-#define CsrWifiSmeMibConfigGetReqDes CsrWifiEventDes
-#define CsrWifiSmeMibConfigGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeMibConfigGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeMibConfigSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeMibConfigSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeMibConfigSetReqSizeof(void *msg);
-#define CsrWifiSmeMibConfigSetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeMibGetNextReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeMibGetNextReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeMibGetNextReqSizeof(void *msg);
-extern void CsrWifiSmeMibGetNextReqSerFree(void *msg);
-
-extern u8 *CsrWifiSmeMibGetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeMibGetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeMibGetReqSizeof(void *msg);
-extern void CsrWifiSmeMibGetReqSerFree(void *msg);
-
-extern u8 *CsrWifiSmeMibSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeMibSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeMibSetReqSizeof(void *msg);
-extern void CsrWifiSmeMibSetReqSerFree(void *msg);
-
-extern u8 *CsrWifiSmeMulticastAddressReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeMulticastAddressReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeMulticastAddressReqSizeof(void *msg);
-extern void CsrWifiSmeMulticastAddressReqSerFree(void *msg);
-
-extern u8 *CsrWifiSmePacketFilterSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmePacketFilterSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmePacketFilterSetReqSizeof(void *msg);
-extern void CsrWifiSmePacketFilterSetReqSerFree(void *msg);
-
-#define CsrWifiSmePermanentMacAddressGetReqSer CsrWifiEventSer
-#define CsrWifiSmePermanentMacAddressGetReqDes CsrWifiEventDes
-#define CsrWifiSmePermanentMacAddressGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmePermanentMacAddressGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmePmkidReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmePmkidReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmePmkidReqSizeof(void *msg);
-extern void CsrWifiSmePmkidReqSerFree(void *msg);
-
-#define CsrWifiSmePowerConfigGetReqSer CsrWifiEventSer
-#define CsrWifiSmePowerConfigGetReqDes CsrWifiEventDes
-#define CsrWifiSmePowerConfigGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmePowerConfigGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmePowerConfigSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmePowerConfigSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmePowerConfigSetReqSizeof(void *msg);
-#define CsrWifiSmePowerConfigSetReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeRegulatoryDomainInfoGetReqSer CsrWifiEventSer
-#define CsrWifiSmeRegulatoryDomainInfoGetReqDes CsrWifiEventDes
-#define CsrWifiSmeRegulatoryDomainInfoGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeRegulatoryDomainInfoGetReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeRoamingConfigGetReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeRoamingConfigGetReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeRoamingConfigGetReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeRoamingConfigGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeRoamingConfigSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeRoamingConfigSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeRoamingConfigSetReqSizeof(void *msg);
-#define CsrWifiSmeRoamingConfigSetReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeScanConfigGetReqSer CsrWifiEventSer
-#define CsrWifiSmeScanConfigGetReqDes CsrWifiEventDes
-#define CsrWifiSmeScanConfigGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeScanConfigGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeScanConfigSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeScanConfigSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeScanConfigSetReqSizeof(void *msg);
-extern void CsrWifiSmeScanConfigSetReqSerFree(void *msg);
-
-extern u8 *CsrWifiSmeScanFullReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeScanFullReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeScanFullReqSizeof(void *msg);
-extern void CsrWifiSmeScanFullReqSerFree(void *msg);
-
-#define CsrWifiSmeScanResultsFlushReqSer CsrWifiEventSer
-#define CsrWifiSmeScanResultsFlushReqDes CsrWifiEventDes
-#define CsrWifiSmeScanResultsFlushReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeScanResultsFlushReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeScanResultsGetReqSer CsrWifiEventSer
-#define CsrWifiSmeScanResultsGetReqDes CsrWifiEventDes
-#define CsrWifiSmeScanResultsGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeScanResultsGetReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeSmeStaConfigGetReqSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeSmeStaConfigGetReqDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeSmeStaConfigGetReqSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeSmeStaConfigGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeSmeStaConfigSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeSmeStaConfigSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeSmeStaConfigSetReqSizeof(void *msg);
-#define CsrWifiSmeSmeStaConfigSetReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeStationMacAddressGetReqSer CsrWifiEventSer
-#define CsrWifiSmeStationMacAddressGetReqDes CsrWifiEventDes
-#define CsrWifiSmeStationMacAddressGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeStationMacAddressGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeTspecReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeTspecReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeTspecReqSizeof(void *msg);
-extern void CsrWifiSmeTspecReqSerFree(void *msg);
-
-#define CsrWifiSmeVersionsGetReqSer CsrWifiEventSer
-#define CsrWifiSmeVersionsGetReqDes CsrWifiEventDes
-#define CsrWifiSmeVersionsGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeVersionsGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeWifiFlightmodeReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeWifiFlightmodeReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeWifiFlightmodeReqSizeof(void *msg);
-extern void CsrWifiSmeWifiFlightmodeReqSerFree(void *msg);
-
-#define CsrWifiSmeWifiOffReqSer CsrWifiEventSer
-#define CsrWifiSmeWifiOffReqDes CsrWifiEventDes
-#define CsrWifiSmeWifiOffReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeWifiOffReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeWifiOnReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeWifiOnReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeWifiOnReqSizeof(void *msg);
-extern void CsrWifiSmeWifiOnReqSerFree(void *msg);
-
-extern u8 *CsrWifiSmeCloakedSsidsSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeCloakedSsidsSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeCloakedSsidsSetReqSizeof(void *msg);
-extern void CsrWifiSmeCloakedSsidsSetReqSerFree(void *msg);
-
-#define CsrWifiSmeCloakedSsidsGetReqSer CsrWifiEventSer
-#define CsrWifiSmeCloakedSsidsGetReqDes CsrWifiEventDes
-#define CsrWifiSmeCloakedSsidsGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeCloakedSsidsGetReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeSmeCommonConfigGetReqSer CsrWifiEventSer
-#define CsrWifiSmeSmeCommonConfigGetReqDes CsrWifiEventDes
-#define CsrWifiSmeSmeCommonConfigGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeSmeCommonConfigGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeSmeCommonConfigSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeSmeCommonConfigSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeSmeCommonConfigSetReqSizeof(void *msg);
-#define CsrWifiSmeSmeCommonConfigSetReqSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeInterfaceCapabilityGetReqSer CsrWifiEventSer
-#define CsrWifiSmeInterfaceCapabilityGetReqDes CsrWifiEventDes
-#define CsrWifiSmeInterfaceCapabilityGetReqSizeof CsrWifiEventSizeof
-#define CsrWifiSmeInterfaceCapabilityGetReqSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeWpsConfigurationReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeWpsConfigurationReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeWpsConfigurationReqSizeof(void *msg);
-extern void CsrWifiSmeWpsConfigurationReqSerFree(void *msg);
-
-extern u8 *CsrWifiSmeSetReqSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeSetReqDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeSetReqSizeof(void *msg);
-extern void CsrWifiSmeSetReqSerFree(void *msg);
-
-#define CsrWifiSmeActivateCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeActivateCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeActivateCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeActivateCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeAdhocConfigGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeAdhocConfigGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeAdhocConfigGetCfmSizeof(void *msg);
-#define CsrWifiSmeAdhocConfigGetCfmSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeAdhocConfigSetCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeAdhocConfigSetCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeAdhocConfigSetCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeAdhocConfigSetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeAssociationCompleteIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeAssociationCompleteIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeAssociationCompleteIndSizeof(void *msg);
-extern void CsrWifiSmeAssociationCompleteIndSerFree(void *msg);
-
-extern u8 *CsrWifiSmeAssociationStartIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeAssociationStartIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeAssociationStartIndSizeof(void *msg);
-#define CsrWifiSmeAssociationStartIndSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeBlacklistCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeBlacklistCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeBlacklistCfmSizeof(void *msg);
-extern void CsrWifiSmeBlacklistCfmSerFree(void *msg);
-
-extern u8 *CsrWifiSmeCalibrationDataGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeCalibrationDataGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeCalibrationDataGetCfmSizeof(void *msg);
-extern void CsrWifiSmeCalibrationDataGetCfmSerFree(void *msg);
-
-#define CsrWifiSmeCalibrationDataSetCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeCalibrationDataSetCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeCalibrationDataSetCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeCalibrationDataSetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeCcxConfigGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeCcxConfigGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeCcxConfigGetCfmSizeof(void *msg);
-#define CsrWifiSmeCcxConfigGetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeCcxConfigSetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeCcxConfigSetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeCcxConfigSetCfmSizeof(void *msg);
-#define CsrWifiSmeCcxConfigSetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeCoexConfigGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeCoexConfigGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeCoexConfigGetCfmSizeof(void *msg);
-#define CsrWifiSmeCoexConfigGetCfmSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeCoexConfigSetCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeCoexConfigSetCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeCoexConfigSetCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeCoexConfigSetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeCoexInfoGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeCoexInfoGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeCoexInfoGetCfmSizeof(void *msg);
-#define CsrWifiSmeCoexInfoGetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeConnectCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeConnectCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeConnectCfmSizeof(void *msg);
-#define CsrWifiSmeConnectCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeConnectionConfigGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeConnectionConfigGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeConnectionConfigGetCfmSizeof(void *msg);
-extern void CsrWifiSmeConnectionConfigGetCfmSerFree(void *msg);
-
-extern u8 *CsrWifiSmeConnectionInfoGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeConnectionInfoGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeConnectionInfoGetCfmSizeof(void *msg);
-extern void CsrWifiSmeConnectionInfoGetCfmSerFree(void *msg);
-
-extern u8 *CsrWifiSmeConnectionQualityIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeConnectionQualityIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeConnectionQualityIndSizeof(void *msg);
-#define CsrWifiSmeConnectionQualityIndSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeConnectionStatsGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeConnectionStatsGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeConnectionStatsGetCfmSizeof(void *msg);
-#define CsrWifiSmeConnectionStatsGetCfmSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeDeactivateCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeDeactivateCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeDeactivateCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeDeactivateCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeDisconnectCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeDisconnectCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeDisconnectCfmSizeof(void *msg);
-#define CsrWifiSmeDisconnectCfmSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeEventMaskSetCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeEventMaskSetCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeEventMaskSetCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeEventMaskSetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeHostConfigGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeHostConfigGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeHostConfigGetCfmSizeof(void *msg);
-#define CsrWifiSmeHostConfigGetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeHostConfigSetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeHostConfigSetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeHostConfigSetCfmSizeof(void *msg);
-#define CsrWifiSmeHostConfigSetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeIbssStationIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeIbssStationIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeIbssStationIndSizeof(void *msg);
-#define CsrWifiSmeIbssStationIndSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeKeyCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeKeyCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeKeyCfmSizeof(void *msg);
-#define CsrWifiSmeKeyCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeLinkQualityGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeLinkQualityGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeLinkQualityGetCfmSizeof(void *msg);
-#define CsrWifiSmeLinkQualityGetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeMediaStatusIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeMediaStatusIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeMediaStatusIndSizeof(void *msg);
-extern void CsrWifiSmeMediaStatusIndSerFree(void *msg);
-
-extern u8 *CsrWifiSmeMibConfigGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeMibConfigGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeMibConfigGetCfmSizeof(void *msg);
-#define CsrWifiSmeMibConfigGetCfmSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeMibConfigSetCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeMibConfigSetCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeMibConfigSetCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeMibConfigSetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeMibGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeMibGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeMibGetCfmSizeof(void *msg);
-extern void CsrWifiSmeMibGetCfmSerFree(void *msg);
-
-extern u8 *CsrWifiSmeMibGetNextCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeMibGetNextCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeMibGetNextCfmSizeof(void *msg);
-extern void CsrWifiSmeMibGetNextCfmSerFree(void *msg);
-
-#define CsrWifiSmeMibSetCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeMibSetCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeMibSetCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeMibSetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeMicFailureIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeMicFailureIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeMicFailureIndSizeof(void *msg);
-#define CsrWifiSmeMicFailureIndSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeMulticastAddressCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeMulticastAddressCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeMulticastAddressCfmSizeof(void *msg);
-extern void CsrWifiSmeMulticastAddressCfmSerFree(void *msg);
-
-extern u8 *CsrWifiSmePacketFilterSetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmePacketFilterSetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmePacketFilterSetCfmSizeof(void *msg);
-#define CsrWifiSmePacketFilterSetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmePermanentMacAddressGetCfmSer(u8 *ptr, size_t *len,
- void *msg);
-extern void *CsrWifiSmePermanentMacAddressGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmePermanentMacAddressGetCfmSizeof(void *msg);
-#define CsrWifiSmePermanentMacAddressGetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmePmkidCandidateListIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmePmkidCandidateListIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmePmkidCandidateListIndSizeof(void *msg);
-extern void CsrWifiSmePmkidCandidateListIndSerFree(void *msg);
-
-extern u8 *CsrWifiSmePmkidCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmePmkidCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmePmkidCfmSizeof(void *msg);
-extern void CsrWifiSmePmkidCfmSerFree(void *msg);
-
-extern u8 *CsrWifiSmePowerConfigGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmePowerConfigGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmePowerConfigGetCfmSizeof(void *msg);
-#define CsrWifiSmePowerConfigGetCfmSerFree CsrWifiSmePfree
-
-#define CsrWifiSmePowerConfigSetCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmePowerConfigSetCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmePowerConfigSetCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmePowerConfigSetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeRegulatoryDomainInfoGetCfmSer(u8 *ptr, size_t *len,
- void *msg);
-extern void *CsrWifiSmeRegulatoryDomainInfoGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeRegulatoryDomainInfoGetCfmSizeof(void *msg);
-#define CsrWifiSmeRegulatoryDomainInfoGetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeRoamCompleteIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeRoamCompleteIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeRoamCompleteIndSizeof(void *msg);
-#define CsrWifiSmeRoamCompleteIndSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeRoamStartIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeRoamStartIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeRoamStartIndSizeof(void *msg);
-#define CsrWifiSmeRoamStartIndSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeRoamingConfigGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeRoamingConfigGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeRoamingConfigGetCfmSizeof(void *msg);
-#define CsrWifiSmeRoamingConfigGetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeRoamingConfigSetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeRoamingConfigSetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeRoamingConfigSetCfmSizeof(void *msg);
-#define CsrWifiSmeRoamingConfigSetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeScanConfigGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeScanConfigGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeScanConfigGetCfmSizeof(void *msg);
-extern void CsrWifiSmeScanConfigGetCfmSerFree(void *msg);
-
-#define CsrWifiSmeScanConfigSetCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeScanConfigSetCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeScanConfigSetCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeScanConfigSetCfmSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeScanFullCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeScanFullCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeScanFullCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeScanFullCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeScanResultIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeScanResultIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeScanResultIndSizeof(void *msg);
-extern void CsrWifiSmeScanResultIndSerFree(void *msg);
-
-#define CsrWifiSmeScanResultsFlushCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeScanResultsFlushCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeScanResultsFlushCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeScanResultsFlushCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeScanResultsGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeScanResultsGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeScanResultsGetCfmSizeof(void *msg);
-extern void CsrWifiSmeScanResultsGetCfmSerFree(void *msg);
-
-extern u8 *CsrWifiSmeSmeStaConfigGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeSmeStaConfigGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeSmeStaConfigGetCfmSizeof(void *msg);
-#define CsrWifiSmeSmeStaConfigGetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeSmeStaConfigSetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeSmeStaConfigSetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeSmeStaConfigSetCfmSizeof(void *msg);
-#define CsrWifiSmeSmeStaConfigSetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeStationMacAddressGetCfmSer(u8 *ptr, size_t *len,
- void *msg);
-extern void *CsrWifiSmeStationMacAddressGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeStationMacAddressGetCfmSizeof(void *msg);
-#define CsrWifiSmeStationMacAddressGetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeTspecIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeTspecIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeTspecIndSizeof(void *msg);
-extern void CsrWifiSmeTspecIndSerFree(void *msg);
-
-extern u8 *CsrWifiSmeTspecCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeTspecCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeTspecCfmSizeof(void *msg);
-extern void CsrWifiSmeTspecCfmSerFree(void *msg);
-
-extern u8 *CsrWifiSmeVersionsGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeVersionsGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeVersionsGetCfmSizeof(void *msg);
-extern void CsrWifiSmeVersionsGetCfmSerFree(void *msg);
-
-#define CsrWifiSmeWifiFlightmodeCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeWifiFlightmodeCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeWifiFlightmodeCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeWifiFlightmodeCfmSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeWifiOffIndSer CsrWifiEventCsrUint8Ser
-#define CsrWifiSmeWifiOffIndDes CsrWifiEventCsrUint8Des
-#define CsrWifiSmeWifiOffIndSizeof CsrWifiEventCsrUint8Sizeof
-#define CsrWifiSmeWifiOffIndSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeWifiOffCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeWifiOffCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeWifiOffCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeWifiOffCfmSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeWifiOnCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeWifiOnCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeWifiOnCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeWifiOnCfmSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeCloakedSsidsSetCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeCloakedSsidsSetCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeCloakedSsidsSetCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeCloakedSsidsSetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeCloakedSsidsGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeCloakedSsidsGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeCloakedSsidsGetCfmSizeof(void *msg);
-extern void CsrWifiSmeCloakedSsidsGetCfmSerFree(void *msg);
-
-extern u8 *CsrWifiSmeWifiOnIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeWifiOnIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeWifiOnIndSizeof(void *msg);
-#define CsrWifiSmeWifiOnIndSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeSmeCommonConfigGetCfmSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeSmeCommonConfigGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeSmeCommonConfigGetCfmSizeof(void *msg);
-#define CsrWifiSmeSmeCommonConfigGetCfmSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeSmeCommonConfigSetCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeSmeCommonConfigSetCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeSmeCommonConfigSetCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeSmeCommonConfigSetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeInterfaceCapabilityGetCfmSer(u8 *ptr, size_t *len,
- void *msg);
-extern void *CsrWifiSmeInterfaceCapabilityGetCfmDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeInterfaceCapabilityGetCfmSizeof(void *msg);
-#define CsrWifiSmeInterfaceCapabilityGetCfmSerFree CsrWifiSmePfree
-
-extern u8 *CsrWifiSmeErrorIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeErrorIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeErrorIndSizeof(void *msg);
-extern void CsrWifiSmeErrorIndSerFree(void *msg);
-
-extern u8 *CsrWifiSmeInfoIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeInfoIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeInfoIndSizeof(void *msg);
-extern void CsrWifiSmeInfoIndSerFree(void *msg);
-
-extern u8 *CsrWifiSmeCoreDumpIndSer(u8 *ptr, size_t *len, void *msg);
-extern void *CsrWifiSmeCoreDumpIndDes(u8 *buffer, size_t len);
-extern size_t CsrWifiSmeCoreDumpIndSizeof(void *msg);
-extern void CsrWifiSmeCoreDumpIndSerFree(void *msg);
-
-#define CsrWifiSmeAmpStatusChangeIndSer CsrWifiEventCsrUint16CsrUint8Ser
-#define CsrWifiSmeAmpStatusChangeIndDes CsrWifiEventCsrUint16CsrUint8Des
-#define CsrWifiSmeAmpStatusChangeIndSizeof CsrWifiEventCsrUint16CsrUint8Sizeof
-#define CsrWifiSmeAmpStatusChangeIndSerFree CsrWifiSmePfree
-
-#define CsrWifiSmeWpsConfigurationCfmSer CsrWifiEventCsrUint16Ser
-#define CsrWifiSmeWpsConfigurationCfmDes CsrWifiEventCsrUint16Des
-#define CsrWifiSmeWpsConfigurationCfmSizeof CsrWifiEventCsrUint16Sizeof
-#define CsrWifiSmeWpsConfigurationCfmSerFree CsrWifiSmePfree
-
-#endif /* CSR_WIFI_SME_SERIALIZE_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_sme_task.h b/drivers/staging/csr/csr_wifi_sme_task.h
deleted file mode 100644
index 1e938c1fa964..000000000000
--- a/drivers/staging/csr/csr_wifi_sme_task.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-/* Note: this is an auto-generated file. */
-
-#ifndef CSR_WIFI_SME_TASK_H__
-#define CSR_WIFI_SME_TASK_H__
-
-#include "csr_sched.h"
-
-#define CSR_WIFI_SME_LOG_ID 0x1202FFFF
-extern CsrSchedQid CSR_WIFI_SME_IFACEQUEUE;
-void CsrWifiSmeInit(void **gash);
-void CsrWifiSmeDeinit(void **gash);
-void CsrWifiSmeHandler(void **gash);
-
-#endif /* CSR_WIFI_SME_TASK_H__ */
-
diff --git a/drivers/staging/csr/csr_wifi_vif_utils.h b/drivers/staging/csr/csr_wifi_vif_utils.h
deleted file mode 100644
index 8ff97888996d..000000000000
--- a/drivers/staging/csr/csr_wifi_vif_utils.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*****************************************************************************
-
- (c) Cambridge Silicon Radio Limited 2011
- All rights reserved and confidential information of CSR
-
- Refer to LICENSE.txt included with this source for details
- on the license terms.
-
-*****************************************************************************/
-
-#ifndef CSR_WIFI_VIF_UTILS_H
-#define CSR_WIFI_VIF_UTILS_H
-
-/* STANDARD INCLUDES ********************************************************/
-
-/* PROJECT INCLUDES *********************************************************/
-/* including this file for CsrWifiInterfaceMode*/
-#include "csr_wifi_private_common.h"
-
-/* MACROS *******************************************************************/
-
-/* Common macros for NME and SME to be used temporarily until SoftMAC changes are made */
-#define CSR_WIFI_NUM_INTERFACES (u8)0x1
-#define CSR_WIFI_INTERFACE_IN_USE (u16)0x0
-
-#endif /* CSR_WIFI_VIF_UTILS_H */
-
diff --git a/drivers/staging/csr/data_tx.c b/drivers/staging/csr/data_tx.c
deleted file mode 100644
index 9e3d8b8ab02c..000000000000
--- a/drivers/staging/csr/data_tx.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: data_tx.c
- *
- * PURPOSE:
- * This file provides functions to send data requests to the UniFi.
- *
- * Copyright (C) 2007-2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-#include "csr_wifi_hip_unifi.h"
-#include "unifi_priv.h"
-
-int
-uf_verify_m4(unifi_priv_t *priv, const unsigned char *packet, unsigned int length)
-{
- const unsigned char *p = packet;
- u16 keyinfo;
-
-
- if (length < (4 + 5 + 8 + 32 + 16 + 8 + 8 + 16 + 1 + 8))
- return 1;
-
- p += 8;
- keyinfo = p[5] << 8 | p[6]; /* big-endian */
- if (
- (p[0] == 1 || p[0] == 2) /* protocol version 802.1X-2001 (WPA) or -2004 (WPA2) */ &&
- p[1] == 3 /* EAPOL-Key */ &&
- /* don't bother checking p[2] p[3] (hh ll, packet body length) */
- (p[4] == 254 || p[4] == 2) /* descriptor type P802.1i-D3.0 (WPA) or 802.11i-2004 (WPA2) */ &&
- ((keyinfo & 0x0007) == 1 || (keyinfo & 0x0007) == 2) /* key descriptor version */ &&
- (keyinfo & ~0x0207U) == 0x0108 && /* key info for 4/4 or 4/2 -- ignore key desc version and sec bit (since varies in WPA 4/4) */
- (p[4 + 5 + 8 + 32 + 16 + 8 + 8 + 16 + 0] == 0 && /* key data length (2 octets) 0 for 4/4 only */
- p[4 + 5 + 8 + 32 + 16 + 8 + 8 + 16 + 1] == 0)
- ) {
- unifi_trace(priv, UDBG1, "uf_verify_m4: M4 detected\n");
- return 0;
- } else {
- return 1;
- }
-}
-
-/*
- * ---------------------------------------------------------------------------
- *
- * Data transport signals.
- *
- * ---------------------------------------------------------------------------
- */
-
diff --git a/drivers/staging/csr/drv.c b/drivers/staging/csr/drv.c
deleted file mode 100644
index 92898de921f5..000000000000
--- a/drivers/staging/csr/drv.c
+++ /dev/null
@@ -1,2193 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: drv.c
- *
- * PURPOSE:
- * Conventional device interface for debugging/monitoring of the
- * driver and h/w using unicli. This interface is also being used
- * by the SME linux implementation and the helper apps.
- *
- * Copyright (C) 2005-2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-
-/*
- * Porting Notes:
- * Part of this file contains an example for how to glue the OS layer
- * with the HIP core lib, the SDIO glue layer, and the SME.
- *
- * When the unifi_sdio.ko modules loads, the linux kernel calls unifi_load().
- * unifi_load() calls uf_sdio_load() which is exported by the SDIO glue
- * layer. uf_sdio_load() registers this driver with the underlying SDIO driver.
- * When a card is detected, the SDIO glue layer calls register_unifi_sdio()
- * to pass the SDIO function context and ask the OS layer to initialise
- * the card. register_unifi_sdio() allocates all the private data of the OS
- * layer and calls uf_run_unifihelper() to start the SME. The SME calls
- * unifi_sys_wifi_on_req() which uses the HIP core lib to initialise the card.
- */
-
-#include <linux/init.h>
-#include <linux/slab.h>
-#include <linux/poll.h>
-#include <asm/uaccess.h>
-#include <linux/jiffies.h>
-#include <linux/version.h>
-
-#include "csr_wifi_hip_unifiversion.h"
-#include "unifi_priv.h"
-#include "csr_wifi_hip_conversions.h"
-#include "unifi_native.h"
-
-/* Module parameter variables */
-int buswidth = 0; /* 0 means use default, values 1,4 */
-int sdio_clock = 50000; /* kHz */
-int unifi_debug = 0;
-/* fw_init prevents f/w initialisation on error. */
-int fw_init[MAX_UNIFI_DEVS] = {-1, -1};
-int use_5g = 0;
-int led_mask = 0; /* 0x0c00 for dev-pc-1503c, dev-pc-1528a */
-int disable_hw_reset = 0;
-int disable_power_control = 0;
-int enable_wol = UNIFI_WOL_OFF; /* 0 for none, 1 for SDIO IRQ, 2 for PIO */
-#if (defined CSR_SUPPORT_SME) && (defined CSR_SUPPORT_WEXT)
-int tl_80211d = (int)CSR_WIFI_SME_80211D_TRUST_LEVEL_MIB;
-#endif
-int sdio_block_size = -1; /* Override SDIO block size */
-int sdio_byte_mode = 0; /* 0 for block mode + padding, 1 for byte mode */
-int coredump_max = CSR_WIFI_HIP_NUM_COREDUMP_BUFFERS;
-int run_bh_once = -1; /* Set for scheduled interrupt mode, -1 = default */
-int bh_priority = -1;
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-#define UNIFI_LOG_HIP_SIGNALS_FILTER_BULKDATA (1 << 1)
-#define UNIFI_LOG_HIP_SIGNALS_FILTER_TIMESTAMP (1 << 2)
-int log_hip_signals = 0;
-#endif
-
-MODULE_DESCRIPTION("CSR UniFi (SDIO)");
-
-module_param(buswidth, int, S_IRUGO|S_IWUSR);
-module_param(sdio_clock, int, S_IRUGO|S_IWUSR);
-module_param(unifi_debug, int, S_IRUGO|S_IWUSR);
-module_param_array(fw_init, int, NULL, S_IRUGO|S_IWUSR);
-module_param(use_5g, int, S_IRUGO|S_IWUSR);
-module_param(led_mask, int, S_IRUGO|S_IWUSR);
-module_param(disable_hw_reset, int, S_IRUGO|S_IWUSR);
-module_param(disable_power_control, int, S_IRUGO|S_IWUSR);
-module_param(enable_wol, int, S_IRUGO|S_IWUSR);
-#if (defined CSR_SUPPORT_SME) && (defined CSR_SUPPORT_WEXT)
-module_param(tl_80211d, int, S_IRUGO|S_IWUSR);
-#endif
-module_param(sdio_block_size, int, S_IRUGO|S_IWUSR);
-module_param(sdio_byte_mode, int, S_IRUGO|S_IWUSR);
-module_param(coredump_max, int, S_IRUGO|S_IWUSR);
-module_param(run_bh_once, int, S_IRUGO|S_IWUSR);
-module_param(bh_priority, int, S_IRUGO|S_IWUSR);
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-module_param(log_hip_signals, int, S_IRUGO|S_IWUSR);
-#endif
-
-MODULE_PARM_DESC(buswidth, "SDIO bus width (0=default), set 1 for 1-bit or 4 for 4-bit mode");
-MODULE_PARM_DESC(sdio_clock, "SDIO bus frequency in kHz, (default = 50 MHz)");
-MODULE_PARM_DESC(unifi_debug, "Diagnostic reporting level");
-MODULE_PARM_DESC(fw_init, "Set to 0 to prevent f/w initialization on error");
-MODULE_PARM_DESC(use_5g, "Use the 5G (802.11a) radio band");
-MODULE_PARM_DESC(led_mask, "LED mask flags");
-MODULE_PARM_DESC(disable_hw_reset, "Set to 1 to disable hardware reset");
-MODULE_PARM_DESC(disable_power_control, "Set to 1 to disable SDIO power control");
-MODULE_PARM_DESC(enable_wol, "Enable wake-on-wlan function 0=off, 1=SDIO, 2=PIO");
-#if (defined CSR_SUPPORT_SME) && (defined CSR_SUPPORT_WEXT)
-MODULE_PARM_DESC(tl_80211d, "802.11d Trust Level (1-6, default = 5)");
-#endif
-MODULE_PARM_DESC(sdio_block_size, "Set to override SDIO block size");
-MODULE_PARM_DESC(sdio_byte_mode, "Set to 1 for byte mode SDIO");
-MODULE_PARM_DESC(coredump_max, "Number of chip mini-coredump buffers to allocate");
-MODULE_PARM_DESC(run_bh_once, "Run BH only when firmware interrupts");
-MODULE_PARM_DESC(bh_priority, "Modify the BH thread priority");
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-MODULE_PARM_DESC(log_hip_signals, "Set to 1 to enable HIP signal offline logging");
-#endif
-
-
-/* Callback for event logging to UDI clients */
-static void udi_log_event(ul_client_t *client,
- const u8 *signal, int signal_len,
- const bulk_data_param_t *bulkdata,
- int dir);
-
-static void udi_set_log_filter(ul_client_t *pcli,
- unifiio_filter_t *udi_filter);
-
-
-/* Mutex to protect access to priv->sme_cli */
-DEFINE_SEMAPHORE(udi_mutex);
-
-s32 CsrHipResultToStatus(CsrResult csrResult)
-{
- s32 r = -EIO;
-
- switch (csrResult)
- {
- case CSR_RESULT_SUCCESS:
- r = 0;
- break;
- case CSR_WIFI_HIP_RESULT_RANGE:
- r = -ERANGE;
- break;
- case CSR_WIFI_HIP_RESULT_NO_DEVICE:
- r = -ENODEV;
- break;
- case CSR_WIFI_HIP_RESULT_INVALID_VALUE:
- r = -EINVAL;
- break;
- case CSR_WIFI_HIP_RESULT_NOT_FOUND:
- r = -ENOENT;
- break;
- case CSR_WIFI_HIP_RESULT_NO_SPACE:
- r = -ENOSPC;
- break;
- case CSR_WIFI_HIP_RESULT_NO_MEMORY:
- r = -ENOMEM;
- break;
- case CSR_RESULT_FAILURE:
- r = -EIO;
- break;
- default:
- /*unifi_warning(card->ospriv, "CsrHipResultToStatus: Unrecognised csrResult error code: %d\n", csrResult);*/
- r = -EIO;
- }
- return r;
-}
-
-
-static const char*
-trace_putest_cmdid(unifi_putest_command_t putest_cmd)
-{
- switch (putest_cmd) {
- case UNIFI_PUTEST_START:
- return "START";
- case UNIFI_PUTEST_STOP:
- return "STOP";
- case UNIFI_PUTEST_SET_SDIO_CLOCK:
- return "SET CLOCK";
- case UNIFI_PUTEST_CMD52_READ:
- return "CMD52R";
- case UNIFI_PUTEST_CMD52_BLOCK_READ:
- return "CMD52BR";
- case UNIFI_PUTEST_CMD52_WRITE:
- return "CMD52W";
- case UNIFI_PUTEST_DL_FW:
- return "D/L FW";
- case UNIFI_PUTEST_DL_FW_BUFF:
- return "D/L FW BUFFER";
- case UNIFI_PUTEST_COREDUMP_PREPARE:
- return "PREPARE COREDUMP";
- case UNIFI_PUTEST_GP_READ16:
- return "GP16R";
- case UNIFI_PUTEST_GP_WRITE16:
- return "GP16W";
- default:
- return "ERROR: unrecognised command";
- }
- }
-
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-int uf_register_hip_offline_debug(unifi_priv_t *priv)
-{
- ul_client_t *udi_cli;
- int i;
-
- udi_cli = ul_register_client(priv, CLI_USING_WIRE_FORMAT, udi_log_event);
- if (udi_cli == NULL) {
- /* Too many clients already using this device */
- unifi_error(priv, "Too many UDI clients already open\n");
- return -ENOSPC;
- }
- unifi_trace(priv, UDBG1, "Offline HIP client is registered\n");
-
- down(&priv->udi_logging_mutex);
- udi_cli->event_hook = udi_log_event;
- unifi_set_udi_hook(priv->card, logging_handler);
- /* Log all signals by default */
- for (i = 0; i < SIG_FILTER_SIZE; i++) {
- udi_cli->signal_filter[i] = 0xFFFF;
- }
- priv->logging_client = udi_cli;
- up(&priv->udi_logging_mutex);
-
- return 0;
-}
-
-int uf_unregister_hip_offline_debug(unifi_priv_t *priv)
-{
- ul_client_t *udi_cli = priv->logging_client;
- if (udi_cli == NULL)
- {
- unifi_error(priv, "Unknown HIP client unregister request\n");
- return -ERANGE;
- }
-
- unifi_trace(priv, UDBG1, "Offline HIP client is unregistered\n");
-
- down(&priv->udi_logging_mutex);
- priv->logging_client = NULL;
- udi_cli->event_hook = NULL;
- up(&priv->udi_logging_mutex);
-
- ul_deregister_client(udi_cli);
-
- return 0;
-}
-#endif
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_open
- * unifi_release
- *
- * Open and release entry points for the UniFi debug driver.
- *
- * Arguments:
- * Normal linux driver args.
- *
- * Returns:
- * Linux error code.
- * ---------------------------------------------------------------------------
- */
-static int
-unifi_open(struct inode *inode, struct file *file)
-{
- int devno;
- unifi_priv_t *priv;
- ul_client_t *udi_cli;
-
- devno = MINOR(inode->i_rdev) >> 1;
-
- /*
- * Increase the ref_count for the char device clients.
- * Make sure you call uf_put_instance() to decreace it if
- * unifi_open returns an error.
- */
- priv = uf_get_instance(devno);
- if (priv == NULL) {
- unifi_error(NULL, "unifi_open: No device present\n");
- return -ENODEV;
- }
-
- /* Register this instance in the client's list. */
- /* The minor number determines the nature of the client (Unicli or SME). */
- if (MINOR(inode->i_rdev) & 0x1) {
- udi_cli = ul_register_client(priv, CLI_USING_WIRE_FORMAT, udi_log_event);
- if (udi_cli == NULL) {
- /* Too many clients already using this device */
- unifi_error(priv, "Too many clients already open\n");
- uf_put_instance(devno);
- return -ENOSPC;
- }
- unifi_trace(priv, UDBG1, "Client is registered to /dev/unifiudi%d\n", devno);
- } else {
- /*
- * Even-numbered device nodes are the control application.
- * This is the userspace helper containing SME or
- * unifi_manager.
- */
-
- down(&udi_mutex);
-
-#ifdef CSR_SME_USERSPACE
- /* Check if a config client is already attached */
- if (priv->sme_cli) {
- up(&udi_mutex);
- uf_put_instance(devno);
-
- unifi_info(priv, "There is already a configuration client using the character device\n");
- return -EBUSY;
- }
-#endif /* CSR_SME_USERSPACE */
-
-#ifdef CSR_SUPPORT_SME
- udi_cli = ul_register_client(priv,
- CLI_USING_WIRE_FORMAT | CLI_SME_USERSPACE,
- sme_log_event);
-#else
- /* Config client for native driver */
- udi_cli = ul_register_client(priv,
- 0,
- sme_native_log_event);
-#endif
- if (udi_cli == NULL) {
- /* Too many clients already using this device */
- up(&udi_mutex);
- uf_put_instance(devno);
-
- unifi_error(priv, "Too many clients already open\n");
- return -ENOSPC;
- }
-
- /*
- * Fill-in the pointer to the configuration client.
- * This is the SME userspace helper or unifi_manager.
- * Not used in the SME embedded version.
- */
- unifi_trace(priv, UDBG1, "SME client (id:%d s:0x%X) is registered\n",
- udi_cli->client_id, udi_cli->sender_id);
- /* Store the SME UniFi Linux Client */
- if (priv->sme_cli == NULL) {
- priv->sme_cli = udi_cli;
- }
-
- up(&udi_mutex);
- }
-
-
- /*
- * Store the pointer to the client.
- * All char driver's entry points will pass this pointer.
- */
- file->private_data = udi_cli;
-
- return 0;
-} /* unifi_open() */
-
-
-static int
-unifi_release(struct inode *inode, struct file *filp)
-{
- ul_client_t *udi_cli = (void*)filp->private_data;
- int devno;
- unifi_priv_t *priv;
-
- priv = uf_find_instance(udi_cli->instance);
- if (!priv) {
- unifi_error(priv, "unifi_close: instance for device not found\n");
- return -ENODEV;
- }
-
- devno = MINOR(inode->i_rdev) >> 1;
-
- /* Even device nodes are the config client (i.e. SME or unifi_manager) */
- if ((MINOR(inode->i_rdev) & 0x1) == 0) {
-
- if (priv->sme_cli != udi_cli) {
- unifi_notice(priv, "Surprise closing config device: not the sme client\n");
- }
- unifi_notice(priv, "SME client close (unifi%d)\n", devno);
-
- /*
- * Clear sme_cli before calling unifi_sys_... so it doesn't try to
- * queue a reply to the (now gone) SME.
- */
- down(&udi_mutex);
- priv->sme_cli = NULL;
- up(&udi_mutex);
-
-#ifdef CSR_SME_USERSPACE
- /* Power-down when config client closes */
- {
- CsrWifiRouterCtrlWifiOffReq req = {{CSR_WIFI_ROUTER_CTRL_HIP_REQ, 0, 0, 0, NULL}};
- CsrWifiRouterCtrlWifiOffReqHandler(priv, &req.common);
- }
-
- uf_sme_deinit(priv);
-
- /* It is possible that a blocking SME request was made from another process
- * which did not get read by the SME before the WifiOffReq.
- * So check for a pending request which will go unanswered and cancel
- * the wait for event. As only one blocking request can be in progress at
- * a time, up to one event should be completed.
- */
- uf_sme_cancel_request(priv, 0);
-
-#endif /* CSR_SME_USERSPACE */
- } else {
-
- unifi_trace(priv, UDBG2, "UDI client close (unifiudi%d)\n", devno);
-
- /* If the pointer matches the logging client, stop logging. */
- down(&priv->udi_logging_mutex);
- if (udi_cli == priv->logging_client) {
- priv->logging_client = NULL;
- }
- up(&priv->udi_logging_mutex);
-
- if (udi_cli == priv->amp_client) {
- priv->amp_client = NULL;
- }
- }
-
- /* Deregister this instance from the client's list. */
- ul_deregister_client(udi_cli);
-
- uf_put_instance(devno);
-
- return 0;
-} /* unifi_release() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_read
- *
- * The read() driver entry point.
- *
- * Arguments:
- * filp The file descriptor returned by unifi_open()
- * p The user space buffer to copy the read data
- * len The size of the p buffer
- * poff
- *
- * Returns:
- * number of bytes read or an error code on failure
- * ---------------------------------------------------------------------------
- */
-static ssize_t
-unifi_read(struct file *filp, char *p, size_t len, loff_t *poff)
-{
- ul_client_t *pcli = (void*)filp->private_data;
- unifi_priv_t *priv;
- udi_log_t *logptr = NULL;
- udi_msg_t *msgptr;
- struct list_head *l;
- int msglen;
-
- priv = uf_find_instance(pcli->instance);
- if (!priv) {
- unifi_error(priv, "invalid priv\n");
- return -ENODEV;
- }
-
- if (!pcli->udi_enabled) {
- unifi_error(priv, "unifi_read: unknown client.");
- return -EINVAL;
- }
-
- if (list_empty(&pcli->udi_log)) {
- if (filp->f_flags & O_NONBLOCK) {
- /* Non-blocking - just return if the udi_log is empty */
- return 0;
- } else {
- /* Blocking - wait on the UDI wait queue */
- if (wait_event_interruptible(pcli->udi_wq,
- !list_empty(&pcli->udi_log)))
- {
- unifi_error(priv, "unifi_read: wait_event_interruptible failed.");
- return -ERESTARTSYS;
- }
- }
- }
-
- /* Read entry from list head and remove it from the list */
- if (down_interruptible(&pcli->udi_sem)) {
- return -ERESTARTSYS;
- }
- l = pcli->udi_log.next;
- list_del(l);
- up(&pcli->udi_sem);
-
- /* Get a pointer to whole struct */
- logptr = list_entry(l, udi_log_t, q);
- if (logptr == NULL) {
- unifi_error(priv, "unifi_read: failed to get event.\n");
- return -EINVAL;
- }
-
- /* Get the real message */
- msgptr = &logptr->msg;
- msglen = msgptr->length;
- if (msglen > len) {
- printk(KERN_WARNING "truncated read to %d actual msg len is %lu\n", msglen, (long unsigned int)len);
- msglen = len;
- }
-
- /* and pass it to the client (SME or Unicli). */
- if (copy_to_user(p, msgptr, msglen))
- {
- printk(KERN_ERR "Failed to copy UDI log to user\n");
- kfree(logptr);
- return -EFAULT;
- }
-
- /* It is our resposibility to free the message buffer. */
- kfree(logptr);
-
- return msglen;
-
-} /* unifi_read() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * udi_send_signal_unpacked
- *
- * Sends an unpacked signal to UniFi.
- *
- * Arguments:
- * priv Pointer to private context struct
- * data Pointer to request structure and data to send
- * data_len Length of data in data pointer.
- *
- * Returns:
- * Number of bytes written, error otherwise.
- *
- * Notes:
- * All clients that use this function to send a signal to the unifi
- * must use the host formatted structures.
- * ---------------------------------------------------------------------------
- */
-static int
-udi_send_signal_unpacked(unifi_priv_t *priv, unsigned char* data, uint data_len)
-{
- CSR_SIGNAL *sigptr = (CSR_SIGNAL*)data;
- CSR_DATAREF *datarefptr;
- bulk_data_param_t bulk_data;
- uint signal_size, i;
- uint bulk_data_offset = 0;
- int bytecount, r;
- CsrResult csrResult;
-
- /* Number of bytes in the signal */
- signal_size = SigGetSize(sigptr);
- if (!signal_size || (signal_size > data_len)) {
- unifi_error(priv, "unifi_sme_mlme_req - Invalid signal 0x%x size should be %d bytes\n",
- sigptr->SignalPrimitiveHeader.SignalId,
- signal_size);
- return -EINVAL;
- }
- bytecount = signal_size;
-
- /* Get a pointer to the information of the first data reference */
- datarefptr = (CSR_DATAREF*)&sigptr->u;
-
- /* Initialize the offset in the data buffer, bulk data is right after the signal. */
- bulk_data_offset = signal_size;
-
- /* store the references and the size of the bulk data to the bulkdata structure */
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++) {
- /* the length of the bulk data is in the signal */
- if ((datarefptr+i)->DataLength) {
- void *dest;
-
- csrResult = unifi_net_data_malloc(priv, &bulk_data.d[i], (datarefptr+i)->DataLength);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "udi_send_signal_unpacked: failed to allocate request_data.\n");
- return -EIO;
- }
-
- dest = (void*)bulk_data.d[i].os_data_ptr;
- memcpy(dest, data + bulk_data_offset, bulk_data.d[i].data_length);
- } else {
- bulk_data.d[i].data_length = 0;
- }
-
- bytecount += bulk_data.d[i].data_length;
- /* advance the offset, to point the next bulk data */
- bulk_data_offset += bulk_data.d[i].data_length;
- }
-
-
- unifi_trace(priv, UDBG3, "SME Send: signal 0x%.4X\n", sigptr->SignalPrimitiveHeader.SignalId);
-
- /* Send the signal. */
- r = ul_send_signal_unpacked(priv, sigptr, &bulk_data);
- if (r < 0) {
- unifi_error(priv, "udi_send_signal_unpacked: send failed (%d)\n", r);
- for(i=0;i<UNIFI_MAX_DATA_REFERENCES;i++) {
- if(bulk_data.d[i].data_length != 0) {
- unifi_net_data_free(priv, &bulk_data.d[i]);
- }
- }
- return -EIO;
- }
-
- return bytecount;
-} /* udi_send_signal_unpacked() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * udi_send_signal_raw
- *
- * Sends a packed signal to UniFi.
- *
- * Arguments:
- * priv Pointer to private context struct
- * buf Pointer to request structure and data to send
- * buflen Length of data in data pointer.
- *
- * Returns:
- * Number of bytes written, error otherwise.
- *
- * Notes:
- * All clients that use this function to send a signal to the unifi
- * must use the wire formatted structures.
- * ---------------------------------------------------------------------------
- */
-static int
-udi_send_signal_raw(unifi_priv_t *priv, unsigned char *buf, int buflen)
-{
- int signal_size;
- int sig_id;
- bulk_data_param_t data_ptrs;
- int i, r;
- unsigned int num_data_refs;
- int bytecount;
- CsrResult csrResult;
-
- /*
- * The signal is the first thing in buf, the signal id is the
- * first 16 bits of the signal.
- */
- /* Number of bytes in the signal */
- sig_id = GET_SIGNAL_ID(buf);
- signal_size = buflen;
- signal_size -= GET_PACKED_DATAREF_LEN(buf, 0);
- signal_size -= GET_PACKED_DATAREF_LEN(buf, 1);
- if ((signal_size <= 0) || (signal_size > buflen)) {
- unifi_error(priv, "udi_send_signal_raw - Couldn't find length of signal 0x%x\n",
- sig_id);
- return -EINVAL;
- }
- unifi_trace(priv, UDBG2, "udi_send_signal_raw: signal 0x%.4X len:%d\n",
- sig_id, signal_size);
- /* Zero the data ref arrays */
- memset(&data_ptrs, 0, sizeof(data_ptrs));
-
- /*
- * Find the number of associated bulk data packets. Scan through
- * the data refs to check that we have enough data and pick out
- * pointers to appended bulk data.
- */
- num_data_refs = 0;
- bytecount = signal_size;
-
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; ++i)
- {
- unsigned int len = GET_PACKED_DATAREF_LEN(buf, i);
- unifi_trace(priv, UDBG3, "udi_send_signal_raw: data_ref length = %d\n", len);
-
- if (len != 0) {
- void *dest;
-
- csrResult = unifi_net_data_malloc(priv, &data_ptrs.d[i], len);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "udi_send_signal_raw: failed to allocate request_data.\n");
- return -EIO;
- }
-
- dest = (void*)data_ptrs.d[i].os_data_ptr;
- memcpy(dest, buf + bytecount, len);
-
- bytecount += len;
- num_data_refs++;
- }
- data_ptrs.d[i].data_length = len;
- }
-
- unifi_trace(priv, UDBG3, "Queueing signal 0x%.4X from UDI with %u data refs\n",
- sig_id,
- num_data_refs);
-
- if (bytecount > buflen) {
- unifi_error(priv, "udi_send_signal_raw: Not enough data (%d instead of %d)\n", buflen, bytecount);
- return -EINVAL;
- }
-
- /* Send the signal calling the function that uses the wire-formatted signals. */
- r = ul_send_signal_raw(priv, buf, signal_size, &data_ptrs);
- if (r < 0) {
- unifi_error(priv, "udi_send_signal_raw: send failed (%d)\n", r);
- return -EIO;
- }
-
-#ifdef CSR_NATIVE_LINUX
- if (sig_id == CSR_MLME_POWERMGT_REQUEST_ID) {
- int power_mode = CSR_GET_UINT16_FROM_LITTLE_ENDIAN((buf +
- SIZEOF_SIGNAL_HEADER + (UNIFI_MAX_DATA_REFERENCES*SIZEOF_DATAREF)));
-#ifdef CSR_SUPPORT_WEXT
- /* Overide the wext power mode to the new value */
- priv->wext_conf.power_mode = power_mode;
-#endif
- /* Configure deep sleep signaling */
- if (power_mode || (priv->interfacePriv[0]->connected == UnifiNotConnected)) {
- csrResult = unifi_configure_low_power_mode(priv->card,
- UNIFI_LOW_POWER_ENABLED,
- UNIFI_PERIODIC_WAKE_HOST_DISABLED);
- } else {
- csrResult = unifi_configure_low_power_mode(priv->card,
- UNIFI_LOW_POWER_DISABLED,
- UNIFI_PERIODIC_WAKE_HOST_DISABLED);
- }
- }
-#endif
-
- return bytecount;
-} /* udi_send_signal_raw */
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_write
- *
- * The write() driver entry point.
- * A UniFi Debug Interface client such as unicli can write a signal
- * plus bulk data to the driver for sending to the UniFi chip.
- *
- * Only one signal may be sent per write operation.
- *
- * Arguments:
- * filp The file descriptor returned by unifi_open()
- * p The user space buffer to get the data from
- * len The size of the p buffer
- * poff
- *
- * Returns:
- * number of bytes written or an error code on failure
- * ---------------------------------------------------------------------------
- */
-static ssize_t
-unifi_write(struct file *filp, const char *p, size_t len, loff_t *poff)
-{
- ul_client_t *pcli = (ul_client_t*)filp->private_data;
- unifi_priv_t *priv;
- unsigned char *buf;
- unsigned char *bufptr;
- int remaining;
- int bytes_written;
- int r;
- bulk_data_param_t bulkdata;
- CsrResult csrResult;
-
- priv = uf_find_instance(pcli->instance);
- if (!priv) {
- unifi_error(priv, "invalid priv\n");
- return -ENODEV;
- }
-
- unifi_trace(priv, UDBG5, "unifi_write: len = %d\n", len);
-
- if (!pcli->udi_enabled) {
- unifi_error(priv, "udi disabled\n");
- return -EINVAL;
- }
-
- /*
- * AMP client sends only one signal at a time, so we can use
- * unifi_net_data_malloc to save the extra copy.
- */
- if (pcli == priv->amp_client) {
- int signal_size;
- int sig_id;
- unsigned char *signal_buf;
- char *user_data_buf;
-
- csrResult = unifi_net_data_malloc(priv, &bulkdata.d[0], len);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "unifi_write: failed to allocate request_data.\n");
- return -ENOMEM;
- }
-
- user_data_buf = (char*)bulkdata.d[0].os_data_ptr;
-
- /* Get the data from the AMP client. */
- if (copy_from_user((void*)user_data_buf, p, len)) {
- unifi_error(priv, "unifi_write: copy from user failed\n");
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return -EFAULT;
- }
-
- bulkdata.d[1].os_data_ptr = NULL;
- bulkdata.d[1].data_length = 0;
-
- /* Number of bytes in the signal */
- sig_id = GET_SIGNAL_ID(bulkdata.d[0].os_data_ptr);
- signal_size = len;
- signal_size -= GET_PACKED_DATAREF_LEN(bulkdata.d[0].os_data_ptr, 0);
- signal_size -= GET_PACKED_DATAREF_LEN(bulkdata.d[0].os_data_ptr, 1);
- if ((signal_size <= 0) || (signal_size > len)) {
- unifi_error(priv, "unifi_write - Couldn't find length of signal 0x%x\n",
- sig_id);
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return -EINVAL;
- }
-
- unifi_trace(priv, UDBG2, "unifi_write: signal 0x%.4X len:%d\n",
- sig_id, signal_size);
-
- /* Allocate a buffer for the signal */
- signal_buf = kmemdup(bulkdata.d[0].os_data_ptr, signal_size,
- GFP_KERNEL);
- if (!signal_buf) {
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return -ENOMEM;
- }
-
- /* Get the signal from the os_data_ptr */
- signal_buf[5] = (pcli->sender_id >> 8) & 0xff;
-
- if (signal_size < len) {
- /* Remove the signal from the os_data_ptr */
- bulkdata.d[0].data_length -= signal_size;
- bulkdata.d[0].os_data_ptr += signal_size;
- } else {
- bulkdata.d[0].data_length = 0;
- bulkdata.d[0].os_data_ptr = NULL;
- }
-
- /* Send the signal calling the function that uses the wire-formatted signals. */
- r = ul_send_signal_raw(priv, signal_buf, signal_size, &bulkdata);
- if (r < 0) {
- unifi_error(priv, "unifi_write: send failed (%d)\n", r);
- if (bulkdata.d[0].os_data_ptr != NULL) {
- unifi_net_data_free(priv, &bulkdata.d[0]);
- }
- }
-
- /* Free the signal buffer and return */
- kfree(signal_buf);
- return len;
- }
-
- buf = kmalloc(len, GFP_KERNEL);
- if (!buf) {
- return -ENOMEM;
- }
-
- /* Get the data from the client (SME or Unicli). */
- if (copy_from_user((void*)buf, p, len)) {
- unifi_error(priv, "copy from user failed\n");
- kfree(buf);
- return -EFAULT;
- }
-
- /*
- * In SME userspace build read() contains a SYS or MGT message.
- * Note that even though the SME sends one signal at a time, we can not
- * use unifi_net_data_malloc because in the early stages, before having
- * initialised the core, it will fail since the I/O block size is unknown.
- */
-#ifdef CSR_SME_USERSPACE
- if (pcli->configuration & CLI_SME_USERSPACE) {
- CsrWifiRouterTransportRecv(priv, buf, len);
- kfree(buf);
- return len;
- }
-#endif
-
- /* ul_send_signal_raw will do a sanity check of len against signal content */
-
- /*
- * udi_send_signal_raw() and udi_send_signal_unpacked() return the number of bytes consumed.
- * A write call can pass multiple signal concatenated together.
- */
- bytes_written = 0;
- remaining = len;
- bufptr = buf;
- while (remaining > 0)
- {
- int r;
-
- /*
- * Set the SenderProcessId.
- * The SignalPrimitiveHeader is the first 3 16-bit words of the signal,
- * the SenderProcessId is bytes 4,5.
- * The MSB of the sender ID needs to be set to the client ID.
- * The LSB is controlled by the SME.
- */
- bufptr[5] = (pcli->sender_id >> 8) & 0xff;
-
- /* use the appropriate interface, depending on the clients' configuration */
- if (pcli->configuration & CLI_USING_WIRE_FORMAT) {
- unifi_trace(priv, UDBG1, "unifi_write: call udi_send_signal().\n");
- r = udi_send_signal_raw(priv, bufptr, remaining);
- } else {
- r = udi_send_signal_unpacked(priv, bufptr, remaining);
- }
- if (r < 0) {
- /* Set the return value to the error code */
- unifi_error(priv, "unifi_write: (udi or sme)_send_signal() returns %d\n", r);
- bytes_written = r;
- break;
- }
- bufptr += r;
- remaining -= r;
- bytes_written += r;
- }
-
- kfree(buf);
-
- return bytes_written;
-} /* unifi_write() */
-
-
-static const char* build_type_to_string(unsigned char build_type)
-{
- switch (build_type)
- {
- case UNIFI_BUILD_NME: return "NME";
- case UNIFI_BUILD_WEXT: return "WEXT";
- case UNIFI_BUILD_AP: return "AP";
- }
- return "unknown";
-}
-
-
-/*
- * ----------------------------------------------------------------
- * unifi_ioctl
- *
- * Ioctl handler for unifi driver.
- *
- * Arguments:
- * inodep Pointer to inode structure.
- * filp Pointer to file structure.
- * cmd Ioctl cmd passed by user.
- * arg Ioctl arg passed by user.
- *
- * Returns:
- * 0 on success, -ve error code on error.
- * ----------------------------------------------------------------
- */
-static long
-unifi_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
-{
- ul_client_t *pcli = (ul_client_t*)filp->private_data;
- unifi_priv_t *priv;
- struct net_device *dev;
- int r = 0;
- int int_param, i;
- u8* buf;
- CsrResult csrResult;
-#if (defined CSR_SUPPORT_SME)
- unifi_cfg_command_t cfg_cmd;
-#if (defined CSR_SUPPORT_WEXT)
- CsrWifiSmeCoexConfig coex_config;
- unsigned char uchar_param;
- unsigned char varbind[MAX_VARBIND_LENGTH];
- int vblen;
-#endif
-#endif
- unifi_putest_command_t putest_cmd;
-
- priv = uf_find_instance(pcli->instance);
- if (!priv) {
- unifi_error(priv, "ioctl error: unknown instance=%d\n", pcli->instance);
- r = -ENODEV;
- goto out;
- }
- unifi_trace(priv, UDBG5, "unifi_ioctl: cmd=0x%X, arg=0x%lX\n", cmd, arg);
-
- switch (cmd) {
-
- case UNIFI_GET_UDI_ENABLE:
- unifi_trace(priv, UDBG4, "UniFi Get UDI Enable\n");
-
- down(&priv->udi_logging_mutex);
- int_param = (priv->logging_client == NULL) ? 0 : 1;
- up(&priv->udi_logging_mutex);
-
- if (put_user(int_param, (int*)arg))
- {
- unifi_error(priv, "UNIFI_GET_UDI_ENABLE: Failed to copy to user\n");
- r = -EFAULT;
- goto out;
- }
- break;
-
- case UNIFI_SET_UDI_ENABLE:
- unifi_trace(priv, UDBG4, "UniFi Set UDI Enable\n");
- if (get_user(int_param, (int*)arg))
- {
- unifi_error(priv, "UNIFI_SET_UDI_ENABLE: Failed to copy from user\n");
- r = -EFAULT;
- goto out;
- }
-
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
- if (log_hip_signals) {
- unifi_error(priv, "omnicli cannot be used when log_hip_signals is used\n");
- r = -EFAULT;
- goto out;
- }
-#endif
-
- down(&priv->udi_logging_mutex);
- if (int_param) {
- pcli->event_hook = udi_log_event;
- unifi_set_udi_hook(priv->card, logging_handler);
- /* Log all signals by default */
- for (i = 0; i < SIG_FILTER_SIZE; i++) {
- pcli->signal_filter[i] = 0xFFFF;
- }
- priv->logging_client = pcli;
-
- } else {
- priv->logging_client = NULL;
- pcli->event_hook = NULL;
- }
- up(&priv->udi_logging_mutex);
-
- break;
-
- case UNIFI_SET_MIB:
- unifi_trace(priv, UDBG4, "UniFi Set MIB\n");
-#if (defined CSR_SUPPORT_SME) && (defined CSR_SUPPORT_WEXT)
- /* Read first 2 bytes and check length */
- if (copy_from_user((void*)varbind, (void*)arg, 2)) {
- unifi_error(priv,
- "UNIFI_SET_MIB: Failed to copy in varbind header\n");
- r = -EFAULT;
- goto out;
- }
- vblen = varbind[1];
- if ((vblen + 2) > MAX_VARBIND_LENGTH) {
- unifi_error(priv,
- "UNIFI_SET_MIB: Varbind too long (%d, limit %d)\n",
- (vblen+2), MAX_VARBIND_LENGTH);
- r = -EINVAL;
- goto out;
- }
- /* Read rest of varbind */
- if (copy_from_user((void*)(varbind+2), (void*)(arg+2), vblen)) {
- unifi_error(priv, "UNIFI_SET_MIB: Failed to copy in varbind\n");
- r = -EFAULT;
- goto out;
- }
-
- /* send to SME */
- vblen += 2;
- r = sme_mgt_mib_set(priv, varbind, vblen);
- if (r) {
- goto out;
- }
-#else
- unifi_notice(priv, "UNIFI_SET_MIB: Unsupported.\n");
-#endif /* CSR_SUPPORT_WEXT */
- break;
-
- case UNIFI_GET_MIB:
- unifi_trace(priv, UDBG4, "UniFi Get MIB\n");
-#if (defined CSR_SUPPORT_SME) && (defined CSR_SUPPORT_WEXT)
- /* Read first 2 bytes and check length */
- if (copy_from_user((void*)varbind, (void*)arg, 2)) {
- unifi_error(priv, "UNIFI_GET_MIB: Failed to copy in varbind header\n");
- r = -EFAULT;
- goto out;
- }
- vblen = varbind[1];
- if ((vblen+2) > MAX_VARBIND_LENGTH) {
- unifi_error(priv, "UNIFI_GET_MIB: Varbind too long (%d, limit %d)\n",
- (vblen+2), MAX_VARBIND_LENGTH);
- r = -EINVAL;
- goto out;
- }
- /* Read rest of varbind */
- if (copy_from_user((void*)(varbind+2), (void*)(arg+2), vblen)) {
- unifi_error(priv, "UNIFI_GET_MIB: Failed to copy in varbind\n");
- r = -EFAULT;
- goto out;
- }
-
- vblen += 2;
- r = sme_mgt_mib_get(priv, varbind, &vblen);
- if (r) {
- goto out;
- }
- /* copy out varbind */
- if (vblen > MAX_VARBIND_LENGTH) {
- unifi_error(priv,
- "UNIFI_GET_MIB: Varbind result too long (%d, limit %d)\n",
- vblen, MAX_VARBIND_LENGTH);
- r = -EINVAL;
- goto out;
- }
- if (copy_to_user((void*)arg, varbind, vblen)) {
- r = -EFAULT;
- goto out;
- }
-#else
- unifi_notice(priv, "UNIFI_GET_MIB: Unsupported.\n");
-#endif /* CSR_SUPPORT_WEXT */
- break;
-
- case UNIFI_CFG:
-#if (defined CSR_SUPPORT_SME)
- if (get_user(cfg_cmd, (unifi_cfg_command_t*)arg))
- {
- unifi_error(priv, "UNIFI_CFG: Failed to get the command\n");
- r = -EFAULT;
- goto out;
- }
-
- unifi_trace(priv, UDBG1, "UNIFI_CFG: Command is %d (t=%u) sz=%d\n",
- cfg_cmd, jiffies_to_msecs(jiffies), sizeof(unifi_cfg_command_t));
- switch (cfg_cmd) {
- case UNIFI_CFG_POWER:
- r = unifi_cfg_power(priv, (unsigned char*)arg);
- break;
- case UNIFI_CFG_POWERSAVE:
- r = unifi_cfg_power_save(priv, (unsigned char*)arg);
- break;
- case UNIFI_CFG_POWERSUPPLY:
- r = unifi_cfg_power_supply(priv, (unsigned char*)arg);
- break;
- case UNIFI_CFG_FILTER:
- r = unifi_cfg_packet_filters(priv, (unsigned char*)arg);
- break;
- case UNIFI_CFG_GET:
- r = unifi_cfg_get_info(priv, (unsigned char*)arg);
- break;
- case UNIFI_CFG_WMM_QOSINFO:
- r = unifi_cfg_wmm_qos_info(priv, (unsigned char*)arg);
- break;
- case UNIFI_CFG_WMM_ADDTS:
- r = unifi_cfg_wmm_addts(priv, (unsigned char*)arg);
- break;
- case UNIFI_CFG_WMM_DELTS:
- r = unifi_cfg_wmm_delts(priv, (unsigned char*)arg);
- break;
- case UNIFI_CFG_STRICT_DRAFT_N:
- r = unifi_cfg_strict_draft_n(priv, (unsigned char*)arg);
- break;
- case UNIFI_CFG_ENABLE_OKC:
- r = unifi_cfg_enable_okc(priv, (unsigned char*)arg);
- break;
-#ifdef CSR_SUPPORT_SME
- case UNIFI_CFG_CORE_DUMP:
- CsrWifiRouterCtrlWifiOffIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, CSR_WIFI_SME_CONTROL_INDICATION_ERROR);
- unifi_trace(priv, UDBG2, "UNIFI_CFG_CORE_DUMP: sent wifi off indication\n");
- break;
-#endif
-#ifdef CSR_SUPPORT_WEXT_AP
- case UNIFI_CFG_SET_AP_CONFIG:
- r= unifi_cfg_set_ap_config(priv, (unsigned char*)arg);
- break;
-#endif
- default:
- unifi_error(priv, "UNIFI_CFG: Unknown Command (%d)\n", cfg_cmd);
- r = -EINVAL;
- goto out;
- }
-#endif
-
- break;
-
- case UNIFI_PUTEST:
- if (get_user(putest_cmd, (unifi_putest_command_t*)arg))
- {
- unifi_error(priv, "UNIFI_PUTEST: Failed to get the command\n");
- r = -EFAULT;
- goto out;
- }
-
- unifi_trace(priv, UDBG1, "UNIFI_PUTEST: Command is %s\n",
- trace_putest_cmdid(putest_cmd));
- switch (putest_cmd) {
- case UNIFI_PUTEST_START:
- r = unifi_putest_start(priv, (unsigned char*)arg);
- break;
- case UNIFI_PUTEST_STOP:
- r = unifi_putest_stop(priv, (unsigned char*)arg);
- break;
- case UNIFI_PUTEST_SET_SDIO_CLOCK:
- r = unifi_putest_set_sdio_clock(priv, (unsigned char*)arg);
- break;
- case UNIFI_PUTEST_CMD52_READ:
- r = unifi_putest_cmd52_read(priv, (unsigned char*)arg);
- break;
- case UNIFI_PUTEST_CMD52_BLOCK_READ:
- r = unifi_putest_cmd52_block_read(priv, (unsigned char*)arg);
- break;
- case UNIFI_PUTEST_CMD52_WRITE:
- r = unifi_putest_cmd52_write(priv, (unsigned char*)arg);
- break;
- case UNIFI_PUTEST_DL_FW:
- r = unifi_putest_dl_fw(priv, (unsigned char*)arg);
- break;
- case UNIFI_PUTEST_DL_FW_BUFF:
- r = unifi_putest_dl_fw_buff(priv, (unsigned char*)arg);
- break;
- case UNIFI_PUTEST_COREDUMP_PREPARE:
- r = unifi_putest_coredump_prepare(priv, (unsigned char*)arg);
- break;
- case UNIFI_PUTEST_GP_READ16:
- r = unifi_putest_gp_read16(priv, (unsigned char*)arg);
- break;
- case UNIFI_PUTEST_GP_WRITE16:
- r = unifi_putest_gp_write16(priv, (unsigned char*)arg);
- break;
- default:
- unifi_error(priv, "UNIFI_PUTEST: Unknown Command (%d)\n", putest_cmd);
- r = -EINVAL;
- goto out;
- }
-
- break;
- case UNIFI_BUILD_TYPE:
- unifi_trace(priv, UDBG2, "UNIFI_BUILD_TYPE userspace=%s\n", build_type_to_string(*(unsigned char*)arg));
-#ifndef CSR_SUPPORT_WEXT_AP
- if (UNIFI_BUILD_AP == *(unsigned char*)arg)
- {
- unifi_error(priv, "Userspace has AP support, which is incompatible\n");
- }
-#endif
-
-#ifndef CSR_SUPPORT_WEXT
- if (UNIFI_BUILD_WEXT == *(unsigned char*)arg)
- {
- unifi_error(priv, "Userspace has WEXT support, which is incompatible\n");
- }
-#endif
- break;
- case UNIFI_INIT_HW:
- unifi_trace(priv, UDBG2, "UNIFI_INIT_HW.\n");
- priv->init_progress = UNIFI_INIT_NONE;
-
-#if defined(CSR_SUPPORT_WEXT) || defined (CSR_NATIVE_LINUX)
- /* At this point we are ready to start the SME. */
- r = sme_mgt_wifi_on(priv);
- if (r) {
- goto out;
- }
-#endif
-
- break;
-
- case UNIFI_INIT_NETDEV:
- {
- /* get the proper interfaceTagId */
- u16 interfaceTag=0;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-
- dev = priv->netdev[interfaceTag];
- unifi_trace(priv, UDBG2, "UNIFI_INIT_NETDEV.\n");
-
- if (copy_from_user((void*)dev->dev_addr, (void*)arg, 6)) {
- r = -EFAULT;
- goto out;
- }
-
- /* Attach the network device to the stack */
- if (!interfacePriv->netdev_registered)
- {
- r = uf_register_netdev(priv, interfaceTag);
- if (r) {
- unifi_error(priv, "Failed to register the network device.\n");
- goto out;
- }
- }
-
- /* Apply scheduled interrupt mode, if requested by module param */
- if (run_bh_once != -1) {
- unifi_set_interrupt_mode(priv->card, (u32)run_bh_once);
- }
-
- priv->init_progress = UNIFI_INIT_COMPLETED;
-
- /* Firmware initialisation is complete, so let the SDIO bus
- * clock be raised when convienent to the core.
- */
- unifi_request_max_sdio_clock(priv->card);
-
-#ifdef CSR_SUPPORT_WEXT
- /* Notify the Android wpa_supplicant that we are ready */
- wext_send_started_event(priv);
-#endif
-
- unifi_info(priv, "UniFi ready\n");
-
-#ifdef ANDROID_BUILD
- /* Release the wakelock */
- unifi_trace(priv, UDBG1, "netdev_init: release wake lock\n");
- wake_unlock(&unifi_sdio_wake_lock);
-#endif
-#ifdef CSR_NATIVE_SOFTMAC /* For softmac dev, force-enable the network interface rather than wait for a connected-ind */
- {
- struct net_device *dev = priv->netdev[interfaceTag];
-#ifdef CSR_SUPPORT_WEXT
- interfacePriv->wait_netdev_change = TRUE;
-#endif
- netif_carrier_on(dev);
- }
-#endif
- }
- break;
- case UNIFI_GET_INIT_STATUS:
- unifi_trace(priv, UDBG2, "UNIFI_GET_INIT_STATUS.\n");
- if (put_user(priv->init_progress, (int*)arg))
- {
- printk(KERN_ERR "UNIFI_GET_INIT_STATUS: Failed to copy to user\n");
- r = -EFAULT;
- goto out;
- }
- break;
-
- case UNIFI_KICK:
- unifi_trace(priv, UDBG4, "Kick UniFi\n");
- unifi_sdio_interrupt_handler(priv->card);
- break;
-
- case UNIFI_SET_DEBUG:
- unifi_debug = arg;
- unifi_trace(priv, UDBG4, "unifi_debug set to %d\n", unifi_debug);
- break;
-
- case UNIFI_SET_TRACE:
- /* no longer supported */
- r = -EINVAL;
- break;
-
-
- case UNIFI_SET_UDI_LOG_MASK:
- {
- unifiio_filter_t udi_filter;
- uint16_t *sig_ids_addr;
-#define UF_MAX_SIG_IDS 128 /* Impose a sensible limit */
-
- if (copy_from_user((void*)(&udi_filter), (void*)arg, sizeof(udi_filter))) {
- r = -EFAULT;
- goto out;
- }
- if ((udi_filter.action < UfSigFil_AllOn) ||
- (udi_filter.action > UfSigFil_SelectOff))
- {
- printk(KERN_WARNING
- "UNIFI_SET_UDI_LOG_MASK: Bad action value: %d\n",
- udi_filter.action);
- r = -EINVAL;
- goto out;
- }
- /* No signal list for "All" actions */
- if ((udi_filter.action == UfSigFil_AllOn) ||
- (udi_filter.action == UfSigFil_AllOff))
- {
- udi_filter.num_sig_ids = 0;
- }
-
- if (udi_filter.num_sig_ids > UF_MAX_SIG_IDS) {
- printk(KERN_WARNING
- "UNIFI_SET_UDI_LOG_MASK: too many signal ids (%d, max %d)\n",
- udi_filter.num_sig_ids, UF_MAX_SIG_IDS);
- r = -EINVAL;
- goto out;
- }
-
- /* Copy in signal id list if given */
- if (udi_filter.num_sig_ids > 0) {
- /* Preserve userspace address of sig_ids array */
- sig_ids_addr = udi_filter.sig_ids;
- /* Allocate kernel memory for sig_ids and copy to it */
- udi_filter.sig_ids =
- kmalloc(udi_filter.num_sig_ids * sizeof(uint16_t), GFP_KERNEL);
- if (!udi_filter.sig_ids) {
- r = -ENOMEM;
- goto out;
- }
- if (copy_from_user((void*)udi_filter.sig_ids,
- (void*)sig_ids_addr,
- udi_filter.num_sig_ids * sizeof(uint16_t)))
- {
- kfree(udi_filter.sig_ids);
- r = -EFAULT;
- goto out;
- }
- }
-
- udi_set_log_filter(pcli, &udi_filter);
-
- if (udi_filter.num_sig_ids > 0) {
- kfree(udi_filter.sig_ids);
- }
- }
- break;
-
- case UNIFI_SET_AMP_ENABLE:
- unifi_trace(priv, UDBG4, "UniFi Set AMP Enable\n");
- if (get_user(int_param, (int*)arg))
- {
- unifi_error(priv, "UNIFI_SET_AMP_ENABLE: Failed to copy from user\n");
- r = -EFAULT;
- goto out;
- }
-
- if (int_param) {
- priv->amp_client = pcli;
- } else {
- priv->amp_client = NULL;
- }
-
- int_param = 0;
- buf = (u8*)&int_param;
- buf[0] = UNIFI_SOFT_COMMAND_Q_LENGTH - 1;
- buf[1] = UNIFI_SOFT_TRAFFIC_Q_LENGTH - 1;
- if (copy_to_user((void*)arg, &int_param, sizeof(int))) {
- r = -EFAULT;
- goto out;
- }
- break;
-
- case UNIFI_SET_UDI_SNAP_MASK:
- {
- unifiio_snap_filter_t snap_filter;
-
- if (copy_from_user((void*)(&snap_filter), (void*)arg, sizeof(snap_filter))) {
- r = -EFAULT;
- goto out;
- }
-
- if (pcli->snap_filter.count) {
- pcli->snap_filter.count = 0;
- kfree(pcli->snap_filter.protocols);
- }
-
- if (snap_filter.count == 0) {
- break;
- }
-
- pcli->snap_filter.protocols = kmalloc(snap_filter.count * sizeof(u16), GFP_KERNEL);
- if (!pcli->snap_filter.protocols) {
- r = -ENOMEM;
- goto out;
- }
- if (copy_from_user((void*)pcli->snap_filter.protocols,
- (void*)snap_filter.protocols,
- snap_filter.count * sizeof(u16)))
- {
- kfree(pcli->snap_filter.protocols);
- r = -EFAULT;
- goto out;
- }
-
- pcli->snap_filter.count = snap_filter.count;
-
- }
- break;
-
- case UNIFI_SME_PRESENT:
- {
- u8 ind;
- unifi_trace(priv, UDBG4, "UniFi SME Present IOCTL.\n");
- if (copy_from_user((void*)(&int_param), (void*)arg, sizeof(int)))
- {
- printk(KERN_ERR "UNIFI_SME_PRESENT: Failed to copy from user\n");
- r = -EFAULT;
- goto out;
- }
-
- priv->sme_is_present = int_param;
- if (priv->sme_is_present == 1) {
- ind = CONFIG_SME_PRESENT;
- } else {
- ind = CONFIG_SME_NOT_PRESENT;
- }
- /* Send an indication to the helper app. */
- ul_log_config_ind(priv, &ind, sizeof(u8));
- }
- break;
-
- case UNIFI_CFG_PERIOD_TRAFFIC:
- {
-#if (defined CSR_SUPPORT_SME) && (defined CSR_SUPPORT_WEXT)
- CsrWifiSmeCoexConfig coexConfig;
-#endif /* CSR_SUPPORT_SME && CSR_SUPPORT_WEXT */
- unifi_trace(priv, UDBG4, "UniFi Configure Periodic Traffic.\n");
-#if (defined CSR_SUPPORT_SME) && (defined CSR_SUPPORT_WEXT)
- if (copy_from_user((void*)(&uchar_param), (void*)arg, sizeof(unsigned char))) {
- unifi_error(priv, "UNIFI_CFG_PERIOD_TRAFFIC: Failed to copy from user\n");
- r = -EFAULT;
- goto out;
- }
-
- if (uchar_param == 0) {
- r = sme_mgt_coex_config_get(priv, &coexConfig);
- if (r) {
- unifi_error(priv, "UNIFI_CFG_PERIOD_TRAFFIC: Get unifi_CoexInfoValue failed.\n");
- goto out;
- }
- if (copy_to_user((void*)(arg + 1),
- (void*)&coexConfig,
- sizeof(CsrWifiSmeCoexConfig))) {
- r = -EFAULT;
- goto out;
- }
- goto out;
- }
-
- if (copy_from_user((void*)(&coex_config), (void*)(arg + 1), sizeof(CsrWifiSmeCoexConfig)))
- {
- unifi_error(priv, "UNIFI_CFG_PERIOD_TRAFFIC: Failed to copy from user\n");
- r = -EFAULT;
- goto out;
- }
-
- coexConfig = coex_config;
- r = sme_mgt_coex_config_set(priv, &coexConfig);
- if (r) {
- unifi_error(priv, "UNIFI_CFG_PERIOD_TRAFFIC: Set unifi_CoexInfoValue failed.\n");
- goto out;
- }
-
-#endif /* CSR_SUPPORT_SME && CSR_SUPPORT_WEXT */
- break;
- }
- case UNIFI_CFG_UAPSD_TRAFFIC:
- unifi_trace(priv, UDBG4, "UniFi Configure U-APSD Mask.\n");
-#if (defined CSR_SUPPORT_SME) && (defined CSR_SUPPORT_WEXT)
- if (copy_from_user((void*)(&uchar_param), (void*)arg, sizeof(unsigned char))) {
- unifi_error(priv, "UNIFI_CFG_UAPSD_TRAFFIC: Failed to copy from user\n");
- r = -EFAULT;
- goto out;
- }
- unifi_trace(priv, UDBG4, "New U-APSD Mask: 0x%x\n", uchar_param);
-#endif /* CSR_SUPPORT_SME && CSR_SUPPORT_WEXT */
- break;
-
-#ifndef UNIFI_DISABLE_COREDUMP
- case UNIFI_COREDUMP_GET_REG:
- unifi_trace(priv, UDBG4, "Mini-coredump data request\n");
- {
- unifiio_coredump_req_t dump_req; /* Public OS layer structure */
- unifi_coredump_req_t priv_req; /* Private HIP structure */
-
- if (copy_from_user((void*)(&dump_req), (void*)arg, sizeof(dump_req))) {
- r = -EFAULT;
- goto out;
- }
- memset(&priv_req, 0, sizeof(priv_req));
- priv_req.index = dump_req.index;
- priv_req.offset = dump_req.offset;
-
- /* Convert OS-layer's XAP memory space ID to HIP's ID in case they differ */
- switch (dump_req.space) {
- case UNIFIIO_COREDUMP_MAC_REG: priv_req.space = UNIFI_COREDUMP_MAC_REG; break;
- case UNIFIIO_COREDUMP_PHY_REG: priv_req.space = UNIFI_COREDUMP_PHY_REG; break;
- case UNIFIIO_COREDUMP_SH_DMEM: priv_req.space = UNIFI_COREDUMP_SH_DMEM; break;
- case UNIFIIO_COREDUMP_MAC_DMEM: priv_req.space = UNIFI_COREDUMP_MAC_DMEM; break;
- case UNIFIIO_COREDUMP_PHY_DMEM: priv_req.space = UNIFI_COREDUMP_PHY_DMEM; break;
- case UNIFIIO_COREDUMP_TRIGGER_MAGIC: priv_req.space = UNIFI_COREDUMP_TRIGGER_MAGIC; break;
- default:
- r = -EINVAL;
- goto out;
- }
-
- if (priv_req.space == UNIFI_COREDUMP_TRIGGER_MAGIC) {
- /* Force a coredump grab now */
- unifi_trace(priv, UDBG2, "UNIFI_COREDUMP_GET_REG: Force capture\n");
- csrResult = unifi_coredump_capture(priv->card, &priv_req);
- r = CsrHipResultToStatus(csrResult);
- unifi_trace(priv, UDBG5, "UNIFI_COREDUMP_GET_REG: status %d\n", r);
- } else {
- /* Retrieve the appropriate register entry */
- csrResult = unifi_coredump_get_value(priv->card, &priv_req);
- r = CsrHipResultToStatus(csrResult);
- if (r) {
- unifi_trace(priv, UDBG5, "UNIFI_COREDUMP_GET_REG: Status %d\n", r);
- goto out;
- }
- /* Update the OS-layer structure with values returned in the private */
- dump_req.value = priv_req.value;
- dump_req.timestamp = priv_req.timestamp;
- dump_req.requestor = priv_req.requestor;
- dump_req.serial = priv_req.serial;
- dump_req.chip_ver = priv_req.chip_ver;
- dump_req.fw_ver = priv_req.fw_ver;
- dump_req.drv_build = 0;
-
- unifi_trace(priv, UDBG6,
- "Dump: %d (seq %d): V:0x%04x (%d) @0x%02x:%04x = 0x%04x\n",
- dump_req.index, dump_req.serial,
- dump_req.chip_ver, dump_req.drv_build,
- dump_req.space, dump_req.offset, dump_req.value);
- }
- if (copy_to_user((void*)arg, (void*)&dump_req, sizeof(dump_req))) {
- r = -EFAULT;
- goto out;
- }
- }
- break;
-#endif
- default:
- r = -EINVAL;
- }
-
-out:
- return (long)r;
-} /* unifi_ioctl() */
-
-
-
-static unsigned int
-unifi_poll(struct file *filp, poll_table *wait)
-{
- ul_client_t *pcli = (ul_client_t*)filp->private_data;
- unsigned int mask = 0;
- int ready;
-
- ready = !list_empty(&pcli->udi_log);
-
- poll_wait(filp, &pcli->udi_wq, wait);
-
- if (ready) {
- mask |= POLLIN | POLLRDNORM; /* readable */
- }
-
- return mask;
-} /* unifi_poll() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * udi_set_log_filter
- *
- * Configure the bit mask that determines which signal primitives are
- * passed to the logging process.
- *
- * Arguments:
- * pcli Pointer to the client to configure.
- * udi_filter Pointer to a unifiio_filter_t containing instructions.
- *
- * Returns:
- * None.
- *
- * Notes:
- * SigGetFilterPos() returns a 32-bit value that contains an index and a
- * mask for accessing a signal_filter array. The top 16 bits specify an
- * index into a signal_filter, the bottom 16 bits specify a mask to
- * apply.
- * ---------------------------------------------------------------------------
- */
-static void
-udi_set_log_filter(ul_client_t *pcli, unifiio_filter_t *udi_filter)
-{
- u32 filter_pos;
- int i;
-
- if (udi_filter->action == UfSigFil_AllOn)
- {
- for (i = 0; i < SIG_FILTER_SIZE; i++) {
- pcli->signal_filter[i] = 0xFFFF;
- }
- }
- else if (udi_filter->action == UfSigFil_AllOff)
- {
- for (i = 0; i < SIG_FILTER_SIZE; i++) {
- pcli->signal_filter[i] = 0;
- }
- }
- else if (udi_filter->action == UfSigFil_SelectOn)
- {
- for (i = 0; i < udi_filter->num_sig_ids; i++) {
- filter_pos = SigGetFilterPos(udi_filter->sig_ids[i]);
- if (filter_pos == 0xFFFFFFFF)
- {
- printk(KERN_WARNING
- "Unrecognised signal id (0x%X) specifed in logging filter\n",
- udi_filter->sig_ids[i]);
- } else {
- pcli->signal_filter[filter_pos >> 16] |= (filter_pos & 0xFFFF);
- }
- }
- }
- else if (udi_filter->action == UfSigFil_SelectOff)
- {
- for (i = 0; i < udi_filter->num_sig_ids; i++) {
- filter_pos = SigGetFilterPos(udi_filter->sig_ids[i]);
- if (filter_pos == 0xFFFFFFFF)
- {
- printk(KERN_WARNING
- "Unrecognised signal id (0x%X) specifed in logging filter\n",
- udi_filter->sig_ids[i]);
- } else {
- pcli->signal_filter[filter_pos >> 16] &= ~(filter_pos & 0xFFFF);
- }
- }
- }
-
-} /* udi_set_log_filter() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * udi_log_event
- *
- * Callback function to be registered as the UDI hook callback.
- * Copies the signal content into a new udi_log_t struct and adds
- * it to the read queue for this UDI client.
- *
- * Arguments:
- * pcli A pointer to the client instance.
- * signal Pointer to the received signal.
- * signal_len Size of the signal structure in bytes.
- * bulkdata Pointers to any associated bulk data.
- * dir Direction of the signal. Zero means from host,
- * non-zero means to host.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void
-udi_log_event(ul_client_t *pcli,
- const u8 *signal, int signal_len,
- const bulk_data_param_t *bulkdata,
- int dir)
-{
- udi_log_t *logptr;
- u8 *p;
- int i;
- int total_len;
- udi_msg_t *msgptr;
- u32 filter_pos;
-#ifdef OMNICLI_LINUX_EXTRA_LOG
- static volatile unsigned int printk_cpu = UINT_MAX;
- unsigned long long t;
- unsigned long nanosec_rem;
- unsigned long n_1000;
-#endif
-
- /* Just a sanity check */
- if ((signal == NULL) || (signal_len <= 0)) {
- return;
- }
-
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
- /* When HIP offline signal logging is enabled, omnicli cannot run */
- if (log_hip_signals)
- {
- /* Add timestamp */
- if (log_hip_signals & UNIFI_LOG_HIP_SIGNALS_FILTER_TIMESTAMP)
- {
- int timestamp = jiffies_to_msecs(jiffies);
- unifi_debug_log_to_buf("T:");
- unifi_debug_log_to_buf("%04X%04X ", *(((u16*)&timestamp) + 1),
- *(u16*)&timestamp);
- }
-
- /* Add signal */
- unifi_debug_log_to_buf("S%s:%04X R:%04X D:%04X ",
- dir ? "T" : "F",
- *(u16*)signal,
- *(u16*)(signal + 2),
- *(u16*)(signal + 4));
- unifi_debug_hex_to_buf(signal + 6, signal_len - 6);
-
- /* Add bulk data (assume 1 bulk data per signal) */
- if ((log_hip_signals & UNIFI_LOG_HIP_SIGNALS_FILTER_BULKDATA) &&
- (bulkdata->d[0].data_length > 0))
- {
- unifi_debug_log_to_buf("\nD:");
- unifi_debug_hex_to_buf(bulkdata->d[0].os_data_ptr, bulkdata->d[0].data_length);
- }
- unifi_debug_log_to_buf("\n");
-
- return;
- }
-#endif
-
-#ifdef CSR_NATIVE_LINUX
- uf_native_process_udi_signal(pcli, signal, signal_len, bulkdata, dir);
-#endif
-
- /*
- * Apply the logging filter - only report signals that have their
- * bit set in the filter mask.
- */
- filter_pos = SigGetFilterPos(GET_SIGNAL_ID(signal));
-
- if ((filter_pos != 0xFFFFFFFF) &&
- ((pcli->signal_filter[filter_pos >> 16] & (filter_pos & 0xFFFF)) == 0))
- {
- /* Signal is not wanted by client */
- return;
- }
-
-
- /* Calculate the buffer we need to store signal plus bulk data */
- total_len = signal_len;
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++) {
- total_len += bulkdata->d[i].data_length;
- }
-
- /* Allocate log structure plus actual signal. */
- logptr = kmalloc(sizeof(udi_log_t) + total_len, GFP_KERNEL);
-
- if (logptr == NULL) {
- printk(KERN_ERR
- "Failed to allocate %lu bytes for a UDI log record\n",
- (long unsigned int)(sizeof(udi_log_t) + total_len));
- return;
- }
-
- /* Fill in udi_log struct */
- INIT_LIST_HEAD(&logptr->q);
- msgptr = &logptr->msg;
- msgptr->length = sizeof(udi_msg_t) + total_len;
-#ifdef OMNICLI_LINUX_EXTRA_LOG
- t = cpu_clock(printk_cpu);
- nanosec_rem = do_div(t, 1000000000);
- n_1000 = nanosec_rem/1000;
- msgptr->timestamp = (t <<10 ) | ((unsigned long)(n_1000 >> 10) & 0x3ff);
-#else
- msgptr->timestamp = jiffies_to_msecs(jiffies);
-#endif
- msgptr->direction = dir;
- msgptr->signal_length = signal_len;
-
- /* Copy signal and bulk data to the log */
- p = (u8 *)(msgptr + 1);
- memcpy(p, signal, signal_len);
- p += signal_len;
-
- /* Append any bulk data */
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++) {
- int len = bulkdata->d[i].data_length;
-
- /*
- * Len here might not be the same as the length in the bulk data slot.
- * The slot length will always be even, but len could be odd.
- */
- if (len > 0) {
- if (bulkdata->d[i].os_data_ptr) {
- memcpy(p, bulkdata->d[i].os_data_ptr, len);
- } else {
- memset(p, 0, len);
- }
- p += len;
- }
- }
-
- /* Add to tail of log queue */
- if (down_interruptible(&pcli->udi_sem)) {
- printk(KERN_WARNING "udi_log_event_q: Failed to get udi sem\n");
- kfree(logptr);
- return;
- }
- list_add_tail(&logptr->q, &pcli->udi_log);
- up(&pcli->udi_sem);
-
- /* Wake any waiting user process */
- wake_up_interruptible(&pcli->udi_wq);
-
-} /* udi_log_event() */
-
-#ifdef CSR_SME_USERSPACE
-int
-uf_sme_queue_message(unifi_priv_t *priv, u8 *buffer, int length)
-{
- udi_log_t *logptr;
- udi_msg_t *msgptr;
- u8 *p;
-
- /* Just a sanity check */
- if ((buffer == NULL) || (length <= 0)) {
- return -EINVAL;
- }
-
- /* Allocate log structure plus actual signal. */
- logptr = kmalloc(sizeof(udi_log_t) + length, GFP_ATOMIC);
- if (logptr == NULL) {
- unifi_error(priv, "Failed to allocate %d bytes for an SME message\n",
- sizeof(udi_log_t) + length);
- kfree(buffer);
- return -ENOMEM;
- }
-
- /* Fill in udi_log struct */
- INIT_LIST_HEAD(&logptr->q);
- msgptr = &logptr->msg;
- msgptr->length = sizeof(udi_msg_t) + length;
- msgptr->signal_length = length;
-
- /* Copy signal and bulk data to the log */
- p = (u8 *)(msgptr + 1);
- memcpy(p, buffer, length);
-
- /* Add to tail of log queue */
- down(&udi_mutex);
- if (priv->sme_cli == NULL) {
- kfree(logptr);
- kfree(buffer);
- up(&udi_mutex);
- unifi_info(priv, "Message for the SME dropped, SME has gone away\n");
- return 0;
- }
-
- down(&priv->sme_cli->udi_sem);
- list_add_tail(&logptr->q, &priv->sme_cli->udi_log);
- up(&priv->sme_cli->udi_sem);
-
- /* Wake any waiting user process */
- wake_up_interruptible(&priv->sme_cli->udi_wq);
- up(&udi_mutex);
-
- /* It is our responsibility to free the buffer allocated in build_packed_*() */
- kfree(buffer);
-
- return 0;
-
-} /* uf_sme_queue_message() */
-#endif
-
-/*
- ****************************************************************************
- *
- * Driver instantiation
- *
- ****************************************************************************
- */
-static const struct file_operations unifi_fops = {
- .owner = THIS_MODULE,
- .open = unifi_open,
- .release = unifi_release,
- .read = unifi_read,
- .write = unifi_write,
- .unlocked_ioctl = unifi_ioctl,
- .poll = unifi_poll,
-};
-
-static dev_t unifi_first_devno;
-static struct class *unifi_class;
-
-
-int uf_create_device_nodes(unifi_priv_t *priv, int bus_id)
-{
- dev_t devno;
- int r;
-
- cdev_init(&priv->unifi_cdev, &unifi_fops);
-
- /* cdev_init() should set the cdev owner, but it does not */
- priv->unifi_cdev.owner = THIS_MODULE;
-
- devno = MKDEV(MAJOR(unifi_first_devno),
- MINOR(unifi_first_devno) + (bus_id * 2));
- r = cdev_add(&priv->unifi_cdev, devno, 1);
- if (r) {
- return r;
- }
-
-#ifdef SDIO_EXPORTS_STRUCT_DEVICE
- if (!device_create(unifi_class, priv->unifi_device,
- devno, priv, "unifi%d", bus_id)) {
-#else
- priv->unifi_device = device_create(unifi_class, NULL,
- devno, priv, "unifi%d", bus_id);
- if (priv->unifi_device == NULL) {
-#endif /* SDIO_EXPORTS_STRUCT_DEVICE */
-
- cdev_del(&priv->unifi_cdev);
- return -EINVAL;
- }
-
- cdev_init(&priv->unifiudi_cdev, &unifi_fops);
-
- /* cdev_init() should set the cdev owner, but it does not */
- priv->unifiudi_cdev.owner = THIS_MODULE;
-
- devno = MKDEV(MAJOR(unifi_first_devno),
- MINOR(unifi_first_devno) + (bus_id * 2) + 1);
- r = cdev_add(&priv->unifiudi_cdev, devno, 1);
- if (r) {
- device_destroy(unifi_class, priv->unifi_cdev.dev);
- cdev_del(&priv->unifi_cdev);
- return r;
- }
-
- if (!device_create(unifi_class,
-#ifdef SDIO_EXPORTS_STRUCT_DEVICE
- priv->unifi_device,
-#else
- NULL,
-#endif /* SDIO_EXPORTS_STRUCT_DEVICE */
- devno, priv, "unifiudi%d", bus_id)) {
- device_destroy(unifi_class, priv->unifi_cdev.dev);
- cdev_del(&priv->unifiudi_cdev);
- cdev_del(&priv->unifi_cdev);
- return -EINVAL;
- }
-
- return 0;
-}
-
-
-void uf_destroy_device_nodes(unifi_priv_t *priv)
-{
- device_destroy(unifi_class, priv->unifiudi_cdev.dev);
- device_destroy(unifi_class, priv->unifi_cdev.dev);
- cdev_del(&priv->unifiudi_cdev);
- cdev_del(&priv->unifi_cdev);
-}
-
-
-
-/*
- * ----------------------------------------------------------------
- * uf_create_debug_device
- *
- * Allocates device numbers for unifi character device nodes
- * and creates a unifi class in sysfs
- *
- * Arguments:
- * fops Pointer to the char device operations structure.
- *
- * Returns:
- * 0 on success, -ve error code on error.
- * ----------------------------------------------------------------
- */
-static int
-uf_create_debug_device(const struct file_operations *fops)
-{
- int ret;
-
- /* Allocate two device numbers for each device. */
- ret = alloc_chrdev_region(&unifi_first_devno, 0, MAX_UNIFI_DEVS*2, UNIFI_NAME);
- if (ret) {
- unifi_error(NULL, "Failed to add alloc dev numbers: %d\n", ret);
- return ret;
- }
-
- /* Create a UniFi class */
- unifi_class = class_create(THIS_MODULE, UNIFI_NAME);
- if (IS_ERR(unifi_class)) {
- unifi_error(NULL, "Failed to create UniFi class\n");
-
- /* Release device numbers */
- unregister_chrdev_region(unifi_first_devno, MAX_UNIFI_DEVS*2);
- unifi_first_devno = 0;
- return -EINVAL;
- }
-
- return 0;
-} /* uf_create_debug_device() */
-
-
-/*
- * ----------------------------------------------------------------
- * uf_remove_debug_device
- *
- * Destroys the unifi class and releases the allocated
- * device numbers for unifi character device nodes.
- *
- * Arguments:
- *
- * Returns:
- * ----------------------------------------------------------------
- */
-static void
-uf_remove_debug_device(void)
-{
- /* Destroy the UniFi class */
- class_destroy(unifi_class);
-
- /* Release device numbers */
- unregister_chrdev_region(unifi_first_devno, MAX_UNIFI_DEVS*2);
- unifi_first_devno = 0;
-
-} /* uf_remove_debug_device() */
-
-
-/*
- * ---------------------------------------------------------------------------
- *
- * Module loading.
- *
- * ---------------------------------------------------------------------------
- */
-int __init
-unifi_load(void)
-{
- int r;
-
- printk("UniFi SDIO Driver: %s %s %s\n",
- CSR_WIFI_VERSION,
- __DATE__, __TIME__);
-
-#ifdef CSR_SME_USERSPACE
-#ifdef CSR_SUPPORT_WEXT
- printk("CSR SME with WEXT support\n");
-#else
- printk("CSR SME no WEXT support\n");
-#endif /* CSR_SUPPORT_WEXT */
-#endif /* CSR_SME_USERSPACE */
-
-#ifdef CSR_NATIVE_LINUX
-#ifdef CSR_SUPPORT_WEXT
-#error WEXT unsupported in the native driver
-#endif
- printk("CSR native no WEXT support\n");
-#endif
-#ifdef CSR_WIFI_SPLIT_PATCH
- printk("Split patch support\n");
-#endif
- printk("Kernel %d.%d.%d\n",
- ((LINUX_VERSION_CODE) >> 16) & 0xff,
- ((LINUX_VERSION_CODE) >> 8) & 0xff,
- (LINUX_VERSION_CODE) & 0xff);
- /*
- * Instantiate the /dev/unifi* device nodes.
- * We must do this before registering with the SDIO driver because it
- * will immediately call the "insert" callback if the card is
- * already present.
- */
- r = uf_create_debug_device(&unifi_fops);
- if (r) {
- return r;
- }
-
- /* Now register with the SDIO driver */
- r = uf_sdio_load();
- if (r) {
- uf_remove_debug_device();
- return r;
- }
-
- if (sdio_block_size > -1) {
- unifi_info(NULL, "sdio_block_size %d\n", sdio_block_size);
- }
-
- if (sdio_byte_mode) {
- unifi_info(NULL, "sdio_byte_mode\n");
- }
-
- if (disable_power_control) {
- unifi_info(NULL, "disable_power_control\n");
- }
-
- if (disable_hw_reset) {
- unifi_info(NULL, "disable_hw_reset\n");
- }
-
- if (enable_wol) {
- unifi_info(NULL, "enable_wol %d\n", enable_wol);
- }
-
- if (run_bh_once != -1) {
- unifi_info(NULL, "run_bh_once %d\n", run_bh_once);
- }
-
- return 0;
-} /* unifi_load() */
-
-
-void __exit
-unifi_unload(void)
-{
- /* The SDIO remove hook will call unifi_disconnect(). */
- uf_sdio_unload();
-
- uf_remove_debug_device();
-
-} /* unifi_unload() */
-
-module_init(unifi_load);
-module_exit(unifi_unload);
-
-MODULE_DESCRIPTION("UniFi Device driver");
-MODULE_AUTHOR("Cambridge Silicon Radio Ltd.");
-MODULE_LICENSE("GPL and additional rights");
diff --git a/drivers/staging/csr/firmware.c b/drivers/staging/csr/firmware.c
deleted file mode 100644
index b42a4d6a0c36..000000000000
--- a/drivers/staging/csr/firmware.c
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: firmware.c
- *
- * PURPOSE:
- * Implements the f/w related HIP core lib API.
- * It is part of the porting exercise in Linux.
- *
- * Also, it contains example code for reading the loader and f/w files
- * from the userspace and starting the SME in Linux.
- *
- * Copyright (C) 2005-2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-#include <linux/kmod.h>
-#include <linux/vmalloc.h>
-#include <linux/firmware.h>
-#include <asm/uaccess.h>
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_unifi_udi.h"
-#include "unifiio.h"
-#include "unifi_priv.h"
-
-/*
- * ---------------------------------------------------------------------------
- *
- * F/W download. Part of the HIP core API
- *
- * ---------------------------------------------------------------------------
- */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_fw_read_start
- *
- * Returns a structure to be passed in unifi_fw_read().
- * This structure is an OS specific description of the f/w file.
- * In the linux implementation it is a buffer with the f/w and its' length.
- * The HIP driver calls this functions to request for the loader or
- * the firmware file.
- * The structure pointer can be freed when unifi_fw_read_stop() is called.
- *
- * Arguments:
- * ospriv Pointer to driver context.
- * is_fw Type of firmware to retrieve
- * info Versions information. Can be used to determine
- * the appropriate f/w file to load.
- *
- * Returns:
- * O on success, non-zero otherwise.
- *
- * ---------------------------------------------------------------------------
- */
-void*
-unifi_fw_read_start(void *ospriv, s8 is_fw, const card_info_t *info)
-{
- unifi_priv_t *priv = (unifi_priv_t*)ospriv;
- CSR_UNUSED(info);
-
- if (is_fw == UNIFI_FW_STA) {
- /* F/w may have been released after a previous successful download. */
- if (priv->fw_sta.dl_data == NULL) {
- unifi_trace(priv, UDBG2, "Attempt reload of sta f/w\n");
- uf_request_firmware_files(priv, UNIFI_FW_STA);
- }
- /* Set up callback struct for readfunc() */
- if (priv->fw_sta.dl_data != NULL) {
- return &priv->fw_sta;
- }
-
- } else {
- unifi_error(priv, "downloading firmware... unknown request: %d\n", is_fw);
- }
-
- return NULL;
-} /* unifi_fw_read_start() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_fw_read_stop
- *
- * Called when the HIP driver has finished using the loader or
- * the firmware file.
- * The firmware buffer may be released now.
- *
- * Arguments:
- * ospriv Pointer to driver context.
- * dlpriv The pointer returned by unifi_fw_read_start()
- *
- * ---------------------------------------------------------------------------
- */
-void
-unifi_fw_read_stop(void *ospriv, void *dlpriv)
-{
- unifi_priv_t *priv = (unifi_priv_t*)ospriv;
- struct dlpriv *dl_struct = (struct dlpriv *)dlpriv;
-
- if (dl_struct != NULL) {
- if (dl_struct->dl_data != NULL) {
- unifi_trace(priv, UDBG2, "Release f/w buffer %p, %d bytes\n",
- dl_struct->dl_data, dl_struct->dl_len);
- }
- uf_release_firmware(priv, dl_struct);
- }
-
-} /* unifi_fw_read_stop() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_fw_open_buffer
- *
- * Returns a handle for a buffer dynamically allocated by the driver,
- * e.g. into which a firmware file may have been converted from another format
- * which is the case with some production test images.
- *
- * The handle may then be used by unifi_fw_read() to access the contents of
- * the buffer.
- *
- * Arguments:
- * ospriv Pointer to driver context.
- * fwbuf Buffer containing firmware image
- * len Length of buffer in bytes
- *
- * Returns
- * Handle for buffer, or NULL on error
- * ---------------------------------------------------------------------------
- */
-void *
-unifi_fw_open_buffer(void *ospriv, void *fwbuf, u32 len)
-{
- unifi_priv_t *priv = (unifi_priv_t*)ospriv;
-
- if (fwbuf == NULL) {
- return NULL;
- }
- priv->fw_conv.dl_data = fwbuf;
- priv->fw_conv.dl_len = len;
- priv->fw_conv.fw_desc = NULL; /* No OS f/w resource is associated */
-
- return &priv->fw_conv;
-}
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_fw_close_buffer
- *
- * Releases any handle for a buffer dynamically allocated by the driver,
- * e.g. into which a firmware file may have been converted from another format
- * which is the case with some production test images.
- *
- *
- * Arguments:
- * ospriv Pointer to driver context.
- * fwbuf Buffer containing firmware image
- *
- * Returns
- * Handle for buffer, or NULL on error
- * ---------------------------------------------------------------------------
- */
-void unifi_fw_close_buffer(void *ospriv, void *fwbuf)
-{
-}
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_fw_read
- *
- * The HIP driver calls this function to ask for a part of the loader or
- * the firmware file.
- *
- * Arguments:
- * ospriv Pointer to driver context.
- * arg The pointer returned by unifi_fw_read_start().
- * offset The offset in the file to return from.
- * buf A buffer to store the requested data.
- * len The size of the buf and the size of the requested data.
- *
- * Returns
- * The number of bytes read from the firmware image, or -ve on error
- * ---------------------------------------------------------------------------
- */
-s32
-unifi_fw_read(void *ospriv, void *arg, u32 offset, void *buf, u32 len)
-{
- const struct dlpriv *dlpriv = arg;
-
- if (offset >= dlpriv->dl_len) {
- /* at end of file */
- return 0;
- }
-
- if ((offset + len) > dlpriv->dl_len) {
- /* attempt to read past end of file */
- return -1;
- }
-
- memcpy(buf, dlpriv->dl_data+offset, len);
-
- return len;
-
-} /* unifi_fw_read() */
-
-
-
-
-#define UNIFIHELPER_INIT_MODE_SMEUSER 2
-#define UNIFIHELPER_INIT_MODE_NATIVE 1
-
-/*
- * ---------------------------------------------------------------------------
- * uf_run_unifihelper
- *
- * Ask userspace to send us firmware for download by running
- * '/usr/sbin/unififw'.
- * The same script starts the SME userspace application.
- * Derived from net_run_sbin_hotplug().
- *
- * Arguments:
- * priv Pointer to OS private struct.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-int
-uf_run_unifihelper(unifi_priv_t *priv)
-{
-#ifdef ANDROID_BUILD
- char *prog = "/system/bin/unififw";
-#else
- char *prog = "/usr/sbin/unififw";
-#endif /* ANDROID_BUILD */
-
- char *argv[6], *envp[4];
- char inst_str[8];
- char init_mode[8];
- int i, r;
-
-#if (defined CSR_SME_USERSPACE) && (!defined CSR_SUPPORT_WEXT)
- unifi_trace(priv, UDBG1, "SME userspace build: run unifi_helper manually\n");
- return 0;
-#endif
-
- unifi_trace(priv, UDBG1, "starting %s\n", prog);
-
- snprintf(inst_str, 8, "%d", priv->instance);
-#if (defined CSR_SME_USERSPACE)
- snprintf(init_mode, 8, "%d", UNIFIHELPER_INIT_MODE_SMEUSER);
-#else
- snprintf(init_mode, 8, "%d", UNIFIHELPER_INIT_MODE_NATIVE);
-#endif /* CSR_SME_USERSPACE */
-
- i = 0;
- argv[i++] = prog;
- argv[i++] = inst_str;
- argv[i++] = init_mode;
- argv[i++] = 0;
- argv[i] = 0;
- /* Don't add more args without making argv bigger */
-
- /* minimal command environment */
- i = 0;
- envp[i++] = "HOME=/";
- envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
- envp[i] = 0;
- /* Don't add more without making envp bigger */
-
- unifi_trace(priv, UDBG2, "running %s %s %s\n", argv[0], argv[1], argv[2]);
-
- r = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);
-
- return r;
-} /* uf_run_unifihelper() */
-
-#ifdef CSR_WIFI_SPLIT_PATCH
-static u8 is_ap_mode(unifi_priv_t *priv)
-{
- if (priv == NULL || priv->interfacePriv[0] == NULL)
- {
- return FALSE;
- }
-
- /* Test for mode requiring AP patch */
- return(CSR_WIFI_HIP_IS_AP_FW(priv->interfacePriv[0]->interfaceMode));
-}
-#endif
-
-/*
- * ---------------------------------------------------------------------------
- * uf_request_firmware_files
- *
- * Get the firmware files from userspace.
- *
- * Arguments:
- * priv Pointer to OS private struct.
- * is_fw type of firmware to load (UNIFI_FW_STA/LOADER)
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-int uf_request_firmware_files(unifi_priv_t *priv, int is_fw)
-{
- /* uses the default method to get the firmware */
- const struct firmware *fw_entry;
- int postfix;
-#define UNIFI_MAX_FW_PATH_LEN 32
- char fw_name[UNIFI_MAX_FW_PATH_LEN];
- int r;
-
-#if (defined CSR_SUPPORT_SME) && (defined CSR_SUPPORT_WEXT)
- if (priv->mib_data.length) {
- vfree(priv->mib_data.data);
- priv->mib_data.data = NULL;
- priv->mib_data.length = 0;
- }
-#endif /* CSR_SUPPORT_SME && CSR_SUPPORT_WEXT*/
-
- postfix = priv->instance;
-
- if (is_fw == UNIFI_FW_STA) {
- /* Free kernel buffer and reload */
- uf_release_firmware(priv, &priv->fw_sta);
-#ifdef CSR_WIFI_SPLIT_PATCH
- scnprintf(fw_name, UNIFI_MAX_FW_PATH_LEN, "unifi-sdio-%d/%s",
- postfix, (is_ap_mode(priv) ? "ap.xbv" : "staonly.xbv") );
-#else
- scnprintf(fw_name, UNIFI_MAX_FW_PATH_LEN, "unifi-sdio-%d/%s",
- postfix, "sta.xbv" );
-#endif
- r = request_firmware(&fw_entry, fw_name, priv->unifi_device);
- if (r == 0) {
- priv->fw_sta.dl_data = fw_entry->data;
- priv->fw_sta.dl_len = fw_entry->size;
- priv->fw_sta.fw_desc = (void *)fw_entry;
- } else {
- unifi_trace(priv, UDBG2, "Firmware file not available\n");
- }
- }
-
- return 0;
-
-} /* uf_request_firmware_files() */
-
-/*
- * ---------------------------------------------------------------------------
- * uf_release_firmware_files
- *
- * Release all buffers used to store firmware files
- *
- * Arguments:
- * priv Pointer to OS private struct.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-int uf_release_firmware_files(unifi_priv_t *priv)
-{
- uf_release_firmware(priv, &priv->fw_sta);
-
- return 0;
-}
-
-/*
- * ---------------------------------------------------------------------------
- * uf_release_firmware
- *
- * Release specific buffer used to store firmware
- *
- * Arguments:
- * priv Pointer to OS private struct.
- * to_free Pointer to specific buffer to release
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-int uf_release_firmware(unifi_priv_t *priv, struct dlpriv *to_free)
-{
- if (to_free != NULL) {
- release_firmware((const struct firmware *)to_free->fw_desc);
- to_free->fw_desc = NULL;
- to_free->dl_data = NULL;
- to_free->dl_len = 0;
- }
- return 0;
-}
diff --git a/drivers/staging/csr/inet.c b/drivers/staging/csr/inet.c
deleted file mode 100644
index b3ef818fef35..000000000000
--- a/drivers/staging/csr/inet.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: inet.c
- *
- * PURPOSE:
- * Routines related to IP address changes.
- * Optional part of the porting exercise. It uses system network
- * handlers to obtain the UniFi IP address and pass it to the SME
- * using the unifi_sys_ip_configured_ind().
- *
- * Copyright (C) 2008-2009 Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-#include <linux/inetdevice.h>
-#include <linux/notifier.h>
-
-#include "unifi_priv.h"
-#include "csr_wifi_hip_conversions.h"
-
-/*
- * The inet notifier is global and not per-netdev. To avoid having a
- * notifier registered when there are no unifi devices present, it's
- * registered after the first unifi network device is registered, and
- * unregistered when the last unifi network device is unregistered.
- */
-
-static atomic_t inet_notif_refs = ATOMIC_INIT(0);
-
-static int uf_inetaddr_event(struct notifier_block *notif, unsigned long event, void *ifa)
-{
- struct net_device *ndev;
- unifi_priv_t *priv;
- struct in_ifaddr *if_addr;
- netInterface_priv_t *InterfacePriv = (netInterface_priv_t *)NULL;
-
- if (!ifa || !((struct in_ifaddr *)ifa)->ifa_dev) {
- unifi_trace(NULL, UDBG1, "uf_inetaddr_event (%lu) ifa=%p\n", event, ifa);
- return NOTIFY_DONE;
- }
-
- ndev = ((struct in_ifaddr *)ifa)->ifa_dev->dev;
- InterfacePriv = (netInterface_priv_t*) netdev_priv(ndev);
-
- /* As the notifier is global, the call may be for a non-UniFi netdev.
- * Therefore check the netdev_priv to make sure it's a known UniFi one.
- */
- if (uf_find_netdev_priv(InterfacePriv) == -1) {
- unifi_trace(NULL, UDBG1, "uf_inetaddr_event (%lu) ndev=%p, other netdev_priv=%p\n",
- event, ndev, InterfacePriv);
- return NOTIFY_DONE;
- }
-
- if (!InterfacePriv->privPtr) {
- unifi_error(NULL, "uf_inetaddr_event null priv (%lu) ndev=%p, InterfacePriv=%p\n",
- event, ndev, InterfacePriv);
- return NOTIFY_DONE;
- }
-
- priv = InterfacePriv->privPtr;
- if_addr = (struct in_ifaddr *)ifa;
-
- /* If this event is for a UniFi device, notify the SME that an IP
- * address has been added or removed. */
- if (uf_find_priv(priv) != -1) {
- switch (event) {
- case NETDEV_UP:
- unifi_info(priv, "IP address assigned for %s\n", priv->netdev[InterfacePriv->InterfaceTag]->name);
- priv->sta_ip_address = if_addr->ifa_address;
-#ifdef CSR_SUPPORT_WEXT
- sme_mgt_packet_filter_set(priv);
-#endif
- break;
- case NETDEV_DOWN:
- unifi_info(priv, "IP address removed for %s\n", priv->netdev[InterfacePriv->InterfaceTag]->name);
- priv->sta_ip_address = 0xFFFFFFFF;
-#ifdef CSR_SUPPORT_WEXT
- sme_mgt_packet_filter_set(priv);
-#endif
- break;
- }
- }
-
- return NOTIFY_DONE;
-}
-
-static struct notifier_block uf_inetaddr_notifier = {
- .notifier_call = uf_inetaddr_event,
-};
-
-void uf_register_inet_notifier(void)
-{
- if (atomic_inc_return(&inet_notif_refs) == 1)
- register_inetaddr_notifier(&uf_inetaddr_notifier);
-}
-
-void uf_unregister_inet_notifier(void)
-{
- if (atomic_dec_return(&inet_notif_refs) == 0)
- unregister_inetaddr_notifier(&uf_inetaddr_notifier);
-}
diff --git a/drivers/staging/csr/init_hw.c b/drivers/staging/csr/init_hw.c
deleted file mode 100644
index 3b8a4babf9a6..000000000000
--- a/drivers/staging/csr/init_hw.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: init_hw.c
- *
- * PURPOSE:
- * Use the HIP core lib to initialise the UniFi chip.
- * It is part of the porting exercise in Linux.
- *
- * Copyright (C) 2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-#include "csr_wifi_hip_unifi.h"
-#include "unifi_priv.h"
-
-
-#define MAX_INIT_ATTEMPTS 4
-
-extern int led_mask;
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_init_hw
- *
- * Resets hardware, downloads and initialises f/w.
- * This function demonstrates how to use the HIP core lib API
- * to implement the SME unifi_sys_wifi_on_req() part of the SYS API.
- *
- * In a simple implementation, all this function needs to do is call
- * unifi_init_card() and then unifi_card_info().
- * In the Linux implementation, it will retry to initialise UniFi or
- * try to debug the reasons if unifi_init_card() returns an error.
- *
- * Arguments:
- * ospriv Pointer to OS driver structure for the device.
- *
- * Returns:
- * O on success, non-zero otherwise.
- *
- * ---------------------------------------------------------------------------
- */
-int
-uf_init_hw(unifi_priv_t *priv)
-{
- int attempts = 0;
- int priv_instance;
- CsrResult csrResult = CSR_RESULT_FAILURE;
-
- priv_instance = uf_find_priv(priv);
- if (priv_instance == -1) {
- unifi_warning(priv, "uf_init_hw: Unknown priv instance, will use fw_init[0]\n");
- priv_instance = 0;
- }
-
- while (1) {
- if (attempts > MAX_INIT_ATTEMPTS) {
- unifi_error(priv, "Failed to initialise UniFi after %d attempts, "
- "giving up.\n",
- attempts);
- break;
- }
- attempts++;
-
- unifi_info(priv, "Initialising UniFi, attempt %d\n", attempts);
-
- if (fw_init[priv_instance] > 0) {
- unifi_notice(priv, "f/w init prevented by module parameter\n");
- break;
- } else if (fw_init[priv_instance] == 0) {
- fw_init[priv_instance] ++;
- }
-
- /*
- * Initialise driver core. This will perform a reset of UniFi
- * internals, but not the SDIO CCCR.
- */
- CsrSdioClaim(priv->sdio);
- csrResult = unifi_init_card(priv->card, led_mask);
- CsrSdioRelease(priv->sdio);
-
- if (csrResult == CSR_WIFI_HIP_RESULT_NO_DEVICE) {
- return CsrHipResultToStatus(csrResult);
- }
- if (csrResult == CSR_WIFI_HIP_RESULT_NOT_FOUND) {
- unifi_error(priv, "Firmware file required, but not found.\n");
- return CsrHipResultToStatus(csrResult);
- }
- if (csrResult != CSR_RESULT_SUCCESS) {
- /* failed. Reset h/w and try again */
- unifi_error(priv, "Failed to initialise UniFi chip.\n");
- continue;
- }
-
- /* Get the version information from the lib_hip */
- unifi_card_info(priv->card, &priv->card_info);
-
- return CsrHipResultToStatus(csrResult);
- }
-
- return CsrHipResultToStatus(csrResult);
-
-} /* uf_init_hw */
-
-
diff --git a/drivers/staging/csr/io.c b/drivers/staging/csr/io.c
deleted file mode 100644
index f903022b4079..000000000000
--- a/drivers/staging/csr/io.c
+++ /dev/null
@@ -1,1098 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: io.c
- *
- * PURPOSE:
- * This file contains routines that the SDIO driver can call when a
- * UniFi card is first inserted (or detected) and removed.
- *
- * When used with sdioemb, the udev scripts (at least on Ubuntu) don't
- * recognise a UniFi being added to the system. This is because sdioemb
- * does not register itself as a device_driver, it uses it's own code
- * to handle insert and remove.
- * To have Ubuntu recognise UniFi, edit /etc/udev/rules.d/85-ifupdown.rules
- * to change this line:
- * SUBSYSTEM=="net", DRIVERS=="?*", GOTO="net_start"
- * to these:
- * #SUBSYSTEM=="net", DRIVERS=="?*", GOTO="net_start"
- * SUBSYSTEM=="net", GOTO="net_start"
- *
- * Then you can add a stanza to /etc/network/interfaces like this:
- * auto eth1
- * iface eth1 inet dhcp
- * wpa-conf /etc/wpa_supplicant.conf
- * This will then automatically associate when a car dis inserted.
- *
- * Copyright (C) 2006-2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-#include <linux/proc_fs.h>
-#include <linux/seq_file.h>
-
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_unifiversion.h"
-#include "csr_wifi_hip_unifi_udi.h" /* for unifi_print_status() */
-#include "unifiio.h"
-#include "unifi_priv.h"
-
-/*
- * Array of pointers to context structs for unifi devices that are present.
- * The index in the array corresponds to the wlan interface number
- * (if "wlan*" is used). If "eth*" is used, the eth* numbers are allocated
- * after any Ethernet cards.
- *
- * The Arasan PCI-SDIO controller card supported by this driver has 2 slots,
- * hence a max of 2 devices.
- */
-static unifi_priv_t *Unifi_instances[MAX_UNIFI_DEVS];
-
-/* Array of pointers to netdev objects used by the UniFi driver, as there
- * are now many per instance. This is used to determine which netdev events
- * are for UniFi as opposed to other net interfaces.
- */
-static netInterface_priv_t *Unifi_netdev_instances[MAX_UNIFI_DEVS * CSR_WIFI_NUM_INTERFACES];
-
-/*
- * Array to hold the status of each unifi device in each slot.
- * We only process an insert event when In_use[] for the slot is
- * UNIFI_DEV_NOT_IN_USE. Otherwise, it means that the slot is in use or
- * we are in the middle of a cleanup (the action on unplug).
- */
-#define UNIFI_DEV_NOT_IN_USE 0
-#define UNIFI_DEV_IN_USE 1
-#define UNIFI_DEV_CLEANUP 2
-static int In_use[MAX_UNIFI_DEVS];
-/*
- * Mutex to prevent UDI clients to open the character device before the priv
- * is created and initialised.
- */
-DEFINE_SEMAPHORE(Unifi_instance_mutex);
-/*
- * When the device is removed, unregister waits on Unifi_cleanup_wq
- * until all the UDI clients release the character device.
- */
-DECLARE_WAIT_QUEUE_HEAD(Unifi_cleanup_wq);
-
-#ifdef CONFIG_PROC_FS
-/*
- * seq_file wrappers for procfile show routines.
- */
-static int uf_proc_show(struct seq_file *m, void *v);
-
-#define UNIFI_DEBUG_TXT_BUFFER (8 * 1024)
-
-static int uf_proc_open(struct inode *inode, struct file *file)
-{
- return single_open_size(file, uf_proc_show, PDE_DATA(inode),
- UNIFI_DEBUG_TXT_BUFFER);
-}
-
-static const struct file_operations uf_proc_fops = {
- .open = uf_proc_open,
- .read = seq_read,
- .llseek = seq_lseek,
- .release = single_release,
-};
-
-#endif /* CONFIG_PROC_FS */
-
-#ifdef CSR_WIFI_RX_PATH_SPLIT
-
-static CsrResult signal_buffer_init(unifi_priv_t * priv, int size)
-{
- int i;
-
- priv->rxSignalBuffer.writePointer =
- priv->rxSignalBuffer.readPointer = 0;
- priv->rxSignalBuffer.size = size;
- /* Allocating Memory for Signal primitive pointer */
- for(i=0; i<size; i++)
- {
- priv->rxSignalBuffer.rx_buff[i].sig_len=0;
- priv->rxSignalBuffer.rx_buff[i].bufptr = kmalloc(UNIFI_PACKED_SIGBUF_SIZE, GFP_KERNEL);
- if (priv->rxSignalBuffer.rx_buff[i].bufptr == NULL)
- {
- int j;
- unifi_error(priv, "signal_buffer_init:Failed to Allocate shared memory for T-H signals \n");
- for(j=0;j<i;j++)
- {
- priv->rxSignalBuffer.rx_buff[j].sig_len=0;
- kfree(priv->rxSignalBuffer.rx_buff[j].bufptr);
- priv->rxSignalBuffer.rx_buff[j].bufptr = NULL;
- }
- return -1;
- }
- }
- return 0;
-}
-
-
-static void signal_buffer_free(unifi_priv_t * priv, int size)
-{
- int i;
-
- for(i=0; i<size; i++)
- {
- priv->rxSignalBuffer.rx_buff[i].sig_len=0;
- kfree(priv->rxSignalBuffer.rx_buff[i].bufptr);
- priv->rxSignalBuffer.rx_buff[i].bufptr = NULL;
- }
-}
-#endif
-/*
- * ---------------------------------------------------------------------------
- * uf_register_netdev
- *
- * Registers the network interface, installes the qdisc,
- * and registers the inet handler.
- * In the porting exercise, register the driver to the network
- * stack if necessary.
- *
- * Arguments:
- * priv Pointer to driver context.
- *
- * Returns:
- * O on success, non-zero otherwise.
- *
- * Notes:
- * We will only unregister when the card is ejected, so we must
- * only do it once.
- * ---------------------------------------------------------------------------
- */
-int
-uf_register_netdev(unifi_priv_t *priv, int interfaceTag)
-{
- int r;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "uf_register_netdev bad interfaceTag\n");
- return -EINVAL;
- }
-
- /*
- * Allocates a device number and registers device with the network
- * stack.
- */
- unifi_trace(priv, UDBG5, "uf_register_netdev: netdev %d - 0x%p\n",
- interfaceTag, priv->netdev[interfaceTag]);
- r = register_netdev(priv->netdev[interfaceTag]);
- if (r) {
- unifi_error(priv, "Failed to register net device\n");
- return -EINVAL;
- }
-
- /* The device is registed */
- interfacePriv->netdev_registered = 1;
-
-#ifdef CSR_SUPPORT_SME
- /*
- * Register the inet handler; it notifies us for changes in the IP address.
- */
- uf_register_inet_notifier();
-#endif /* CSR_SUPPORT_SME */
-
- unifi_notice(priv, "unifi%d is %s\n",
- priv->instance, priv->netdev[interfaceTag]->name);
-
- return 0;
-} /* uf_register_netdev */
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_unregister_netdev
- *
- * Unregisters the network interface and the inet handler.
- *
- * Arguments:
- * priv Pointer to driver context.
- *
- * Returns:
- * None.
- *
- * ---------------------------------------------------------------------------
- */
-void
-uf_unregister_netdev(unifi_priv_t *priv)
-{
- int i=0;
-
-#ifdef CSR_SUPPORT_SME
- /* Unregister the inet handler... */
- uf_unregister_inet_notifier();
-#endif /* CSR_SUPPORT_SME */
-
- for (i=0; i<CSR_WIFI_NUM_INTERFACES; i++) {
- netInterface_priv_t *interfacePriv = priv->interfacePriv[i];
- if (interfacePriv->netdev_registered) {
- unifi_trace(priv, UDBG5,
- "uf_unregister_netdev: netdev %d - 0x%p\n",
- i, priv->netdev[i]);
-
- /* ... and the netdev */
- unregister_netdev(priv->netdev[i]);
- interfacePriv->netdev_registered = 0;
- }
-
- interfacePriv->interfaceMode = 0;
-
- /* Enable all queues by default */
- interfacePriv->queueEnabled[0] = 1;
- interfacePriv->queueEnabled[1] = 1;
- interfacePriv->queueEnabled[2] = 1;
- interfacePriv->queueEnabled[3] = 1;
- }
-
- priv->totalInterfaceCount = 0;
-} /* uf_unregister_netdev() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * register_unifi_sdio
- *
- * This function is called from the Probe (or equivalent) method of
- * the SDIO driver when a UniFi card is detected.
- * We allocate the Linux net_device struct, initialise the HIP core
- * lib, create the char device nodes and start the userspace helper
- * to initialise the device.
- *
- * Arguments:
- * sdio_dev Pointer to SDIO context handle to use for all
- * SDIO ops.
- * bus_id A small number indicating the SDIO card position on the
- * bus. Typically this is the slot number, e.g. 0, 1 etc.
- * Valid values are 0 to MAX_UNIFI_DEVS-1.
- * dev Pointer to kernel device manager struct.
- *
- * Returns:
- * Pointer to the unifi instance, or NULL on error.
- * ---------------------------------------------------------------------------
- */
-static unifi_priv_t *
-register_unifi_sdio(CsrSdioFunction *sdio_dev, int bus_id, struct device *dev)
-{
- unifi_priv_t *priv = NULL;
- int r = -1;
- CsrResult csrResult;
-
- if ((bus_id < 0) || (bus_id >= MAX_UNIFI_DEVS)) {
- unifi_error(priv, "register_unifi_sdio: invalid device %d\n",
- bus_id);
- return NULL;
- }
-
- down(&Unifi_instance_mutex);
-
- if (In_use[bus_id] != UNIFI_DEV_NOT_IN_USE) {
- unifi_error(priv, "register_unifi_sdio: device %d is already in use\n",
- bus_id);
- goto failed0;
- }
-
-
- /* Allocate device private and net_device structs */
- priv = uf_alloc_netdevice(sdio_dev, bus_id);
- if (priv == NULL) {
- unifi_error(priv, "Failed to allocate driver private\n");
- goto failed0;
- }
-
- priv->unifi_device = dev;
-
- SET_NETDEV_DEV(priv->netdev[0], dev);
-
- /* We are not ready to send data yet. */
- netif_carrier_off(priv->netdev[0]);
-
- /* Allocate driver context. */
- priv->card = unifi_alloc_card(priv->sdio, priv);
- if (priv->card == NULL) {
- unifi_error(priv, "Failed to allocate UniFi driver card struct.\n");
- goto failed1;
- }
-
- if (Unifi_instances[bus_id]) {
- unifi_error(priv, "Internal error: instance for slot %d is already taken\n",
- bus_id);
- }
- Unifi_instances[bus_id] = priv;
- In_use[bus_id] = UNIFI_DEV_IN_USE;
-
- /* Save the netdev_priv for use by the netdev event callback mechanism */
- Unifi_netdev_instances[bus_id * CSR_WIFI_NUM_INTERFACES] = netdev_priv(priv->netdev[0]);
-
- /* Initialise the mini-coredump capture buffers */
- csrResult = unifi_coredump_init(priv->card, (u16)coredump_max);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "Couldn't allocate mini-coredump buffers\n");
- }
-
- /* Create the character device nodes */
- r = uf_create_device_nodes(priv, bus_id);
- if (r) {
- goto failed1;
- }
-
- /*
- * We use the slot number as unifi device index.
- */
- scnprintf(priv->proc_entry_name, 64, "driver/unifi%d", priv->instance);
- /*
- * The following complex casting is in place in order to eliminate 64-bit compilation warning
- * "cast to/from pointer from/to integer of different size"
- */
- if (!proc_create_data(priv->proc_entry_name, 0, NULL,
- &uf_proc_fops, (void *)(long)priv->instance))
- {
- unifi_error(priv, "unifi: can't create /proc/driver/unifi\n");
- }
-
- /* Allocate the net_device for interfaces other than 0. */
- {
- int i;
- priv->totalInterfaceCount =0;
-
- for(i=1;i<CSR_WIFI_NUM_INTERFACES;i++)
- {
- if( !uf_alloc_netdevice_for_other_interfaces(priv, i) )
- {
- /* error occured while allocating the net_device for interface[i]. The net_device are
- * allocated for the interfaces with id<i. Dont worry, all the allocated net_device will
- * be releasing chen the control goes to the label failed0.
- */
- unifi_error(priv, "Failed to allocate driver private for interface[%d]\n", i);
- goto failed0;
- }
- else
- {
- SET_NETDEV_DEV(priv->netdev[i], dev);
-
- /* We are not ready to send data yet. */
- netif_carrier_off(priv->netdev[i]);
-
- /* Save the netdev_priv for use by the netdev event callback mechanism */
- Unifi_netdev_instances[bus_id * CSR_WIFI_NUM_INTERFACES + i] = netdev_priv(priv->netdev[i]);
- }
- }
-
- for(i=0;i<CSR_WIFI_NUM_INTERFACES;i++)
- {
- netInterface_priv_t *interfacePriv = priv->interfacePriv[i];
- interfacePriv->netdev_registered=0;
- }
- }
-
-#ifdef CSR_WIFI_RX_PATH_SPLIT
- if (signal_buffer_init(priv, CSR_WIFI_RX_SIGNAL_BUFFER_SIZE))
- {
- unifi_error(priv, "Failed to allocate shared memory for T-H signals\n");
- goto failed2;
- }
- priv->rx_workqueue = create_singlethread_workqueue("rx_workq");
- if (priv->rx_workqueue == NULL) {
- unifi_error(priv, "create_singlethread_workqueue failed \n");
- goto failed3;
- }
- INIT_WORK(&priv->rx_work_struct, rx_wq_handler);
-#endif
-
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
- if (log_hip_signals)
- {
- uf_register_hip_offline_debug(priv);
- }
-#endif
-
- /* Initialise the SME related threads and parameters */
- r = uf_sme_init(priv);
- if (r) {
- unifi_error(priv, "SME initialisation failed.\n");
- goto failed4;
- }
-
- /*
- * Run the userspace helper program (unififw) to perform
- * the device initialisation.
- */
- unifi_trace(priv, UDBG1, "run UniFi helper app...\n");
- r = uf_run_unifihelper(priv);
- if (r) {
- unifi_notice(priv, "unable to run UniFi helper app\n");
- /* Not a fatal error. */
- }
-
- up(&Unifi_instance_mutex);
-
- return priv;
-
-failed4:
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-if (log_hip_signals)
-{
- uf_unregister_hip_offline_debug(priv);
-}
-#endif
-#ifdef CSR_WIFI_RX_PATH_SPLIT
- flush_workqueue(priv->rx_workqueue);
- destroy_workqueue(priv->rx_workqueue);
-failed3:
- signal_buffer_free(priv, CSR_WIFI_RX_SIGNAL_BUFFER_SIZE);
-failed2:
-#endif
- /* Remove the device nodes */
- uf_destroy_device_nodes(priv);
-failed1:
- /* Deregister priv->netdev_client */
- ul_deregister_client(priv->netdev_client);
-
-failed0:
- if (priv && priv->card) {
- unifi_coredump_free(priv->card);
- unifi_free_card(priv->card);
- }
- if (priv) {
- uf_free_netdevice(priv);
- }
-
- up(&Unifi_instance_mutex);
-
- return NULL;
-} /* register_unifi_sdio() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * ask_unifi_sdio_cleanup
- *
- * We can not free our private context, until all the char device
- * clients have closed the file handles. unregister_unifi_sdio() which
- * is called when a card is removed, waits on Unifi_cleanup_wq until
- * the reference count becomes zero. It is time to wake it up now.
- *
- * Arguments:
- * priv Pointer to driver context.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static void
-ask_unifi_sdio_cleanup(unifi_priv_t *priv)
-{
-
- /*
- * Now clear the flag that says the old instance is in use.
- * This is used to prevent a new instance being started before old
- * one has finshed closing down, for example if bounce makes the card
- * appear to be ejected and re-inserted quickly.
- */
- In_use[priv->instance] = UNIFI_DEV_CLEANUP;
-
- unifi_trace(NULL, UDBG5, "ask_unifi_sdio_cleanup: wake up cleanup workqueue.\n");
- wake_up(&Unifi_cleanup_wq);
-
-} /* ask_unifi_sdio_cleanup() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * cleanup_unifi_sdio
- *
- * Release any resources owned by a unifi instance.
- *
- * Arguments:
- * priv Pointer to the instance to free.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static void
-cleanup_unifi_sdio(unifi_priv_t *priv)
-{
- int priv_instance;
- int i;
- static const CsrWifiMacAddress broadcast_address = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}};
-
- /* Remove the device nodes */
- uf_destroy_device_nodes(priv);
-
- /* Mark this device as gone away by NULLing the entry in Unifi_instances */
- Unifi_instances[priv->instance] = NULL;
-
- unifi_trace(priv, UDBG5, "cleanup_unifi_sdio: remove_proc_entry\n");
- /*
- * Free the children of priv before unifi_free_netdevice() frees
- * the priv struct
- */
- remove_proc_entry(priv->proc_entry_name, 0);
-
-
- /* Unregister netdev as a client. */
- if (priv->netdev_client) {
- unifi_trace(priv, UDBG2, "Netdev client (id:%d s:0x%X) is unregistered\n",
- priv->netdev_client->client_id, priv->netdev_client->sender_id);
- ul_deregister_client(priv->netdev_client);
- }
-
- /* Destroy the SME related threads and parameters */
- uf_sme_deinit(priv);
-
-#ifdef CSR_SME_USERSPACE
- priv->smepriv = NULL;
-#endif
-
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
- if (log_hip_signals)
- {
- uf_unregister_hip_offline_debug(priv);
- }
-#endif
-
- /* Free any packets left in the Rx queues */
- for(i=0;i<CSR_WIFI_NUM_INTERFACES;i++)
- {
- uf_free_pending_rx_packets(priv, UF_UNCONTROLLED_PORT_Q, broadcast_address, i);
- uf_free_pending_rx_packets(priv, UF_CONTROLLED_PORT_Q, broadcast_address, i);
- }
- /*
- * We need to free the resources held by the core, which include tx skbs,
- * otherwise we can not call unregister_netdev().
- */
- if (priv->card) {
- unifi_trace(priv, UDBG5, "cleanup_unifi_sdio: free card\n");
- unifi_coredump_free(priv->card);
- unifi_free_card(priv->card);
- priv->card = NULL;
- }
-
- /*
- * Unregister the network device.
- * We can not unregister the netdev before we release
- * all pending packets in the core.
- */
- uf_unregister_netdev(priv);
- priv->totalInterfaceCount = 0;
-
- /* Clear the table of registered netdev_priv's */
- for (i = 0; i < CSR_WIFI_NUM_INTERFACES; i++) {
- Unifi_netdev_instances[priv->instance * CSR_WIFI_NUM_INTERFACES + i] = NULL;
- }
-
- unifi_trace(priv, UDBG5, "cleanup_unifi_sdio: uf_free_netdevice\n");
- /*
- * When uf_free_netdevice() returns, the priv is invalid
- * so we need to remember the instance to clear the global flag later.
- */
- priv_instance = priv->instance;
-
-#ifdef CSR_WIFI_RX_PATH_SPLIT
- flush_workqueue(priv->rx_workqueue);
- destroy_workqueue(priv->rx_workqueue);
- signal_buffer_free(priv, CSR_WIFI_RX_SIGNAL_BUFFER_SIZE);
-#endif
-
- /* Priv is freed as part of the net_device */
- uf_free_netdevice(priv);
-
- /*
- * Now clear the flag that says the old instance is in use.
- * This is used to prevent a new instance being started before old
- * one has finshed closing down, for example if bounce makes the card
- * appear to be ejected and re-inserted quickly.
- */
- In_use[priv_instance] = UNIFI_DEV_NOT_IN_USE;
-
- unifi_trace(NULL, UDBG5, "cleanup_unifi_sdio: DONE.\n");
-
-} /* cleanup_unifi_sdio() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unregister_unifi_sdio
- *
- * Call from SDIO driver when it detects that UniFi has been removed.
- *
- * Arguments:
- * bus_id Number of the card that was ejected.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static void
-unregister_unifi_sdio(int bus_id)
-{
- unifi_priv_t *priv;
- int interfaceTag=0;
- u8 reason = CONFIG_IND_EXIT;
-
- if ((bus_id < 0) || (bus_id >= MAX_UNIFI_DEVS)) {
- unifi_error(NULL, "unregister_unifi_sdio: invalid device %d\n",
- bus_id);
- return;
- }
-
- priv = Unifi_instances[bus_id];
- if (priv == NULL) {
- unifi_error(priv, "unregister_unifi_sdio: device %d is not registered\n",
- bus_id);
- return;
- }
-
- /* Stop the network traffic before freeing the core. */
- for(interfaceTag=0;interfaceTag<priv->totalInterfaceCount;interfaceTag++)
- {
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- if(interfacePriv->netdev_registered)
- {
- netif_carrier_off(priv->netdev[interfaceTag]);
- netif_tx_stop_all_queues(priv->netdev[interfaceTag]);
- }
- }
-
-#ifdef CSR_NATIVE_LINUX
- /*
- * If the unifi thread was started, signal it to stop. This
- * should cause any userspace processes with open unifi device to
- * close them.
- */
- uf_stop_thread(priv, &priv->bh_thread);
-
- /* Unregister the interrupt handler */
- if (csr_sdio_linux_remove_irq(priv->sdio)) {
- unifi_notice(priv,
- "csr_sdio_linux_remove_irq failed to talk to card.\n");
- }
-
- /* Ensure no MLME functions are waiting on a the mlme_event semaphore. */
- uf_abort_mlme(priv);
-#endif /* CSR_NATIVE_LINUX */
-
- ul_log_config_ind(priv, &reason, sizeof(u8));
-
- /* Deregister the UDI hook from the core. */
- unifi_remove_udi_hook(priv->card, logging_handler);
-
- uf_put_instance(bus_id);
-
- /*
- * Wait until the device is cleaned up. i.e., when all userspace
- * processes have closed any open unifi devices.
- */
- wait_event(Unifi_cleanup_wq, In_use[bus_id] == UNIFI_DEV_CLEANUP);
- unifi_trace(NULL, UDBG5, "Received clean up event\n");
-
- /* Now we can free the private context and the char device nodes */
- cleanup_unifi_sdio(priv);
-
-} /* unregister_unifi_sdio() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_find_instance
- *
- * Find the context structure for a given UniFi device instance.
- *
- * Arguments:
- * inst The instance number to look for.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-unifi_priv_t *
-uf_find_instance(int inst)
-{
- if ((inst < 0) || (inst >= MAX_UNIFI_DEVS)) {
- return NULL;
- }
- return Unifi_instances[inst];
-} /* uf_find_instance() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_find_priv
- *
- * Find the device instance for a given context structure.
- *
- * Arguments:
- * priv The context structure pointer to look for.
- *
- * Returns:
- * index of instance, -1 otherwise.
- * ---------------------------------------------------------------------------
- */
-int
-uf_find_priv(unifi_priv_t *priv)
-{
- int inst;
-
- if (!priv) {
- return -1;
- }
-
- for (inst = 0; inst < MAX_UNIFI_DEVS; inst++) {
- if (Unifi_instances[inst] == priv) {
- return inst;
- }
- }
-
- return -1;
-} /* uf_find_priv() */
-
-/*
- * ---------------------------------------------------------------------------
- * uf_find_netdev_priv
- *
- * Find the device instance for a given netdev context structure.
- *
- * Arguments:
- * priv The context structure pointer to look for.
- *
- * Returns:
- * index of instance, -1 otherwise.
- * ---------------------------------------------------------------------------
- */
-int
-uf_find_netdev_priv(netInterface_priv_t *priv)
-{
- int inst;
-
- if (!priv) {
- return -1;
- }
-
- for (inst = 0; inst < MAX_UNIFI_DEVS * CSR_WIFI_NUM_INTERFACES; inst++) {
- if (Unifi_netdev_instances[inst] == priv) {
- return inst;
- }
- }
-
- return -1;
-} /* uf_find_netdev_priv() */
-
-/*
- * ---------------------------------------------------------------------------
- * uf_get_instance
- *
- * Find the context structure for a given UniFi device instance
- * and increment the reference count.
- *
- * Arguments:
- * inst The instance number to look for.
- *
- * Returns:
- * Pointer to the instance or NULL if no instance exists.
- * ---------------------------------------------------------------------------
- */
-unifi_priv_t *
-uf_get_instance(int inst)
-{
- unifi_priv_t *priv;
-
- down(&Unifi_instance_mutex);
-
- priv = uf_find_instance(inst);
- if (priv) {
- priv->ref_count++;
- }
-
- up(&Unifi_instance_mutex);
-
- return priv;
-}
-
-/*
- * ---------------------------------------------------------------------------
- * uf_put_instance
- *
- * Decrement the context reference count, freeing resources and
- * shutting down the driver when the count reaches zero.
- *
- * Arguments:
- * inst The instance number to look for.
- *
- * Returns:
- * Pointer to the instance or NULL if no instance exists.
- * ---------------------------------------------------------------------------
- */
-void
-uf_put_instance(int inst)
-{
- unifi_priv_t *priv;
-
- down(&Unifi_instance_mutex);
-
- priv = uf_find_instance(inst);
- if (priv) {
- priv->ref_count--;
- if (priv->ref_count == 0) {
- ask_unifi_sdio_cleanup(priv);
- }
- }
-
- up(&Unifi_instance_mutex);
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_proc_show
- *
- * Read method for driver node in /proc/driver/unifi0
- *
- * Arguments:
- * page
- * start
- * offset
- * count
- * eof
- * data
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-#ifdef CONFIG_PROC_FS
-static int uf_proc_show(struct seq_file *m, void *v)
-{
- unifi_priv_t *priv;
- int i;
-
- /*
- * The following complex casting is in place in order to eliminate
- * 64-bit compilation warning "cast to/from pointer from/to integer of
- * different size"
- */
- priv = uf_find_instance((long)m->private);
- if (!priv)
- return 0;
-
- seq_printf(m, "UniFi SDIO Driver: %s %s %s\n",
- CSR_WIFI_VERSION, __DATE__, __TIME__);
-#ifdef CSR_SME_USERSPACE
- seq_puts(m, "SME: CSR userspace ");
-#ifdef CSR_SUPPORT_WEXT
- seq_puts(m, "with WEXT support\n");
-#else
- seq_putc(m, '\n');
-#endif /* CSR_SUPPORT_WEXT */
-#endif /* CSR_SME_USERSPACE */
-#ifdef CSR_NATIVE_LINUX
- seq_puts(m, "SME: native\n");
-#endif
-
-#ifdef CSR_SUPPORT_SME
- seq_printf(m, "Firmware (ROM) build:%u, Patch:%u\n",
- priv->card_info.fw_build,
- priv->sme_versions.firmwarePatch);
-#endif
-
- unifi_print_status(priv->card, m);
-
- seq_printf(m, "Last dbg str: %s\n", priv->last_debug_string);
-
- seq_puts(m, "Last dbg16:");
- for (i = 0; i < 8; i++)
- seq_printf(m, " %04X", priv->last_debug_word16[i]);
- seq_putc(m, '\n');
- seq_puts(m, " ");
- for (; i < 16; i++)
- seq_printf(m, " %04X", priv->last_debug_word16[i]);
- seq_putc(m, '\n');
- return 0;
-}
-#endif
-
-
-
-
-static void
-uf_lx_suspend(CsrSdioFunction *sdio_ctx)
-{
- unifi_priv_t *priv = sdio_ctx->driverData;
- unifi_suspend(priv);
-
- CsrSdioSuspendAcknowledge(sdio_ctx, CSR_RESULT_SUCCESS);
-}
-
-static void
-uf_lx_resume(CsrSdioFunction *sdio_ctx)
-{
- unifi_priv_t *priv = sdio_ctx->driverData;
- unifi_resume(priv);
-
- CsrSdioResumeAcknowledge(sdio_ctx, CSR_RESULT_SUCCESS);
-}
-
-static int active_slot = MAX_UNIFI_DEVS;
-static struct device *os_devices[MAX_UNIFI_DEVS];
-
-void
-uf_add_os_device(int bus_id, struct device *os_device)
-{
- if ((bus_id < 0) || (bus_id >= MAX_UNIFI_DEVS)) {
- unifi_error(NULL, "uf_add_os_device: invalid device %d\n",
- bus_id);
- return;
- }
-
- active_slot = bus_id;
- os_devices[bus_id] = os_device;
-} /* uf_add_os_device() */
-
-void
-uf_remove_os_device(int bus_id)
-{
- if ((bus_id < 0) || (bus_id >= MAX_UNIFI_DEVS)) {
- unifi_error(NULL, "uf_remove_os_device: invalid device %d\n",
- bus_id);
- return;
- }
-
- active_slot = bus_id;
- os_devices[bus_id] = NULL;
-} /* uf_remove_os_device() */
-
-static void
-uf_sdio_inserted(CsrSdioFunction *sdio_ctx)
-{
- unifi_priv_t *priv;
-
- unifi_trace(NULL, UDBG5, "uf_sdio_inserted(0x%p), slot_id=%d, dev=%p\n",
- sdio_ctx, active_slot, os_devices[active_slot]);
-
- priv = register_unifi_sdio(sdio_ctx, active_slot, os_devices[active_slot]);
- if (priv == NULL) {
- CsrSdioInsertedAcknowledge(sdio_ctx, CSR_RESULT_FAILURE);
- return;
- }
-
- sdio_ctx->driverData = priv;
-
- CsrSdioInsertedAcknowledge(sdio_ctx, CSR_RESULT_SUCCESS);
-} /* uf_sdio_inserted() */
-
-
-static void
-uf_sdio_removed(CsrSdioFunction *sdio_ctx)
-{
- unregister_unifi_sdio(active_slot);
- CsrSdioRemovedAcknowledge(sdio_ctx);
-} /* uf_sdio_removed() */
-
-
-static void
-uf_sdio_dsr_handler(CsrSdioFunction *sdio_ctx)
-{
- unifi_priv_t *priv = sdio_ctx->driverData;
-
- unifi_sdio_interrupt_handler(priv->card);
-} /* uf_sdio_dsr_handler() */
-
-/*
- * ---------------------------------------------------------------------------
- * uf_sdio_int_handler
- *
- * Interrupt callback function for SDIO interrupts.
- * This is called in kernel context (i.e. not interrupt context).
- * We retrieve the unifi context pointer and call the main UniFi
- * interrupt handler.
- *
- * Arguments:
- * fdev SDIO context pointer
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static CsrSdioInterruptDsrCallback
-uf_sdio_int_handler(CsrSdioFunction *sdio_ctx)
-{
- return uf_sdio_dsr_handler;
-} /* uf_sdio_int_handler() */
-
-
-
-
-static CsrSdioFunctionId unifi_ids[] =
-{
- {
- .manfId = SDIO_MANF_ID_CSR,
- .cardId = SDIO_CARD_ID_UNIFI_3,
- .sdioFunction = SDIO_WLAN_FUNC_ID_UNIFI_3,
- .sdioInterface = CSR_SDIO_ANY_SDIO_INTERFACE,
- },
- {
- .manfId = SDIO_MANF_ID_CSR,
- .cardId = SDIO_CARD_ID_UNIFI_4,
- .sdioFunction = SDIO_WLAN_FUNC_ID_UNIFI_4,
- .sdioInterface = CSR_SDIO_ANY_SDIO_INTERFACE,
- }
-};
-
-
-/*
- * Structure to register with the glue layer.
- */
-static CsrSdioFunctionDriver unifi_sdioFunction_drv =
-{
- .inserted = uf_sdio_inserted,
- .removed = uf_sdio_removed,
- .intr = uf_sdio_int_handler,
- .suspend = uf_lx_suspend,
- .resume = uf_lx_resume,
-
- .ids = unifi_ids,
- .idsCount = sizeof(unifi_ids) / sizeof(unifi_ids[0])
-};
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_sdio_load
- * uf_sdio_unload
- *
- * These functions are called from the main module load and unload
- * functions. They perform the appropriate operations for the monolithic
- * driver.
- *
- * Arguments:
- * None.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-int __init
-uf_sdio_load(void)
-{
- CsrResult csrResult;
-
- csrResult = CsrSdioFunctionDriverRegister(&unifi_sdioFunction_drv);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(NULL, "Failed to register UniFi SDIO driver: csrResult=%d\n", csrResult);
- return -EIO;
- }
-
- return 0;
-} /* uf_sdio_load() */
-
-
-
-void __exit
-uf_sdio_unload(void)
-{
- CsrSdioFunctionDriverUnregister(&unifi_sdioFunction_drv);
-} /* uf_sdio_unload() */
-
diff --git a/drivers/staging/csr/mlme.c b/drivers/staging/csr/mlme.c
deleted file mode 100644
index 861d6b7687c7..000000000000
--- a/drivers/staging/csr/mlme.c
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: mlme.c
- *
- * PURPOSE:
- * This file provides functions to send MLME requests to the UniFi.
- *
- * Copyright (C) 2007-2008 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-#include "csr_wifi_hip_unifi.h"
-#include "unifi_priv.h"
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_mlme_wait_for_reply
- *
- * Wait for a reply after sending a signal.
- *
- * Arguments:
- * priv Pointer to device private context struct
- * ul_client Pointer to linux client
- * sig_reply_id ID of the expected reply (defined in sigs.h).
- * timeout timeout in ms
- *
- * Returns:
- * 0 on success, -ve POSIX code on error.
- *
- * Notes:
- * This function waits for a specific (sig_reply_id) signal from UniFi.
- * It also match the sequence number of the received (cfm) signal, with
- * the latest sequence number of the signal (req) we have sent.
- * These two number match be equal.
- * Should only be used for waiting xxx.cfm signals and only after
- * we have sent the matching xxx.req signal to UniFi.
- * If no response is received within the expected time (timeout), we assume
- * that the UniFi is busy and return an error.
- * If the wait is aborted by a kernel signal arriving, we stop waiting.
- * If a response from UniFi is not what we expected, we discard it and
- * wait again. This could be a response from an aborted request. If we
- * see several bad responses we assume we have lost synchronisation with
- * UniFi.
- * ---------------------------------------------------------------------------
- */
-static int
-unifi_mlme_wait_for_reply(unifi_priv_t *priv, ul_client_t *pcli, int sig_reply_id, int timeout)
-{
- int retries = 0;
- long r;
- long t = timeout;
- unsigned int sent_seq_no;
-
- /* Convert t in ms to jiffies */
- t = msecs_to_jiffies(t);
-
- do {
- /* Wait for the confirm or timeout. */
- r = wait_event_interruptible_timeout(pcli->udi_wq,
- (pcli->wake_up_wq_id) || (priv->io_aborted == 1),
- t);
- /* Check for general i/o error */
- if (priv->io_aborted) {
- unifi_error(priv, "MLME operation aborted\n");
- return -EIO;
- }
-
- /*
- * If r=0 the request has timed-out.
- * If r>0 the request has completed successfully.
- * If r=-ERESTARTSYS an event (kill signal) has interrupted the wait_event.
- */
- if ((r == 0) && (pcli->wake_up_wq_id == 0)) {
- unifi_error(priv, "mlme_wait: timed-out waiting for 0x%.4X, after %lu msec.\n",
- sig_reply_id, jiffies_to_msecs(t));
- pcli->wake_up_wq_id = 0;
- return -ETIMEDOUT;
- } else if (r == -ERESTARTSYS) {
- unifi_error(priv, "mlme_wait: waiting for 0x%.4X was aborted.\n", sig_reply_id);
- pcli->wake_up_wq_id = 0;
- return -EINTR;
- } else {
- /* Get the sequence number of the signal that we previously set. */
- if (pcli->seq_no != 0) {
- sent_seq_no = pcli->seq_no - 1;
- } else {
- sent_seq_no = 0x0F;
- }
-
- unifi_trace(priv, UDBG5, "Received 0x%.4X, seq: (r:%d, s:%d)\n",
- pcli->wake_up_wq_id,
- pcli->wake_seq_no, sent_seq_no);
-
- /* The two sequence ids must match. */
- if (pcli->wake_seq_no == sent_seq_no) {
- /* and the signal ids must match. */
- if (sig_reply_id == pcli->wake_up_wq_id) {
- /* Found the expected signal */
- break;
- } else {
- /* This should never happen ... */
- unifi_error(priv, "mlme_wait: mismatching signal id (0x%.4X - exp 0x%.4X) (seq %d)\n",
- pcli->wake_up_wq_id,
- sig_reply_id,
- pcli->wake_seq_no);
- pcli->wake_up_wq_id = 0;
- return -EIO;
- }
- }
- /* Wait for the next signal. */
- pcli->wake_up_wq_id = 0;
-
- retries ++;
- if (retries >= 3) {
- unifi_error(priv, "mlme_wait: confirm wait retries exhausted (0x%.4X - exp 0x%.4X)\n",
- pcli->wake_up_wq_id,
- sig_reply_id);
- pcli->wake_up_wq_id = 0;
- return -EIO;
- }
- }
- } while (1);
-
- pcli->wake_up_wq_id = 0;
-
- return 0;
-} /* unifi_mlme_wait_for_reply() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_mlme_blocking_request
- *
- * Send a MLME request signal to UniFi.
- *
- * Arguments:
- * priv Pointer to device private context struct
- * pcli Pointer to context of calling process
- * sig Pointer to the signal to send
- * data_ptrs Pointer to the bulk data of the signal
- * timeout The request's timeout.
- *
- * Returns:
- * 0 on success, 802.11 result code on error.
- * ---------------------------------------------------------------------------
- */
-int
-unifi_mlme_blocking_request(unifi_priv_t *priv, ul_client_t *pcli,
- CSR_SIGNAL *sig, bulk_data_param_t *data_ptrs,
- int timeout)
-{
- int r;
-
- if (sig->SignalPrimitiveHeader.SignalId == 0) {
- unifi_error(priv, "unifi_mlme_blocking_request: Invalid Signal Id (0x%x)\n",
- sig->SignalPrimitiveHeader.SignalId);
- return -EINVAL;
- }
-
- down(&priv->mlme_blocking_mutex);
-
- sig->SignalPrimitiveHeader.ReceiverProcessId = 0;
- sig->SignalPrimitiveHeader.SenderProcessId = pcli->sender_id | pcli->seq_no;
-
- unifi_trace(priv, UDBG2, "Send client=%d, S:0x%04X, sig 0x%.4X\n",
- pcli->client_id,
- sig->SignalPrimitiveHeader.SenderProcessId,
- sig->SignalPrimitiveHeader.SignalId);
- /* Send the signal to UniFi */
- r = ul_send_signal_unpacked(priv, sig, data_ptrs);
- if (r) {
- up(&priv->mlme_blocking_mutex);
- unifi_error(priv, "Error queueing MLME REQUEST signal\n");
- return r;
- }
-
- unifi_trace(priv, UDBG5, "Send 0x%.4X, seq = %d\n",
- sig->SignalPrimitiveHeader.SignalId, pcli->seq_no);
-
- /*
- * Advance the sequence number of the last sent signal, only
- * if the signal has been successfully set.
- */
- pcli->seq_no++;
- if (pcli->seq_no > 0x0F) {
- pcli->seq_no = 0;
- }
-
- r = unifi_mlme_wait_for_reply(priv, pcli, (sig->SignalPrimitiveHeader.SignalId + 1), timeout);
- up(&priv->mlme_blocking_mutex);
-
- if (r) {
- unifi_error(priv, "Error waiting for MLME CONFIRM signal\n");
- return r;
- }
-
- return 0;
-} /* unifi_mlme_blocking_request() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_mlme_copy_reply_and_wakeup_client
- *
- * Copy the reply signal from UniFi to the client's structure
- * and wake up the waiting client.
- *
- * Arguments:
- * None.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void
-unifi_mlme_copy_reply_and_wakeup_client(ul_client_t *pcli,
- CSR_SIGNAL *signal, int signal_len,
- const bulk_data_param_t *bulkdata)
-{
- int i;
-
- /* Copy the signal to the reply */
- memcpy(pcli->reply_signal, signal, signal_len);
-
- /* Get the sequence number of the signal that woke us up. */
- pcli->wake_seq_no = pcli->reply_signal->SignalPrimitiveHeader.ReceiverProcessId & 0x0F;
-
- /* Append any bulk data */
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++) {
- if (bulkdata->d[i].data_length > 0) {
- if (bulkdata->d[i].os_data_ptr) {
- memcpy(pcli->reply_bulkdata[i]->ptr, bulkdata->d[i].os_data_ptr, bulkdata->d[i].data_length);
- pcli->reply_bulkdata[i]->length = bulkdata->d[i].data_length;
- } else {
- pcli->reply_bulkdata[i]->length = 0;
- }
- }
- }
-
- /* Wake the requesting MLME function. */
- pcli->wake_up_wq_id = pcli->reply_signal->SignalPrimitiveHeader.SignalId;
- wake_up_interruptible(&pcli->udi_wq);
-
-} /* unifi_mlme_copy_reply_and_wakeup_client() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_abort_mlme
- *
- * Abort any MLME operation in progress.
- * This is used in the error recovery mechanism.
- *
- * Arguments:
- * priv Pointer to driver context.
- *
- * Returns:
- * 0 on success.
- * ---------------------------------------------------------------------------
- */
-int
-uf_abort_mlme(unifi_priv_t *priv)
-{
- ul_client_t *ul_cli;
-
- /* Ensure no MLME functions are waiting on a the mlme_event semaphore. */
- priv->io_aborted = 1;
-
- ul_cli = priv->netdev_client;
- if (ul_cli) {
- wake_up_interruptible(&ul_cli->udi_wq);
- }
-
- ul_cli = priv->wext_client;
- if (ul_cli) {
- wake_up_interruptible(&ul_cli->udi_wq);
- }
-
- return 0;
-} /* uf_abort_mlme() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- *
- * Human-readable decoding of Reason and Result codes.
- *
- * ---------------------------------------------------------------------------
- */
-
-struct mlme_code {
- const char *name;
- int id;
-};
-
-static const struct mlme_code Result_codes[] = {
- { "Success", 0x0000 },
- { "Unspecified Failure", 0x0001 },
- /* (Reserved) 0x0002 - 0x0009 */
- { "Refused Capabilities Mismatch", 0x000A },
- /* (Reserved) 0x000B */
- { "Refused External Reason", 0x000C },
- /* (Reserved) 0x000D - 0x0010 */
- { "Refused AP Out Of Memory", 0x0011 },
- { "Refused Basic Rates Mismatch", 0x0012 },
- /* (Reserved) 0x0013 - 0x001F */
- { "Failure", 0x0020 },
- /* (Reserved) 0x0021 - 0x0024 */
- { "Refused Reason Unspecified", 0x0025 },
- { "Invalid Parameters", 0x0026 },
- { "Rejected With Suggested Changes", 0x0027 },
- /* (Reserved) 0x0028 - 0x002E */
- { "Rejected For Delay Period", 0x002F },
- { "Not Allowed", 0x0030 },
- { "Not Present", 0x0031 },
- { "Not QSTA", 0x0032 },
- /* (Reserved) 0x0033 - 0x7FFF */
- { "Timeout", 0x8000 },
- { "Too Many Simultaneous Requests", 0x8001 },
- { "BSS Already Started Or Joined", 0x8002 },
- { "Not Supported", 0x8003 },
- { "Transmission Failure", 0x8004 },
- { "Refused Not Authenticated", 0x8005 },
- { "Reset Required Before Start", 0x8006 },
- { "LM Info Unavailable", 0x8007 },
- { NULL, -1 }
-};
-
-static const struct mlme_code Reason_codes[] = {
- /* (Reserved) 0x0000 */
- { "Unspecified Reason", 0x0001 },
- { "Authentication Not Valid", 0x0002 },
- { "Deauthenticated Leave BSS", 0x0003 },
- { "Disassociated Inactivity", 0x0004 },
- { "AP Overload", 0x0005 },
- { "Class2 Frame Error", 0x0006 },
- { "Class3 Frame Error", 0x0007 },
- { "Disassociated Leave BSS", 0x0008 },
- { "Association Not Authenticated", 0x0009 },
- { "Disassociated Power Capability", 0x000A },
- { "Disassociated Supported Channels", 0x000B },
- /* (Reserved) 0x000C */
- { "Invalid Information Element", 0x000D },
- { "Michael MIC Failure", 0x000E },
- { "Fourway Handshake Timeout", 0x000F },
- { "Group Key Update Timeout", 0x0010 },
- { "Handshake Element Different", 0x0011 },
- { "Invalid Group Cipher", 0x0012 },
- { "Invalid Pairwise Cipher", 0x0013 },
- { "Invalid AKMP", 0x0014 },
- { "Unsupported RSN IE Version", 0x0015 },
- { "Invalid RSN IE Capabilities", 0x0016 },
- { "Dot1X Auth Failed", 0x0017 },
- { "Cipher Rejected By Policy", 0x0018 },
- /* (Reserved) 0x0019 - 0x001F */
- { "QoS Unspecified Reason", 0x0020 },
- { "QoS Insufficient Bandwidth", 0x0021 },
- { "QoS Excessive Not Ack", 0x0022 },
- { "QoS TXOP Limit Exceeded", 0x0023 },
- { "QSTA Leaving", 0x0024 },
- { "End TS, End DLS, End BA", 0x0025 },
- { "Unknown TS, Unknown DLS, Unknown BA", 0x0026 },
- { "Timeout", 0x0027 },
- /* (Reserved) 0x0028 - 0x002C */
- { "STAKey Mismatch", 0x002D },
- { NULL, -1 }
-};
-
-
-static const char *
-lookup_something(const struct mlme_code *n, int id)
-{
- for (; n->name; n++) {
- if (n->id == id) {
- return n->name;
- }
- }
-
- /* not found */
- return NULL;
-} /* lookup_something() */
-
-
-const char *
-lookup_result_code(int result)
-{
- static char fallback[16];
- const char *str;
-
- str = lookup_something(Result_codes, result);
-
- if (str == NULL) {
- snprintf(fallback, 16, "%d", result);
- str = fallback;
- }
-
- return str;
-} /* lookup_result_code() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * lookup_reason
- *
- * Return a description string for a WiFi MLME ReasonCode.
- *
- * Arguments:
- * reason The ReasonCode to interpret.
- *
- * Returns:
- * Pointer to description string.
- * ---------------------------------------------------------------------------
- */
-const char *
-lookup_reason_code(int reason)
-{
- static char fallback[16];
- const char *str;
-
- str = lookup_something(Reason_codes, reason);
-
- if (str == NULL) {
- snprintf(fallback, 16, "%d", reason);
- str = fallback;
- }
-
- return str;
-} /* lookup_reason_code() */
-
diff --git a/drivers/staging/csr/monitor.c b/drivers/staging/csr/monitor.c
deleted file mode 100644
index e11f6cba8266..000000000000
--- a/drivers/staging/csr/monitor.c
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: monitor.c
- *
- * Copyright (C) 2006-2008 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-
-#include "unifi_priv.h"
-
-#ifdef UNIFI_SNIFF_ARPHRD
-
-
-#if (UNIFI_SNIFF_ARPHRD == ARPHRD_IEEE80211_RADIOTAP)
-#include <net/ieee80211_radiotap.h>
-#endif
-
-#ifndef ETH_P_80211_RAW
-#define ETH_P_80211_RAW ETH_P_ALL
-#endif
-
-/*
- * ---------------------------------------------------------------------------
- * uf_start_sniff
- *
- * Start UniFi capture in SNIFF mode, i.e capture everything it hears.
- *
- * Arguments:
- * priv Pointer to device private context struct
- *
- * Returns:
- * 0 on success or kernel error code
- * ---------------------------------------------------------------------------
- */
-int
-uf_start_sniff(unifi_priv_t *priv)
-{
- ul_client_t *pcli = priv->wext_client;
- CSR_SIGNAL signal;
- CSR_MLME_SNIFFJOIN_REQUEST *req = &signal.u.MlmeSniffjoinRequest;
- int timeout = 1000;
- int r;
-
- req->Ifindex = priv->if_index;
- req->Channel = priv->wext_conf.channel;
- req->ChannelStartingFactor = 0;
-
- signal.SignalPrimitiveHeader.SignalId = CSR_MLME_SNIFFJOIN_REQUEST_ID;
-
- r = unifi_mlme_blocking_request(priv, pcli, &signal, NULL, timeout);
- if (r < 0) {
- unifi_error(priv, "failed to send SNIFFJOIN request, error %d\n", r);
- return r;
- }
-
- r = pcli->reply_signal->u.MlmeSniffjoinConfirm.Resultcode;
- if (r) {
- unifi_notice(priv, "SNIFFJOIN request was rejected with result 0x%X (%s)\n",
- r, lookup_result_code(r));
- return -EIO;
- }
-
- return 0;
-} /* uf_start_sniff() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * netrx_radiotap
- *
- * Reformat a UniFi SNIFFDATA signal into a radiotap packet.
- *
- * Arguments:
- * priv OS private context pointer.
- * ind Pointer to a MA_UNITDATA_INDICATION or
- * DS_UNITDATA_INDICATION indication structure.
- *
- * Notes:
- * Radiotap header values are all little-endian, UniFi signals will have
- * been converted to host-endian.
- * ---------------------------------------------------------------------------
- */
-#if (UNIFI_SNIFF_ARPHRD == ARPHRD_IEEE80211_RADIOTAP)
-static void
-netrx_radiotap(unifi_priv_t *priv,
- const CSR_MA_SNIFFDATA_INDICATION *ind,
- struct sk_buff *skb_orig)
-{
- struct net_device *dev = priv->netdev;
- struct sk_buff *skb = NULL;
- unsigned char *ptr;
- unsigned char *base;
- int ind_data_len = skb_orig->len - 2 - ETH_HLEN;
- struct unifi_rx_radiotap_header {
- struct ieee80211_radiotap_header rt_hdr;
- /* IEEE80211_RADIOTAP_TSFT */
- u64 rt_tsft;
- /* IEEE80211_RADIOTAP_FLAGS */
- u8 rt_flags;
- /* IEEE80211_RADIOTAP_RATE */
- u8 rt_rate;
- /* IEEE80211_RADIOTAP_CHANNEL */
- u16 rt_chan;
- u16 rt_chan_flags;
- /* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */
- u8 rt_dbm_antsignal;
- /* IEEE80211_RADIOTAP_DBM_ANTNOISE */
- u8 rt_dbm_antnoise;
- /* IEEE80211_RADIOTAP_ANTENNA */
- u8 rt_antenna;
-
- /* pad to 4-byte boundary */
- u8 pad[3];
- } __attribute__((__packed__));
-
- struct unifi_rx_radiotap_header *unifi_rt;
- int signal, noise, snr;
-
- if (ind_data_len <= 0) {
- unifi_error(priv, "Invalid length in CSR_MA_SNIFFDATA_INDICATION.\n");
- return;
- }
-
- /*
- * Allocate a SKB for the received data packet, including radiotap
- * header.
- */
- skb = dev_alloc_skb(ind_data_len + sizeof(struct unifi_rx_radiotap_header) + 4);
- if (! skb) {
- unifi_error(priv, "alloc_skb failed.\n");
- priv->stats.rx_errors++;
- return;
- }
-
- base = skb->data;
-
- /* Reserve the radiotap header at the front of skb */
- unifi_rt = (struct unifi_rx_radiotap_header *)
- skb_put(skb, sizeof(struct unifi_rx_radiotap_header));
-
- /* Copy in the 802.11 frame */
- ptr = skb_put(skb, ind_data_len);
- memcpy(ptr, skb_orig->data, ind_data_len);
-
- unifi_rt->rt_hdr.it_version = PKTHDR_RADIOTAP_VERSION;
- unifi_rt->rt_hdr.it_pad = 0; /* always good to zero */
- unifi_rt->rt_hdr.it_len = sizeof(struct unifi_rx_radiotap_header);
-
- /* Big bitfield of all the fields we provide in radiotap */
- unifi_rt->rt_hdr.it_present = 0
- | (1 << IEEE80211_RADIOTAP_TSFT)
- | (1 << IEEE80211_RADIOTAP_FLAGS)
- | (1 << IEEE80211_RADIOTAP_RATE)
- | (1 << IEEE80211_RADIOTAP_CHANNEL)
- | (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL)
- | (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE)
- | (1 << IEEE80211_RADIOTAP_ANTENNA)
- ;
-
-
- /* No flags to set */
- unifi_rt->rt_tsft = (((u64)ind->Timestamp.x[7]) | (((u64)ind->Timestamp.x[6]) << 8) |
- (((u64)ind->Timestamp.x[5]) << 16) | (((u64)ind->Timestamp.x[4]) << 24) |
- (((u64)ind->Timestamp.x[3]) << 32) | (((u64)ind->Timestamp.x[2]) << 40) |
- (((u64)ind->Timestamp.x[1]) << 48) | (((u64)ind->Timestamp.x[0]) << 56));
-
- unifi_rt->rt_flags = 0;
-
- unifi_rt->rt_rate = ind->Rate;
-
- unifi_rt->rt_chan = cpu_to_le16(ieee80211chan2mhz(priv->wext_conf.channel));
- unifi_rt->rt_chan_flags = 0;
-
- /* Convert signal to dBm */
- signal = (s16)unifi2host_16(ind->Rssi); /* in dBm */
- snr = (s16)unifi2host_16(ind->Snr); /* in dB */
- noise = signal - snr;
-
- unifi_rt->rt_dbm_antsignal = signal;
- unifi_rt->rt_dbm_antnoise = noise;
-
- unifi_rt->rt_antenna = ind->AntennaId;
-
-
- skb->dev = dev;
- skb_reset_mac_header(skb);
- skb->pkt_type = PACKET_OTHERHOST;
- skb->protocol = __constant_htons(ETH_P_80211_RAW);
- memset(skb->cb, 0, sizeof(skb->cb));
-
- /* Pass up to Linux network stack */
- netif_rx_ni(skb);
-
- dev->last_rx = jiffies;
-
- /* Bump the rx stats */
- priv->stats.rx_packets++;
- priv->stats.rx_bytes += ind_data_len;
-
-} /* netrx_radiotap() */
-#endif /* RADIOTAP */
-
-
-/*
- * ---------------------------------------------------------------------------
- * netrx_prism
- *
- * Reformat a UniFi SNIFFDATA signal into a Prism format sniff packet.
- *
- * Arguments:
- * priv OS private context pointer.
- * ind Pointer to a MA_UNITDATA_INDICATION or
- * DS_UNITDATA_INDICATION indication structure.
- *
- * Notes:
- * Radiotap header values are all little-endian, UniFi signals will have
- * been converted to host-endian.
- * ---------------------------------------------------------------------------
- */
-#if (UNIFI_SNIFF_ARPHRD == ARPHRD_IEEE80211_PRISM)
-static void
-netrx_prism(unifi_priv_t *priv,
- const CSR_MA_SNIFFDATA_INDICATION *ind,
- struct sk_buff *skb_orig)
-{
- struct net_device *dev = priv->netdev;
- struct sk_buff *skb = NULL;
- unsigned char *ptr;
- unsigned char *base;
- int ind_data_len = skb_orig->len - 2 - ETH_HLEN;
-#define WLANCAP_MAGIC_COOKIE_V1 0x80211001
- struct avs_header_v1 {
- uint32 version;
- uint32 length;
- uint64 mactime;
- uint64 hosttime;
- uint32 phytype;
- uint32 channel;
- uint32 datarate;
- uint32 antenna;
- uint32 priority;
- uint32 ssi_type;
- int32 ssi_signal;
- int32 ssi_noise;
- uint32 preamble;
- uint32 encoding;
- } *avs;
- int signal, noise, snr;
-
- if (ind_data_len <= 0) {
- unifi_error(priv, "Invalid length in CSR_MA_SNIFFDATA_INDICATION.\n");
- return;
- }
-
- /*
- * Allocate a SKB for the received data packet, including radiotap
- * header.
- */
- skb = dev_alloc_skb(ind_data_len + sizeof(struct avs_header_v1) + 4);
- if (! skb) {
- unifi_error(priv, "alloc_skb failed.\n");
- priv->stats.rx_errors++;
- return;
- }
-
- base = skb->data;
-
- /* Reserve the radiotap header at the front of skb */
- avs = (struct avs_header_v1 *)skb_put(skb, sizeof(struct avs_header_v1));
-
- /* Copy in the 802.11 frame */
- ptr = skb_put(skb, ind_data_len);
- memcpy(ptr, skb_orig->data, ind_data_len);
-
- /* Convert signal to dBm */
- signal = 0x10000 - ((s16)unifi2host_16(ind->Rssi)); /* in dBm */
- snr = (s16)unifi2host_16(ind->Snr); /* in dB */
- noise = signal - snr;
-
- avs->version = htonl(WLANCAP_MAGIC_COOKIE_V1);
- avs->length = htonl(sizeof(struct avs_header_v1));
- avs->mactime = __cpu_to_be64(ind->Timestamp);
- avs->hosttime = __cpu_to_be64(jiffies);
- avs->phytype = htonl(9); /* dss_ofdm_dot11_g */
- avs->channel = htonl(priv->wext_conf.channel);
- avs->datarate = htonl(ind->Rate * 5);
- avs->antenna = htonl(ind->Antenna);
- avs->priority = htonl(0); /* unknown */
- avs->ssi_type = htonl(2); /* dBm */
- avs->ssi_signal = htonl(signal);
- avs->ssi_noise = htonl(noise);
- avs->preamble = htonl(0); /* unknown */
- avs->encoding = htonl(0); /* unknown */
-
-
- skb->dev = dev;
- skb->mac.raw = skb->data;
- skb->pkt_type = PACKET_OTHERHOST;
- skb->protocol = __constant_htons(ETH_P_80211_RAW);
- memset(skb->cb, 0, sizeof(skb->cb));
-
- /* Pass up to Linux network stack */
- netif_rx_ni(skb);
-
- dev->last_rx = jiffies;
-
- /* Bump the rx stats */
- priv->stats.rx_packets++;
- priv->stats.rx_bytes += ind_data_len;
-
-} /* netrx_prism() */
-#endif /* PRISM */
-
-
-/*
- * ---------------------------------------------------------------------------
- * ma_sniffdata_ind
- *
- * Reformat a UniFi SNIFFDATA signal into a network
- *
- * Arguments:
- * ospriv OS private context pointer.
- * ind Pointer to a MA_UNITDATA_INDICATION or
- * DS_UNITDATA_INDICATION indication structure.
- * bulkdata Pointer to a bulk data structure, describing
- * the data received.
- *
- * Notes:
- * Radiotap header values are all little-endian, UniFi signals will have
- * been converted to host-endian.
- * ---------------------------------------------------------------------------
- */
-void
-ma_sniffdata_ind(void *ospriv,
- const CSR_MA_SNIFFDATA_INDICATION *ind,
- const bulk_data_param_t *bulkdata)
-{
- unifi_priv_t *priv = ospriv;
- struct net_device *dev = priv->netdev;
- struct sk_buff *skb = (struct sk_buff*)bulkdata->d[0].os_net_buf_ptr;
-
- if (bulkdata->d[0].data_length == 0) {
- unifi_warning(priv, "rx: MA-SNIFFDATA indication with zero bulk data\n");
- return;
- }
-
- skb->len = bulkdata->d[0].data_length;
-
- /* We only process data packets if the interface is open */
- if (unlikely(!netif_running(dev))) {
- priv->stats.rx_dropped++;
- priv->wext_conf.wireless_stats.discard.misc++;
- dev_kfree_skb(skb);
- return;
- }
-
- if (ind->ReceptionStatus) {
- priv->stats.rx_dropped++;
- priv->wext_conf.wireless_stats.discard.misc++;
- printk(KERN_INFO "unifi: Dropping corrupt sniff packet\n");
- dev_kfree_skb(skb);
- return;
- }
-
-#if (UNIFI_SNIFF_ARPHRD == ARPHRD_IEEE80211_PRISM)
- netrx_prism(priv, ind, skb);
-#endif /* PRISM */
-
-#if (UNIFI_SNIFF_ARPHRD == ARPHRD_IEEE80211_RADIOTAP)
- netrx_radiotap(priv, ind, skb);
-#endif /* RADIOTAP */
-
- dev_kfree_skb(skb);
-
-} /* ma_sniffdata_ind() */
-
-
-#endif /* UNIFI_SNIFF_ARPHRD */
-
diff --git a/drivers/staging/csr/netdev.c b/drivers/staging/csr/netdev.c
deleted file mode 100644
index 9c716c162c24..000000000000
--- a/drivers/staging/csr/netdev.c
+++ /dev/null
@@ -1,3307 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: netdev.c
- *
- * PURPOSE:
- * This file provides the upper edge interface to the linux netdevice
- * and wireless extensions.
- * It is part of the porting exercise.
- *
- * Copyright (C) 2005-2010 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-
-/*
- * Porting Notes:
- * This file implements the data plane of the UniFi linux driver.
- *
- * All the Tx packets are passed to the HIP core lib, using the
- * unifi_send_signal() API. For EAPOL packets use the MLME-EAPOL.req
- * signal, for all other use the MLME-UNITDATA.req. The unifi_send_signal()
- * expects the wire-formatted (packed) signal. For convenience, in the OS
- * layer we only use the native (unpacked) signal structures. The HIP core lib
- * provides the write_pack() helper function to convert to the packed signal.
- * The packet is stored in the bulk data of the signal. We do not need to
- * allocate new memory to store the packet, because unifi_net_data_malloc()
- * is implemented to return a skb, which is the format of packet in Linux.
- * The HIP core lib frees the bulk data buffers, so we do not need to do
- * this in the OS layer.
- *
- * All the Rx packets are MLME-UNITDATA.ind signals, passed by the HIP core lib
- * in unifi_receive_event(). We do not need to allocate an skb and copy the
- * received packet because the HIP core lib has stored in memory allocated by
- * unifi_net_data_malloc(). Also, we can perform the 802.11 to Ethernet
- * translation in-place because we allocate the extra memory allocated in
- * unifi_net_data_malloc().
- *
- * If possible, the porting exercise should appropriately implement
- * unifi_net_data_malloc() and unifi_net_data_free() to save copies between
- * network and driver buffers.
- */
-
-#include <linux/types.h>
-#include <linux/etherdevice.h>
-#include <linux/mutex.h>
-#include <linux/semaphore.h>
-#include <linux/vmalloc.h>
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_conversions.h"
-#include "unifi_priv.h"
-#include <net/pkt_sched.h>
-
-
-/* Wext handler is supported only if CSR_SUPPORT_WEXT is defined */
-#ifdef CSR_SUPPORT_WEXT
-extern struct iw_handler_def unifi_iw_handler_def;
-#endif /* CSR_SUPPORT_WEXT */
-static void check_ba_frame_age_timeout( unifi_priv_t *priv,
- netInterface_priv_t *interfacePriv,
- ba_session_rx_struct *ba_session);
-static void process_ba_frame(unifi_priv_t *priv,
- netInterface_priv_t *interfacePriv,
- ba_session_rx_struct *ba_session,
- frame_desc_struct *frame_desc);
-static void process_ba_complete(unifi_priv_t *priv, netInterface_priv_t *interfacePriv);
-static void process_ma_packet_error_ind(unifi_priv_t *priv, CSR_SIGNAL *signal, bulk_data_param_t *bulkdata);
-static void process_amsdu(unifi_priv_t *priv, CSR_SIGNAL *signal, bulk_data_param_t *bulkdata);
-static int uf_net_open(struct net_device *dev);
-static int uf_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
-static int uf_net_stop(struct net_device *dev);
-static struct net_device_stats *uf_net_get_stats(struct net_device *dev);
-static u16 uf_net_select_queue(struct net_device *dev, struct sk_buff *skb);
-static netdev_tx_t uf_net_xmit(struct sk_buff *skb, struct net_device *dev);
-static void uf_set_multicast_list(struct net_device *dev);
-
-
-typedef int (*tx_signal_handler)(unifi_priv_t *priv, struct sk_buff *skb, const struct ethhdr *ehdr, CSR_PRIORITY priority);
-
-#ifdef CONFIG_NET_SCHED
-/*
- * Queueing Discipline Interface
- * Only used if kernel is configured with CONFIG_NET_SCHED
- */
-
-/*
- * The driver uses the qdisc interface to buffer and control all
- * outgoing traffic. We create a root qdisc, register our qdisc operations
- * and later we create two subsidiary pfifo queues for the uncontrolled
- * and controlled ports.
- *
- * The network stack delivers all outgoing packets in our enqueue handler.
- * There, we classify the packet and decide whether to store it or drop it
- * (if the controlled port state is set to "discard").
- * If the packet is enqueued, the network stack call our dequeue handler.
- * There, we decide whether we can send the packet, delay it or drop it
- * (the controlled port configuration might have changed meanwhile).
- * If a packet is dequeued, then the network stack calls our hard_start_xmit
- * handler where finally we send the packet.
- *
- * If the hard_start_xmit handler fails to send the packet, we return
- * NETDEV_TX_BUSY and the network stack call our requeue handler where
- * we put the packet back in the same queue in came from.
- *
- */
-
-struct uf_sched_data
-{
- /* Traffic Classifier TBD */
- struct tcf_proto *filter_list;
- /* Our two queues */
- struct Qdisc *queues[UNIFI_TRAFFIC_Q_MAX];
-};
-
-struct uf_tx_packet_data {
- /* Queue the packet is stored in */
- unifi_TrafficQueue queue;
- /* QoS Priority determined when enqueing packet */
- CSR_PRIORITY priority;
- /* Debug */
- unsigned long host_tag;
-};
-
-#endif /* CONFIG_NET_SCHED */
-
-static const struct net_device_ops uf_netdev_ops =
-{
- .ndo_open = uf_net_open,
- .ndo_stop = uf_net_stop,
- .ndo_start_xmit = uf_net_xmit,
- .ndo_do_ioctl = uf_net_ioctl,
- .ndo_get_stats = uf_net_get_stats, /* called by /proc/net/dev */
- .ndo_set_rx_mode = uf_set_multicast_list,
- .ndo_select_queue = uf_net_select_queue,
-};
-
-static u8 oui_rfc1042[P80211_OUI_LEN] = { 0x00, 0x00, 0x00 };
-static u8 oui_8021h[P80211_OUI_LEN] = { 0x00, 0x00, 0xf8 };
-
-
-/* Callback for event logging to blocking clients */
-static void netdev_mlme_event_handler(ul_client_t *client,
- const u8 *sig_packed, int sig_len,
- const bulk_data_param_t *bulkdata,
- int dir);
-
-#ifdef CSR_SUPPORT_WEXT
-/* Declare netdev_notifier block which will contain the state change
- * handler callback function
- */
-static struct notifier_block uf_netdev_notifier;
-#endif
-
-/*
- * ---------------------------------------------------------------------------
- * uf_alloc_netdevice
- *
- * Allocate memory for the net_device and device private structs
- * for this interface.
- * Fill in the fields, but don't register the interface yet.
- * We need to configure the UniFi first.
- *
- * Arguments:
- * sdio_dev Pointer to SDIO context handle to use for all
- * SDIO ops.
- * bus_id A small number indicating the SDIO card position on the
- * bus. Typically this is the slot number, e.g. 0, 1 etc.
- * Valid values are 0 to MAX_UNIFI_DEVS-1.
- *
- * Returns:
- * Pointer to device private struct.
- *
- * Notes:
- * The net_device and device private structs are allocated together
- * and should be freed by freeing the net_device pointer.
- * ---------------------------------------------------------------------------
- */
-unifi_priv_t *
-uf_alloc_netdevice(CsrSdioFunction *sdio_dev, int bus_id)
-{
- struct net_device *dev;
- unifi_priv_t *priv;
- netInterface_priv_t *interfacePriv;
-#ifdef CSR_SUPPORT_WEXT
- int rc;
-#endif
- unsigned char i; /* loop index */
-
- /*
- * Allocate netdevice struct, assign name template and
- * setup as an ethernet device.
- * The net_device and private structs are zeroed. Ether_setup() then
- * sets up ethernet handlers and values.
- * The RedHat 9 redhat-config-network tool doesn't recognise wlan* devices,
- * so use "eth*" (like other wireless extns drivers).
- */
- dev = alloc_etherdev_mq(sizeof(unifi_priv_t) + sizeof(netInterface_priv_t), UNIFI_TRAFFIC_Q_MAX);
-
- if (dev == NULL) {
- return NULL;
- }
-
- /* Set up back pointer from priv to netdev */
- interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- priv = (unifi_priv_t *)(interfacePriv + 1);
- interfacePriv->privPtr = priv;
- interfacePriv->InterfaceTag = 0;
-
-
- /* Initialize all supported netdev interface to be NULL */
- for(i=0; i<CSR_WIFI_NUM_INTERFACES; i++) {
- priv->netdev[i] = NULL;
- priv->interfacePriv[i] = NULL;
- }
- priv->netdev[0] = dev;
- priv->interfacePriv[0] = interfacePriv;
-
- /* Setup / override net_device fields */
- dev->netdev_ops = &uf_netdev_ops;
-
-#ifdef CSR_SUPPORT_WEXT
- dev->wireless_handlers = &unifi_iw_handler_def;
-#if IW_HANDLER_VERSION < 6
- dev->get_wireless_stats = unifi_get_wireless_stats;
-#endif /* IW_HANDLER_VERSION */
-#endif /* CSR_SUPPORT_WEXT */
-
- /* This gives us enough headroom to add the 802.11 header */
- dev->needed_headroom = 32;
-
- /* Use bus_id as instance number */
- priv->instance = bus_id;
- /* Store SDIO pointer to pass in the core */
- priv->sdio = sdio_dev;
-
- sdio_dev->driverData = (void*)priv;
- /* Consider UniFi to be uninitialised */
- priv->init_progress = UNIFI_INIT_NONE;
-
- priv->prev_queue = 0;
-
- /*
- * Initialise the clients structure array.
- * We do not need protection around ul_init_clients() because
- * the character device can not be used until uf_alloc_netdevice()
- * returns and Unifi_instances[bus_id]=priv is set, since unifi_open()
- * will return -ENODEV.
- */
- ul_init_clients(priv);
-
- /*
- * Register a new ul client to send the multicast list signals.
- * Note: priv->instance must be set before calling this.
- */
- priv->netdev_client = ul_register_client(priv,
- 0,
- netdev_mlme_event_handler);
- if (priv->netdev_client == NULL) {
- unifi_error(priv,
- "Failed to register a unifi client for background netdev processing\n");
- free_netdev(priv->netdev[0]);
- return NULL;
- }
- unifi_trace(priv, UDBG2, "Netdev %p client (id:%d s:0x%X) is registered\n",
- dev, priv->netdev_client->client_id, priv->netdev_client->sender_id);
-
- priv->sta_wmm_capabilities = 0;
-
-#if (defined(CSR_WIFI_SECURITY_WAPI_ENABLE) && defined(CSR_SUPPORT_SME))
- priv->wapi_multicast_filter = 0;
- priv->wapi_unicast_filter = 0;
- priv->wapi_unicast_queued_pkt_filter = 0;
-#ifdef CSR_WIFI_SECURITY_WAPI_QOSCTRL_MIC_WORKAROUND
- priv->isWapiConnection = FALSE;
-#endif
-#endif
-
- /* Enable all queues by default */
- interfacePriv->queueEnabled[0] = 1;
- interfacePriv->queueEnabled[1] = 1;
- interfacePriv->queueEnabled[2] = 1;
- interfacePriv->queueEnabled[3] = 1;
-
-#ifdef CSR_SUPPORT_SME
- priv->allPeerDozing = 0;
-#endif
- /*
- * Initialise the OS private struct.
- */
- /*
- * Instead of deciding in advance to use 11bg or 11a, we could do a more
- * clever scan on both radios.
- */
- if (use_5g) {
- priv->if_index = CSR_INDEX_5G;
- unifi_info(priv, "Using the 802.11a radio\n");
- } else {
- priv->if_index = CSR_INDEX_2G4;
- }
-
- /* Initialise bh thread structure */
- priv->bh_thread.thread_task = NULL;
- priv->bh_thread.block_thread = 1;
- init_waitqueue_head(&priv->bh_thread.wakeup_q);
- priv->bh_thread.wakeup_flag = 0;
- sprintf(priv->bh_thread.name, "uf_bh_thread");
-
- /* reset the connected state for the interface */
- interfacePriv->connected = UnifiConnectedUnknown; /* -1 unknown, 0 no, 1 yes */
-
-#ifdef USE_DRIVER_LOCK
- sema_init(&priv->lock, 1);
-#endif /* USE_DRIVER_LOCK */
-
- spin_lock_init(&priv->send_signal_lock);
-
- spin_lock_init(&priv->m4_lock);
- sema_init(&priv->ba_mutex, 1);
-
-#if (defined(CSR_WIFI_SECURITY_WAPI_ENABLE) && defined(CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION))
- spin_lock_init(&priv->wapi_lock);
-#endif
-
-#ifdef CSR_SUPPORT_SME
- spin_lock_init(&priv->staRecord_lock);
- spin_lock_init(&priv->tx_q_lock);
-#endif
-
- /* Create the Traffic Analysis workqueue */
- priv->unifi_workqueue = create_singlethread_workqueue("unifi_workq");
- if (priv->unifi_workqueue == NULL) {
- /* Deregister priv->netdev_client */
- ul_deregister_client(priv->netdev_client);
- free_netdev(priv->netdev[0]);
- return NULL;
- }
-
-#ifdef CSR_SUPPORT_SME
- /* Create the Multicast Addresses list work structure */
- INIT_WORK(&priv->multicast_list_task, uf_multicast_list_wq);
-
- /* Create m4 buffering work structure */
- INIT_WORK(&interfacePriv->send_m4_ready_task, uf_send_m4_ready_wq);
-
-#if (defined(CSR_WIFI_SECURITY_WAPI_ENABLE) && defined(CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION))
- /* Create work structure to buffer the WAPI data packets to be sent to SME for encryption */
- INIT_WORK(&interfacePriv->send_pkt_to_encrypt, uf_send_pkt_to_encrypt);
-#endif
-#endif
-
- priv->ref_count = 1;
-
- priv->amp_client = NULL;
- priv->coredump_mode = 0;
- priv->ptest_mode = 0;
- priv->wol_suspend = FALSE;
- INIT_LIST_HEAD(&interfacePriv->rx_uncontrolled_list);
- INIT_LIST_HEAD(&interfacePriv->rx_controlled_list);
- sema_init(&priv->rx_q_sem, 1);
-
-#ifdef CSR_SUPPORT_WEXT
- interfacePriv->netdev_callback_registered = FALSE;
- interfacePriv->wait_netdev_change = FALSE;
- /* Register callback for netdevice state changes */
- if ((rc = register_netdevice_notifier(&uf_netdev_notifier)) == 0) {
- interfacePriv->netdev_callback_registered = TRUE;
- }
- else {
- unifi_warning(priv, "Failed to register netdevice notifier : %d %p\n", rc, dev);
- }
-#endif /* CSR_SUPPORT_WEXT */
-
-#ifdef CSR_WIFI_SPLIT_PATCH
- /* set it to some invalid value */
- priv->pending_mode_set.common.destination = 0xaaaa;
-#endif
-
- return priv;
-} /* uf_alloc_netdevice() */
-
-/*
- *---------------------------------------------------------------------------
- * uf_alloc_netdevice_for_other_interfaces
- *
- * Allocate memory for the net_device and device private structs
- * for this interface.
- * Fill in the fields, but don't register the interface yet.
- * We need to configure the UniFi first.
- *
- * Arguments:
- * interfaceTag Interface number.
- * sdio_dev Pointer to SDIO context handle to use for all
- * SDIO ops.
- * bus_id A small number indicating the SDIO card position on the
- * bus. Typically this is the slot number, e.g. 0, 1 etc.
- * Valid values are 0 to MAX_UNIFI_DEVS-1.
- *
- * Returns:
- * Pointer to device private struct.
- *
- * Notes:
- * The device private structure contains the interfaceTag and pointer to the unifi_priv
- * structure created allocated by net_device od interface0.
- * The net_device and device private structs are allocated together
- * and should be freed by freeing the net_device pointer.
- * ---------------------------------------------------------------------------
- */
-u8
-uf_alloc_netdevice_for_other_interfaces(unifi_priv_t *priv, u16 interfaceTag)
-{
- struct net_device *dev;
- netInterface_priv_t *interfacePriv;
-
- /*
- * Allocate netdevice struct, assign name template and
- * setup as an ethernet device.
- * The net_device and private structs are zeroed. Ether_setup() then
- * sets up ethernet handlers and values.
- * The RedHat 9 redhat-config-network tool doesn't recognise wlan* devices,
- * so use "eth*" (like other wireless extns drivers).
- */
- dev = alloc_etherdev_mq(sizeof(netInterface_priv_t), 1);
- if (dev == NULL) {
- return FALSE;
- }
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "uf_alloc_netdevice_for_other_interfaces bad interfaceTag\n");
- return FALSE;
- }
-
- /* Set up back pointer from priv to netdev */
- interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- interfacePriv->privPtr = priv;
- interfacePriv->InterfaceTag = interfaceTag;
- priv->netdev[interfaceTag] = dev;
- priv->interfacePriv[interfacePriv->InterfaceTag] = interfacePriv;
-
- /* reset the connected state for the interface */
- interfacePriv->connected = UnifiConnectedUnknown; /* -1 unknown, 0 no, 1 yes */
- INIT_LIST_HEAD(&interfacePriv->rx_uncontrolled_list);
- INIT_LIST_HEAD(&interfacePriv->rx_controlled_list);
-
- /* Setup / override net_device fields */
- dev->netdev_ops = &uf_netdev_ops;
-
-#ifdef CSR_SUPPORT_WEXT
- dev->wireless_handlers = &unifi_iw_handler_def;
-#if IW_HANDLER_VERSION < 6
- dev->get_wireless_stats = unifi_get_wireless_stats;
-#endif /* IW_HANDLER_VERSION */
-#endif /* CSR_SUPPORT_WEXT */
- return TRUE;
-} /* uf_alloc_netdevice() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_free_netdevice
- *
- * Unregister the network device and free the memory allocated for it.
- * NB This includes the memory for the priv struct.
- *
- * Arguments:
- * priv Device private pointer.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-int
-uf_free_netdevice(unifi_priv_t *priv)
-{
- int i;
- unsigned long flags;
-
- unifi_trace(priv, UDBG1, "uf_free_netdevice\n");
-
- if (!priv) {
- return -EINVAL;
- }
-
- /*
- * Free any buffers used for holding firmware
- */
- uf_release_firmware_files(priv);
-
-#if (defined CSR_SUPPORT_SME) && (defined CSR_SUPPORT_WEXT)
- if (priv->connection_config.mlmeAssociateReqInformationElements) {
- kfree(priv->connection_config.mlmeAssociateReqInformationElements);
- }
- priv->connection_config.mlmeAssociateReqInformationElements = NULL;
- priv->connection_config.mlmeAssociateReqInformationElementsLength = 0;
-
- if (priv->mib_data.length) {
- vfree(priv->mib_data.data);
- }
- priv->mib_data.data = NULL;
- priv->mib_data.length = 0;
-
-#endif /* CSR_SUPPORT_SME && CSR_SUPPORT_WEXT*/
-
- /* Free any bulkdata buffers allocated for M4 caching */
- spin_lock_irqsave(&priv->m4_lock, flags);
- for (i = 0; i < CSR_WIFI_NUM_INTERFACES; i++) {
- netInterface_priv_t *interfacePriv = priv->interfacePriv[i];
- if (interfacePriv->m4_bulk_data.data_length > 0) {
- unifi_trace(priv, UDBG5, "uf_free_netdevice: free M4 bulkdata %d\n", i);
- unifi_net_data_free(priv, &interfacePriv->m4_bulk_data);
- }
- }
- spin_unlock_irqrestore(&priv->m4_lock, flags);
-
-#if (defined(CSR_WIFI_SECURITY_WAPI_ENABLE) && defined(CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION))
- /* Free any bulkdata buffers allocated for M4 caching */
- spin_lock_irqsave(&priv->wapi_lock, flags);
- for (i = 0; i < CSR_WIFI_NUM_INTERFACES; i++) {
- netInterface_priv_t *interfacePriv = priv->interfacePriv[i];
- if (interfacePriv->wapi_unicast_bulk_data.data_length > 0) {
- unifi_trace(priv, UDBG5, "uf_free_netdevice: free WAPI PKT bulk data %d\n", i);
- unifi_net_data_free(priv, &interfacePriv->wapi_unicast_bulk_data);
- }
- }
- spin_unlock_irqrestore(&priv->wapi_lock, flags);
-#endif
-
-#ifdef CSR_SUPPORT_WEXT
- /* Unregister callback for netdevice state changes */
- unregister_netdevice_notifier(&uf_netdev_notifier);
-#endif /* CSR_SUPPORT_WEXT */
-
-#ifdef CSR_SUPPORT_SME
- /* Cancel work items and destroy the workqueue */
- cancel_work_sync(&priv->multicast_list_task);
-#endif
-/* Destroy the workqueues. */
- flush_workqueue(priv->unifi_workqueue);
- destroy_workqueue(priv->unifi_workqueue);
-
- /* Free up netdev in reverse order: priv is allocated with netdev[0].
- * So, netdev[0] should be freed after all other netdevs are freed up
- */
- for (i=CSR_WIFI_NUM_INTERFACES-1; i>=0; i--) {
- /*Free the netdev struct and priv, which are all one lump*/
- if (priv->netdev[i]) {
- unifi_error(priv, "uf_free_netdevice: netdev %d %p\n", i, priv->netdev[i]);
- free_netdev(priv->netdev[i]);
- }
- }
-
- return 0;
-} /* uf_free_netdevice() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_net_open
- *
- * Called when userland does "ifconfig wlan0 up".
- *
- * Arguments:
- * dev Device pointer.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static int
-uf_net_open(struct net_device *dev)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
-
- /* If we haven't finished UniFi initialisation, we can't start */
- if (priv->init_progress != UNIFI_INIT_COMPLETED) {
- unifi_warning(priv, "%s: unifi not ready, failing net_open\n", __FUNCTION__);
- return -EINVAL;
- }
-
-#if (defined CSR_NATIVE_LINUX) && (defined UNIFI_SNIFF_ARPHRD) && defined(CSR_SUPPORT_WEXT)
- /*
- * To sniff, the user must do "iwconfig mode monitor", which sets
- * priv->wext_conf.mode to IW_MODE_MONITOR.
- * Then he/she must do "ifconfig ethn up", which calls this fn.
- * There is no point in starting the sniff with SNIFFJOIN until
- * this point.
- */
- if (priv->wext_conf.mode == IW_MODE_MONITOR) {
- int err;
- err = uf_start_sniff(priv);
- if (err) {
- return err;
- }
- netif_carrier_on(dev);
- }
-#endif
-
-#ifdef CSR_SUPPORT_WEXT
- if (interfacePriv->wait_netdev_change) {
- unifi_trace(priv, UDBG1, "%s: Waiting for NETDEV_CHANGE, assume connected\n",
- __FUNCTION__);
- interfacePriv->connected = UnifiConnected;
- interfacePriv->wait_netdev_change = FALSE;
- }
-#endif
-
- netif_tx_start_all_queues(dev);
-
- return 0;
-} /* uf_net_open() */
-
-
-static int
-uf_net_stop(struct net_device *dev)
-{
-#if defined(CSR_NATIVE_LINUX) && defined(UNIFI_SNIFF_ARPHRD) && defined(CSR_SUPPORT_WEXT)
- netInterface_priv_t *interfacePriv = (netInterface_priv_t*)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
-
- /* Stop sniffing if in Monitor mode */
- if (priv->wext_conf.mode == IW_MODE_MONITOR) {
- if (priv->card) {
- int err;
- err = unifi_reset_state(priv, dev->dev_addr, 1);
- if (err) {
- return err;
- }
- }
- }
-#endif
-
- netif_tx_stop_all_queues(dev);
-
- return 0;
-} /* uf_net_stop() */
-
-
-/* This is called after the WE handlers */
-static int
-uf_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
-{
- int rc;
-
- rc = -EOPNOTSUPP;
-
- return rc;
-} /* uf_net_ioctl() */
-
-
-
-static struct net_device_stats *
-uf_net_get_stats(struct net_device *dev)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
-
- return &interfacePriv->stats;
-} /* uf_net_get_stats() */
-
-static CSR_PRIORITY uf_get_packet_priority(unifi_priv_t *priv, netInterface_priv_t *interfacePriv, struct sk_buff *skb, const int proto)
-{
- CSR_PRIORITY priority = CSR_CONTENTION;
-
- priority = (CSR_PRIORITY) (skb->priority >> 5);
-
- if (priority == CSR_QOS_UP0) { /* 0 */
-
- unifi_trace(priv, UDBG5, "uf_get_packet_priority: proto = 0x%.4X\n", proto);
-
- switch (proto) {
- case 0x0800: /* IPv4 */
- case 0x814C: /* SNMP */
- case 0x880C: /* GSMP */
- priority = (CSR_PRIORITY) (skb->data[1 + ETH_HLEN] >> 5);
- break;
-
- case 0x8100: /* VLAN */
- priority = (CSR_PRIORITY) (skb->data[0 + ETH_HLEN] >> 5);
- break;
-
- case 0x86DD: /* IPv6 */
- priority = (CSR_PRIORITY) ((skb->data[0 + ETH_HLEN] & 0x0E) >> 1);
- break;
-
- default:
- priority = CSR_QOS_UP0;
- break;
- }
- }
-
- /* Check if we are allowed to transmit on this AC. Because of ACM we may have to downgrade to a lower
- * priority */
- if (interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_STA ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI) {
- unifi_TrafficQueue queue;
-
- /* Keep trying lower priorities until we find a queue
- * Priority to queue mapping is 1,2 - BK, 0,3 - BE, 4,5 - VI, 6,7 - VO */
- queue = unifi_frame_priority_to_queue(priority);
-
- while (queue > UNIFI_TRAFFIC_Q_BK && !interfacePriv->queueEnabled[queue]) {
- queue--;
- priority = unifi_get_default_downgrade_priority(queue);
- }
- }
-
- unifi_trace(priv, UDBG5, "Packet priority = %d\n", priority);
-
- return priority;
-}
-
-/*
- */
-/*
- * ---------------------------------------------------------------------------
- * get_packet_priority
- *
- * Arguments:
- * priv private data area of functional driver
- * skb socket buffer
- * ehdr ethernet header to fetch protocol
- * interfacePriv For accessing station record database
- *
- *
- * Returns:
- * CSR_PRIORITY.
- * ---------------------------------------------------------------------------
- */
-CSR_PRIORITY
-get_packet_priority(unifi_priv_t *priv, struct sk_buff *skb, const struct ethhdr *ehdr, netInterface_priv_t *interfacePriv)
-{
- CSR_PRIORITY priority = CSR_CONTENTION;
- const int proto = ntohs(ehdr->h_proto);
-
- u8 interfaceMode = interfacePriv->interfaceMode;
-
- /* Priority Mapping for all the Modes */
- switch(interfaceMode)
- {
- case CSR_WIFI_ROUTER_CTRL_MODE_STA:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI:
- unifi_trace(priv, UDBG4, "mode is STA \n");
- if ((priv->sta_wmm_capabilities & QOS_CAPABILITY_WMM_ENABLED) == 1) {
- priority = uf_get_packet_priority(priv, interfacePriv, skb, proto);
- } else {
- priority = CSR_CONTENTION;
- }
- break;
-#ifdef CSR_SUPPORT_SME
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- case CSR_WIFI_ROUTER_CTRL_MODE_IBSS:
- {
- CsrWifiRouterCtrlStaInfo_t * dstStaInfo =
- CsrWifiRouterCtrlGetStationRecordFromPeerMacAddress(priv, ehdr->h_dest, interfacePriv->InterfaceTag);
- unifi_trace(priv, UDBG4, "mode is AP \n");
- if (!(ehdr->h_dest[0] & 0x01) && dstStaInfo && dstStaInfo->wmmOrQosEnabled) {
- /* If packet is not Broadcast/multicast */
- priority = uf_get_packet_priority(priv, interfacePriv, skb, proto);
- } else {
- /* Since packet destination is not QSTA, set priority to CSR_CONTENTION */
- unifi_trace(priv, UDBG4, "Destination is not QSTA or BroadCast/Multicast\n");
- priority = CSR_CONTENTION;
- }
- }
- break;
-#endif
- default:
- unifi_trace(priv, UDBG3, " mode unknown in %s func, mode=%x\n", __FUNCTION__, interfaceMode);
- }
- unifi_trace(priv, UDBG5, "priority = %x\n", priority);
-
- return priority;
-}
-
-/*
- * ---------------------------------------------------------------------------
- * uf_net_select_queue
- *
- * Called by the kernel to select which queue to put the packet in
- *
- * Arguments:
- * dev Device pointer
- * skb Packet
- *
- * Returns:
- * Queue index
- * ---------------------------------------------------------------------------
- */
-static u16
-uf_net_select_queue(struct net_device *dev, struct sk_buff *skb)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = (unifi_priv_t *)interfacePriv->privPtr;
- struct ethhdr ehdr;
- unifi_TrafficQueue queue;
- int proto;
- CSR_PRIORITY priority;
-
- memcpy(&ehdr, skb->data, ETH_HLEN);
- proto = ntohs(ehdr.h_proto);
-
- /* 802.1x - apply controlled/uncontrolled port rules */
- if ((proto != ETH_P_PAE)
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- && (proto != ETH_P_WAI)
-#endif
- ) {
- /* queues 0 - 3 */
- priority = get_packet_priority(priv, skb, &ehdr, interfacePriv);
- queue = unifi_frame_priority_to_queue(priority);
- } else {
- /* queue 4 */
- queue = UNIFI_TRAFFIC_Q_EAPOL;
- }
-
-
- return (u16)queue;
-} /* uf_net_select_queue() */
-
-int
-skb_add_llc_snap(struct net_device *dev, struct sk_buff *skb, int proto)
-{
- llc_snap_hdr_t *snap;
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- int headroom;
-
- /* get the headroom available in skb */
- headroom = skb_headroom(skb);
- /* step 1: classify ether frame, DIX or 802.3? */
-
- if (proto < 0x600) {
- /* codes <= 1500 reserved for 802.3 lengths */
- /* it's 802.3, pass ether payload unchanged, */
- unifi_trace(priv, UDBG3, "802.3 len: %d\n", skb->len);
-
- /* leave off any PAD octets. */
- skb_trim(skb, proto);
- } else if (proto == ETH_P_8021Q) {
-
- /* Store the VLAN SNAP (should be 87-65). */
- u16 vlan_snap = *(u16*)skb->data;
- /* check for headroom availability before skb_push 14 = (4 + 10) */
- if (headroom < 14) {
- unifi_trace(priv, UDBG3, "cant append vlan snap: debug\n");
- return -1;
- }
- /* Add AA-AA-03-00-00-00 */
- snap = (llc_snap_hdr_t *)skb_push(skb, 4);
- snap->dsap = snap->ssap = 0xAA;
- snap->ctrl = 0x03;
- memcpy(snap->oui, oui_rfc1042, P80211_OUI_LEN);
-
- /* Add AA-AA-03-00-00-00 */
- snap = (llc_snap_hdr_t *)skb_push(skb, 10);
- snap->dsap = snap->ssap = 0xAA;
- snap->ctrl = 0x03;
- memcpy(snap->oui, oui_rfc1042, P80211_OUI_LEN);
-
- /* Add the VLAN specific information */
- snap->protocol = htons(proto);
- *(u16*)(snap + 1) = vlan_snap;
-
- } else
- {
- /* it's DIXII, time for some conversion */
- unifi_trace(priv, UDBG3, "DIXII len: %d\n", skb->len);
-
- /* check for headroom availability before skb_push */
- if (headroom < sizeof(llc_snap_hdr_t)) {
- unifi_trace(priv, UDBG3, "cant append snap: debug\n");
- return -1;
- }
- /* tack on SNAP */
- snap = (llc_snap_hdr_t *)skb_push(skb, sizeof(llc_snap_hdr_t));
- snap->dsap = snap->ssap = 0xAA;
- snap->ctrl = 0x03;
- /* Use the appropriate OUI. */
- if ((proto == ETH_P_AARP) || (proto == ETH_P_IPX)) {
- memcpy(snap->oui, oui_8021h, P80211_OUI_LEN);
- } else {
- memcpy(snap->oui, oui_rfc1042, P80211_OUI_LEN);
- }
- snap->protocol = htons(proto);
- }
-
- return 0;
-} /* skb_add_llc_snap() */
-
-#ifdef CSR_SUPPORT_SME
-static int
-_identify_sme_ma_pkt_ind(unifi_priv_t *priv,
- const s8 *oui, u16 protocol,
- const CSR_SIGNAL *signal,
- bulk_data_param_t *bulkdata,
- const unsigned char *daddr,
- const unsigned char *saddr)
-{
- CSR_MA_PACKET_INDICATION *pkt_ind = (CSR_MA_PACKET_INDICATION*)&signal->u.MaPacketIndication;
- int r;
- u8 i;
-
- unifi_trace(priv, UDBG5,
- "_identify_sme_ma_pkt_ind -->\n");
- for (i = 0; i < MAX_MA_UNIDATA_IND_FILTERS; i++) {
- if (priv->sme_unidata_ind_filters[i].in_use) {
- if (!memcmp(oui, priv->sme_unidata_ind_filters[i].oui, 3) &&
- (protocol == priv->sme_unidata_ind_filters[i].protocol)) {
-
- /* Send to client */
- if (priv->sme_cli) {
- /*
- * Pass the packet to the SME, using unifi_sys_ma_unitdata_ind().
- * The frame needs to be converted according to the encapsulation.
- */
- unifi_trace(priv, UDBG1,
- "_identify_sme_ma_pkt_ind: handle=%d, encap=%d, proto=%x\n",
- i, priv->sme_unidata_ind_filters[i].encapsulation,
- priv->sme_unidata_ind_filters[i].protocol);
- if (priv->sme_unidata_ind_filters[i].encapsulation == CSR_WIFI_ROUTER_ENCAPSULATION_ETHERNET) {
- struct sk_buff *skb;
- /* The translation is performed on skb... */
- skb = (struct sk_buff*)bulkdata->d[0].os_net_buf_ptr;
- skb->len = bulkdata->d[0].data_length;
-
- unifi_trace(priv, UDBG1,
- "_identify_sme_ma_pkt_ind: skb_80211_to_ether -->\n");
- r = skb_80211_to_ether(priv, skb, daddr, saddr,
- signal, bulkdata);
- unifi_trace(priv, UDBG1,
- "_identify_sme_ma_pkt_ind: skb_80211_to_ether <--\n");
- if (r) {
- return -EINVAL;
- }
-
- /* ... but we indicate buffer and length */
- bulkdata->d[0].os_data_ptr = skb->data;
- bulkdata->d[0].data_length = skb->len;
- } else {
- /* Add the MAC addresses before the SNAP */
- bulkdata->d[0].os_data_ptr -= 2*ETH_ALEN;
- bulkdata->d[0].data_length += 2*ETH_ALEN;
- memcpy((void*)bulkdata->d[0].os_data_ptr, daddr, ETH_ALEN);
- memcpy((void*)bulkdata->d[0].os_data_ptr + ETH_ALEN, saddr, ETH_ALEN);
- }
-
- unifi_trace(priv, UDBG1,
- "_identify_sme_ma_pkt_ind: unifi_sys_ma_pkt_ind -->\n");
- CsrWifiRouterMaPacketIndSend(priv->sme_unidata_ind_filters[i].appHandle,
- (pkt_ind->VirtualInterfaceIdentifier & 0xff),
- i,
- pkt_ind->ReceptionStatus,
- bulkdata->d[0].data_length,
- (u8*)bulkdata->d[0].os_data_ptr,
- NULL,
- pkt_ind->Rssi,
- pkt_ind->Snr,
- pkt_ind->ReceivedRate);
-
-
- unifi_trace(priv, UDBG1,
- "_identify_sme_ma_pkt_ind: unifi_sys_ma_pkt_ind <--\n");
- }
-
- return 1;
- }
- }
- }
-
- return -1;
-}
-#endif /* CSR_SUPPORT_SME */
-
-/*
- * ---------------------------------------------------------------------------
- * skb_80211_to_ether
- *
- * Make sure the received frame is in Ethernet (802.3) form.
- * De-encapsulates SNAP if necessary, adds a ethernet header.
- * The source buffer should not contain an 802.11 MAC header
- *
- * Arguments:
- * payload Pointer to packet data received from UniFi.
- * payload_length Number of bytes of data received from UniFi.
- * daddr Destination MAC address.
- * saddr Source MAC address.
- *
- * Returns:
- * 0 on success, -1 if the packet is bad and should be dropped,
- * 1 if the packet was forwarded to the SME or AMP client.
- * ---------------------------------------------------------------------------
- */
-int
-skb_80211_to_ether(unifi_priv_t *priv, struct sk_buff *skb,
- const unsigned char *daddr, const unsigned char *saddr,
- const CSR_SIGNAL *signal,
- bulk_data_param_t *bulkdata)
-{
- unsigned char *payload;
- int payload_length;
- struct ethhdr *eth;
- llc_snap_hdr_t *snap;
- int headroom;
-#define UF_VLAN_LLC_HEADER_SIZE 18
- static const u8 vlan_inner_snap[] = { 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00 };
-#if defined(CSR_NATIVE_SOFTMAC) && defined(CSR_SUPPORT_SME)
- const CSR_MA_PACKET_INDICATION *pkt_ind = &signal->u.MaPacketIndication;
-#endif
-
- if(skb== NULL || daddr == NULL || saddr == NULL){
- unifi_error(priv, "skb_80211_to_ether: PBC fail\n");
- return 1;
- }
-
- payload = skb->data;
- payload_length = skb->len;
-
- snap = (llc_snap_hdr_t *)payload;
- eth = (struct ethhdr *)payload;
-
- /* get the skb headroom size */
- headroom = skb_headroom(skb);
-
- /*
- * Test for the various encodings
- */
- if ((payload_length >= sizeof(llc_snap_hdr_t)) &&
- (snap->dsap == 0xAA) &&
- (snap->ssap == 0xAA) &&
- (snap->ctrl == 0x03) &&
- (snap->oui[0] == 0) &&
- (snap->oui[1] == 0) &&
- ((snap->oui[2] == 0) || (snap->oui[2] == 0xF8)))
- {
- /* AppleTalk AARP (2) or IPX SNAP */
- if ((snap->oui[2] == 0) &&
- ((ntohs(snap->protocol) == ETH_P_AARP) || (ntohs(snap->protocol) == ETH_P_IPX)))
- {
- u16 len;
-
- unifi_trace(priv, UDBG3, "%s len: %d\n",
- (ntohs(snap->protocol) == ETH_P_AARP) ? "ETH_P_AARP" : "ETH_P_IPX",
- payload_length);
-
- /* check for headroom availability before skb_push */
- if (headroom < (2 * ETH_ALEN + 2)) {
- unifi_warning(priv, "headroom not available to skb_push ether header\n");
- return -1;
- }
-
- /* Add 802.3 header and leave full payload */
- len = htons(skb->len);
- memcpy(skb_push(skb, 2), &len, 2);
- memcpy(skb_push(skb, ETH_ALEN), saddr, ETH_ALEN);
- memcpy(skb_push(skb, ETH_ALEN), daddr, ETH_ALEN);
-
- return 0;
- }
- /* VLAN-tagged IP */
- if ((snap->oui[2] == 0) && (ntohs(snap->protocol) == ETH_P_8021Q))
- {
- /*
- * The translation doesn't change the packet length, so is done in-place.
- *
- * Example header (from Std 802.11-2007 Annex M):
- * AA-AA-03-00-00-00-81-00-87-65-AA-AA-03-00-00-00-08-06
- * -------SNAP-------p1-p1-ll-ll-------SNAP--------p2-p2
- * dd-dd-dd-dd-dd-dd-aa-aa-aa-aa-aa-aa-p1-p1-ll-ll-p2-p2
- * dd-dd-dd-dd-dd-dd-aa-aa-aa-aa-aa-aa-81-00-87-65-08-06
- */
- u16 vlan_snap;
-
- if (payload_length < UF_VLAN_LLC_HEADER_SIZE) {
- unifi_warning(priv, "VLAN SNAP header too short: %d bytes\n", payload_length);
- return -1;
- }
-
- if (memcmp(payload + 10, vlan_inner_snap, 6)) {
- unifi_warning(priv, "VLAN malformatted SNAP header.\n");
- return -1;
- }
-
- unifi_trace(priv, UDBG3, "VLAN SNAP: %02x-%02x\n", payload[8], payload[9]);
- unifi_trace(priv, UDBG3, "VLAN len: %d\n", payload_length);
-
- /* Create the 802.3 header */
-
- vlan_snap = *((u16*)(payload + 8));
-
- /* Create LLC header without byte-swapping */
- eth->h_proto = snap->protocol;
-
- memcpy(eth->h_dest, daddr, ETH_ALEN);
- memcpy(eth->h_source, saddr, ETH_ALEN);
- *(u16*)(eth + 1) = vlan_snap;
- return 0;
- }
-
- /* it's a SNAP + RFC1042 frame */
- unifi_trace(priv, UDBG3, "SNAP+RFC1042 len: %d\n", payload_length);
-
- /* chop SNAP+llc header from skb. */
- skb_pull(skb, sizeof(llc_snap_hdr_t));
-
- /* Since skb_pull called above to chop snap+llc, no need to check for headroom
- * availability before skb_push
- */
- /* create 802.3 header at beginning of skb. */
- eth = (struct ethhdr *)skb_push(skb, ETH_HLEN);
- memcpy(eth->h_dest, daddr, ETH_ALEN);
- memcpy(eth->h_source, saddr, ETH_ALEN);
- /* Copy protocol field without byte-swapping */
- eth->h_proto = snap->protocol;
- } else {
- u16 len;
-
- /* check for headroom availability before skb_push */
- if (headroom < (2 * ETH_ALEN + 2)) {
- unifi_warning(priv, "headroom not available to skb_push ether header\n");
- return -1;
- }
- /* Add 802.3 header and leave full payload */
- len = htons(skb->len);
- memcpy(skb_push(skb, 2), &len, 2);
- memcpy(skb_push(skb, ETH_ALEN), saddr, ETH_ALEN);
- memcpy(skb_push(skb, ETH_ALEN), daddr, ETH_ALEN);
-
- return 1;
- }
-
- return 0;
-} /* skb_80211_to_ether() */
-
-
-static CsrWifiRouterCtrlPortAction verify_port(unifi_priv_t *priv, unsigned char *address, int queue, u16 interfaceTag)
-{
-#ifdef CSR_NATIVE_LINUX
-#ifdef CSR_SUPPORT_WEXT
- if (queue == UF_CONTROLLED_PORT_Q) {
- return priv->wext_conf.block_controlled_port;
- } else {
- return CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN;
- }
-#else
- return CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN; /* default to open for softmac dev */
-#endif
-#else
- return uf_sme_port_state(priv, address, queue, interfaceTag);
-#endif
-}
-
-/*
- * ---------------------------------------------------------------------------
- * prepare_and_add_macheader
- *
- *
- * These functions adds mac header for packet from netdev
- * to UniFi for transmission.
- * EAP protocol packets are also appended with Mac header &
- * sent using send_ma_pkt_request().
- *
- * Arguments:
- * priv Pointer to device private context struct
- * skb Socket buffer containing data packet to transmit
- * newSkb Socket buffer containing data packet + Mac header if no sufficient headroom in skb
- * serviceClass to append QOS control header in Mac header
- * bulkdata if newSkb allocated then bulkdata updated to send to unifi
- * interfaceTag the interfaceID on which activity going on
- * daddr destination address
- * saddr source address
- * protection protection bit set in framce control of mac header
- *
- * Returns:
- * Zero on success or error code.
- * ---------------------------------------------------------------------------
- */
-
-int prepare_and_add_macheader(unifi_priv_t *priv, struct sk_buff *skb, struct sk_buff *newSkb,
- CSR_PRIORITY priority,
- bulk_data_param_t *bulkdata,
- u16 interfaceTag,
- const u8 *daddr,
- const u8 *saddr,
- u8 protection)
-{
- u16 fc = 0;
- u8 qc = 0;
- u8 macHeaderLengthInBytes = MAC_HEADER_SIZE, *bufPtr = NULL;
- bulk_data_param_t data_ptrs;
- CsrResult csrResult;
- int headroom =0;
- u8 direction = 0;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- u8 *addressOne;
- u8 bQosNull = false;
-
- if (skb == NULL) {
- unifi_error(priv, "prepare_and_add_macheader: Invalid SKB reference\n");
- return -1;
- }
-
- /* add a MAC header refer: 7.1.3.1 Frame Control field in P802.11REVmb.book */
- if (priority != CSR_CONTENTION) {
- /* EAPOL packets don't go as QOS_DATA */
- if (priority == CSR_MANAGEMENT) {
- fc |= cpu_to_le16(IEEE802_11_FC_TYPE_DATA);
- } else {
- /* Qos Control Field */
- macHeaderLengthInBytes += QOS_CONTROL_HEADER_SIZE;
-
- if (skb->len) {
-
- fc |= cpu_to_le16(IEEE802_11_FC_TYPE_QOS_DATA);
- } else {
- fc |= cpu_to_le16(IEEE802_11_FC_TYPE_QOS_NULL);
- bQosNull = true;
- }
- }
- } else {
- if(skb->len == 0) {
- fc |= cpu_to_le16(IEEE802_11_FC_TYPE_NULL);
- } else {
- fc |= cpu_to_le16(IEEE802_11_FC_TYPE_DATA);
- }
- }
-
- switch (interfacePriv->interfaceMode)
- {
- case CSR_WIFI_ROUTER_CTRL_MODE_STA:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI:
- direction = 2;
- fc |= cpu_to_le16(IEEE802_11_FC_TO_DS_MASK);
- break;
- case CSR_WIFI_ROUTER_CTRL_MODE_IBSS:
- direction = 0;
- break;
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- direction = 1;
- fc |= cpu_to_le16(IEEE802_11_FC_FROM_DS_MASK);
- break;
- case CSR_WIFI_ROUTER_CTRL_MODE_AMP:
- if (priority == CSR_MANAGEMENT ) {
-
- direction = 2;
- fc |= cpu_to_le16(IEEE802_11_FC_TO_DS_MASK);
- } else {
- /* Data frames have to use WDS 4 address frames */
- direction = 3;
- fc |= cpu_to_le16(IEEE802_11_FC_TO_DS_MASK | IEEE802_11_FC_FROM_DS_MASK);
- macHeaderLengthInBytes += 6;
- }
- break;
- default:
- unifi_warning(priv, "prepare_and_add_macheader: Unknown mode %d\n",
- interfacePriv->interfaceMode);
- }
-
-
- /* If Sta is QOS & HTC is supported then need to set 'order' bit */
- /* We don't support HT Control for now */
-
- if(protection) {
- fc |= cpu_to_le16(IEEE802_11_FC_PROTECTED_MASK);
- }
-
- /* check the skb headroom before pushing mac header */
- headroom = skb_headroom(skb);
-
- if (headroom < macHeaderLengthInBytes) {
- unifi_trace(priv, UDBG5,
- "prepare_and_add_macheader: Allocate headroom extra %d bytes\n",
- macHeaderLengthInBytes);
-
- csrResult = unifi_net_data_malloc(priv, &data_ptrs.d[0], skb->len + macHeaderLengthInBytes);
-
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, " failed to allocate request_data. in %s func\n", __FUNCTION__);
- return -1;
- }
- newSkb = (struct sk_buff *)(data_ptrs.d[0].os_net_buf_ptr);
- newSkb->len = skb->len + macHeaderLengthInBytes;
-
- memcpy((void*)data_ptrs.d[0].os_data_ptr + macHeaderLengthInBytes,
- skb->data, skb->len);
-
- bulkdata->d[0].os_data_ptr = newSkb->data;
- bulkdata->d[0].os_net_buf_ptr = (unsigned char*)newSkb;
- bulkdata->d[0].data_length = newSkb->len;
-
- bufPtr = (u8*)data_ptrs.d[0].os_data_ptr;
-
- /* The old skb will not be used again */
- kfree_skb(skb);
- } else {
-
- /* headroom has sufficient size, so will get proper pointer */
- bufPtr = (u8*)skb_push(skb, macHeaderLengthInBytes);
- bulkdata->d[0].os_data_ptr = skb->data;
- bulkdata->d[0].os_net_buf_ptr = (unsigned char*)skb;
- bulkdata->d[0].data_length = skb->len;
- }
-
- /* Frame the actual MAC header */
-
- memset(bufPtr, 0, macHeaderLengthInBytes);
-
- /* copy frameControl field */
- memcpy(bufPtr, &fc, sizeof(fc));
- bufPtr += sizeof(fc);
- macHeaderLengthInBytes -= sizeof(fc);
-
- /* Duration/ID field which is 2 bytes */
- bufPtr += 2;
- macHeaderLengthInBytes -= 2;
-
- switch(direction)
- {
- case 0:
- /* Its an Ad-Hoc no need to route it through AP */
- /* Address1: MAC address of the destination from eth header */
- memcpy(bufPtr, daddr, ETH_ALEN);
- bufPtr += ETH_ALEN;
- macHeaderLengthInBytes -= ETH_ALEN;
-
- /* Address2: MAC address of the source */
- memcpy(bufPtr, saddr, ETH_ALEN);
- bufPtr += ETH_ALEN;
- macHeaderLengthInBytes -= ETH_ALEN;
-
- /* Address3: the BSSID (locally generated in AdHoc (creators Bssid)) */
- memcpy(bufPtr, &interfacePriv->bssid, ETH_ALEN);
- bufPtr += ETH_ALEN;
- macHeaderLengthInBytes -= ETH_ALEN;
- break;
- case 1:
- /* Address1: MAC address of the actual destination */
- memcpy(bufPtr, daddr, ETH_ALEN);
- bufPtr += ETH_ALEN;
- macHeaderLengthInBytes -= ETH_ALEN;
- /* Address2: The MAC address of the AP */
- memcpy(bufPtr, &interfacePriv->bssid, ETH_ALEN);
- bufPtr += ETH_ALEN;
- macHeaderLengthInBytes -= ETH_ALEN;
-
- /* Address3: MAC address of the source from eth header */
- memcpy(bufPtr, saddr, ETH_ALEN);
- bufPtr += ETH_ALEN;
- macHeaderLengthInBytes -= ETH_ALEN;
- break;
- case 2:
- /* Address1: To AP is the MAC address of the AP to which its associated */
- memcpy(bufPtr, &interfacePriv->bssid, ETH_ALEN);
- bufPtr += ETH_ALEN;
- macHeaderLengthInBytes -= ETH_ALEN;
-
- /* Address2: MAC address of the source from eth header */
- memcpy(bufPtr, saddr, ETH_ALEN);
- bufPtr += ETH_ALEN;
- macHeaderLengthInBytes -= ETH_ALEN;
-
- /* Address3: MAC address of the actual destination on the distribution system */
- memcpy(bufPtr, daddr, ETH_ALEN);
- bufPtr += ETH_ALEN;
- macHeaderLengthInBytes -= ETH_ALEN;
- break;
- case 3:
- memcpy(bufPtr, &interfacePriv->bssid, ETH_ALEN);
- bufPtr += ETH_ALEN;
- macHeaderLengthInBytes -= ETH_ALEN;
-
- /* Address2: MAC address of the source from eth header */
- memcpy(bufPtr, saddr, ETH_ALEN);
- bufPtr += ETH_ALEN;
- macHeaderLengthInBytes -= ETH_ALEN;
-
- /* Address3: MAC address of the actual destination on the distribution system */
- memcpy(bufPtr, daddr, ETH_ALEN);
- bufPtr += ETH_ALEN;
- macHeaderLengthInBytes -= ETH_ALEN;
- break;
- default:
- unifi_error(priv, "Unknown direction =%d : Not handled now\n", direction);
- return -1;
- }
- /* 2 bytes of frame control field, appended by firmware */
- bufPtr += 2;
- macHeaderLengthInBytes -= 2;
-
- if (3 == direction) {
- /* Address4: MAC address of the source */
- memcpy(bufPtr, saddr, ETH_ALEN);
- bufPtr += ETH_ALEN;
- macHeaderLengthInBytes -= ETH_ALEN;
- }
-
- /* IF Qos Data or Qos Null Data then set QosControl field */
- if ((priority != CSR_CONTENTION) && (macHeaderLengthInBytes >= QOS_CONTROL_HEADER_SIZE)) {
-
- if (priority > 7) {
- unifi_trace(priv, UDBG1, "data packets priority is more than 7, priority = %x\n", priority);
- qc |= 7;
- } else {
- qc |= priority;
- }
- /*assigning address1
- * Address1 offset taken fromm bufPtr(currently bufPtr pointing to Qos contorl) variable in reverse direction
- * Address4 don't exit
- */
-
- addressOne = bufPtr- ADDRESS_ONE_OFFSET;
-
- if (addressOne[0] & 0x1) {
- /* multicast/broadcast frames, no acknowledgement needed */
- qc |= 1 << 5;
- }
- /* non-AP mode only for now */
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_STA ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_IBSS ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI) {
- /* In case of STA and IBSS case eosp and txop limit is 0. */
- } else {
- if(bQosNull) {
- qc |= 1 << 4;
- }
- }
-
- /* append Qos control field to mac header */
- bufPtr[0] = qc;
- /* txop limit is 0 */
- bufPtr[1] = 0;
- macHeaderLengthInBytes -= QOS_CONTROL_HEADER_SIZE;
- }
- if (macHeaderLengthInBytes) {
- unifi_warning(priv, " Mac header not appended properly\n");
- return -1;
- }
- return 0;
-}
-
-/*
- * ---------------------------------------------------------------------------
- * send_ma_pkt_request
- *
- * These functions send a data packet to UniFi for transmission.
- * EAP protocol packets are also sent as send_ma_pkt_request().
- *
- * Arguments:
- * priv Pointer to device private context struct
- * skb Socket buffer containing data packet to transmit
- * ehdr Pointer to Ethernet header within skb.
- *
- * Returns:
- * Zero on success or error code.
- * ---------------------------------------------------------------------------
- */
-
-static int
-send_ma_pkt_request(unifi_priv_t *priv, struct sk_buff *skb, const struct ethhdr *ehdr, CSR_PRIORITY priority)
-{
- int r;
- u16 i;
- u8 eapolStore = FALSE;
- struct sk_buff *newSkb = NULL;
- bulk_data_param_t bulkdata;
- const int proto = ntohs(ehdr->h_proto);
- u16 interfaceTag;
- CsrWifiMacAddress peerAddress;
- CSR_TRANSMISSION_CONTROL transmissionControl = CSR_NO_CONFIRM_REQUIRED;
- s8 protection;
- netInterface_priv_t *interfacePriv = NULL;
- CSR_RATE TransmitRate = (CSR_RATE)0;
-
- unifi_trace(priv, UDBG5, "entering send_ma_pkt_request\n");
-
- /* Get the interface Tag by means of source Mac address */
- for (i = 0; i < CSR_WIFI_NUM_INTERFACES; i++) {
- if (!memcmp(priv->netdev[i]->dev_addr, ehdr->h_source, ETH_ALEN)) {
- interfaceTag = i;
- interfacePriv = priv->interfacePriv[interfaceTag];
- break;
- }
- }
-
- if (interfacePriv == NULL) {
- /* No match found - error */
- interfaceTag = 0;
- interfacePriv = priv->interfacePriv[interfaceTag];
- unifi_warning(priv, "Mac address not matching ... debugging needed\n");
- interfacePriv->stats.tx_dropped++;
- kfree_skb(skb);
- return -1;
- }
-
- /* Add a SNAP header if necessary */
- if (skb_add_llc_snap(priv->netdev[interfaceTag], skb, proto) != 0) {
- /* convert failed */
- unifi_error(priv, "skb_add_llc_snap failed.\n");
- kfree_skb(skb);
- return -1;
- }
-
- bulkdata.d[0].os_data_ptr = skb->data;
- bulkdata.d[0].os_net_buf_ptr = (unsigned char*)skb;
- bulkdata.d[0].net_buf_length = bulkdata.d[0].data_length = skb->len;
- bulkdata.d[1].os_data_ptr = NULL;
- bulkdata.d[1].os_net_buf_ptr = NULL;
- bulkdata.d[1].net_buf_length = bulkdata.d[1].data_length = 0;
-
-#ifdef CSR_SUPPORT_SME
- /* Notify the TA module for the Tx frame for non AP/P2PGO mode*/
- if ((interfacePriv->interfaceMode != CSR_WIFI_ROUTER_CTRL_MODE_AP) &&
- (interfacePriv->interfaceMode != CSR_WIFI_ROUTER_CTRL_MODE_P2PGO)) {
- unifi_ta_sample(priv->card, CSR_WIFI_ROUTER_CTRL_PROTOCOL_DIRECTION_TX,
- &bulkdata.d[0], ehdr->h_source,
- priv->netdev[interfaceTag]->dev_addr,
- jiffies_to_msecs(jiffies),
- 0); /* rate is unknown on tx */
- }
-#endif /* CSR_SUPPORT_SME */
-
- if ((proto == ETH_P_PAE)
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- || (proto == ETH_P_WAI)
-#endif
- )
- {
- /* check for m4 detection */
- if (0 == uf_verify_m4(priv, bulkdata.d[0].os_data_ptr, bulkdata.d[0].data_length)) {
- eapolStore = TRUE;
- }
- }
-
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- if (proto == ETH_P_WAI)
- {
- protection = 0; /*WAI packets always sent unencrypted*/
- }
- else
- {
-#endif
-#ifdef CSR_SUPPORT_SME
- if ((protection = uf_get_protection_bit_from_interfacemode(priv, interfaceTag, ehdr->h_dest)) < 0) {
- unifi_warning(priv, "unicast address, but destination not in station record database\n");
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return -1;
- }
-#else
- protection = 0;
-#endif
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- }
-#endif
-
- /* append Mac header for Eapol as well as data packet */
- if (prepare_and_add_macheader(priv, skb, newSkb, priority, &bulkdata, interfaceTag, ehdr->h_dest, ehdr->h_source, protection)) {
- unifi_error(priv, "failed to create MAC header\n");
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return -1;
- }
-
- /* RA address must contain the immediate destination MAC address that is similar to
- * the Address 1 field of 802.11 Mac header here 4 is: (sizeof(framecontrol) + sizeof (durationID))
- * which is address 1 field
- */
- memcpy(peerAddress.a, ((u8 *) bulkdata.d[0].os_data_ptr) + 4, ETH_ALEN);
-
- unifi_trace(priv, UDBG5, "RA[0]=%x, RA[1]=%x, RA[2]=%x, RA[3]=%x, RA[4]=%x, RA[5]=%x\n",
- peerAddress.a[0], peerAddress.a[1], peerAddress.a[2], peerAddress.a[3],
- peerAddress.a[4], peerAddress.a[5]);
-
-
- if ((proto == ETH_P_PAE)
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- || (proto == ETH_P_WAI)
-#endif
- )
- {
- CSR_SIGNAL signal;
- CSR_MA_PACKET_REQUEST *req = &signal.u.MaPacketRequest;
-
- /* initialize signal to zero */
- memset(&signal, 0, sizeof(CSR_SIGNAL));
-
- /* Frame MA_PACKET request */
- signal.SignalPrimitiveHeader.SignalId = CSR_MA_PACKET_REQUEST_ID;
- signal.SignalPrimitiveHeader.ReceiverProcessId = 0;
- signal.SignalPrimitiveHeader.SenderProcessId = priv->netdev_client->sender_id;
-
- transmissionControl = req->TransmissionControl = 0;
-#ifdef CSR_SUPPORT_SME
- if (eapolStore)
- {
- netInterface_priv_t *netpriv = (netInterface_priv_t *)netdev_priv(priv->netdev[interfaceTag]);
-
- /* Fill the MA-PACKET.req */
-
- req->Priority = priority;
- unifi_trace(priv, UDBG3, "Tx Frame with Priority: %x\n", req->Priority);
-
- /* rate selected by firmware */
- req->TransmitRate = 0;
- req->HostTag = CSR_WIFI_EAPOL_M4_HOST_TAG;
- /* RA address matching with address 1 of Mac header */
- memcpy(req->Ra.x, ((u8 *) bulkdata.d[0].os_data_ptr) + 4, ETH_ALEN);
-
- spin_lock(&priv->m4_lock);
- /* Store the M4-PACKET.req for later */
- interfacePriv->m4_signal = signal;
- interfacePriv->m4_bulk_data.net_buf_length = bulkdata.d[0].net_buf_length;
- interfacePriv->m4_bulk_data.data_length = bulkdata.d[0].data_length;
- interfacePriv->m4_bulk_data.os_data_ptr = bulkdata.d[0].os_data_ptr;
- interfacePriv->m4_bulk_data.os_net_buf_ptr = bulkdata.d[0].os_net_buf_ptr;
- spin_unlock(&priv->m4_lock);
-
- /* Signal the workqueue to call CsrWifiRouterCtrlM4ReadyToSendIndSend().
- * It cannot be called directly from the tx path because it
- * does a non-atomic kmalloc via the framework's CsrPmemAlloc().
- */
- queue_work(priv->unifi_workqueue, &netpriv->send_m4_ready_task);
-
- return 0;
- }
-#endif
- }/*EAPOL or WAI packet*/
-
-#if (defined(CSR_WIFI_SECURITY_WAPI_ENABLE) && defined(CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION))
- if ((CSR_WIFI_ROUTER_CTRL_MODE_STA == interfacePriv->interfaceMode) && \
- (priv->wapi_unicast_filter) && \
- (proto != ETH_P_PAE) && \
- (proto != ETH_P_WAI) && \
- (skb->len > 0))
- {
- CSR_SIGNAL signal;
- CSR_MA_PACKET_REQUEST *req = &signal.u.MaPacketRequest;
- netInterface_priv_t *netpriv = (netInterface_priv_t *)netdev_priv(priv->netdev[interfaceTag]);
-
- unifi_trace(priv, UDBG4, "send_ma_pkt_request() - WAPI unicast data packet when USKID = 1 \n");
-
- /* initialize signal to zero */
- memset(&signal, 0, sizeof(CSR_SIGNAL));
- /* Frame MA_PACKET request */
- signal.SignalPrimitiveHeader.SignalId = CSR_MA_PACKET_REQUEST_ID;
- signal.SignalPrimitiveHeader.ReceiverProcessId = 0;
- signal.SignalPrimitiveHeader.SenderProcessId = priv->netdev_client->sender_id;
-
- /* Fill the MA-PACKET.req */
- req->TransmissionControl = 0;
- req->Priority = priority;
- unifi_trace(priv, UDBG3, "Tx Frame with Priority: %x\n", req->Priority);
- req->TransmitRate = (CSR_RATE) 0; /* rate selected by firmware */
- req->HostTag = 0xffffffff; /* Ask for a new HostTag */
- /* RA address matching with address 1 of Mac header */
- memcpy(req->Ra.x, ((u8 *) bulkdata.d[0].os_data_ptr) + 4, ETH_ALEN);
-
- /* Store the M4-PACKET.req for later */
- spin_lock(&priv->wapi_lock);
- interfacePriv->wapi_unicast_ma_pkt_sig = signal;
- interfacePriv->wapi_unicast_bulk_data.net_buf_length = bulkdata.d[0].net_buf_length;
- interfacePriv->wapi_unicast_bulk_data.data_length = bulkdata.d[0].data_length;
- interfacePriv->wapi_unicast_bulk_data.os_data_ptr = bulkdata.d[0].os_data_ptr;
- interfacePriv->wapi_unicast_bulk_data.os_net_buf_ptr = bulkdata.d[0].os_net_buf_ptr;
- spin_unlock(&priv->wapi_lock);
-
- /* Signal the workqueue to call CsrWifiRouterCtrlWapiUnicastTxEncryptIndSend().
- * It cannot be called directly from the tx path because it
- * does a non-atomic kmalloc via the framework's CsrPmemAlloc().
- */
- queue_work(priv->unifi_workqueue, &netpriv->send_pkt_to_encrypt);
-
- return 0;
- }
-#endif
-
- if(priv->cmanrTestMode)
- {
- TransmitRate = priv->cmanrTestModeTransmitRate;
- unifi_trace(priv, UDBG2, "send_ma_pkt_request: cmanrTestModeTransmitRate = %d TransmitRate=%d\n",
- priv->cmanrTestModeTransmitRate,
- TransmitRate
- );
- }
-
- /* Send UniFi msg */
- /* Here hostTag is been sent as 0xffffffff, its been appended properly while framing MA-Packet request in pdu_processing.c file */
- r = uf_process_ma_packet_req(priv,
- peerAddress.a,
- 0xffffffff, /* Ask for a new HostTag */
- interfaceTag,
- transmissionControl,
- TransmitRate,
- priority,
- priv->netdev_client->sender_id,
- &bulkdata);
-
- if (r) {
- unifi_trace(priv, UDBG1, "(HIP validation failure) r = %x\n", r);
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return -1;
- }
-
- unifi_trace(priv, UDBG3, "leaving send_ma_pkt_request, UNITDATA result code = %d\n", r);
-
- return r;
-} /* send_ma_pkt_request() */
-
-/*
- * ---------------------------------------------------------------------------
- * uf_net_xmit
- *
- * This function is called by the higher level stack to transmit an
- * ethernet packet.
- *
- * Arguments:
- * skb Ethernet packet to send.
- * dev Pointer to the linux net device.
- *
- * Returns:
- * 0 on success (packet was consumed, not necessarily transmitted)
- * 1 if packet was requeued
- * -1 on error
- *
- *
- * Notes:
- * The controlled port is handled in the qdisc dequeue handler.
- * ---------------------------------------------------------------------------
- */
-static netdev_tx_t
-uf_net_xmit(struct sk_buff *skb, struct net_device *dev)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- struct ethhdr ehdr;
- int proto, port;
- int result;
- static tx_signal_handler tx_handler;
- CSR_PRIORITY priority;
- CsrWifiRouterCtrlPortAction port_action;
-
- unifi_trace(priv, UDBG5, "unifi_net_xmit: skb = %x\n", skb);
-
- memcpy(&ehdr, skb->data, ETH_HLEN);
- proto = ntohs(ehdr.h_proto);
- priority = get_packet_priority(priv, skb, &ehdr, interfacePriv);
-
- /* All frames are sent as MA-PACKET.req (EAPOL also) */
- tx_handler = send_ma_pkt_request;
-
- /* 802.1x - apply controlled/uncontrolled port rules */
- if ((proto != ETH_P_PAE)
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- && (proto != ETH_P_WAI)
-#endif
- ) {
- port = UF_CONTROLLED_PORT_Q;
- } else {
- /* queue 4 */
- port = UF_UNCONTROLLED_PORT_Q;
- }
-
- /* Uncontrolled port rules apply */
- port_action = verify_port(priv
- , (((CSR_WIFI_ROUTER_CTRL_MODE_STA == interfacePriv->interfaceMode)||(CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI== interfacePriv->interfaceMode))? interfacePriv->bssid.a: ehdr.h_dest)
- , port
- , interfacePriv->InterfaceTag);
-
- if (port_action == CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN) {
- unifi_trace(priv, UDBG5,
- "uf_net_xmit: %s controlled port open\n",
- port ? "" : "un");
- /* Remove the ethernet header */
- skb_pull(skb, ETH_HLEN);
- result = tx_handler(priv, skb, &ehdr, priority);
- } else {
-
- /* Discard the packet if necessary */
- unifi_trace(priv, UDBG2,
- "uf_net_xmit: %s controlled port %s\n",
- port ? "" : "un", port_action==CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_BLOCK ? "blocked" : "closed");
- interfacePriv->stats.tx_dropped++;
- kfree_skb(skb);
-
- return NETDEV_TX_OK;
- }
-
- if (result == NETDEV_TX_OK) {
-#if (defined(CSR_WIFI_SECURITY_WAPI_ENABLE) && defined(CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION))
- /* Don't update the tx stats when the pkt is to be sent for sw encryption*/
- if (!((CSR_WIFI_ROUTER_CTRL_MODE_STA == interfacePriv->interfaceMode) &&
- (priv->wapi_unicast_filter == 1)))
- {
- dev->trans_start = jiffies;
- /* Should really count tx stats in the UNITDATA.status signal but
- * that doesn't have the length.
- */
- interfacePriv->stats.tx_packets++;
- /* count only the packet payload */
- interfacePriv->stats.tx_bytes += skb->len;
-
- }
-#else
- dev->trans_start = jiffies;
-
- /*
- * Should really count tx stats in the UNITDATA.status signal but
- * that doesn't have the length.
- */
- interfacePriv->stats.tx_packets++;
- /* count only the packet payload */
- interfacePriv->stats.tx_bytes += skb->len;
-#endif
- } else if (result < 0) {
-
- /* Failed to send: fh queue was full, and the skb was discarded.
- * Return OK to indicate that the buffer was consumed, to stop the
- * kernel re-transmitting the freed buffer.
- */
- interfacePriv->stats.tx_dropped++;
- unifi_trace(priv, UDBG1, "unifi_net_xmit: (Packet Drop), dropped count = %x\n", interfacePriv->stats.tx_dropped);
- result = NETDEV_TX_OK;
- }
-
- /* The skb will have been freed by send_XXX_request() */
-
- return result;
-} /* uf_net_xmit() */
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_pause_xmit
- * unifi_restart_xmit
- *
- * These functions are called from the UniFi core to control the flow
- * of packets from the upper layers.
- * unifi_pause_xmit() is called when the internal queue is full and
- * should take action to stop unifi_ma_unitdata() being called.
- * When the queue has drained, unifi_restart_xmit() will be called to
- * re-enable the flow of packets for transmission.
- *
- * Arguments:
- * ospriv OS private context pointer.
- *
- * Returns:
- * unifi_pause_xmit() is called from interrupt context.
- * ---------------------------------------------------------------------------
- */
-void
-unifi_pause_xmit(void *ospriv, unifi_TrafficQueue queue)
-{
- unifi_priv_t *priv = ospriv;
- int i; /* used as a loop counter */
-
- unifi_trace(priv, UDBG2, "Stopping queue %d\n", queue);
-
- for(i=0;i<CSR_WIFI_NUM_INTERFACES;i++)
- {
- if (netif_running(priv->netdev[i]))
- {
- netif_stop_subqueue(priv->netdev[i], (u16)queue);
- }
- }
-
-#ifdef CSR_SUPPORT_SME
- if(queue<=3) {
- routerStartBuffering(priv, queue);
- unifi_trace(priv, UDBG2, "Start buffering %d\n", queue);
- } else {
- routerStartBuffering(priv, 0);
- unifi_error(priv, "Start buffering %d defaulting to 0\n", queue);
- }
-#endif
-
-} /* unifi_pause_xmit() */
-
-void
-unifi_restart_xmit(void *ospriv, unifi_TrafficQueue queue)
-{
- unifi_priv_t *priv = ospriv;
- int i=0; /* used as a loop counter */
-
- unifi_trace(priv, UDBG2, "Waking queue %d\n", queue);
-
- for(i=0;i<CSR_WIFI_NUM_INTERFACES;i++)
- {
- if (netif_running(priv->netdev[i]))
- {
- netif_wake_subqueue(priv->netdev[i], (u16)queue);
- }
- }
-
-#ifdef CSR_SUPPORT_SME
- if(queue <=3) {
- routerStopBuffering(priv, queue);
- uf_send_buffered_frames(priv, queue);
- } else {
- routerStopBuffering(priv, 0);
- uf_send_buffered_frames(priv, 0);
- }
-#endif
-} /* unifi_restart_xmit() */
-
-
-static void
-indicate_rx_skb(unifi_priv_t *priv, u16 ifTag, u8* dst_a, u8* src_a, struct sk_buff *skb, CSR_SIGNAL *signal,
- bulk_data_param_t *bulkdata)
-{
- int r, sr = 0;
- struct net_device *dev;
-
-#ifdef CSR_SUPPORT_SME
- llc_snap_hdr_t *snap;
-
- snap = (llc_snap_hdr_t *)skb->data;
-
- sr = _identify_sme_ma_pkt_ind(priv,
- snap->oui, ntohs(snap->protocol),
- signal,
- bulkdata,
- dst_a, src_a );
-#endif
-
- /*
- * Decapsulate any SNAP header and
- * prepend an ethernet header so that the skb manipulation and ARP
- * stuff works.
- */
- r = skb_80211_to_ether(priv, skb, dst_a, src_a,
- signal, bulkdata);
- if (r == -1) {
- /* Drop the packet and return */
- priv->interfacePriv[ifTag]->stats.rx_errors++;
- priv->interfacePriv[ifTag]->stats.rx_frame_errors++;
- unifi_net_data_free(priv, &bulkdata->d[0]);
- unifi_notice(priv, "indicate_rx_skb: Discard unknown frame.\n");
- return;
- }
-
- /* Handle the case where packet is sent up through the subscription
- * API but should not be given to the network stack (AMP PAL case)
- * LLC header is different from WiFi and the packet has been subscribed for
- */
- if (r == 1 && sr == 1) {
- unifi_net_data_free(priv, &bulkdata->d[0]);
- unifi_trace(priv, UDBG5, "indicate_rx_skb: Data given to subscription"
- "API, not being given to kernel\n");
- return;
- }
-
- dev = priv->netdev[ifTag];
- /* Now we look like a regular ethernet frame */
- /* Fill in SKB meta data */
- skb->dev = dev;
- skb->protocol = eth_type_trans(skb, dev);
- skb->ip_summed = CHECKSUM_UNNECESSARY;
-
- /* Test for an overlength frame */
- if (skb->len > (dev->mtu + ETH_HLEN)) {
- /* A bogus length ethfrm has been encap'd. */
- /* Is someone trying an oflow attack? */
- unifi_error(priv, "%s: oversize frame (%d > %d)\n",
- dev->name,
- skb->len, dev->mtu + ETH_HLEN);
-
- /* Drop the packet and return */
- priv->interfacePriv[ifTag]->stats.rx_errors++;
- priv->interfacePriv[ifTag]->stats.rx_length_errors++;
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
-
-
- if(priv->cmanrTestMode)
- {
- const CSR_MA_PACKET_INDICATION *pkt_ind = &signal->u.MaPacketIndication;
- priv->cmanrTestModeTransmitRate = pkt_ind->ReceivedRate;
- unifi_trace(priv, UDBG2, "indicate_rx_skb: cmanrTestModeTransmitRate=%d\n", priv->cmanrTestModeTransmitRate);
- }
-
- /* Pass SKB up the stack */
-#ifdef CSR_WIFI_USE_NETIF_RX
- netif_rx(skb);
-#else
- netif_rx_ni(skb);
-#endif
-
- if (dev != NULL) {
- dev->last_rx = jiffies;
- }
-
- /* Bump rx stats */
- priv->interfacePriv[ifTag]->stats.rx_packets++;
- priv->interfacePriv[ifTag]->stats.rx_bytes += bulkdata->d[0].data_length;
-
- return;
-}
-
-void
-uf_process_rx_pending_queue(unifi_priv_t *priv, int queue,
- CsrWifiMacAddress source_address,
- int indicate, u16 interfaceTag)
-{
- rx_buffered_packets_t *rx_q_item;
- struct list_head *rx_list;
- struct list_head *n;
- struct list_head *l_h;
- static const CsrWifiMacAddress broadcast_address = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}};
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "uf_process_rx_pending_queue bad interfaceTag\n");
- return;
- }
-
- if (queue == UF_CONTROLLED_PORT_Q) {
- rx_list = &interfacePriv->rx_controlled_list;
- } else {
- rx_list = &interfacePriv->rx_uncontrolled_list;
- }
-
- down(&priv->rx_q_sem);
- list_for_each_safe(l_h, n, rx_list) {
- rx_q_item = list_entry(l_h, rx_buffered_packets_t, q);
-
- /* Validate against the source address */
- if (memcmp(broadcast_address.a, source_address.a, ETH_ALEN) &&
- memcmp(rx_q_item->sa.a, source_address.a, ETH_ALEN)) {
-
- unifi_trace(priv, UDBG2,
- "uf_process_rx_pending_queue: Skipping sa=%02X%02X%02X%02X%02X%02X skb=%p, bulkdata=%p\n",
- rx_q_item->sa.a[0], rx_q_item->sa.a[1],
- rx_q_item->sa.a[2], rx_q_item->sa.a[3],
- rx_q_item->sa.a[4], rx_q_item->sa.a[5],
- rx_q_item->skb, &rx_q_item->bulkdata.d[0]);
- continue;
- }
-
- list_del(l_h);
-
-
- unifi_trace(priv, UDBG2,
- "uf_process_rx_pending_queue: Was Blocked skb=%p, bulkdata=%p\n",
- rx_q_item->skb, &rx_q_item->bulkdata);
-
- if (indicate) {
- indicate_rx_skb(priv, interfaceTag, rx_q_item->da.a, rx_q_item->sa.a, rx_q_item->skb, &rx_q_item->signal, &rx_q_item->bulkdata);
- } else {
- interfacePriv->stats.rx_dropped++;
- unifi_net_data_free(priv, &rx_q_item->bulkdata.d[0]);
- }
-
- /* It is our resposibility to free the Rx structure object. */
- kfree(rx_q_item);
- }
- up(&priv->rx_q_sem);
-}
-
-/*
- * ---------------------------------------------------------------------------
- * uf_resume_data_plane
- *
- * Is called when the (un)controlled port is set to open,
- * to notify the network stack to schedule for transmission
- * any packets queued in the qdisk while port was closed and
- * indicated to the stack any packets buffered in the Rx queues.
- *
- * Arguments:
- * priv Pointer to device private struct
- *
- * Returns:
- * ---------------------------------------------------------------------------
- */
-void
-uf_resume_data_plane(unifi_priv_t *priv, int queue,
- CsrWifiMacAddress peer_address,
- u16 interfaceTag)
-{
-#ifdef CSR_SUPPORT_WEXT
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-#endif
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "uf_resume_data_plane bad interfaceTag\n");
- return;
- }
-
- unifi_trace(priv, UDBG2, "Resuming netif\n");
-
- /*
- * If we are waiting for the net device to enter the up state, don't
- * process the rx queue yet as it will be done by the callback when
- * the device is ready.
- */
-#ifdef CSR_SUPPORT_WEXT
- if (!interfacePriv->wait_netdev_change)
-#endif
- {
-#ifdef CONFIG_NET_SCHED
- if (netif_running(priv->netdev[interfaceTag])) {
- netif_tx_schedule_all(priv->netdev[interfaceTag]);
- }
-#endif
- uf_process_rx_pending_queue(priv, queue, peer_address, 1, interfaceTag);
- }
-} /* uf_resume_data_plane() */
-
-
-void uf_free_pending_rx_packets(unifi_priv_t *priv, int queue, CsrWifiMacAddress peer_address, u16 interfaceTag)
-{
- uf_process_rx_pending_queue(priv, queue, peer_address, 0, interfaceTag);
-
-} /* uf_free_pending_rx_packets() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_rx
- *
- * Reformat a UniFi data received packet into a p80211 packet and
- * pass it up the protocol stack.
- *
- * Arguments:
- * None.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static void
-unifi_rx(unifi_priv_t *priv, CSR_SIGNAL *signal, bulk_data_param_t *bulkdata)
-{
- u16 interfaceTag;
- bulk_data_desc_t *pData;
- const CSR_MA_PACKET_INDICATION *pkt_ind = &signal->u.MaPacketIndication;
- struct sk_buff *skb;
- CsrWifiRouterCtrlPortAction port_action;
- u8 dataFrameType;
- int proto;
- int queue;
-
- u8 da[ETH_ALEN], sa[ETH_ALEN];
- u8 toDs, fromDs, frameType, macHeaderLengthInBytes = MAC_HEADER_SIZE;
- u16 frameControl;
- netInterface_priv_t *interfacePriv;
- struct ethhdr ehdr;
-
- interfaceTag = (pkt_ind->VirtualInterfaceIdentifier & 0xff);
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- /* Sanity check that the VIF refers to a sensible interface */
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES)
- {
- unifi_error(priv, "%s: MA-PACKET indication with bad interfaceTag %d\n", __FUNCTION__, interfaceTag);
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
-
- /* Sanity check that the VIF refers to an allocated netdev */
- if (!interfacePriv->netdev_registered)
- {
- unifi_error(priv, "%s: MA-PACKET indication with unallocated interfaceTag %d\n", __FUNCTION__, interfaceTag);
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
-
- if (bulkdata->d[0].data_length == 0) {
- unifi_warning(priv, "%s: MA-PACKET indication with zero bulk data\n", __FUNCTION__);
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
-
-
- skb = (struct sk_buff*)bulkdata->d[0].os_net_buf_ptr;
- skb->len = bulkdata->d[0].data_length;
-
- /* Point to the addresses */
- toDs = (skb->data[1] & 0x01) ? 1 : 0;
- fromDs = (skb->data[1] & 0x02) ? 1 : 0;
-
- memcpy(da, (skb->data+4+toDs*12), ETH_ALEN);/* Address1 or 3 */
- memcpy(sa, (skb->data+10+fromDs*(6+toDs*8)), ETH_ALEN); /* Address2, 3 or 4 */
-
-
- pData = &bulkdata->d[0];
- frameControl = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(pData->os_data_ptr);
- frameType = ((frameControl & 0x000C) >> 2);
-
- dataFrameType =((frameControl & 0x00f0) >> 4);
- unifi_trace(priv, UDBG6,
- "%s: Receive Data Frame Type %d \n", __FUNCTION__, dataFrameType);
-
- switch(dataFrameType)
- {
- case QOS_DATA:
- case QOS_DATA_NULL:
- /* If both are set then the Address4 exists (only for AP) */
- if (fromDs && toDs)
- {
- /* 6 is the size of Address4 field */
- macHeaderLengthInBytes += (QOS_CONTROL_HEADER_SIZE + 6);
- }
- else
- {
- macHeaderLengthInBytes += QOS_CONTROL_HEADER_SIZE;
- }
-
- /* If order bit set then HT control field is the part of MAC header */
- if (frameControl & FRAME_CONTROL_ORDER_BIT)
- macHeaderLengthInBytes += HT_CONTROL_HEADER_SIZE;
- break;
- default:
- if (fromDs && toDs)
- macHeaderLengthInBytes += 6;
- }
-
- /* Prepare the ethernet header from snap header of skb data */
- switch(dataFrameType)
- {
- case DATA_NULL:
- case QOS_DATA_NULL:
- /* This is for only queue info fetching, EAPOL wont come as
- * null data so the proto is initialized as zero
- */
- proto = 0x0;
- break;
- default:
- {
- llc_snap_hdr_t *snap;
- /* Fetch a snap header to find protocol (for IPV4/IPV6 packets
- * the snap header fetching offset is same)
- */
- snap = (llc_snap_hdr_t *) (skb->data + macHeaderLengthInBytes);
-
- /* prepare the ethernet header from the snap header & addresses */
- ehdr.h_proto = snap->protocol;
- memcpy(ehdr.h_dest, da, ETH_ALEN);
- memcpy(ehdr.h_source, sa, ETH_ALEN);
- }
- proto = ntohs(ehdr.h_proto);
- }
- unifi_trace(priv, UDBG3, "in unifi_rx protocol from snap header = 0x%x\n", proto);
-
- if ((proto != ETH_P_PAE)
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- && (proto != ETH_P_WAI)
-#endif
- ) {
- queue = UF_CONTROLLED_PORT_Q;
- } else {
- queue = UF_UNCONTROLLED_PORT_Q;
- }
-
- port_action = verify_port(priv, (unsigned char*)sa, queue, interfaceTag);
- unifi_trace(priv, UDBG3, "in unifi_rx port action is = 0x%x & queue = %x\n", port_action, queue);
-
-#ifdef CSR_SUPPORT_SME
- /* Notify the TA module for the Rx frame for non P2PGO and AP cases*/
- if((interfacePriv->interfaceMode != CSR_WIFI_ROUTER_CTRL_MODE_AP) &&
- (interfacePriv->interfaceMode != CSR_WIFI_ROUTER_CTRL_MODE_P2PGO))
- {
- /* Remove MAC header of length(macHeaderLengthInBytes) before sampling */
- skb_pull(skb, macHeaderLengthInBytes);
- pData->os_data_ptr = skb->data;
- pData->data_length -= macHeaderLengthInBytes;
-
- if (pData->data_length) {
- unifi_ta_sample(priv->card, CSR_WIFI_ROUTER_CTRL_PROTOCOL_DIRECTION_RX,
- &bulkdata->d[0],
- sa, priv->netdev[interfaceTag]->dev_addr,
- jiffies_to_msecs(jiffies),
- pkt_ind->ReceivedRate);
- }
- } else {
-
- /* AP/P2PGO specific handling here */
- CsrWifiRouterCtrlStaInfo_t * srcStaInfo =
- CsrWifiRouterCtrlGetStationRecordFromPeerMacAddress(priv, sa, interfaceTag);
-
- /* Defensive check only; Source address is already checked in
- process_ma_packet_ind and we should have a valid source address here */
-
- if(srcStaInfo == NULL) {
- CsrWifiMacAddress peerMacAddress;
- /* Unknown data PDU */
- memcpy(peerMacAddress.a, sa, ETH_ALEN);
- unifi_trace(priv, UDBG1, "%s: Unexpected frame from peer = %x:%x:%x:%x:%x:%x\n", __FUNCTION__,
- sa[0], sa[1], sa[2], sa[3], sa[4], sa[5]);
- CsrWifiRouterCtrlUnexpectedFrameIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, interfaceTag, peerMacAddress);
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
-
- /* For AP GO mode, don't store the PDUs */
- if (port_action != CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN) {
- /* Drop the packet and return */
- CsrWifiMacAddress peerMacAddress;
- memcpy(peerMacAddress.a, sa, ETH_ALEN);
- unifi_trace(priv, UDBG3, "%s: Port is not open: unexpected frame from peer = %x:%x:%x:%x:%x:%x\n",
- __FUNCTION__, sa[0], sa[1], sa[2], sa[3], sa[4], sa[5]);
-
- CsrWifiRouterCtrlUnexpectedFrameIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, interfaceTag, peerMacAddress);
- interfacePriv->stats.rx_dropped++;
- unifi_net_data_free(priv, &bulkdata->d[0]);
- unifi_notice(priv, "%s: Dropping packet, proto=0x%04x, %s port\n", __FUNCTION__,
- proto, queue ? "Controlled" : "Un-controlled");
- return;
- }
-
- /* Qos NULL/Data NULL are freed here and not processed further */
- if((dataFrameType == QOS_DATA_NULL) || (dataFrameType == DATA_NULL)){
- unifi_trace(priv, UDBG5, "%s: Null Frame Received and Freed\n", __FUNCTION__);
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
-
- /* Now we have done with MAC header so proceed with the real data part*/
- /* This function takes care of appropriate routing for AP/P2PGO case*/
- /* the function hadnles following things
- 2. Routing the PDU to appropriate location
- 3. Error case handling
- */
- if(!(uf_ap_process_data_pdu(priv, skb, &ehdr, srcStaInfo,
- signal,
- bulkdata,
- macHeaderLengthInBytes)))
- {
- return;
- }
- unifi_trace(priv, UDBG5, "unifi_rx: no specific AP handling process as normal frame, MAC Header len %d\n", macHeaderLengthInBytes);
- /* Remove the MAC header for subsequent conversion */
- skb_pull(skb, macHeaderLengthInBytes);
- pData->os_data_ptr = skb->data;
- pData->data_length -= macHeaderLengthInBytes;
- pData->os_net_buf_ptr = (unsigned char*)skb;
- pData->net_buf_length = skb->len;
- }
-#endif /* CSR_SUPPORT_SME */
-
-
- /* Now that the MAC header is removed, null-data frames have zero length
- * and can be dropped
- */
- if (pData->data_length == 0) {
- if (((frameControl & 0x00f0) >> 4) != QOS_DATA_NULL &&
- ((frameControl & 0x00f0) >> 4) != DATA_NULL) {
- unifi_trace(priv, UDBG1, "Zero length frame, but not null-data %04x\n", frameControl);
- }
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
-
- if (port_action == CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD) {
- /* Drop the packet and return */
- interfacePriv->stats.rx_dropped++;
- unifi_net_data_free(priv, &bulkdata->d[0]);
- unifi_notice(priv, "%s: Dropping packet, proto=0x%04x, %s port\n",
- __FUNCTION__, proto, queue ? "controlled" : "uncontrolled");
- return;
- } else if ( (port_action == CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_BLOCK) ||
- (interfacePriv->connected != UnifiConnected) ) {
-
- /* Buffer the packet into the Rx queues */
- rx_buffered_packets_t *rx_q_item;
- struct list_head *rx_list;
-
- rx_q_item = kmalloc(sizeof(rx_buffered_packets_t),
- GFP_KERNEL);
- if (rx_q_item == NULL) {
- unifi_error(priv, "%s: Failed to allocate %d bytes for rx packet record\n",
- __FUNCTION__, sizeof(rx_buffered_packets_t));
- interfacePriv->stats.rx_dropped++;
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
-
- INIT_LIST_HEAD(&rx_q_item->q);
- rx_q_item->bulkdata = *bulkdata;
- rx_q_item->skb = skb;
- rx_q_item->signal = *signal;
- memcpy(rx_q_item->sa.a, sa, ETH_ALEN);
- memcpy(rx_q_item->da.a, da, ETH_ALEN);
- unifi_trace(priv, UDBG2, "%s: Blocked skb=%p, bulkdata=%p\n",
- __FUNCTION__, rx_q_item->skb, &rx_q_item->bulkdata);
-
- if (queue == UF_CONTROLLED_PORT_Q) {
- rx_list = &interfacePriv->rx_controlled_list;
- } else {
- rx_list = &interfacePriv->rx_uncontrolled_list;
- }
-
- /* Add to tail of packets queue */
- down(&priv->rx_q_sem);
- list_add_tail(&rx_q_item->q, rx_list);
- up(&priv->rx_q_sem);
-
- return;
-
- }
-
- indicate_rx_skb(priv, interfaceTag, da, sa, skb, signal, bulkdata);
-
-} /* unifi_rx() */
-
-static void process_ma_packet_cfm(unifi_priv_t *priv, CSR_SIGNAL *signal, bulk_data_param_t *bulkdata)
-{
- u16 interfaceTag;
- const CSR_MA_PACKET_CONFIRM *pkt_cfm = &signal->u.MaPacketConfirm;
- netInterface_priv_t *interfacePriv;
-
- interfaceTag = (pkt_cfm->VirtualInterfaceIdentifier & 0xff);
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- /* Sanity check that the VIF refers to a sensible interface */
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES)
- {
- unifi_error(priv, "%s: MA-PACKET confirm with bad interfaceTag %d\n", __FUNCTION__, interfaceTag);
- return;
- }
-#ifdef CSR_SUPPORT_SME
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
-
- uf_process_ma_pkt_cfm_for_ap(priv, interfaceTag, pkt_cfm);
- } else if (interfacePriv->m4_sent && (pkt_cfm->HostTag == interfacePriv->m4_hostTag)) {
- /* Check if this is a confirm for EAPOL M4 frame and we need to send transmistted ind*/
- CsrResult result = pkt_cfm->TransmissionStatus == CSR_TX_SUCCESSFUL?CSR_RESULT_SUCCESS:CSR_RESULT_FAILURE;
- CsrWifiMacAddress peerMacAddress;
- memcpy(peerMacAddress.a, interfacePriv->m4_signal.u.MaPacketRequest.Ra.x, ETH_ALEN);
-
- unifi_trace(priv, UDBG1, "%s: Sending M4 Transmit CFM\n", __FUNCTION__);
- CsrWifiRouterCtrlM4TransmittedIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0,
- interfaceTag,
- peerMacAddress,
- result);
- interfacePriv->m4_sent = FALSE;
- interfacePriv->m4_hostTag = 0xffffffff;
- }
-#endif
- return;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_rx
- *
- * Reformat a UniFi data received packet into a p80211 packet and
- * pass it up the protocol stack.
- *
- * Arguments:
- * None.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static void process_ma_packet_ind(unifi_priv_t *priv, CSR_SIGNAL *signal, bulk_data_param_t *bulkdata)
-{
- u16 interfaceTag;
- bulk_data_desc_t *pData;
- CSR_MA_PACKET_INDICATION *pkt_ind = (CSR_MA_PACKET_INDICATION*)&signal->u.MaPacketIndication;
- struct sk_buff *skb;
- u16 frameControl;
- netInterface_priv_t *interfacePriv;
- u8 da[ETH_ALEN], sa[ETH_ALEN];
- u8 *bssid = NULL, *ba_addr = NULL;
- u8 toDs, fromDs, frameType;
- u8 i =0;
-
-#ifdef CSR_SUPPORT_SME
- u8 dataFrameType = 0;
- u8 powerSaveChanged = FALSE;
- u8 pmBit = 0;
- CsrWifiRouterCtrlStaInfo_t *srcStaInfo = NULL;
- u16 qosControl;
-
-#endif
-
- interfaceTag = (pkt_ind->VirtualInterfaceIdentifier & 0xff);
- interfacePriv = priv->interfacePriv[interfaceTag];
-
-
- /* Sanity check that the VIF refers to a sensible interface */
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES)
- {
- unifi_error(priv, "%s: MA-PACKET indication with bad interfaceTag %d\n", __FUNCTION__, interfaceTag);
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
-
- /* Sanity check that the VIF refers to an allocated netdev */
- if (!interfacePriv->netdev_registered)
- {
- unifi_error(priv, "%s: MA-PACKET indication with unallocated interfaceTag %d\n", __FUNCTION__, interfaceTag);
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
-
- if (bulkdata->d[0].data_length == 0) {
- unifi_warning(priv, "%s: MA-PACKET indication with zero bulk data\n", __FUNCTION__);
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
- /* For monitor mode we need to pass this indication to the registered application
- handle this separately*/
- /* MIC failure is already taken care of so no need to send the PDUs which are not successfully received in non-monitor mode*/
- if(pkt_ind->ReceptionStatus != CSR_RX_SUCCESS)
- {
- unifi_warning(priv, "%s: MA-PACKET indication with status = %d\n", __FUNCTION__, pkt_ind->ReceptionStatus);
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
-
-
- skb = (struct sk_buff*)bulkdata->d[0].os_net_buf_ptr;
- skb->len = bulkdata->d[0].data_length;
-
- /* Point to the addresses */
- toDs = (skb->data[1] & 0x01) ? 1 : 0;
- fromDs = (skb->data[1] & 0x02) ? 1 : 0;
-
- memcpy(da, (skb->data+4+toDs*12), ETH_ALEN);/* Address1 or 3 */
- memcpy(sa, (skb->data+10+fromDs*(6+toDs*8)), ETH_ALEN); /* Address2, 3 or 4 */
-
- /* Find the BSSID, which will be used to match the BA session */
- if (toDs && fromDs)
- {
- unifi_trace(priv, UDBG6, "4 address frame - don't try to find BSSID\n");
- bssid = NULL;
- }
- else
- {
- bssid = (u8 *) (skb->data + 4 + 12 - (fromDs * 6) - (toDs * 12));
- }
-
- pData = &bulkdata->d[0];
- frameControl = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(pData->os_data_ptr);
- frameType = ((frameControl & 0x000C) >> 2);
-
- unifi_trace(priv, UDBG3, "Rx Frame Type: %d sn: %d\n", frameType,
- (le16_to_cpu(*((u16*)(bulkdata->d[0].os_data_ptr + IEEE802_11_SEQUENCE_CONTROL_OFFSET))) >> 4) & 0xfff);
- if(frameType == IEEE802_11_FRAMETYPE_CONTROL){
-#ifdef CSR_SUPPORT_SME
- unifi_trace(priv, UDBG6, "%s: Received Control Frame\n", __FUNCTION__);
-
- if((frameControl & 0x00f0) == 0x00A0){
- /* This is a PS-POLL request */
- u8 pmBit = (frameControl & 0x1000)?0x01:0x00;
- unifi_trace(priv, UDBG6, "%s: Received PS-POLL Frame\n", __FUNCTION__);
-
- uf_process_ps_poll(priv, sa, da, pmBit, interfaceTag);
- }
- else {
- unifi_warning(priv, "%s: Non PS-POLL control frame is received\n", __FUNCTION__);
- }
-#endif
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
- if(frameType != IEEE802_11_FRAMETYPE_DATA) {
- unifi_warning(priv, "%s: Non control Non Data frame is received\n", __FUNCTION__);
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
-
-#ifdef CSR_SUPPORT_SME
- if((interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP) ||
- (interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO)){
-
- srcStaInfo = CsrWifiRouterCtrlGetStationRecordFromPeerMacAddress(priv, sa, interfaceTag);
-
- if(srcStaInfo == NULL) {
- CsrWifiMacAddress peerMacAddress;
- /* Unknown data PDU */
- memcpy(peerMacAddress.a, sa, ETH_ALEN);
- unifi_trace(priv, UDBG1, "%s: Unexpected frame from peer = %x:%x:%x:%x:%x:%x\n", __FUNCTION__,
- sa[0], sa[1], sa[2], sa[3], sa[4], sa[5]);
- CsrWifiRouterCtrlUnexpectedFrameIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, interfaceTag, peerMacAddress);
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return;
- }
-
- /*
- verify power management bit here so as to ensure host and unifi are always
- in sync with power management status of peer.
-
- If we do it later, it may so happen we have stored the frame in BA re-ordering
- buffer and hence host and unifi are out of sync for power management status
- */
-
- pmBit = (frameControl & 0x1000)?0x01:0x00;
- powerSaveChanged = uf_process_pm_bit_for_peer(priv, srcStaInfo, pmBit, interfaceTag);
-
- /* Update station last activity time */
- srcStaInfo->activity_flag = TRUE;
-
- /* For Qos Frame if PM bit is toggled to indicate the change in power save state then it shall not be
- considered as Trigger Frame. Enter only if WMM STA and peer is in Power save */
-
- dataFrameType = ((frameControl & 0x00f0) >> 4);
-
- if((powerSaveChanged == FALSE)&&(srcStaInfo->wmmOrQosEnabled == TRUE)&&
- (srcStaInfo->currentPeerState == CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_POWER_SAVE)){
-
- if((dataFrameType == QOS_DATA) || (dataFrameType == QOS_DATA_NULL)){
-
- /*
- * QoS control field is offset from frame control by 2 (frame control)
- * + 2 (duration/ID) + 2 (sequence control) + 3*ETH_ALEN or 4*ETH_ALEN
- */
- if((frameControl & IEEE802_11_FC_TO_DS_MASK) && (frameControl & IEEE802_11_FC_FROM_DS_MASK)){
- qosControl= CSR_GET_UINT16_FROM_LITTLE_ENDIAN(pData->os_data_ptr + 30);
- }
- else{
- qosControl = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(pData->os_data_ptr + 24);
- }
- unifi_trace(priv, UDBG5, "%s: Check if U-APSD operations are triggered for qosControl: 0x%x\n", __FUNCTION__, qosControl);
- uf_process_wmm_deliver_ac_uapsd(priv, srcStaInfo, qosControl, interfaceTag);
- }
- }
- }
-
-#endif
-
- if( ((frameControl & 0x00f0) >> 4) == QOS_DATA) {
- u8 *qos_control_ptr = (u8*)bulkdata->d[0].os_data_ptr + (((frameControl & IEEE802_11_FC_TO_DS_MASK) && (frameControl & IEEE802_11_FC_FROM_DS_MASK))?30: 24);
- int tID = *qos_control_ptr & IEEE802_11_QC_TID_MASK; /* using ls octet of qos control */
- ba_session_rx_struct *ba_session;
- u8 ba_session_idx = 0;
- /* Get the BA originator address */
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO){
- ba_addr = sa;
- }else{
- ba_addr = bssid;
- }
-
- down(&priv->ba_mutex);
- for (ba_session_idx=0; ba_session_idx < MAX_SUPPORTED_BA_SESSIONS_RX; ba_session_idx++){
- ba_session = interfacePriv->ba_session_rx[ba_session_idx];
- if (ba_session){
- unifi_trace(priv, UDBG6, "found ba_session=0x%x ba_session_idx=%d", ba_session, ba_session_idx);
- if ((!memcmp(ba_session->macAddress.a, ba_addr, ETH_ALEN)) && (ba_session->tID == tID)){
- frame_desc_struct frame_desc;
- frame_desc.bulkdata = *bulkdata;
- frame_desc.signal = *signal;
- frame_desc.sn = (le16_to_cpu(*((u16*)(bulkdata->d[0].os_data_ptr + IEEE802_11_SEQUENCE_CONTROL_OFFSET))) >> 4) & 0xfff;
- frame_desc.active = TRUE;
- unifi_trace(priv, UDBG6, "%s: calling process_ba_frame (session=%d)\n", __FUNCTION__, ba_session_idx);
- process_ba_frame(priv, interfacePriv, ba_session, &frame_desc);
- up(&priv->ba_mutex);
- process_ba_complete(priv, interfacePriv);
- break;
- }
- }
- }
- if (ba_session_idx == MAX_SUPPORTED_BA_SESSIONS_RX){
- up(&priv->ba_mutex);
- unifi_trace(priv, UDBG6, "%s: calling process_amsdu()", __FUNCTION__);
- process_amsdu(priv, signal, bulkdata);
- }
- } else {
- unifi_trace(priv, UDBG6, "calling unifi_rx()");
- unifi_rx(priv, signal, bulkdata);
- }
-
- /* check if the frames in reorder buffer has aged, the check
- * is done after receive processing so that if the missing frame
- * has arrived in this receive process, then it is handled cleanly.
- *
- * And also this code here takes care that timeout check is made for all
- * the receive indications
- */
- down(&priv->ba_mutex);
- for (i=0; i < MAX_SUPPORTED_BA_SESSIONS_RX; i++){
- ba_session_rx_struct *ba_session;
- ba_session = interfacePriv->ba_session_rx[i];
- if (ba_session){
- check_ba_frame_age_timeout(priv, interfacePriv, ba_session);
- }
- }
- up(&priv->ba_mutex);
- process_ba_complete(priv, interfacePriv);
-
-}
-/*
- * ---------------------------------------------------------------------------
- * uf_set_multicast_list
- *
- * This function is called by the higher level stack to set
- * a list of multicast rx addresses.
- *
- * Arguments:
- * dev Network Device pointer.
- *
- * Returns:
- * None.
- *
- * Notes:
- * ---------------------------------------------------------------------------
- */
-
-static void
-uf_set_multicast_list(struct net_device *dev)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
-
-#ifdef CSR_NATIVE_LINUX
- unifi_trace(priv, UDBG3, "uf_set_multicast_list unsupported\n");
- return;
-#else
-
- u8 *mc_list = interfacePriv->mc_list;
- struct netdev_hw_addr *mc_addr;
- int mc_addr_count;
-
- if (priv->init_progress != UNIFI_INIT_COMPLETED) {
- return;
- }
-
- mc_addr_count = netdev_mc_count(dev);
-
- unifi_trace(priv, UDBG3,
- "uf_set_multicast_list (count=%d)\n", mc_addr_count);
-
-
- /* Not enough space? */
- if (mc_addr_count > UNIFI_MAX_MULTICAST_ADDRESSES) {
- return;
- }
-
- /* Store the list to be processed by the work item. */
- interfacePriv->mc_list_count = mc_addr_count;
- netdev_hw_addr_list_for_each(mc_addr, &dev->mc) {
- memcpy(mc_list, mc_addr->addr, ETH_ALEN);
- mc_list += ETH_ALEN;
- }
-
- /* Send a message to the workqueue */
- queue_work(priv->unifi_workqueue, &priv->multicast_list_task);
-#endif
-
-} /* uf_set_multicast_list() */
-
-/*
- * ---------------------------------------------------------------------------
- * netdev_mlme_event_handler
- *
- * Callback function to be used as the udi_event_callback when registering
- * as a netdev client.
- * To use it, a client specifies this function as the udi_event_callback
- * to ul_register_client(). The signal dispatcher in
- * unifi_receive_event() will call this function to deliver a signal.
- *
- * Arguments:
- * pcli Pointer to the client instance.
- * signal Pointer to the received signal.
- * signal_len Size of the signal structure in bytes.
- * bulkdata Pointer to structure containing any associated bulk data.
- * dir Direction of the signal. Zero means from host,
- * non-zero means to host.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static void
-netdev_mlme_event_handler(ul_client_t *pcli, const u8 *sig_packed, int sig_len,
- const bulk_data_param_t *bulkdata_o, int dir)
-{
- CSR_SIGNAL signal;
- unifi_priv_t *priv = uf_find_instance(pcli->instance);
- int id, r;
- bulk_data_param_t bulkdata;
-
- /* Just a sanity check */
- if (sig_packed == NULL) {
- return;
- }
-
- /*
- * This copy is to silence a compiler warning about discarding the
- * const qualifier.
- */
- bulkdata = *bulkdata_o;
-
- /* Get the unpacked signal */
- r = read_unpack_signal(sig_packed, &signal);
- if (r) {
- /*
- * The CSR_MLME_CONNECTED_INDICATION_ID has a receiverID=0 so will
- * fall through this case. It is safe to ignore this signal.
- */
- unifi_trace(priv, UDBG1,
- "Netdev - Received unknown signal 0x%.4X.\n",
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN(sig_packed));
- return;
- }
-
- id = signal.SignalPrimitiveHeader.SignalId;
- unifi_trace(priv, UDBG3, "Netdev - Process signal 0x%.4X\n", id);
-
- /*
- * Take the appropriate action for the signal.
- */
- switch (id) {
- case CSR_MA_PACKET_ERROR_INDICATION_ID:
- process_ma_packet_error_ind(priv, &signal, &bulkdata);
- break;
- case CSR_MA_PACKET_INDICATION_ID:
- process_ma_packet_ind(priv, &signal, &bulkdata);
- break;
- case CSR_MA_PACKET_CONFIRM_ID:
- process_ma_packet_cfm(priv, &signal, &bulkdata);
- break;
-#ifdef CSR_SUPPORT_SME
- case CSR_MLME_SET_TIM_CONFIRM_ID:
- /* Handle TIM confirms from FW & set the station record's TIM state appropriately,
- * In case of failures, tries with max_retransmit limit
- */
- uf_handle_tim_cfm(priv, &signal.u.MlmeSetTimConfirm, signal.SignalPrimitiveHeader.ReceiverProcessId);
- break;
-#endif
- case CSR_DEBUG_STRING_INDICATION_ID:
- debug_string_indication(priv, bulkdata.d[0].os_data_ptr, bulkdata.d[0].data_length);
- break;
-
- case CSR_DEBUG_WORD16_INDICATION_ID:
- debug_word16_indication(priv, &signal);
- break;
-
- case CSR_DEBUG_GENERIC_CONFIRM_ID:
- case CSR_DEBUG_GENERIC_INDICATION_ID:
- debug_generic_indication(priv, &signal);
- break;
- default:
- break;
- }
-
-} /* netdev_mlme_event_handler() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_net_get_name
- *
- * Retrieve the name (e.g. eth1) associated with this network device
- *
- * Arguments:
- * dev Pointer to the network device.
- * name Buffer to write name
- * len Size of buffer in bytes
- *
- * Returns:
- * None
- *
- * Notes:
- * ---------------------------------------------------------------------------
- */
-void uf_net_get_name(struct net_device *dev, char *name, int len)
-{
- *name = '\0';
- if (dev) {
- strlcpy(name, dev->name, (len > IFNAMSIZ) ? IFNAMSIZ : len);
- }
-
-} /* uf_net_get_name */
-
-#ifdef CSR_SUPPORT_WEXT
-
-/*
- * ---------------------------------------------------------------------------
- * uf_netdev_event
- *
- * Callback function to handle netdev state changes
- *
- * Arguments:
- * notif Pointer to a notifier_block.
- * event Event prompting notification
- * ptr net_device pointer
- *
- * Returns:
- * None
- *
- * Notes:
- * The event handler is global, and may occur on non-UniFi netdevs.
- * ---------------------------------------------------------------------------
- */
-static int
-uf_netdev_event(struct notifier_block *notif, unsigned long event, void* ptr) {
- struct net_device *netdev = netdev_notifier_info_to_dev(ptr);
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(netdev);
- unifi_priv_t *priv = NULL;
- static const CsrWifiMacAddress broadcast_address = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}};
-
- /* Check that the event is for a UniFi netdev. If it's not, the netdev_priv
- * structure is not safe to use.
- */
- if (uf_find_netdev_priv(interfacePriv) == -1) {
- unifi_trace(NULL, UDBG1, "uf_netdev_event: ignore e=%d, ptr=%p, priv=%p %s\n",
- event, ptr, interfacePriv, netdev->name);
- return 0;
- }
-
- switch(event) {
- case NETDEV_CHANGE:
- priv = interfacePriv->privPtr;
- unifi_trace(priv, UDBG1, "NETDEV_CHANGE: %p %s %s waiting for it\n",
- ptr,
- netdev->name,
- interfacePriv->wait_netdev_change ? "" : "not");
-
- if (interfacePriv->wait_netdev_change) {
- netif_tx_wake_all_queues(priv->netdev[interfacePriv->InterfaceTag]);
- interfacePriv->connected = UnifiConnected;
- interfacePriv->wait_netdev_change = FALSE;
- /* Note: passing the broadcast address here will allow anyone to attempt to join our adhoc network */
- uf_process_rx_pending_queue(priv, UF_UNCONTROLLED_PORT_Q, broadcast_address, 1, interfacePriv->InterfaceTag);
- uf_process_rx_pending_queue(priv, UF_CONTROLLED_PORT_Q, broadcast_address, 1, interfacePriv->InterfaceTag);
- }
- break;
-
- default:
- break;
- }
- return 0;
-}
-
-static struct notifier_block uf_netdev_notifier = {
- .notifier_call = uf_netdev_event,
-};
-#endif /* CSR_SUPPORT_WEXT */
-
-
-static void
- process_amsdu(unifi_priv_t *priv, CSR_SIGNAL *signal, bulk_data_param_t *bulkdata)
-{
- u32 offset;
- u32 length = bulkdata->d[0].data_length;
- u32 subframe_length, subframe_body_length, dot11_hdr_size;
- u8 *ptr;
- bulk_data_param_t subframe_bulkdata;
- u8 *dot11_hdr_ptr = (u8*)bulkdata->d[0].os_data_ptr;
- CsrResult csrResult;
- u16 frameControl;
- u8 *qos_control_ptr;
-
- frameControl = le16_to_cpu(*((u16*)dot11_hdr_ptr));
- qos_control_ptr = dot11_hdr_ptr + (((frameControl & IEEE802_11_FC_TO_DS_MASK) && (frameControl & IEEE802_11_FC_FROM_DS_MASK))?30: 24);
- if(!(*qos_control_ptr & IEEE802_11_QC_A_MSDU_PRESENT)) {
- unifi_trace(priv, UDBG6, "%s: calling unifi_rx()", __FUNCTION__);
- unifi_rx(priv, signal, bulkdata);
- return;
- }
- *qos_control_ptr &= ~(IEEE802_11_QC_A_MSDU_PRESENT);
-
- ptr = qos_control_ptr + 2;
- offset = dot11_hdr_size = ptr - dot11_hdr_ptr;
-
- while(length > (offset + sizeof(struct ethhdr) + sizeof(llc_snap_hdr_t))) {
- subframe_body_length = ntohs(((struct ethhdr*)ptr)->h_proto);
- if(subframe_body_length > IEEE802_11_MAX_DATA_LEN) {
- unifi_error(priv, "%s: bad subframe_body_length = %d\n", __FUNCTION__, subframe_body_length);
- break;
- }
- subframe_length = sizeof(struct ethhdr) + subframe_body_length;
- memset(&subframe_bulkdata, 0, sizeof(bulk_data_param_t));
-
- csrResult = unifi_net_data_malloc(priv, &subframe_bulkdata.d[0], dot11_hdr_size + subframe_body_length);
-
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "%s: unifi_net_data_malloc failed\n", __FUNCTION__);
- break;
- }
-
- memcpy((u8*)subframe_bulkdata.d[0].os_data_ptr, dot11_hdr_ptr, dot11_hdr_size);
-
-
- /* When to DS=0 and from DS=0, address 3 will already have BSSID so no need to re-program */
- if ((frameControl & IEEE802_11_FC_TO_DS_MASK) && !(frameControl & IEEE802_11_FC_FROM_DS_MASK)){
- memcpy((u8*)subframe_bulkdata.d[0].os_data_ptr + IEEE802_11_ADDR3_OFFSET, ((struct ethhdr*)ptr)->h_dest, ETH_ALEN);
- }
- else if (!(frameControl & IEEE802_11_FC_TO_DS_MASK) && (frameControl & IEEE802_11_FC_FROM_DS_MASK)){
- memcpy((u8*)subframe_bulkdata.d[0].os_data_ptr + IEEE802_11_ADDR3_OFFSET,
- ((struct ethhdr*)ptr)->h_source,
- ETH_ALEN);
- }
-
- memcpy((u8*)subframe_bulkdata.d[0].os_data_ptr + dot11_hdr_size,
- ptr + sizeof(struct ethhdr),
- subframe_body_length);
- unifi_trace(priv, UDBG6, "%s: calling unifi_rx. length = %d subframe_length = %d\n", __FUNCTION__, length, subframe_length);
- unifi_rx(priv, signal, &subframe_bulkdata);
-
- subframe_length = (subframe_length + 3)&(~0x3);
- ptr += subframe_length;
- offset += subframe_length;
- }
- unifi_net_data_free(priv, &bulkdata->d[0]);
-}
-
-
-#define SN_TO_INDEX(__ba_session, __sn) (((__sn - __ba_session->start_sn) & 0xFFF) % __ba_session->wind_size)
-
-
-#define ADVANCE_EXPECTED_SN(__ba_session) \
-{ \
- __ba_session->expected_sn++; \
- __ba_session->expected_sn &= 0xFFF; \
-}
-
-#define FREE_BUFFER_SLOT(__ba_session, __index) \
-{ \
- __ba_session->occupied_slots--; \
- __ba_session->buffer[__index].active = FALSE; \
- ADVANCE_EXPECTED_SN(__ba_session); \
-}
-
-static void add_frame_to_ba_complete(unifi_priv_t *priv,
- netInterface_priv_t *interfacePriv,
- frame_desc_struct *frame_desc)
-{
- interfacePriv->ba_complete[interfacePriv->ba_complete_index] = *frame_desc;
- interfacePriv->ba_complete_index++;
-}
-
-
-static void update_expected_sn(unifi_priv_t *priv,
- netInterface_priv_t *interfacePriv,
- ba_session_rx_struct *ba_session,
- u16 sn)
-{
- int i, j;
- u16 gap;
-
- gap = (sn - ba_session->expected_sn) & 0xFFF;
- unifi_trace(priv, UDBG6, "%s: process the frames up to new_expected_sn = %d gap = %d\n", __FUNCTION__, sn, gap);
- for(j = 0; j < gap && j < ba_session->wind_size; j++) {
- i = SN_TO_INDEX(ba_session, ba_session->expected_sn);
- unifi_trace(priv, UDBG6, "%s: process the slot index = %d\n", __FUNCTION__, i);
- if(ba_session->buffer[i].active) {
- add_frame_to_ba_complete(priv, interfacePriv, &ba_session->buffer[i]);
- unifi_trace(priv, UDBG6, "%s: process the frame at index = %d expected_sn = %d\n", __FUNCTION__, i, ba_session->expected_sn);
- FREE_BUFFER_SLOT(ba_session, i);
- } else {
- unifi_trace(priv, UDBG6, "%s: empty slot at index = %d\n", __FUNCTION__, i);
- ADVANCE_EXPECTED_SN(ba_session);
- }
- }
- ba_session->expected_sn = sn;
-}
-
-
-static void complete_ready_sequence(unifi_priv_t *priv,
- netInterface_priv_t *interfacePriv,
- ba_session_rx_struct *ba_session)
-{
- int i;
-
- i = SN_TO_INDEX(ba_session, ba_session->expected_sn);
- while (ba_session->buffer[i].active) {
- add_frame_to_ba_complete(priv, interfacePriv, &ba_session->buffer[i]);
- unifi_trace(priv, UDBG6, "%s: completed stored frame(expected_sn=%d) at i = %d\n", __FUNCTION__, ba_session->expected_sn, i);
- FREE_BUFFER_SLOT(ba_session, i);
- i = SN_TO_INDEX(ba_session, ba_session->expected_sn);
- }
-}
-
-
-void scroll_ba_window(unifi_priv_t *priv,
- netInterface_priv_t *interfacePriv,
- ba_session_rx_struct *ba_session,
- u16 sn)
-{
- if(((sn - ba_session->expected_sn) & 0xFFF) <= 2048) {
- update_expected_sn(priv, interfacePriv, ba_session, sn);
- complete_ready_sequence(priv, interfacePriv, ba_session);
- }
-}
-
-
-static int consume_frame_or_get_buffer_index(unifi_priv_t *priv,
- netInterface_priv_t *interfacePriv,
- ba_session_rx_struct *ba_session,
- u16 sn,
- frame_desc_struct *frame_desc) {
- int i;
- u16 sn_temp;
-
- if(((sn - ba_session->expected_sn) & 0xFFF) <= 2048) {
-
- /* once we are in BA window, set the flag for BA trigger */
- if(!ba_session->trigger_ba_after_ssn){
- ba_session->trigger_ba_after_ssn = TRUE;
- }
-
- sn_temp = ba_session->expected_sn + ba_session->wind_size;
- unifi_trace(priv, UDBG6, "%s: new frame: sn=%d\n", __FUNCTION__, sn);
- if(!(((sn - sn_temp) & 0xFFF) > 2048)) {
- u16 new_expected_sn;
- unifi_trace(priv, UDBG6, "%s: frame is out of window\n", __FUNCTION__);
- sn_temp = (sn - ba_session->wind_size) & 0xFFF;
- new_expected_sn = (sn_temp + 1) & 0xFFF;
- update_expected_sn(priv, interfacePriv, ba_session, new_expected_sn);
- }
- i = -1;
- if (sn == ba_session->expected_sn) {
- unifi_trace(priv, UDBG6, "%s: sn = ba_session->expected_sn = %d\n", __FUNCTION__, sn);
- ADVANCE_EXPECTED_SN(ba_session);
- add_frame_to_ba_complete(priv, interfacePriv, frame_desc);
- } else {
- i = SN_TO_INDEX(ba_session, sn);
- unifi_trace(priv, UDBG6, "%s: sn(%d) != ba_session->expected_sn(%d), i = %d\n", __FUNCTION__, sn, ba_session->expected_sn, i);
- if (ba_session->buffer[i].active) {
- unifi_trace(priv, UDBG6, "%s: free frame at i = %d\n", __FUNCTION__, i);
- i = -1;
- unifi_net_data_free(priv, &frame_desc->bulkdata.d[0]);
- }
- }
- } else {
- i = -1;
- if(!ba_session->trigger_ba_after_ssn){
- unifi_trace(priv, UDBG6, "%s: frame before ssn, pass it up: sn=%d\n", __FUNCTION__, sn);
- add_frame_to_ba_complete(priv, interfacePriv, frame_desc);
- }else{
- unifi_trace(priv, UDBG6, "%s: old frame, drop: sn=%d, expected_sn=%d\n", __FUNCTION__, sn, ba_session->expected_sn);
- unifi_net_data_free(priv, &frame_desc->bulkdata.d[0]);
- }
- }
- return i;
-}
-
-
-
-static void process_ba_frame(unifi_priv_t *priv,
- netInterface_priv_t *interfacePriv,
- ba_session_rx_struct *ba_session,
- frame_desc_struct *frame_desc)
-{
- int i;
- u16 sn = frame_desc->sn;
-
- if (ba_session->timeout) {
- mod_timer(&ba_session->timer, (jiffies + usecs_to_jiffies((ba_session->timeout) * 1024)));
- }
- unifi_trace(priv, UDBG6, "%s: got frame(sn=%d)\n", __FUNCTION__, sn);
-
- i = consume_frame_or_get_buffer_index(priv, interfacePriv, ba_session, sn, frame_desc);
- if(i >= 0) {
- unifi_trace(priv, UDBG6, "%s: store frame(sn=%d) at i = %d\n", __FUNCTION__, sn, i);
- ba_session->buffer[i] = *frame_desc;
- ba_session->buffer[i].recv_time = CsrTimeGet(NULL);
- ba_session->occupied_slots++;
- } else {
- unifi_trace(priv, UDBG6, "%s: frame consumed - sn = %d\n", __FUNCTION__, sn);
- }
- complete_ready_sequence(priv, interfacePriv, ba_session);
-}
-
-
-static void process_ba_complete(unifi_priv_t *priv, netInterface_priv_t *interfacePriv)
-{
- frame_desc_struct *frame_desc;
- u8 i;
-
- for(i = 0; i < interfacePriv->ba_complete_index; i++) {
- frame_desc = &interfacePriv->ba_complete[i];
- unifi_trace(priv, UDBG6, "%s: calling process_amsdu()\n", __FUNCTION__);
- process_amsdu(priv, &frame_desc->signal, &frame_desc->bulkdata);
- }
- interfacePriv->ba_complete_index = 0;
-
-}
-
-
-/* Check if the frames in BA reoder buffer has aged and
- * if so release the frames to upper processes and move
- * the window
- */
-static void check_ba_frame_age_timeout( unifi_priv_t *priv,
- netInterface_priv_t *interfacePriv,
- ba_session_rx_struct *ba_session)
-{
- u32 now;
- u32 age;
- u8 i, j;
- u16 sn_temp;
-
- /* gap is started at 1 because we have buffered frames and
- * hence a minimum gap of 1 exists
- */
- u8 gap=1;
-
- now = CsrTimeGet(NULL);
-
- if (ba_session->occupied_slots)
- {
- /* expected sequence has not arrived so start searching from next
- * sequence number until a frame is available and determine the gap.
- * Check if the frame available has timedout, if so advance the
- * expected sequence number and release the frames
- */
- sn_temp = (ba_session->expected_sn + 1) & 0xFFF;
-
- for(j = 0; j < ba_session->wind_size; j++)
- {
- i = SN_TO_INDEX(ba_session, sn_temp);
-
- if(ba_session->buffer[i].active)
- {
- unifi_trace(priv, UDBG6, "check age at slot index = %d sn = %d recv_time = %u now = %u\n",
- i,
- ba_session->buffer[i].sn,
- ba_session->buffer[i].recv_time,
- now);
-
- if (ba_session->buffer[i].recv_time > now)
- {
- /* timer wrap */
- age = CsrTimeAdd((u32)CsrTimeSub(CSR_SCHED_TIME_MAX, ba_session->buffer[i].recv_time), now);
- }
- else
- {
- age = (u32)CsrTimeSub(now, ba_session->buffer[i].recv_time);
- }
-
- if (age >= CSR_WIFI_BA_MPDU_FRAME_AGE_TIMEOUT)
- {
- unifi_trace(priv, UDBG2, "release the frame at index = %d gap = %d expected_sn = %d sn = %d\n",
- i,
- gap,
- ba_session->expected_sn,
- ba_session->buffer[i].sn);
-
- /* if it has timedout don't wait for missing frames, move the window */
- while (gap--)
- {
- ADVANCE_EXPECTED_SN(ba_session);
- }
- add_frame_to_ba_complete(priv, interfacePriv, &ba_session->buffer[i]);
- FREE_BUFFER_SLOT(ba_session, i);
- complete_ready_sequence(priv, interfacePriv, ba_session);
- }
- break;
-
- }
- else
- {
- /* advance temp sequence number and frame gap */
- sn_temp = (sn_temp + 1) & 0xFFF;
- gap++;
- }
- }
- }
-}
-
-
-static void process_ma_packet_error_ind(unifi_priv_t *priv, CSR_SIGNAL *signal, bulk_data_param_t *bulkdata)
-{
- u16 interfaceTag;
- const CSR_MA_PACKET_ERROR_INDICATION *pkt_err_ind = &signal->u.MaPacketErrorIndication;
- netInterface_priv_t *interfacePriv;
- ba_session_rx_struct *ba_session;
- u8 ba_session_idx = 0;
- CSR_PRIORITY UserPriority;
- CSR_SEQUENCE_NUMBER sn;
-
- interfaceTag = (pkt_err_ind->VirtualInterfaceIdentifier & 0xff);
-
-
- /* Sanity check that the VIF refers to a sensible interface */
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES)
- {
- unifi_error(priv, "%s: MaPacketErrorIndication indication with bad interfaceTag %d\n", __FUNCTION__, interfaceTag);
- return;
- }
-
- interfacePriv = priv->interfacePriv[interfaceTag];
- UserPriority = pkt_err_ind->UserPriority;
- if(UserPriority > 15) {
- unifi_error(priv, "%s: MaPacketErrorIndication indication with bad UserPriority=%d\n", __FUNCTION__, UserPriority);
- }
- sn = pkt_err_ind->SequenceNumber;
-
- down(&priv->ba_mutex);
- /* To find the right ba_session loop through the BA sessions, compare MAC address and tID */
- for (ba_session_idx=0; ba_session_idx < MAX_SUPPORTED_BA_SESSIONS_RX; ba_session_idx++){
- ba_session = interfacePriv->ba_session_rx[ba_session_idx];
- if (ba_session){
- if ((!memcmp(ba_session->macAddress.a, pkt_err_ind->PeerQstaAddress.x, ETH_ALEN)) && (ba_session->tID == UserPriority)){
- if (ba_session->timeout) {
- mod_timer(&ba_session->timer, (jiffies + usecs_to_jiffies((ba_session->timeout) * 1024)));
- }
- scroll_ba_window(priv, interfacePriv, ba_session, sn);
- break;
- }
- }
- }
-
- up(&priv->ba_mutex);
- process_ba_complete(priv, interfacePriv);
-}
-
-
diff --git a/drivers/staging/csr/os.c b/drivers/staging/csr/os.c
deleted file mode 100644
index 37ec59df3581..000000000000
--- a/drivers/staging/csr/os.c
+++ /dev/null
@@ -1,477 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: os.c
- *
- * PURPOSE:
- * Routines to fulfil the OS-abstraction for the HIP lib.
- * It is part of the porting exercise.
- *
- * Copyright (C) 2005-2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-
-/**
- * The HIP lib OS abstraction consists of the implementation
- * of the functions in this file. It is part of the porting exercise.
- */
-
-#include "unifi_priv.h"
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_net_data_malloc
- *
- * Allocate an OS specific net data buffer of "size" bytes.
- * The bulk_data_slot.os_data_ptr must be initialised to point
- * to the buffer allocated. The bulk_data_slot.length must be
- * initialised to the requested size, zero otherwise.
- * The bulk_data_slot.os_net_buf_ptr can be initialised to
- * an OS specific pointer to be used in the unifi_net_data_free().
- *
- *
- * Arguments:
- * ospriv Pointer to device private context struct.
- * bulk_data_slot Pointer to the bulk data structure to initialise.
- * size Size of the buffer to be allocated.
- *
- * Returns:
- * CSR_RESULT_SUCCESS on success, CSR_RESULT_FAILURE otherwise.
- * ---------------------------------------------------------------------------
- */
-CsrResult
-unifi_net_data_malloc(void *ospriv, bulk_data_desc_t *bulk_data_slot, unsigned int size)
-{
- struct sk_buff *skb;
- unifi_priv_t *priv = (unifi_priv_t*)ospriv;
- int rounded_length;
-
- if (priv->card_info.sdio_block_size == 0) {
- unifi_error(priv, "unifi_net_data_malloc: Invalid SDIO block size\n");
- return CSR_RESULT_FAILURE;
- }
-
- rounded_length = (size + priv->card_info.sdio_block_size - 1) & ~(priv->card_info.sdio_block_size - 1);
-
- /*
- * (ETH_HLEN + 2) bytes tailroom for header manipulation
- * CSR_WIFI_ALIGN_BYTES bytes headroom for alignment manipulation
- */
- skb = dev_alloc_skb(rounded_length + 2 + ETH_HLEN + CSR_WIFI_ALIGN_BYTES);
- if (! skb) {
- unifi_error(ospriv, "alloc_skb failed.\n");
- bulk_data_slot->os_net_buf_ptr = NULL;
- bulk_data_slot->net_buf_length = 0;
- bulk_data_slot->os_data_ptr = NULL;
- bulk_data_slot->data_length = 0;
- return CSR_RESULT_FAILURE;
- }
-
- bulk_data_slot->os_net_buf_ptr = (const unsigned char*)skb;
- bulk_data_slot->net_buf_length = rounded_length + 2 + ETH_HLEN + CSR_WIFI_ALIGN_BYTES;
- bulk_data_slot->os_data_ptr = (const void*)skb->data;
- bulk_data_slot->data_length = size;
-
- return CSR_RESULT_SUCCESS;
-} /* unifi_net_data_malloc() */
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_net_data_free
- *
- * Free an OS specific net data buffer.
- * The bulk_data_slot.length must be initialised to 0.
- *
- *
- * Arguments:
- * ospriv Pointer to device private context struct.
- * bulk_data_slot Pointer to the bulk data structure that
- * holds the data to be freed.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void
-unifi_net_data_free(void *ospriv, bulk_data_desc_t *bulk_data_slot)
-{
- struct sk_buff *skb;
- CSR_UNUSED(ospriv);
-
- skb = (struct sk_buff *)bulk_data_slot->os_net_buf_ptr;
- dev_kfree_skb(skb);
-
- bulk_data_slot->net_buf_length = 0;
- bulk_data_slot->data_length = 0;
- bulk_data_slot->os_data_ptr = bulk_data_slot->os_net_buf_ptr = NULL;
-
-} /* unifi_net_data_free() */
-
-
-/*
-* ---------------------------------------------------------------------------
-* unifi_net_dma_align
-*
-* DMA align an OS specific net data buffer.
-* The buffer must be empty.
-*
-*
-* Arguments:
-* ospriv Pointer to device private context struct.
-* bulk_data_slot Pointer to the bulk data structure that
-* holds the data to be aligned.
-*
-* Returns:
-* None.
-* ---------------------------------------------------------------------------
-*/
-CsrResult
-unifi_net_dma_align(void *ospriv, bulk_data_desc_t *bulk_data_slot)
-{
- struct sk_buff *skb;
- unsigned long buf_address;
- int offset;
- unifi_priv_t *priv = (unifi_priv_t*)ospriv;
-
- if ((bulk_data_slot == NULL) || (CSR_WIFI_ALIGN_BYTES == 0)) {
- return CSR_RESULT_SUCCESS;
- }
-
- if ((bulk_data_slot->os_data_ptr == NULL) || (bulk_data_slot->data_length == 0)) {
- return CSR_RESULT_SUCCESS;
- }
-
- buf_address = (unsigned long)(bulk_data_slot->os_data_ptr) & (CSR_WIFI_ALIGN_BYTES - 1);
-
- unifi_trace(priv, UDBG5,
- "unifi_net_dma_align: Allign buffer (0x%p) by %d bytes\n",
- bulk_data_slot->os_data_ptr, buf_address);
-
- offset = CSR_WIFI_ALIGN_BYTES - buf_address;
- if (offset < 0) {
- unifi_error(priv, "unifi_net_dma_align: Failed (offset=%d)\n", offset);
- return CSR_RESULT_FAILURE;
- }
-
- skb = (struct sk_buff*)(bulk_data_slot->os_net_buf_ptr);
- skb_reserve(skb, offset);
- bulk_data_slot->os_net_buf_ptr = (const unsigned char*)skb;
- bulk_data_slot->os_data_ptr = (const void*)(skb->data);
-
- return CSR_RESULT_SUCCESS;
-
-} /* unifi_net_dma_align() */
-
-#ifdef ANDROID_TIMESTAMP
-static volatile unsigned int printk_cpu = UINT_MAX;
-char tbuf[30];
-
-char* print_time(void )
-{
- unsigned long long t;
- unsigned long nanosec_rem;
-
- t = cpu_clock(printk_cpu);
- nanosec_rem = do_div(t, 1000000000);
- sprintf(tbuf, "[%5lu.%06lu] ",
- (unsigned long) t,
- nanosec_rem / 1000);
-
- return tbuf;
-}
-#endif
-
-
-/* Module parameters */
-extern int unifi_debug;
-
-#ifdef UNIFI_DEBUG
-#define DEBUG_BUFFER_SIZE 120
-
-#define FORMAT_TRACE(_s, _len, _args, _fmt) \
- do { \
- va_start(_args, _fmt); \
- _len += vsnprintf(&(_s)[_len], \
- (DEBUG_BUFFER_SIZE - _len), \
- _fmt, _args); \
- va_end(_args); \
- if (_len >= DEBUG_BUFFER_SIZE) { \
- (_s)[DEBUG_BUFFER_SIZE - 2] = '\n'; \
- (_s)[DEBUG_BUFFER_SIZE - 1] = 0; \
- } \
- } while (0)
-
-void
-unifi_error(void* ospriv, const char *fmt, ...)
-{
- unifi_priv_t *priv = (unifi_priv_t*) ospriv;
- char s[DEBUG_BUFFER_SIZE];
- va_list args;
- unsigned int len;
-#ifdef ANDROID_TIMESTAMP
- if (priv != NULL) {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_ERR "%s unifi%d: ", print_time(), priv->instance);
- } else {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_ERR "%s unifi: ", print_time());
- }
-#else
- if (priv != NULL) {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_ERR "unifi%d: ", priv->instance);
- } else {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_ERR "unifi: ");
- }
-#endif /* ANDROID_TIMESTAMP */
- FORMAT_TRACE(s, len, args, fmt);
-
- printk("%s", s);
-}
-
-void
-unifi_warning(void* ospriv, const char *fmt, ...)
-{
- unifi_priv_t *priv = (unifi_priv_t*) ospriv;
- char s[DEBUG_BUFFER_SIZE];
- va_list args;
- unsigned int len;
-
-#ifdef ANDROID_TIMESTAMP
- if (priv != NULL) {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_WARNING "%s unifi%d: ", print_time(), priv->instance);
- } else {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_WARNING "%s unifi: ", print_time());
- }
-#else
- if (priv != NULL) {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_WARNING "unifi%d: ", priv->instance);
- } else {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_WARNING "unifi: ");
- }
-#endif /* ANDROID_TIMESTAMP */
-
- FORMAT_TRACE(s, len, args, fmt);
-
- printk("%s", s);
-}
-
-
-void
-unifi_notice(void* ospriv, const char *fmt, ...)
-{
- unifi_priv_t *priv = (unifi_priv_t*) ospriv;
- char s[DEBUG_BUFFER_SIZE];
- va_list args;
- unsigned int len;
-
-#ifdef ANDROID_TIMESTAMP
- if (priv != NULL) {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_NOTICE "%s unifi%d: ", print_time(), priv->instance);
- } else {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_NOTICE "%s unifi: ", print_time());
- }
-#else
- if (priv != NULL) {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_NOTICE "unifi%d: ", priv->instance);
- } else {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_NOTICE "unifi: ");
- }
-#endif /* ANDROID_TIMESTAMP */
-
- FORMAT_TRACE(s, len, args, fmt);
-
- printk("%s", s);
-}
-
-
-void
-unifi_info(void* ospriv, const char *fmt, ...)
-{
- unifi_priv_t *priv = (unifi_priv_t*) ospriv;
- char s[DEBUG_BUFFER_SIZE];
- va_list args;
- unsigned int len;
-
-#ifdef ANDROID_TIMESTAMP
- if (priv != NULL) {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_INFO "%s unifi%d: ", print_time(), priv->instance);
- } else {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_INFO "%s unifi: ", print_time());
- }
-#else
- if (priv != NULL) {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_INFO "unifi%d: ", priv->instance);
- } else {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_INFO "unifi: ");
- }
-#endif /* ANDROID_TIMESTAMP */
-
- FORMAT_TRACE(s, len, args, fmt);
-
- printk("%s", s);
-}
-
-/* debugging */
-void
-unifi_trace(void* ospriv, int level, const char *fmt, ...)
-{
- unifi_priv_t *priv = (unifi_priv_t*) ospriv;
- char s[DEBUG_BUFFER_SIZE];
- va_list args;
- unsigned int len;
-
- if (unifi_debug >= level) {
-#ifdef ANDROID_TIMESTAMP
- if (priv != NULL) {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_ERR "%s unifi%d: ", print_time(), priv->instance);
- } else {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_ERR "%s unifi: ", print_time());
- }
-#else
- if (priv != NULL) {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_ERR "unifi%d: ", priv->instance);
- } else {
- len = snprintf(s, DEBUG_BUFFER_SIZE, KERN_ERR "unifi: ");
- }
-#endif /* ANDROID_TIMESTAMP */
-
- FORMAT_TRACE(s, len, args, fmt);
-
- printk("%s", s);
- }
-}
-
-#else
-
-void
-unifi_error_nop(void* ospriv, const char *fmt, ...)
-{
-}
-
-void
-unifi_trace_nop(void* ospriv, int level, const char *fmt, ...)
-{
-}
-
-#endif /* UNIFI_DEBUG */
-
-
-/*
- * ---------------------------------------------------------------------------
- *
- * Debugging support.
- *
- * ---------------------------------------------------------------------------
- */
-
-#ifdef UNIFI_DEBUG
-
-/* Memory dump with level filter controlled by unifi_debug */
-void
-unifi_dump(void *ospriv, int level, const char *msg, void *mem, u16 len)
-{
- unifi_priv_t *priv = (unifi_priv_t*) ospriv;
-
- if (unifi_debug >= level) {
-#ifdef ANDROID_TIMESTAMP
- if (priv != NULL) {
- printk(KERN_ERR "%s unifi%d: --- dump: %s ---\n", print_time(), priv->instance, msg ? msg : "");
- } else {
- printk(KERN_ERR "%s unifi: --- dump: %s ---\n", print_time(), msg ? msg : "");
- }
-#else
- if (priv != NULL) {
- printk(KERN_ERR "unifi%d: --- dump: %s ---\n", priv->instance, msg ? msg : "");
- } else {
- printk(KERN_ERR "unifi: --- dump: %s ---\n", msg ? msg : "");
- }
-#endif /* ANDROID_TIMESTAMP */
- dump(mem, len);
-
- if (priv != NULL) {
- printk(KERN_ERR "unifi%d: --- end of dump ---\n", priv->instance);
- } else {
- printk(KERN_ERR "unifi: --- end of dump ---\n");
- }
- }
-}
-
-/* Memory dump that appears all the time, use sparingly */
-void
-dump(void *mem, u16 len)
-{
- int i, col = 0;
- unsigned char *pdata = (unsigned char *)mem;
-#ifdef ANDROID_TIMESTAMP
- printk("timestamp %s \n", print_time());
-#endif /* ANDROID_TIMESTAMP */
- if (mem == NULL) {
- printk("(null dump)\n");
- return;
- }
- for (i = 0; i < len; i++) {
- if (col == 0)
- printk("0x%02X: ", i);
-
- printk(" %02X", pdata[i]);
-
- if (++col == 16) {
- printk("\n");
- col = 0;
- }
- }
- if (col)
- printk("\n");
-} /* dump() */
-
-
-void
-dump16(void *mem, u16 len)
-{
- int i, col=0;
- unsigned short *p = (unsigned short *)mem;
-#ifdef ANDROID_TIMESTAMP
- printk("timestamp %s \n", print_time());
-#endif /* ANDROID_TIMESTAMP */
- for (i = 0; i < len; i+=2) {
- if (col == 0)
- printk("0x%02X: ", i);
-
- printk(" %04X", *p++);
-
- if (++col == 8) {
- printk("\n");
- col = 0;
- }
- }
- if (col)
- printk("\n");
-}
-
-
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-void
-dump_str(void *mem, u16 len)
-{
- int i;
- unsigned char *pdata = (unsigned char *)mem;
-#ifdef ANDROID_TIMESTAMP
- printk("timestamp %s \n", print_time());
-#endif /* ANDROID_TIMESTAMP */
- for (i = 0; i < len; i++) {
- printk("%c", pdata[i]);
- }
- printk("\n");
-
-} /* dump_str() */
-#endif /* CSR_ONLY_NOTES */
-
-
-#endif /* UNIFI_DEBUG */
-
-
-/* ---------------------------------------------------------------------------
- * - End -
- * ------------------------------------------------------------------------- */
diff --git a/drivers/staging/csr/putest.c b/drivers/staging/csr/putest.c
deleted file mode 100644
index 5613cf0e16b0..000000000000
--- a/drivers/staging/csr/putest.c
+++ /dev/null
@@ -1,685 +0,0 @@
-/*
- * ***************************************************************************
- * FILE: putest.c
- *
- * PURPOSE: putest related functions.
- *
- * Copyright (C) 2008-2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ***************************************************************************
- */
-
-#include <linux/vmalloc.h>
-#include <linux/firmware.h>
-
-#include "unifi_priv.h"
-#include "csr_wifi_hip_chiphelper.h"
-
-#define UNIFI_PROC_BOTH 3
-
-
-int unifi_putest_cmd52_read(unifi_priv_t *priv, unsigned char *arg)
-{
- struct unifi_putest_cmd52 cmd52_params;
- u8 *arg_pos;
- unsigned int cmd_param_size;
- int r;
- CsrResult csrResult;
- unsigned char ret_buffer[32];
- u8 *ret_buffer_pos;
- u8 retries;
-
- arg_pos = (u8*)(((unifi_putest_command_t*)arg) + 1);
- if (get_user(cmd_param_size, (int*)arg_pos)) {
- unifi_error(priv,
- "unifi_putest_cmd52_read: Failed to get the argument\n");
- return -EFAULT;
- }
-
- if (cmd_param_size != sizeof(struct unifi_putest_cmd52)) {
- unifi_error(priv,
- "unifi_putest_cmd52_read: cmd52 struct mismatch\n");
- return -EINVAL;
- }
-
- arg_pos += sizeof(unsigned int);
- if (copy_from_user(&cmd52_params,
- (void*)arg_pos,
- sizeof(struct unifi_putest_cmd52))) {
- unifi_error(priv,
- "unifi_putest_cmd52_read: Failed to get the cmd52 params\n");
- return -EFAULT;
- }
-
- unifi_trace(priv, UDBG2, "cmd52r: func=%d addr=0x%x ",
- cmd52_params.funcnum, cmd52_params.addr);
-
- retries = 3;
- CsrSdioClaim(priv->sdio);
- do {
- if (cmd52_params.funcnum == 0) {
- csrResult = CsrSdioF0Read8(priv->sdio, cmd52_params.addr, &cmd52_params.data);
- } else {
- csrResult = CsrSdioRead8(priv->sdio, cmd52_params.addr, &cmd52_params.data);
- }
- } while (--retries && ((csrResult == CSR_SDIO_RESULT_CRC_ERROR) || (csrResult == CSR_SDIO_RESULT_TIMEOUT)));
- CsrSdioRelease(priv->sdio);
-
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv,
- "\nunifi_putest_cmd52_read: Read8() failed (csrResult=0x%x)\n", csrResult);
- return -EFAULT;
- }
- unifi_trace(priv, UDBG2, "data=%d\n", cmd52_params.data);
-
- /* Copy the info to the out buffer */
- *(unifi_putest_command_t*)ret_buffer = UNIFI_PUTEST_CMD52_READ;
- ret_buffer_pos = (u8*)(((unifi_putest_command_t*)ret_buffer) + 1);
- *(unsigned int*)ret_buffer_pos = sizeof(struct unifi_putest_cmd52);
- ret_buffer_pos += sizeof(unsigned int);
- memcpy(ret_buffer_pos, &cmd52_params, sizeof(struct unifi_putest_cmd52));
- ret_buffer_pos += sizeof(struct unifi_putest_cmd52);
-
- r = copy_to_user((void*)arg,
- ret_buffer,
- ret_buffer_pos - ret_buffer);
- if (r) {
- unifi_error(priv,
- "unifi_putest_cmd52_read: Failed to return the data\n");
- return -EFAULT;
- }
-
- return 0;
-}
-
-
-int unifi_putest_cmd52_write(unifi_priv_t *priv, unsigned char *arg)
-{
- struct unifi_putest_cmd52 cmd52_params;
- u8 *arg_pos;
- unsigned int cmd_param_size;
- CsrResult csrResult;
- u8 retries;
-
- arg_pos = (u8*)(((unifi_putest_command_t*)arg) + 1);
- if (get_user(cmd_param_size, (int*)arg_pos)) {
- unifi_error(priv,
- "unifi_putest_cmd52_write: Failed to get the argument\n");
- return -EFAULT;
- }
-
- if (cmd_param_size != sizeof(struct unifi_putest_cmd52)) {
- unifi_error(priv,
- "unifi_putest_cmd52_write: cmd52 struct mismatch\n");
- return -EINVAL;
- }
-
- arg_pos += sizeof(unsigned int);
- if (copy_from_user(&cmd52_params,
- (void*)(arg_pos),
- sizeof(struct unifi_putest_cmd52))) {
- unifi_error(priv,
- "unifi_putest_cmd52_write: Failed to get the cmd52 params\n");
- return -EFAULT;
- }
-
- unifi_trace(priv, UDBG2, "cmd52w: func=%d addr=0x%x data=%d\n",
- cmd52_params.funcnum, cmd52_params.addr, cmd52_params.data);
-
- retries = 3;
- CsrSdioClaim(priv->sdio);
- do {
- if (cmd52_params.funcnum == 0) {
- csrResult = CsrSdioF0Write8(priv->sdio, cmd52_params.addr, cmd52_params.data);
- } else {
- csrResult = CsrSdioWrite8(priv->sdio, cmd52_params.addr, cmd52_params.data);
- }
- } while (--retries && ((csrResult == CSR_SDIO_RESULT_CRC_ERROR) || (csrResult == CSR_SDIO_RESULT_TIMEOUT)));
- CsrSdioRelease(priv->sdio);
-
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv,
- "unifi_putest_cmd52_write: Write8() failed (csrResult=0x%x)\n", csrResult);
- return -EFAULT;
- }
-
- return 0;
-}
-
-int unifi_putest_gp_read16(unifi_priv_t *priv, unsigned char *arg)
-{
- struct unifi_putest_gp_rw16 gp_r16_params;
- u8 *arg_pos;
- unsigned int cmd_param_size;
- int r;
- CsrResult csrResult;
- unsigned char ret_buffer[32];
- u8 *ret_buffer_pos;
-
- arg_pos = (u8*)(((unifi_putest_command_t*)arg) + 1);
- if (get_user(cmd_param_size, (int*)arg_pos)) {
- unifi_error(priv,
- "unifi_putest_gp_read16: Failed to get the argument\n");
- return -EFAULT;
- }
-
- if (cmd_param_size != sizeof(struct unifi_putest_gp_rw16)) {
- unifi_error(priv,
- "unifi_putest_gp_read16: struct mismatch\n");
- return -EINVAL;
- }
-
- arg_pos += sizeof(unsigned int);
- if (copy_from_user(&gp_r16_params,
- (void*)arg_pos,
- sizeof(struct unifi_putest_gp_rw16))) {
- unifi_error(priv,
- "unifi_putest_gp_read16: Failed to get the params\n");
- return -EFAULT;
- }
- CsrSdioClaim(priv->sdio);
- csrResult = unifi_card_read16(priv->card, gp_r16_params.addr, &gp_r16_params.data);
- CsrSdioRelease(priv->sdio);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv,
- "unifi_putest_gp_read16: unifi_card_read16() GP=0x%x failed (csrResult=0x%x)\n", gp_r16_params.addr, csrResult);
- return -EFAULT;
- }
-
- unifi_trace(priv, UDBG2, "gp_r16: GP=0x%08x, data=0x%04x\n", gp_r16_params.addr, gp_r16_params.data);
-
- /* Copy the info to the out buffer */
- *(unifi_putest_command_t*)ret_buffer = UNIFI_PUTEST_GP_READ16;
- ret_buffer_pos = (u8*)(((unifi_putest_command_t*)ret_buffer) + 1);
- *(unsigned int*)ret_buffer_pos = sizeof(struct unifi_putest_gp_rw16);
- ret_buffer_pos += sizeof(unsigned int);
- memcpy(ret_buffer_pos, &gp_r16_params, sizeof(struct unifi_putest_gp_rw16));
- ret_buffer_pos += sizeof(struct unifi_putest_gp_rw16);
-
- r = copy_to_user((void*)arg,
- ret_buffer,
- ret_buffer_pos - ret_buffer);
- if (r) {
- unifi_error(priv,
- "unifi_putest_gp_read16: Failed to return the data\n");
- return -EFAULT;
- }
-
- return 0;
-}
-
-int unifi_putest_gp_write16(unifi_priv_t *priv, unsigned char *arg)
-{
- struct unifi_putest_gp_rw16 gp_w16_params;
- u8 *arg_pos;
- unsigned int cmd_param_size;
- CsrResult csrResult;
-
- arg_pos = (u8*)(((unifi_putest_command_t*)arg) + 1);
- if (get_user(cmd_param_size, (int*)arg_pos)) {
- unifi_error(priv,
- "unifi_putest_gp_write16: Failed to get the argument\n");
- return -EFAULT;
- }
-
- if (cmd_param_size != sizeof(struct unifi_putest_gp_rw16)) {
- unifi_error(priv,
- "unifi_putest_gp_write16: struct mismatch\n");
- return -EINVAL;
- }
-
- arg_pos += sizeof(unsigned int);
- if (copy_from_user(&gp_w16_params,
- (void*)(arg_pos),
- sizeof(struct unifi_putest_gp_rw16))) {
- unifi_error(priv,
- "unifi_putest_gp_write16: Failed to get the params\n");
- return -EFAULT;
- }
-
- unifi_trace(priv, UDBG2, "gp_w16: GP=0x%08x, data=0x%04x\n", gp_w16_params.addr, gp_w16_params.data);
- CsrSdioClaim(priv->sdio);
- csrResult = unifi_card_write16(priv->card, gp_w16_params.addr, gp_w16_params.data);
- CsrSdioRelease(priv->sdio);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv,
- "unifi_putest_gp_write16: unifi_card_write16() GP=%x failed (csrResult=0x%x)\n", gp_w16_params.addr, csrResult);
- return -EFAULT;
- }
-
- return 0;
-}
-
-int unifi_putest_set_sdio_clock(unifi_priv_t *priv, unsigned char *arg)
-{
- int sdio_clock_speed;
- CsrResult csrResult;
-
- if (get_user(sdio_clock_speed, (int*)(((unifi_putest_command_t*)arg) + 1))) {
- unifi_error(priv,
- "unifi_putest_set_sdio_clock: Failed to get the argument\n");
- return -EFAULT;
- }
-
- unifi_trace(priv, UDBG2, "set sdio clock: %d KHz\n", sdio_clock_speed);
-
- CsrSdioClaim(priv->sdio);
- csrResult = CsrSdioMaxBusClockFrequencySet(priv->sdio, sdio_clock_speed * 1000);
- CsrSdioRelease(priv->sdio);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv,
- "unifi_putest_set_sdio_clock: Set clock failed (csrResult=0x%x)\n", csrResult);
- return -EFAULT;
- }
-
- return 0;
-}
-
-
-int unifi_putest_start(unifi_priv_t *priv, unsigned char *arg)
-{
- int r;
- CsrResult csrResult;
- int already_in_test = priv->ptest_mode;
-
- /* Ensure that sme_sys_suspend() doesn't power down the chip because:
- * 1) Power is needed anyway for ptest.
- * 2) The app code uses the START ioctl as a reset, so it gets called
- * multiple times. If the app stops the XAPs, but the power_down/up
- * sequence doesn't actually power down the chip, there can be problems
- * resetting, because part of the power_up sequence disables function 1
- */
- priv->ptest_mode = 1;
-
- /* Suspend the SME and UniFi */
- if (priv->sme_cli) {
- r = sme_sys_suspend(priv);
- if (r) {
- unifi_error(priv,
- "unifi_putest_start: failed to suspend UniFi\n");
- return r;
- }
- }
-
- /* Application may have stopped the XAPs, but they are needed for reset */
- if (already_in_test) {
- CsrSdioClaim(priv->sdio);
- csrResult = unifi_start_processors(priv->card);
- CsrSdioRelease(priv->sdio);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "Failed to start XAPs. Hard reset required.\n");
- }
- } else {
- /* Ensure chip is powered for the case where there's no unifi_helper */
- CsrSdioClaim(priv->sdio);
- csrResult = CsrSdioPowerOn(priv->sdio);
- CsrSdioRelease(priv->sdio);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "CsrSdioPowerOn csrResult = %d\n", csrResult);
- }
- }
- CsrSdioClaim(priv->sdio);
- csrResult = unifi_init(priv->card);
- CsrSdioRelease(priv->sdio);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv,
- "unifi_putest_start: failed to init UniFi\n");
- return CsrHipResultToStatus(csrResult);
- }
-
- return 0;
-}
-
-
-int unifi_putest_stop(unifi_priv_t *priv, unsigned char *arg)
-{
- int r = 0;
- CsrResult csrResult;
-
- /* Application may have stopped the XAPs, but they are needed for reset */
- CsrSdioClaim(priv->sdio);
- csrResult = unifi_start_processors(priv->card);
- CsrSdioRelease(priv->sdio);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "Failed to start XAPs. Hard reset required.\n");
- }
-
- /* PUTEST_STOP is also used to resume the XAPs after SME coredump.
- * Don't power off the chip, leave that to the normal wifi-off which is
- * about to carry on. No need to resume the SME either, as it wasn't suspended.
- */
- if (priv->coredump_mode) {
- priv->coredump_mode = 0;
- return 0;
- }
-
- /* At this point function 1 is enabled and the XAPs are running, so it is
- * safe to let the card power down. Power is restored later, asynchronously,
- * during the wifi_on requested by the SME.
- */
- CsrSdioClaim(priv->sdio);
- CsrSdioPowerOff(priv->sdio);
- CsrSdioRelease(priv->sdio);
-
- /* Resume the SME and UniFi */
- if (priv->sme_cli) {
- r = sme_sys_resume(priv);
- if (r) {
- unifi_error(priv,
- "unifi_putest_stop: failed to resume SME\n");
- }
- }
- priv->ptest_mode = 0;
-
- return r;
-}
-
-
-int unifi_putest_dl_fw(unifi_priv_t *priv, unsigned char *arg)
-{
-#define UF_PUTEST_MAX_FW_FILE_NAME 16
-#define UNIFI_MAX_FW_PATH_LEN 32
- unsigned int fw_name_length;
- unsigned char fw_name[UF_PUTEST_MAX_FW_FILE_NAME+1];
- unsigned char *name_buffer;
- int postfix;
- char fw_path[UNIFI_MAX_FW_PATH_LEN];
- const struct firmware *fw_entry;
- struct dlpriv temp_fw_sta;
- int r;
- CsrResult csrResult;
-
- /* Get the f/w file name length */
- if (get_user(fw_name_length, (unsigned int*)(((unifi_putest_command_t*)arg) + 1))) {
- unifi_error(priv,
- "unifi_putest_dl_fw: Failed to get the length argument\n");
- return -EFAULT;
- }
-
- unifi_trace(priv, UDBG2, "unifi_putest_dl_fw: file name size = %d\n", fw_name_length);
-
- /* Sanity check for the f/w file name length */
- if (fw_name_length > UF_PUTEST_MAX_FW_FILE_NAME) {
- unifi_error(priv,
- "unifi_putest_dl_fw: F/W file name is too long\n");
- return -EINVAL;
- }
-
- /* Get the f/w file name */
- name_buffer = ((unsigned char*)arg) + sizeof(unifi_putest_command_t) + sizeof(unsigned int);
- if (copy_from_user(fw_name, (void*)name_buffer, fw_name_length)) {
- unifi_error(priv, "unifi_putest_dl_fw: Failed to get the file name\n");
- return -EFAULT;
- }
- fw_name[fw_name_length] = '\0';
- unifi_trace(priv, UDBG2, "unifi_putest_dl_fw: file = %s\n", fw_name);
-
- /* Keep the existing f/w to a temp, we need to restore it later */
- temp_fw_sta = priv->fw_sta;
-
- /* Get the putest f/w */
- postfix = priv->instance;
- scnprintf(fw_path, UNIFI_MAX_FW_PATH_LEN, "unifi-sdio-%d/%s",
- postfix, fw_name);
- r = request_firmware(&fw_entry, fw_path, priv->unifi_device);
- if (r == 0) {
- priv->fw_sta.fw_desc = (void *)fw_entry;
- priv->fw_sta.dl_data = fw_entry->data;
- priv->fw_sta.dl_len = fw_entry->size;
- } else {
- unifi_error(priv, "Firmware file not available\n");
- return -EINVAL;
- }
-
- /* Application may have stopped the XAPs, but they are needed for reset */
- CsrSdioClaim(priv->sdio);
- csrResult = unifi_start_processors(priv->card);
- CsrSdioRelease(priv->sdio);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "Failed to start XAPs. Hard reset required.\n");
- }
-
- /* Download the f/w. On UF6xxx this will cause the f/w file to convert
- * into patch format and download via the ROM boot loader
- */
- CsrSdioClaim(priv->sdio);
- csrResult = unifi_download(priv->card, 0x0c00);
- CsrSdioRelease(priv->sdio);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv,
- "unifi_putest_dl_fw: failed to download the f/w\n");
- goto free_fw;
- }
-
- /* Free the putest f/w... */
-free_fw:
- uf_release_firmware(priv, &priv->fw_sta);
- /* ... and restore the original f/w */
- priv->fw_sta = temp_fw_sta;
-
- return CsrHipResultToStatus(csrResult);
-}
-
-
-int unifi_putest_dl_fw_buff(unifi_priv_t *priv, unsigned char *arg)
-{
- unsigned int fw_length;
- unsigned char *fw_buf = NULL;
- unsigned char *fw_user_ptr;
- struct dlpriv temp_fw_sta;
- CsrResult csrResult;
-
- /* Get the f/w buffer length */
- if (get_user(fw_length, (unsigned int*)(((unifi_putest_command_t*)arg) + 1))) {
- unifi_error(priv,
- "unifi_putest_dl_fw_buff: Failed to get the length arg\n");
- return -EFAULT;
- }
-
- unifi_trace(priv, UDBG2, "unifi_putest_dl_fw_buff: size = %d\n", fw_length);
-
- /* Sanity check for the buffer length */
- if (fw_length == 0 || fw_length > 0xfffffff) {
- unifi_error(priv,
- "unifi_putest_dl_fw_buff: buffer length bad %u\n", fw_length);
- return -EINVAL;
- }
-
- /* Buffer for kernel copy of the f/w image */
- fw_buf = kmalloc(fw_length, GFP_KERNEL);
- if (!fw_buf) {
- unifi_error(priv, "unifi_putest_dl_fw_buff: malloc fail\n");
- return -ENOMEM;
- }
-
- /* Get the f/w image */
- fw_user_ptr = ((unsigned char*)arg) + sizeof(unifi_putest_command_t) + sizeof(unsigned int);
- if (copy_from_user(fw_buf, (void*)fw_user_ptr, fw_length)) {
- unifi_error(priv, "unifi_putest_dl_fw_buff: Failed to get the buffer\n");
- kfree(fw_buf);
- return -EFAULT;
- }
-
- /* Save the existing f/w to a temp, we need to restore it later */
- temp_fw_sta = priv->fw_sta;
-
- /* Setting fw_desc NULL indicates to the core that no f/w file was loaded
- * via the kernel request_firmware() mechanism. This indicates to the core
- * that it shouldn't call release_firmware() after the download is done.
- */
- priv->fw_sta.fw_desc = NULL; /* No OS f/w resource */
- priv->fw_sta.dl_data = fw_buf;
- priv->fw_sta.dl_len = fw_length;
-
- /* Application may have stopped the XAPs, but they are needed for reset */
- CsrSdioClaim(priv->sdio);
- csrResult = unifi_start_processors(priv->card);
- CsrSdioRelease(priv->sdio);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "Failed to start XAPs. Hard reset required.\n");
- }
-
- /* Download the f/w. On UF6xxx this will cause the f/w file to convert
- * into patch format and download via the ROM boot loader
- */
- CsrSdioClaim(priv->sdio);
- csrResult = unifi_download(priv->card, 0x0c00);
- CsrSdioRelease(priv->sdio);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv,
- "unifi_putest_dl_fw_buff: failed to download the f/w\n");
- goto free_fw;
- }
-
-free_fw:
- /* Finished with the putest f/w, so restore the station f/w */
- priv->fw_sta = temp_fw_sta;
- kfree(fw_buf);
-
- return CsrHipResultToStatus(csrResult);
-}
-
-
-int unifi_putest_coredump_prepare(unifi_priv_t *priv, unsigned char *arg)
-{
- u16 data_u16;
- s32 i;
- CsrResult r;
-
- unifi_info(priv, "Preparing for SDIO coredump\n");
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE)
- unifi_debug_buf_dump();
-#endif
-
- /* Sanity check that userspace hasn't called a PUTEST_START, because that
- * would have reset UniFi, potentially power cycling it and losing context
- */
- if (priv->ptest_mode) {
- unifi_error(priv, "PUTEST_START shouldn't be used before a coredump\n");
- }
-
- /* Flag that the userspace has requested coredump. Even if this preparation
- * fails, the SME will call PUTEST_STOP to tidy up.
- */
- priv->coredump_mode = 1;
-
- for (i = 0; i < 3; i++) {
- CsrSdioClaim(priv->sdio);
- r = CsrSdioRead16(priv->sdio, CHIP_HELPER_UNIFI_GBL_CHIP_VERSION*2, &data_u16);
- CsrSdioRelease(priv->sdio);
- if (r != CSR_RESULT_SUCCESS) {
- unifi_info(priv, "Failed to read chip version! Try %d\n", i);
-
- /* First try, re-enable function which may have been disabled by f/w panic */
- if (i == 0) {
- unifi_info(priv, "Try function enable\n");
- CsrSdioClaim(priv->sdio);
- r = CsrSdioFunctionEnable(priv->sdio);
- CsrSdioRelease(priv->sdio);
- if (r != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "CsrSdioFunctionEnable failed %d\n", r);
- }
- continue;
- }
-
- /* Subsequent tries, reset */
-
- /* Set clock speed low */
- CsrSdioClaim(priv->sdio);
- r = CsrSdioMaxBusClockFrequencySet(priv->sdio, UNIFI_SDIO_CLOCK_SAFE_HZ);
- CsrSdioRelease(priv->sdio);
- if (r != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "CsrSdioMaxBusClockFrequencySet() failed %d\n", r);
- }
-
- /* Card software reset */
- CsrSdioClaim(priv->sdio);
- r = unifi_card_hard_reset(priv->card);
- CsrSdioRelease(priv->sdio);
- if (r != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "unifi_card_hard_reset() failed %d\n", r);
- }
- } else {
- unifi_info(priv, "Read chip version of 0x%04x\n", data_u16);
- break;
- }
- }
-
- if (r != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "Failed to prepare chip\n");
- return -EIO;
- }
-
- /* Stop the XAPs for coredump. The PUTEST_STOP must be called, e.g. at
- * Raw SDIO deinit, to resume them.
- */
- CsrSdioClaim(priv->sdio);
- r = unifi_card_stop_processor(priv->card, UNIFI_PROC_BOTH);
- CsrSdioRelease(priv->sdio);
- if (r != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "Failed to stop processors\n");
- }
-
- return 0;
-}
-
-int unifi_putest_cmd52_block_read(unifi_priv_t *priv, unsigned char *arg)
-{
- struct unifi_putest_block_cmd52_r block_cmd52;
- u8 *arg_pos;
- unsigned int cmd_param_size;
- CsrResult r;
- u8 *block_local_buffer;
-
- arg_pos = (u8*)(((unifi_putest_command_t*)arg) + 1);
- if (get_user(cmd_param_size, (int*)arg_pos)) {
- unifi_error(priv,
- "cmd52r_block: Failed to get the argument\n");
- return -EFAULT;
- }
-
- if (cmd_param_size != sizeof(struct unifi_putest_block_cmd52_r)) {
- unifi_error(priv,
- "cmd52r_block: cmd52 struct mismatch\n");
- return -EINVAL;
- }
-
- arg_pos += sizeof(unsigned int);
- if (copy_from_user(&block_cmd52,
- (void*)arg_pos,
- sizeof(struct unifi_putest_block_cmd52_r))) {
- unifi_error(priv,
- "cmd52r_block: Failed to get the cmd52 params\n");
- return -EFAULT;
- }
-
- unifi_trace(priv, UDBG2, "cmd52r_block: func=%d addr=0x%x len=0x%x ",
- block_cmd52.funcnum, block_cmd52.addr, block_cmd52.length);
-
- block_local_buffer = vmalloc(block_cmd52.length);
- if (block_local_buffer == NULL) {
- unifi_error(priv, "cmd52r_block: Failed to allocate buffer\n");
- return -ENOMEM;
- }
-
- CsrSdioClaim(priv->sdio);
- r = unifi_card_readn(priv->card, block_cmd52.addr, block_local_buffer, block_cmd52.length);
- CsrSdioRelease(priv->sdio);
- if (r != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "cmd52r_block: unifi_readn failed\n");
- return -EIO;
- }
-
- if (copy_to_user((void*)block_cmd52.data,
- block_local_buffer,
- block_cmd52.length)) {
- unifi_error(priv,
- "cmd52r_block: Failed to return the data\n");
- return -EFAULT;
- }
-
- return 0;
-}
diff --git a/drivers/staging/csr/sdio_events.c b/drivers/staging/csr/sdio_events.c
deleted file mode 100644
index 2a80b9eb0200..000000000000
--- a/drivers/staging/csr/sdio_events.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: sdio_events.c
- *
- * PURPOSE:
- * Process the events received by the SDIO glue layer.
- * Optional part of the porting exercise.
- *
- * Copyright (C) 2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-#include "unifi_priv.h"
-
-
-/*
- * Porting Notes:
- * There are two ways to support the suspend/resume system events in a driver.
- * In some operating systems these events are delivered to the OS driver
- * directly from the system. In this case, the OS driver needs to pass these
- * events to the API described in the CSR SDIO Abstration API document.
- * In Linux, and other embedded operating systems, the suspend/resume events
- * come from the SDIO driver. In this case, simply get these events in the
- * SDIO glue layer and notify the OS layer.
- *
- * In either case, typically, the events are processed by the SME.
- * Use the unifi_sys_suspend_ind() and unifi_sys_resume_ind() to pass
- * the events to the SME.
- */
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_suspend
- *
- * Handles a suspend request from the SDIO driver.
- *
- * Arguments:
- * ospriv Pointer to OS driver context.
- *
- * ---------------------------------------------------------------------------
- */
-void unifi_suspend(void *ospriv)
-{
- unifi_priv_t *priv = ospriv;
- int interfaceTag=0;
-
- /* For powered suspend, tell the resume's wifi_on() not to reinit UniFi */
- priv->wol_suspend = (enable_wol == UNIFI_WOL_OFF) ? FALSE : TRUE;
-
- unifi_trace(priv, UDBG1, "unifi_suspend: wol_suspend %d, enable_wol %d",
- priv->wol_suspend, enable_wol );
-
- /* Stop network traffic. */
- /* need to stop all the netdevices*/
- for( interfaceTag=0;interfaceTag<CSR_WIFI_NUM_INTERFACES;interfaceTag++)
- {
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- if (interfacePriv->netdev_registered == 1)
- {
- if( priv->wol_suspend ) {
- unifi_trace(priv, UDBG1, "unifi_suspend: Don't netif_carrier_off");
- } else {
- unifi_trace(priv, UDBG1, "unifi_suspend: netif_carrier_off");
- netif_carrier_off(priv->netdev[interfaceTag]);
- }
- netif_tx_stop_all_queues(priv->netdev[interfaceTag]);
- }
- }
-
- unifi_trace(priv, UDBG1, "unifi_suspend: suspend SME");
-
- sme_sys_suspend(priv);
-
-} /* unifi_suspend() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_resume
- *
- * Handles a resume request from the SDIO driver.
- *
- * Arguments:
- * ospriv Pointer to OS driver context.
- *
- * ---------------------------------------------------------------------------
- */
-void unifi_resume(void *ospriv)
-{
- unifi_priv_t *priv = ospriv;
- int interfaceTag=0;
- int r;
- int wol = priv->wol_suspend;
-
- unifi_trace(priv, UDBG1, "unifi_resume: resume SME, enable_wol=%d", enable_wol);
-
- /* The resume causes wifi-on which will re-enable the BH and reinstall the ISR */
- r = sme_sys_resume(priv);
- if (r) {
- unifi_error(priv, "Failed to resume UniFi\n");
- }
-
- /* Resume the network interfaces. For the cold resume case, this will
- * happen upon reconnection.
- */
- if (wol) {
- unifi_trace(priv, UDBG1, "unifi_resume: try to enable carrier");
-
- /* need to start all the netdevices*/
- for( interfaceTag=0;interfaceTag<CSR_WIFI_NUM_INTERFACES;interfaceTag++) {
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-
- unifi_trace(priv, UDBG1, "unifi_resume: interfaceTag %d netdev_registered %d mode %d\n",
- interfaceTag, interfacePriv->netdev_registered, interfacePriv->interfaceMode);
-
- if (interfacePriv->netdev_registered == 1)
- {
- netif_carrier_on(priv->netdev[interfaceTag]);
- netif_tx_start_all_queues(priv->netdev[interfaceTag]);
- }
- }
-
- /* Kick the BH thread (with reason=host) to poll for data that may have
- * arrived during a powered suspend. This caters for the case where the SME
- * doesn't interact with the chip (e.g install autonomous scans) during resume.
- */
- unifi_send_signal(priv->card, NULL, 0, NULL);
- }
-
-} /* unifi_resume() */
-
diff --git a/drivers/staging/csr/sdio_mmc.c b/drivers/staging/csr/sdio_mmc.c
deleted file mode 100644
index 2b503c23efae..000000000000
--- a/drivers/staging/csr/sdio_mmc.c
+++ /dev/null
@@ -1,1288 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- *
- * FILE: sdio_mmc.c
- *
- * PURPOSE: SDIO driver interface for generic MMC stack.
- *
- * Copyright (C) 2008-2009 by Cambridge Silicon Radio Ltd.
- *
- * ---------------------------------------------------------------------------
- */
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/kernel.h>
-#include <linux/mutex.h>
-#include <linux/gfp.h>
-#include <linux/mmc/core.h>
-#include <linux/mmc/card.h>
-#include <linux/mmc/host.h>
-#include <linux/mmc/sdio_func.h>
-#include <linux/mmc/sdio_ids.h>
-#include <linux/mmc/sdio.h>
-#include <linux/suspend.h>
-
-#include "unifi_priv.h"
-
-#ifdef ANDROID_BUILD
-struct wake_lock unifi_sdio_wake_lock; /* wakelock to prevent suspend while resuming */
-#endif
-
-static CsrSdioFunctionDriver *sdio_func_drv;
-
-#ifdef CONFIG_PM
-static int uf_sdio_mmc_power_event(struct notifier_block *this, unsigned long event, void *ptr);
-#endif
-
-/*
- * We need to keep track of the power on/off because we can not call
- * mmc_power_restore_host() when the card is already powered.
- * Even then, we need to patch the MMC driver to add a power_restore handler
- * in the mmc_sdio_ops structure. If the MMC driver before 2.6.37 is not patched,
- * mmc_power_save_host() and mmc_power_restore_host() are no-ops in the kernel,
- * returning immediately (at least on x86).
- */
-static int card_is_powered = 1;
-
-/* MMC uses ENOMEDIUM to indicate card gone away */
-
-static CsrResult
-ConvertSdioToCsrSdioResult(int r)
-{
- CsrResult csrResult = CSR_RESULT_FAILURE;
-
- switch (r) {
- case 0:
- csrResult = CSR_RESULT_SUCCESS;
- break;
- case -EIO:
- case -EILSEQ:
- csrResult = CSR_SDIO_RESULT_CRC_ERROR;
- break;
- /* Timeout errors */
- case -ETIMEDOUT:
- case -EBUSY:
- csrResult = CSR_SDIO_RESULT_TIMEOUT;
- break;
- case -ENODEV:
- case -ENOMEDIUM:
- csrResult = CSR_SDIO_RESULT_NO_DEVICE;
- break;
- case -EINVAL:
- csrResult = CSR_SDIO_RESULT_INVALID_VALUE;
- break;
- case -ENOMEM:
- case -ENOSYS:
- case -ERANGE:
- case -ENXIO:
- csrResult = CSR_RESULT_FAILURE;
- break;
- default:
- unifi_warning(NULL, "Unrecognised SDIO error code: %d\n", r);
- break;
- }
-
- return csrResult;
-}
-
-
-static int
-csr_io_rw_direct(struct mmc_card *card, int write, uint8_t fn,
- uint32_t addr, uint8_t in, uint8_t* out)
-{
- struct mmc_command cmd;
- int err;
-
- BUG_ON(!card);
- BUG_ON(fn > 7);
-
- memset(&cmd, 0, sizeof(struct mmc_command));
-
- cmd.opcode = SD_IO_RW_DIRECT;
- cmd.arg = write ? 0x80000000 : 0x00000000;
- cmd.arg |= fn << 28;
- cmd.arg |= (write && out) ? 0x08000000 : 0x00000000;
- cmd.arg |= addr << 9;
- cmd.arg |= in;
- cmd.flags = MMC_RSP_SPI_R5 | MMC_RSP_R5 | MMC_CMD_AC;
-
- err = mmc_wait_for_cmd(card->host, &cmd, 0);
- if (err)
- return err;
-
- /* this function is not exported, so we will need to sort it out here
- * for now, lets hard code it to sdio */
- if (0) {
- /* old arg (mmc_host_is_spi(card->host)) { */
- /* host driver already reported errors */
- } else {
- if (cmd.resp[0] & R5_ERROR) {
- printk(KERN_ERR "%s: r5 error 0x%02x\n",
- __FUNCTION__, cmd.resp[0]);
- return -EIO;
- }
- if (cmd.resp[0] & R5_FUNCTION_NUMBER)
- return -EINVAL;
- if (cmd.resp[0] & R5_OUT_OF_RANGE)
- return -ERANGE;
- }
-
- if (out) {
- if (0) { /* old argument (mmc_host_is_spi(card->host)) */
- *out = (cmd.resp[0] >> 8) & 0xFF;
- }
- else {
- *out = cmd.resp[0] & 0xFF;
- }
- }
-
- return CSR_RESULT_SUCCESS;
-}
-
-
-CsrResult
-CsrSdioRead8(CsrSdioFunction *function, u32 address, u8 *data)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int err = 0;
-
- _sdio_claim_host(func);
- *data = sdio_readb(func, address, &err);
- _sdio_release_host(func);
-
- if (err) {
- return ConvertSdioToCsrSdioResult(err);
- }
-
- return CSR_RESULT_SUCCESS;
-} /* CsrSdioRead8() */
-
-CsrResult
-CsrSdioWrite8(CsrSdioFunction *function, u32 address, u8 data)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int err = 0;
-
- _sdio_claim_host(func);
- sdio_writeb(func, data, address, &err);
- _sdio_release_host(func);
-
- if (err) {
- return ConvertSdioToCsrSdioResult(err);
- }
-
- return CSR_RESULT_SUCCESS;
-} /* CsrSdioWrite8() */
-
-CsrResult
-CsrSdioRead16(CsrSdioFunction *function, u32 address, u16 *data)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int err;
- uint8_t b0, b1;
-
- _sdio_claim_host(func);
- b0 = sdio_readb(func, address, &err);
- if (err) {
- _sdio_release_host(func);
- return ConvertSdioToCsrSdioResult(err);
- }
-
- b1 = sdio_readb(func, address+1, &err);
- if (err) {
- _sdio_release_host(func);
- return ConvertSdioToCsrSdioResult(err);
- }
- _sdio_release_host(func);
-
- *data = ((uint16_t)b1 << 8) | b0;
-
- return CSR_RESULT_SUCCESS;
-} /* CsrSdioRead16() */
-
-
-CsrResult
-CsrSdioWrite16(CsrSdioFunction *function, u32 address, u16 data)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int err;
- uint8_t b0, b1;
-
- _sdio_claim_host(func);
- b1 = (data >> 8) & 0xFF;
- sdio_writeb(func, b1, address+1, &err);
- if (err) {
- _sdio_release_host(func);
- return ConvertSdioToCsrSdioResult(err);
- }
-
- b0 = data & 0xFF;
- sdio_writeb(func, b0, address, &err);
- if (err) {
- _sdio_release_host(func);
- return ConvertSdioToCsrSdioResult(err);
- }
-
- _sdio_release_host(func);
- return CSR_RESULT_SUCCESS;
-} /* CsrSdioWrite16() */
-
-
-CsrResult
-CsrSdioF0Read8(CsrSdioFunction *function, u32 address, u8 *data)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int err = 0;
-
- _sdio_claim_host(func);
-#ifdef MMC_QUIRK_LENIENT_FN0
- *data = sdio_f0_readb(func, address, &err);
-#else
- err = csr_io_rw_direct(func->card, 0, 0, address, 0, data);
-#endif
- _sdio_release_host(func);
-
- if (err) {
- return ConvertSdioToCsrSdioResult(err);
- }
-
- return CSR_RESULT_SUCCESS;
-} /* CsrSdioF0Read8() */
-
-CsrResult
-CsrSdioF0Write8(CsrSdioFunction *function, u32 address, u8 data)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int err = 0;
-
- _sdio_claim_host(func);
-#ifdef MMC_QUIRK_LENIENT_FN0
- sdio_f0_writeb(func, data, address, &err);
-#else
- err = csr_io_rw_direct(func->card, 1, 0, address, data, NULL);
-#endif
- _sdio_release_host(func);
-
- if (err) {
- return ConvertSdioToCsrSdioResult(err);
- }
-
- return CSR_RESULT_SUCCESS;
-} /* CsrSdioF0Write8() */
-
-
-CsrResult
-CsrSdioRead(CsrSdioFunction *function, u32 address, void *data, u32 length)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int err;
-
- _sdio_claim_host(func);
- err = sdio_readsb(func, data, address, length);
- _sdio_release_host(func);
-
- if (err) {
- return ConvertSdioToCsrSdioResult(err);
- }
-
- return CSR_RESULT_SUCCESS;
-} /* CsrSdioRead() */
-
-CsrResult
-CsrSdioWrite(CsrSdioFunction *function, u32 address, const void *data, u32 length)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int err;
-
- _sdio_claim_host(func);
- err = sdio_writesb(func, address, (void*)data, length);
- _sdio_release_host(func);
-
- if (err) {
- return ConvertSdioToCsrSdioResult(err);
- }
-
- return CSR_RESULT_SUCCESS;
-} /* CsrSdioWrite() */
-
-
-static int
-csr_sdio_enable_hs(struct mmc_card *card)
-{
- int ret;
- u8 speed;
-
- if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED)) {
- /* We've asked for HS clock rates, but controller doesn't
- * claim to support it. We should limit the clock
- * to 25MHz via module parameter.
- */
- printk(KERN_INFO "unifi: request HS but not MMC_CAP_SD_HIGHSPEED");
- return 0;
- }
-
- if (!card->cccr.high_speed)
- return 0;
-
-#if 1
- ret = csr_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
- if (ret)
- return ret;
-
- speed |= SDIO_SPEED_EHS;
-#else
- /* Optimisation: Eliminate read by always assuming SHS and that reserved bits can be zero */
- speed = SDIO_SPEED_EHS | SDIO_SPEED_SHS;
-#endif
-
- ret = csr_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL);
- if (ret)
- return ret;
-
- mmc_card_set_highspeed(card);
- card->host->ios.timing = MMC_TIMING_SD_HS;
- card->host->ops->set_ios(card->host, &card->host->ios);
-
- return 0;
-}
-
-static int
-csr_sdio_disable_hs(struct mmc_card *card)
-{
- int ret;
- u8 speed;
-
- if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED))
- return 0;
-
- if (!card->cccr.high_speed)
- return 0;
-#if 1
- ret = csr_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
- if (ret)
- return ret;
-
- speed &= ~SDIO_SPEED_EHS;
-#else
- /* Optimisation: Eliminate read by always assuming SHS and that reserved bits can be zero */
- speed = SDIO_SPEED_SHS; /* clear SDIO_SPEED_EHS */
-#endif
-
- ret = csr_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL);
- if (ret)
- return ret;
-
- card->state &= ~MMC_STATE_HIGHSPEED;
- card->host->ios.timing = MMC_TIMING_LEGACY;
- card->host->ops->set_ios(card->host, &card->host->ios);
-
- return 0;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * CsrSdioMaxBusClockFrequencySet
- *
- * Set the maximum SDIO bus clock speed to use.
- *
- * Arguments:
- * sdio SDIO context pointer
- * maxFrequency maximum clock speed in Hz
- *
- * Returns:
- * an error code.
- * ---------------------------------------------------------------------------
- */
-CsrResult
-CsrSdioMaxBusClockFrequencySet(CsrSdioFunction *function, u32 maxFrequency)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- struct mmc_host *host = func->card->host;
- struct mmc_ios *ios = &host->ios;
- unsigned int max_hz;
- int err;
- u32 max_khz = maxFrequency/1000;
-
- if (!max_khz || max_khz > sdio_clock) {
- max_khz = sdio_clock;
- }
-
- _sdio_claim_host(func);
- max_hz = 1000 * max_khz;
- if (max_hz > host->f_max) {
- max_hz = host->f_max;
- }
-
- if (max_hz > 25000000) {
- err = csr_sdio_enable_hs(func->card);
- } else {
- err = csr_sdio_disable_hs(func->card);
- }
- if (err) {
- printk(KERN_ERR "SDIO warning: Failed to configure SDIO clock mode\n");
- _sdio_release_host(func);
- return CSR_RESULT_SUCCESS;
- }
-
- ios->clock = max_hz;
- host->ops->set_ios(host, ios);
-
- _sdio_release_host(func);
-
- return CSR_RESULT_SUCCESS;
-} /* CsrSdioMaxBusClockFrequencySet() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * CsrSdioInterruptEnable
- * CsrSdioInterruptDisable
- *
- * Enable or disable the SDIO interrupt.
- * The driver disables the SDIO interrupt until the i/o thread can
- * process it.
- * The SDIO interrupt can be disabled by modifying the SDIO_INT_ENABLE
- * register in the Card Common Control Register block, but this requires
- * two CMD52 operations. A better solution is to mask the interrupt at
- * the host controller.
- *
- * Arguments:
- * sdio SDIO context pointer
- *
- * Returns:
- * Zero on success or a UniFi driver error code.
- *
- * ---------------------------------------------------------------------------
- */
-CsrResult
-CsrSdioInterruptEnable(CsrSdioFunction *function)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int err = 0;
-
-#ifdef CSR_CONFIG_MMC_INT_BYPASS_KSOFTIRQD
- sdio_unblock_card_irq(func);
-#else
- _sdio_claim_host(func);
- /* Write the Int Enable in CCCR block */
-#ifdef MMC_QUIRK_LENIENT_FN0
- sdio_f0_writeb(func, 0x3, SDIO_CCCR_IENx, &err);
-#else
- err = csr_io_rw_direct(func->card, 1, 0, SDIO_CCCR_IENx, 0x03, NULL);
-#endif
- _sdio_release_host(func);
-
- if (err) {
- printk(KERN_ERR "unifi: %s: error %d writing IENx\n", __FUNCTION__, err);
- return ConvertSdioToCsrSdioResult(err);
- }
-#endif
- return CSR_RESULT_SUCCESS;
-} /* CsrSdioInterruptEnable() */
-
-CsrResult
-CsrSdioInterruptDisable(CsrSdioFunction *function)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int err = 0;
-
-#ifdef CSR_CONFIG_MMC_INT_BYPASS_KSOFTIRQD
- sdio_block_card_irq(func);
-#else
- _sdio_claim_host(func);
- /* Write the Int Enable in CCCR block */
-#ifdef MMC_QUIRK_LENIENT_FN0
- sdio_f0_writeb(func, 0, SDIO_CCCR_IENx, &err);
-#else
- err = csr_io_rw_direct(func->card, 1, 0, SDIO_CCCR_IENx, 0x00, NULL);
-#endif
- _sdio_release_host(func);
-
- if (err) {
- printk(KERN_ERR "unifi: %s: error %d writing IENx\n", __FUNCTION__, err);
- return ConvertSdioToCsrSdioResult(err);
- }
-#endif
- return CSR_RESULT_SUCCESS;
-} /* CsrSdioInterruptDisable() */
-
-
-void CsrSdioInterruptAcknowledge(CsrSdioFunction *function)
-{
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * CsrSdioFunctionEnable
- *
- * Enable i/o on function 1.
- *
- * Arguments:
- * sdio SDIO context pointer
- *
- * Returns:
- * UniFi driver error code.
- * ---------------------------------------------------------------------------
- */
-CsrResult
-CsrSdioFunctionEnable(CsrSdioFunction *function)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int err;
-
- /* Enable UniFi function 1 (the 802.11 part). */
- _sdio_claim_host(func);
- err = sdio_enable_func(func);
- _sdio_release_host(func);
- if (err) {
- unifi_error(NULL, "Failed to enable SDIO function %d\n", func->num);
- }
-
- return ConvertSdioToCsrSdioResult(err);
-} /* CsrSdioFunctionEnable() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * CsrSdioFunctionDisable
- *
- * Enable i/o on function 1.
- *
- * Arguments:
- * sdio SDIO context pointer
- *
- * Returns:
- * UniFi driver error code.
- * ---------------------------------------------------------------------------
- */
-CsrResult
-CsrSdioFunctionDisable(CsrSdioFunction *function)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int err;
-
- /* Disable UniFi function 1 (the 802.11 part). */
- _sdio_claim_host(func);
- err = sdio_disable_func(func);
- _sdio_release_host(func);
- if (err) {
- unifi_error(NULL, "Failed to disable SDIO function %d\n", func->num);
- }
-
- return ConvertSdioToCsrSdioResult(err);
-} /* CsrSdioFunctionDisable() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * CsrSdioFunctionActive
- *
- * No-op as the bus goes to an active state at the start of every
- * command.
- *
- * Arguments:
- * sdio SDIO context pointer
- * ---------------------------------------------------------------------------
- */
-void
-CsrSdioFunctionActive(CsrSdioFunction *function)
-{
-} /* CsrSdioFunctionActive() */
-
-/*
- * ---------------------------------------------------------------------------
- * CsrSdioFunctionIdle
- *
- * Set the function as idle.
- *
- * Arguments:
- * sdio SDIO context pointer
- * ---------------------------------------------------------------------------
- */
-void
-CsrSdioFunctionIdle(CsrSdioFunction *function)
-{
-} /* CsrSdioFunctionIdle() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * CsrSdioPowerOn
- *
- * Power on UniFi.
- *
- * Arguments:
- * sdio SDIO context pointer
- * ---------------------------------------------------------------------------
- */
-CsrResult
-CsrSdioPowerOn(CsrSdioFunction *function)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- struct mmc_host *host = func->card->host;
-
- _sdio_claim_host(func);
- if (!card_is_powered) {
- mmc_power_restore_host(host);
- card_is_powered = 1;
- } else {
- printk(KERN_INFO "SDIO: Skip power on; card is already powered.\n");
- }
- _sdio_release_host(func);
-
- return CSR_RESULT_SUCCESS;
-} /* CsrSdioPowerOn() */
-
-/*
- * ---------------------------------------------------------------------------
- * CsrSdioPowerOff
- *
- * Power off UniFi.
- *
- * Arguments:
- * sdio SDIO context pointer
- * ---------------------------------------------------------------------------
- */
-void
-CsrSdioPowerOff(CsrSdioFunction *function)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- struct mmc_host *host = func->card->host;
-
- _sdio_claim_host(func);
- if (card_is_powered) {
- mmc_power_save_host(host);
- card_is_powered = 0;
- } else {
- printk(KERN_INFO "SDIO: Skip power off; card is already powered off.\n");
- }
- _sdio_release_host(func);
-} /* CsrSdioPowerOff() */
-
-
-static int
-sdio_set_block_size_ignore_first_error(struct sdio_func *func, unsigned blksz)
-{
- int ret;
-
- if (blksz > func->card->host->max_blk_size)
- return -EINVAL;
-
- if (blksz == 0) {
- blksz = min(func->max_blksize, func->card->host->max_blk_size);
- blksz = min(blksz, 512u);
- }
-
- /*
- * Ignore -ERANGE (OUT_OF_RANGE in R5) on the first byte as
- * the block size may be invalid until both bytes are written.
- */
- ret = csr_io_rw_direct(func->card, 1, 0,
- SDIO_FBR_BASE(func->num) + SDIO_FBR_BLKSIZE,
- blksz & 0xff, NULL);
- if (ret && ret != -ERANGE)
- return ret;
- ret = csr_io_rw_direct(func->card, 1, 0,
- SDIO_FBR_BASE(func->num) + SDIO_FBR_BLKSIZE + 1,
- (blksz >> 8) & 0xff, NULL);
- if (ret)
- return ret;
- func->cur_blksize = blksz;
-
- return 0;
-}
-
-CsrResult
-CsrSdioBlockSizeSet(CsrSdioFunction *function, u16 blockSize)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int r = 0;
-
- /* Module parameter overrides */
- if (sdio_block_size > -1) {
- blockSize = sdio_block_size;
- }
-
- unifi_trace(NULL, UDBG1, "Set SDIO function block size to %d\n",
- blockSize);
-
- _sdio_claim_host(func);
- r = sdio_set_block_size(func, blockSize);
- _sdio_release_host(func);
-
- /*
- * The MMC driver for kernels prior to 2.6.32 may fail this request
- * with -ERANGE. In this case use our workaround.
- */
- if (r == -ERANGE) {
- _sdio_claim_host(func);
- r = sdio_set_block_size_ignore_first_error(func, blockSize);
- _sdio_release_host(func);
- }
- if (r) {
- unifi_error(NULL, "Error %d setting block size\n", r);
- }
-
- /* Determine the achieved block size to pass to the core */
- function->blockSize = func->cur_blksize;
-
- return ConvertSdioToCsrSdioResult(r);
-} /* CsrSdioBlockSizeSet() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * CsrSdioHardReset
- *
- * Hard Resets UniFi is possible.
- *
- * Arguments:
- * sdio SDIO context pointer
- * ---------------------------------------------------------------------------
- */
-CsrResult
-CsrSdioHardReset(CsrSdioFunction *function)
-{
- return CSR_RESULT_FAILURE;
-} /* CsrSdioHardReset() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_glue_sdio_int_handler
- *
- * Interrupt callback function for SDIO interrupts.
- * This is called in kernel context (i.e. not interrupt context).
- *
- * Arguments:
- * func SDIO context pointer
- *
- * Returns:
- * None.
- *
- * Note: Called with host already claimed.
- * ---------------------------------------------------------------------------
- */
-static void
-uf_glue_sdio_int_handler(struct sdio_func *func)
-{
- CsrSdioFunction *sdio_ctx;
- CsrSdioInterruptDsrCallback func_dsr_callback;
- int r;
-
- sdio_ctx = sdio_get_drvdata(func);
- if (!sdio_ctx) {
- return;
- }
-
-#ifndef CSR_CONFIG_MMC_INT_BYPASS_KSOFTIRQD
- /*
- * Normally, we are not allowed to do any SDIO commands here.
- * However, this is called in a thread context and with the SDIO lock
- * so we disable the interrupts here instead of trying to do complicated
- * things with the SDIO lock.
- */
-#ifdef MMC_QUIRK_LENIENT_FN0
- sdio_f0_writeb(func, 0, SDIO_CCCR_IENx, &r);
-#else
- r = csr_io_rw_direct(func->card, 1, 0, SDIO_CCCR_IENx, 0x00, NULL);
-#endif
- if (r) {
- printk(KERN_ERR "UniFi MMC Int handler: Failed to disable interrupts %d\n", r);
- }
-#endif
-
- /* If the function driver has registered a handler, call it */
- if (sdio_func_drv && sdio_func_drv->intr) {
-
- func_dsr_callback = sdio_func_drv->intr(sdio_ctx);
-
- /* If interrupt handle returns a DSR handle, call it */
- if (func_dsr_callback) {
- func_dsr_callback(sdio_ctx);
- }
- }
-
-} /* uf_glue_sdio_int_handler() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * csr_sdio_linux_remove_irq
- *
- * Unregister the interrupt handler.
- * This means that the linux layer can not process interrupts any more.
- *
- * Arguments:
- * sdio SDIO context pointer
- *
- * Returns:
- * Status of the removal.
- * ---------------------------------------------------------------------------
- */
-int csr_sdio_linux_remove_irq(CsrSdioFunction *function)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int r;
-
- unifi_trace(NULL, UDBG1, "csr_sdio_linux_remove_irq\n");
-
- sdio_claim_host(func);
- r = sdio_release_irq(func);
- sdio_release_host(func);
-
- return r;
-
-} /* csr_sdio_linux_remove_irq() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * csr_sdio_linux_install_irq
- *
- * Register the interrupt handler.
- * This means that the linux layer can process interrupts.
- *
- * Arguments:
- * sdio SDIO context pointer
- *
- * Returns:
- * Status of the removal.
- * ---------------------------------------------------------------------------
- */
-int csr_sdio_linux_install_irq(CsrSdioFunction *function)
-{
- struct sdio_func *func = (struct sdio_func *)function->priv;
- int r;
-
- unifi_trace(NULL, UDBG1, "csr_sdio_linux_install_irq\n");
-
- /* Register our interrupt handle */
- sdio_claim_host(func);
- r = sdio_claim_irq(func, uf_glue_sdio_int_handler);
- sdio_release_host(func);
-
- /* If the interrupt was installed earlier, is fine */
- if (r == -EBUSY)
- r = 0;
-
- return r;
-} /* csr_sdio_linux_install_irq() */
-
-#ifdef CONFIG_PM
-
-/*
- * Power Management notifier
- */
-struct uf_sdio_mmc_pm_notifier
-{
- struct list_head list;
-
- CsrSdioFunction *sdio_ctx;
- struct notifier_block pm_notifier;
-};
-
-/* PM notifier list head */
-static struct uf_sdio_mmc_pm_notifier uf_sdio_mmc_pm_notifiers = {
- .sdio_ctx = NULL,
-};
-
-/*
- * ---------------------------------------------------------------------------
- * uf_sdio_mmc_register_pm_notifier
- * uf_sdio_mmc_unregister_pm_notifier
- *
- * Register/unregister for power management events. A list is used to
- * allow multiple card instances to be supported.
- *
- * Arguments:
- * sdio_ctx - CSR SDIO context to associate PM notifier to
- *
- * Returns:
- * Register function returns NULL on error
- * ---------------------------------------------------------------------------
- */
-static struct uf_sdio_mmc_pm_notifier *
-uf_sdio_mmc_register_pm_notifier(CsrSdioFunction *sdio_ctx)
-{
- /* Allocate notifier context for this card instance */
- struct uf_sdio_mmc_pm_notifier *notifier_ctx = kmalloc(sizeof(struct uf_sdio_mmc_pm_notifier), GFP_KERNEL);
-
- if (notifier_ctx)
- {
- notifier_ctx->sdio_ctx = sdio_ctx;
- notifier_ctx->pm_notifier.notifier_call = uf_sdio_mmc_power_event;
-
- list_add(&notifier_ctx->list, &uf_sdio_mmc_pm_notifiers.list);
-
- if (register_pm_notifier(&notifier_ctx->pm_notifier)) {
- printk(KERN_ERR "unifi: register_pm_notifier failed\n");
- }
- }
-
- return notifier_ctx;
-}
-
-static void
-uf_sdio_mmc_unregister_pm_notifier(CsrSdioFunction *sdio_ctx)
-{
- struct uf_sdio_mmc_pm_notifier *notifier_ctx;
- struct list_head *node, *q;
-
- list_for_each_safe(node, q, &uf_sdio_mmc_pm_notifiers.list) {
- notifier_ctx = list_entry(node, struct uf_sdio_mmc_pm_notifier, list);
-
- /* If it matches, unregister and free the notifier context */
- if (notifier_ctx && notifier_ctx->sdio_ctx == sdio_ctx)
- {
- if (unregister_pm_notifier(&notifier_ctx->pm_notifier)) {
- printk(KERN_ERR "unifi: unregister_pm_notifier failed\n");
- }
-
- /* Remove from list */
- notifier_ctx->sdio_ctx = NULL;
- list_del(node);
- kfree(notifier_ctx);
- }
- }
-}
-
-/*
- * ---------------------------------------------------------------------------
- * uf_sdio_mmc_power_event
- *
- * Handler for power management events.
- *
- * We need to handle suspend/resume events while the userspace is unsuspended
- * to allow the SME to run its suspend/resume state machines.
- *
- * Arguments:
- * event event ID
- *
- * Returns:
- * Status of the event handling
- * ---------------------------------------------------------------------------
- */
-static int
-uf_sdio_mmc_power_event(struct notifier_block *this, unsigned long event, void *ptr)
-{
- struct uf_sdio_mmc_pm_notifier *notifier_ctx = container_of(this,
- struct uf_sdio_mmc_pm_notifier,
- pm_notifier);
-
- /* Call the CSR SDIO function driver's suspend/resume method
- * while the userspace is unsuspended.
- */
- switch (event) {
- case PM_POST_HIBERNATION:
- case PM_POST_SUSPEND:
- printk(KERN_INFO "%s:%d resume\n", __FUNCTION__, __LINE__ );
- if (sdio_func_drv && sdio_func_drv->resume) {
- sdio_func_drv->resume(notifier_ctx->sdio_ctx);
- }
- break;
-
- case PM_HIBERNATION_PREPARE:
- case PM_SUSPEND_PREPARE:
- printk(KERN_INFO "%s:%d suspend\n", __FUNCTION__, __LINE__ );
- if (sdio_func_drv && sdio_func_drv->suspend) {
- sdio_func_drv->suspend(notifier_ctx->sdio_ctx);
- }
- break;
- }
- return NOTIFY_DONE;
-}
-
-#endif /* CONFIG_PM */
-
-/*
- * ---------------------------------------------------------------------------
- * uf_glue_sdio_probe
- *
- * Card insert callback.
- *
- * Arguments:
- * func Our (glue layer) context pointer.
- *
- * Returns:
- * UniFi driver error code.
- * ---------------------------------------------------------------------------
- */
-static int
-uf_glue_sdio_probe(struct sdio_func *func,
- const struct sdio_device_id *id)
-{
- int instance;
- CsrSdioFunction *sdio_ctx;
-
- /* First of all claim the SDIO driver */
- sdio_claim_host(func);
-
- /* Assume that the card is already powered */
- card_is_powered = 1;
-
- /* Assumes one card per host, which is true for SDIO */
- instance = func->card->host->index;
- printk("sdio bus_id: %16s - UniFi card 0x%X inserted\n",
- sdio_func_id(func), instance);
-
- /* Allocate context */
- sdio_ctx = kmalloc(sizeof(CsrSdioFunction), GFP_KERNEL);
- if (sdio_ctx == NULL) {
- sdio_release_host(func);
- return -ENOMEM;
- }
-
- /* Initialise the context */
- sdio_ctx->sdioId.manfId = func->vendor;
- sdio_ctx->sdioId.cardId = func->device;
- sdio_ctx->sdioId.sdioFunction = func->num;
- sdio_ctx->sdioId.sdioInterface = func->class;
- sdio_ctx->blockSize = func->cur_blksize;
- sdio_ctx->priv = (void *)func;
- sdio_ctx->features = 0;
-
- /* Module parameter enables byte mode */
- if (sdio_byte_mode) {
- sdio_ctx->features |= CSR_SDIO_FEATURE_BYTE_MODE;
- }
-
- if (func->card->host->caps & MMC_CAP_SD_HIGHSPEED) {
- unifi_trace(NULL, UDBG1, "MMC_CAP_SD_HIGHSPEED is available\n");
- }
-
-#ifdef MMC_QUIRK_LENIENT_FN0
- func->card->quirks |= MMC_QUIRK_LENIENT_FN0;
-#endif
-
- /* Pass context to the SDIO driver */
- sdio_set_drvdata(func, sdio_ctx);
-
-#ifdef CONFIG_PM
- /* Register to get PM events */
- if (uf_sdio_mmc_register_pm_notifier(sdio_ctx) == NULL) {
- unifi_error(NULL, "%s: Failed to register for PM events\n", __FUNCTION__);
- }
-#endif
-
- /* Register this device with the SDIO function driver */
- /* Call the main UniFi driver inserted handler */
- if (sdio_func_drv && sdio_func_drv->inserted) {
- uf_add_os_device(instance, &func->dev);
- sdio_func_drv->inserted(sdio_ctx);
- }
-
- /* We have finished, so release the SDIO driver */
- sdio_release_host(func);
-
-#ifdef ANDROID_BUILD
- /* Take the wakelock */
- unifi_trace(NULL, UDBG1, "probe: take wake lock\n");
- wake_lock(&unifi_sdio_wake_lock);
-#endif
-
- return 0;
-} /* uf_glue_sdio_probe() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_glue_sdio_remove
- *
- * Card removal callback.
- *
- * Arguments:
- * func Our (glue layer) context pointer.
- *
- * Returns:
- * UniFi driver error code.
- * ---------------------------------------------------------------------------
- */
-static void
-uf_glue_sdio_remove(struct sdio_func *func)
-{
- CsrSdioFunction *sdio_ctx;
-
- sdio_ctx = sdio_get_drvdata(func);
- if (!sdio_ctx) {
- return;
- }
-
- unifi_info(NULL, "UniFi card removed\n");
-
- /* Clean up the SDIO function driver */
- if (sdio_func_drv && sdio_func_drv->removed) {
- uf_remove_os_device(func->card->host->index);
- sdio_func_drv->removed(sdio_ctx);
- }
-
-#ifdef CONFIG_PM
- /* Unregister for PM events */
- uf_sdio_mmc_unregister_pm_notifier(sdio_ctx);
-#endif
-
- kfree(sdio_ctx);
-
-} /* uf_glue_sdio_remove */
-
-
-/*
- * SDIO ids *must* be statically declared, so we can't take
- * them from the list passed in csr_sdio_register_driver().
- */
-static const struct sdio_device_id unifi_ids[] = {
- { SDIO_DEVICE(SDIO_MANF_ID_CSR, SDIO_CARD_ID_UNIFI_3) },
- { SDIO_DEVICE(SDIO_MANF_ID_CSR, SDIO_CARD_ID_UNIFI_4) },
- { /* end: all zeroes */ },
-};
-
-MODULE_DEVICE_TABLE(sdio, unifi_ids);
-
-#ifdef CONFIG_PM
-
-/*
- * ---------------------------------------------------------------------------
- * uf_glue_sdio_suspend
- *
- * Card suspend callback. The userspace will already be suspended.
- *
- * Arguments:
- * dev The struct device owned by the MMC driver
- *
- * Returns:
- * None
- * ---------------------------------------------------------------------------
- */
-static int
-uf_glue_sdio_suspend(struct device *dev)
-{
- unifi_trace(NULL, UDBG1, "uf_glue_sdio_suspend");
-
- return 0;
-} /* uf_glue_sdio_suspend */
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_glue_sdio_resume
- *
- * Card resume callback. The userspace will still be suspended.
- *
- * Arguments:
- * dev The struct device owned by the MMC driver
- *
- * Returns:
- * None
- * ---------------------------------------------------------------------------
- */
-static int
-uf_glue_sdio_resume(struct device *dev)
-{
- unifi_trace(NULL, UDBG1, "uf_glue_sdio_resume");
-
-#ifdef ANDROID_BUILD
- unifi_trace(NULL, UDBG1, "resume: take wakelock\n");
- wake_lock(&unifi_sdio_wake_lock);
-#endif
-
- return 0;
-
-} /* uf_glue_sdio_resume */
-
-static struct dev_pm_ops unifi_pm_ops = {
- .suspend = uf_glue_sdio_suspend,
- .resume = uf_glue_sdio_resume,
-};
-
-#define UNIFI_PM_OPS (&unifi_pm_ops)
-
-#else
-
-#define UNIFI_PM_OPS NULL
-
-#endif /* CONFIG_PM */
-
-static struct sdio_driver unifi_driver = {
- .probe = uf_glue_sdio_probe,
- .remove = uf_glue_sdio_remove,
- .name = "unifi",
- .id_table = unifi_ids,
- .drv.pm = UNIFI_PM_OPS,
-};
-
-
-/*
- * ---------------------------------------------------------------------------
- * CsrSdioFunctionDriverRegister
- * CsrSdioFunctionDriverUnregister
- *
- * These functions are called from the main module load and unload
- * functions. They perform the appropriate operations for the
- * linux MMC/SDIO driver.
- *
- * Arguments:
- * sdio_drv Pointer to the function driver's SDIO structure.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-CsrResult
-CsrSdioFunctionDriverRegister(CsrSdioFunctionDriver *sdio_drv)
-{
- int r;
-
- printk("UniFi: Using native Linux MMC driver for SDIO.\n");
-
- if (sdio_func_drv) {
- unifi_error(NULL, "sdio_mmc: UniFi driver already registered\n");
- return CSR_SDIO_RESULT_INVALID_VALUE;
- }
-
-#ifdef ANDROID_BUILD
- wake_lock_init(&unifi_sdio_wake_lock, WAKE_LOCK_SUSPEND, "unifi_sdio_work");
-#endif
-
- /* Save the registered driver description */
- /*
- * FIXME:
- * Need a table here to handle a call to register for just one function.
- * mmc only allows us to register for the whole device
- */
- sdio_func_drv = sdio_drv;
-
-#ifdef CONFIG_PM
- /* Initialise PM notifier list */
- INIT_LIST_HEAD(&uf_sdio_mmc_pm_notifiers.list);
-#endif
-
- /* Register ourself with mmc_core */
- r = sdio_register_driver(&unifi_driver);
- if (r) {
- printk(KERN_ERR "unifi_sdio: Failed to register UniFi SDIO driver: %d\n", r);
- return ConvertSdioToCsrSdioResult(r);
- }
-
- return CSR_RESULT_SUCCESS;
-} /* CsrSdioFunctionDriverRegister() */
-
-
-
-void
-CsrSdioFunctionDriverUnregister(CsrSdioFunctionDriver *sdio_drv)
-{
- printk(KERN_INFO "UniFi: unregister from MMC sdio\n");
-
-#ifdef ANDROID_BUILD
- wake_lock_destroy(&unifi_sdio_wake_lock);
-#endif
- sdio_unregister_driver(&unifi_driver);
-
- sdio_func_drv = NULL;
-
-} /* CsrSdioFunctionDriverUnregister() */
-
diff --git a/drivers/staging/csr/sdio_stubs.c b/drivers/staging/csr/sdio_stubs.c
deleted file mode 100644
index 839fae01d96c..000000000000
--- a/drivers/staging/csr/sdio_stubs.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Stubs for some of the bottom edge functions.
- *
- * These stubs are optional functions in the bottom edge (SDIO driver
- * interface) API that not all platforms or SDIO drivers may support.
- *
- * They're declared as weak symbols so they can be overridden by
- * simply providing a non-weak declaration.
- *
- * Copyright (C) 2007-2008 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- */
-#include "csr_wifi_hip_unifi.h"
-
-void __attribute__((weak)) CsrSdioFunctionIdle(CsrSdioFunction *function)
-{
-}
-
-void __attribute__((weak)) CsrSdioFunctionActive(CsrSdioFunction *function)
-{
-}
-
-CsrResult __attribute__((weak)) CsrSdioPowerOn(CsrSdioFunction *function)
-{
- return CSR_RESULT_SUCCESS;
-}
-
-void __attribute__((weak)) CsrSdioPowerOff(CsrSdioFunction *function)
-{
-}
-
-CsrResult __attribute__((weak)) CsrSdioHardReset(CsrSdioFunction *function)
-{
- return CSR_SDIO_RESULT_NOT_RESET;
-}
-
-CsrResult __attribute__((weak)) CsrSdioBlockSizeSet(CsrSdioFunction *function,
- u16 blockSize)
-{
- return CSR_RESULT_SUCCESS;
-}
-
-CsrResult __attribute__((weak)) CsrSdioSuspend(CsrSdioFunction *function)
-{
- return CSR_RESULT_SUCCESS;
-}
-
-CsrResult __attribute__((weak)) CsrSdioResume(CsrSdioFunction *function)
-{
- return CSR_RESULT_SUCCESS;
-}
-
-int __attribute__((weak)) csr_sdio_linux_install_irq(CsrSdioFunction *function)
-{
- return 0;
-}
-
-int __attribute__((weak)) csr_sdio_linux_remove_irq(CsrSdioFunction *function)
-{
- return 0;
-}
-
-void __attribute__((weak)) CsrSdioInsertedAcknowledge(CsrSdioFunction *function, CsrResult result)
-{
-}
-
-void __attribute__((weak)) CsrSdioRemovedAcknowledge(CsrSdioFunction *function)
-{
-}
-
-void __attribute__((weak)) CsrSdioSuspendAcknowledge(CsrSdioFunction *function, CsrResult result)
-{
-}
-
-void __attribute__((weak)) CsrSdioResumeAcknowledge(CsrSdioFunction *function, CsrResult result)
-{
-}
-
-
diff --git a/drivers/staging/csr/sme_blocking.c b/drivers/staging/csr/sme_blocking.c
deleted file mode 100644
index 0c6e21636e7f..000000000000
--- a/drivers/staging/csr/sme_blocking.c
+++ /dev/null
@@ -1,1466 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: sme_mgt_blocking.c
- *
- * PURPOSE:
- * This file contains the driver specific implementation of
- * the WEXT <==> SME MGT interface for all SME builds that support WEXT.
- *
- * Copyright (C) 2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-
-#include "unifi_priv.h"
-
-
-/*
- * This file also contains the implementation of the asynchronous
- * requests to the SME.
- *
- * Before calling an asynchronous SME function, we call sme_init_request()
- * which gets hold of the SME semaphore and updates the request status.
- * The semaphore makes sure that there is only one pending request to
- * the SME at a time.
- *
- * Now we are ready to call the SME function, but only if
- * sme_init_request() has returned 0.
- *
- * When the SME function returns, we need to wait
- * for the reply. This is done in sme_wait_for_reply().
- * If the request times-out, the request status is set to SME_REQUEST_TIMEDOUT
- * and the sme_wait_for_reply() returns.
- *
- * If the SME replies in time, we call sme_complete_request().
- * There we change the request status to SME_REQUEST_RECEIVED. This will
- * wake up the process waiting on sme_wait_for_reply().
- * It is important that we copy the reply data in priv->sme_reply
- * before calling sme_complete_request().
- *
- * Handling the wext requests, we need to block
- * until the SME sends the response to our request.
- * We use the sme_init_request() and sme_wait_for_reply()
- * to implement this behavior in the following functions:
- * sme_mgt_wifi_on()
- * sme_mgt_wifi_off()
- * sme_mgt_scan_full()
- * sme_mgt_scan_results_get_async()
- * sme_mgt_connect()
- * unifi_mgt_media_status_ind()
- * sme_mgt_disconnect()
- * sme_mgt_pmkid()
- * sme_mgt_key()
- * sme_mgt_mib_get()
- * sme_mgt_mib_set()
- * sme_mgt_versions_get()
- * sme_mgt_set_value()
- * sme_mgt_get_value()
- * sme_mgt_set_value_async()
- * sme_mgt_get_value_async()
- * sme_mgt_packet_filter_set()
- * sme_mgt_tspec()
- */
-
-
-/*
- * Handling the suspend and resume system events, we need to block
- * until the SME sends the response to our indication.
- * We use the sme_init_request() and sme_wait_for_reply()
- * to implement this behavior in the following functions:
- * sme_sys_suspend()
- * sme_sys_resume()
- */
-
-#define UNIFI_SME_MGT_SHORT_TIMEOUT 10000
-#define UNIFI_SME_MGT_LONG_TIMEOUT 19000
-#define UNIFI_SME_SYS_LONG_TIMEOUT 10000
-
-#ifdef UNIFI_DEBUG
-# define sme_wait_for_reply(priv, t) _sme_wait_for_reply(priv, t, __func__)
-#else
-# define sme_wait_for_reply(priv, t) _sme_wait_for_reply(priv, t, NULL)
-#endif
-
-static int
-sme_init_request(unifi_priv_t *priv)
-{
- if (priv == NULL) {
- unifi_error(priv, "sme_init_request: Invalid priv\n");
- return -EIO;
- }
-
- unifi_trace(priv, UDBG5, "sme_init_request: wait sem\n");
-
- /* Grab the SME semaphore until the reply comes, or timeout */
- if (down_interruptible(&priv->sme_sem)) {
- unifi_error(priv, "sme_init_request: Failed to get SME semaphore\n");
- return -EIO;
- }
- unifi_trace(priv, UDBG5, "sme_init_request: got sem: pending\n");
-
- priv->sme_reply.request_status = SME_REQUEST_PENDING;
-
- return 0;
-
-} /* sme_init_request() */
-
-
-void
-uf_sme_complete_request(unifi_priv_t *priv, CsrResult reply_status, const char *func)
-{
- if (priv == NULL) {
- unifi_error(priv, "sme_complete_request: Invalid priv\n");
- return;
- }
-
- if (priv->sme_reply.request_status != SME_REQUEST_PENDING) {
- unifi_notice(priv,
- "sme_complete_request: request not pending %s (s:%d)\n",
- (func ? func : ""), priv->sme_reply.request_status);
- return;
- }
- unifi_trace(priv, UDBG5,
- "sme_complete_request: completed %s (s:%d)\n",
- (func ? func : ""), priv->sme_reply.request_status);
-
- priv->sme_reply.request_status = SME_REQUEST_RECEIVED;
- priv->sme_reply.reply_status = reply_status;
-
- wake_up_interruptible(&priv->sme_request_wq);
-
- return;
-}
-
-
-void
-uf_sme_cancel_request(unifi_priv_t *priv, CsrResult reply_status)
-{
- /* Check for a blocking SME request in progress, and cancel the wait.
- * This should be used when the character device is closed.
- */
-
- if (priv == NULL) {
- unifi_error(priv, "sme_cancel_request: Invalid priv\n");
- return;
- }
-
- /* If no request is pending, nothing to wake up */
- if (priv->sme_reply.request_status != SME_REQUEST_PENDING) {
- unifi_trace(priv, UDBG5,
- "sme_cancel_request: no request was pending (s:%d)\n",
- priv->sme_reply.request_status);
- /* Nothing to do */
- return;
- }
- unifi_trace(priv, UDBG5,
- "sme_cancel_request: request cancelled (s:%d)\n",
- priv->sme_reply.request_status);
-
- /* Wake up the wait with an error status */
- priv->sme_reply.request_status = SME_REQUEST_CANCELLED;
- priv->sme_reply.reply_status = reply_status; /* unimportant since the CANCELLED state will fail the ioctl */
-
- wake_up_interruptible(&priv->sme_request_wq);
-
- return;
-}
-
-
-static int
-_sme_wait_for_reply(unifi_priv_t *priv,
- unsigned long timeout, const char *func)
-{
- long r;
-
- unifi_trace(priv, UDBG5, "sme_wait_for_reply: %s sleep\n", func ? func : "");
- r = wait_event_interruptible_timeout(priv->sme_request_wq,
- (priv->sme_reply.request_status != SME_REQUEST_PENDING),
- msecs_to_jiffies(timeout));
- unifi_trace(priv, UDBG5, "sme_wait_for_reply: %s awake (%d)\n", func ? func : "", r);
-
- if (r == -ERESTARTSYS) {
- /* The thread was killed */
- unifi_info(priv, "ERESTARTSYS in _sme_wait_for_reply\n");
- up(&priv->sme_sem);
- return r;
- }
- if (priv->sme_reply.request_status == SME_REQUEST_CANCELLED) {
- unifi_trace(priv, UDBG5, "Cancelled waiting for SME to reply (%s s:%d, t:%d, r:%d)\n",
- (func ? func : ""), priv->sme_reply.request_status, timeout, r);
-
- /* Release the SME semaphore that was downed in sme_init_request() */
- up(&priv->sme_sem);
- return -EIO; /* fail the ioctl */
- }
- if ((r == 0) && (priv->sme_reply.request_status != SME_REQUEST_RECEIVED)) {
- unifi_notice(priv, "Timeout waiting for SME to reply (%s s:%d, t:%d)\n",
- (func ? func : ""), priv->sme_reply.request_status, timeout);
-
- priv->sme_reply.request_status = SME_REQUEST_TIMEDOUT;
-
- /* Release the SME semaphore that was downed in sme_init_request() */
- up(&priv->sme_sem);
-
- return -ETIMEDOUT;
- }
-
- unifi_trace(priv, UDBG5, "sme_wait_for_reply: %s received (%d)\n",
- func ? func : "", r);
-
- /* Release the SME semaphore that was downed in sme_init_request() */
- up(&priv->sme_sem);
-
- return 0;
-} /* sme_wait_for_reply() */
-
-
-
-
-#ifdef CSR_SUPPORT_WEXT
-int sme_mgt_wifi_on(unifi_priv_t *priv)
-{
- u16 numElements;
- CsrWifiSmeDataBlock* dataList;
-#ifdef CSR_SUPPORT_WEXT_AP
- int r;
-#endif
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_wifi_on: invalid smepriv\n");
- return -EIO;
- }
-
- if (priv->mib_data.length) {
- numElements = 1;
- dataList = &priv->mib_data;
- } else {
- numElements = 0;
- dataList = NULL;
- }
- /* Start the SME */
-#ifdef CSR_SUPPORT_WEXT_AP
- r = sme_init_request(priv);
- if (r) {
- return -EIO;
- }
-#endif
- CsrWifiSmeWifiOnReqSend(0, priv->sta_mac_address, numElements, dataList);
-#ifdef CSR_SUPPORT_WEXT_AP
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_LONG_TIMEOUT);
- unifi_trace(priv, UDBG4,
- "sme_mgt_wifi_on: unifi_mgt_wifi_oo_req <-- (r=%d, status=%d)\n",
- r, priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- return 0;
-#endif
-} /* sme_mgt_wifi_on() */
-
-
-int sme_mgt_wifi_off(unifi_priv_t *priv)
-{
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_wifi_off: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- /* Stop the SME */
- CsrWifiSmeWifiOffReqSend(0);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_LONG_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_wifi_off: unifi_mgt_wifi_off_req <-- (r=%d, status=%d)\n",
- r, priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-
-} /* sme_mgt_wifi_off */
-
-int sme_mgt_key(unifi_priv_t *priv, CsrWifiSmeKey *sme_key,
- CsrWifiSmeListAction action)
-{
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_key: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeKeyReqSend(0, CSR_WIFI_INTERFACE_IN_USE, action, *sme_key);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- return convert_sme_error(priv->sme_reply.reply_status);
-}
-
-
-int sme_mgt_scan_full(unifi_priv_t *priv,
- CsrWifiSsid *specific_ssid,
- int num_channels,
- unsigned char *channel_list)
-{
- CsrWifiMacAddress bcastAddress = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }};
- u8 is_active = (num_channels > 0) ? TRUE : FALSE;
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_scan_full: invalid smepriv\n");
- return -EIO;
- }
-
- unifi_trace(priv, UDBG4, "sme_mgt_scan_full: -->\n");
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- /* If a channel list is provided, do an active scan */
- if (is_active) {
- unifi_trace(priv, UDBG1,
- "channel list - num_channels: %d, active scan\n",
- num_channels);
- }
-
- CsrWifiSmeScanFullReqSend(0,
- specific_ssid->length?1:0, /* 0 or 1 SSIDS */
- specific_ssid,
- bcastAddress,
- is_active,
- CSR_WIFI_SME_BSS_TYPE_ANY_BSS,
- CSR_WIFI_SME_SCAN_TYPE_ALL,
- (u16)num_channels, channel_list,
- 0, NULL);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_LONG_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4, "sme_mgt_scan_full: <-- (status=%d)\n", priv->sme_reply.reply_status);
- if (priv->sme_reply.reply_status == CSR_WIFI_RESULT_UNAVAILABLE)
- return 0; /* initial scan already underway */
- else
- return convert_sme_error(priv->sme_reply.reply_status);
-}
-
-
-int sme_mgt_scan_results_get_async(unifi_priv_t *priv,
- struct iw_request_info *info,
- char *scan_results,
- long scan_results_len)
-{
- u16 scan_result_list_count;
- CsrWifiSmeScanResult *scan_result_list;
- CsrWifiSmeScanResult *scan_result;
- int r;
- int i;
- char *current_ev = scan_results;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_scan_results_get_async: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeScanResultsGetReqSend(0);
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_LONG_TIMEOUT);
- if (r)
- return r;
-
- scan_result_list_count = priv->sme_reply.reply_scan_results_count;
- scan_result_list = priv->sme_reply.reply_scan_results;
- unifi_trace(priv, UDBG2,
- "scan_results: Scan returned %d, numElements=%d\n",
- r, scan_result_list_count);
-
- /* OK, now we have the scan results */
- for (i = 0; i < scan_result_list_count; ++i) {
- scan_result = &scan_result_list[i];
-
- unifi_trace(priv, UDBG2, "Scan Result: %.*s\n",
- scan_result->ssid.length,
- scan_result->ssid.ssid);
-
- r = unifi_translate_scan(priv->netdev[0], info,
- current_ev,
- scan_results + scan_results_len,
- scan_result, i+1);
-
- if (r < 0) {
- kfree(scan_result_list);
- priv->sme_reply.reply_scan_results_count = 0;
- priv->sme_reply.reply_scan_results = NULL;
- return r;
- }
-
- current_ev += r;
- }
-
- /*
- * Free the scan results allocated in unifi_mgt_scan_results_get_cfm()
- * and invalidate the reply_scan_results to avoid re-using
- * the freed pointers.
- */
- kfree(scan_result_list);
- priv->sme_reply.reply_scan_results_count = 0;
- priv->sme_reply.reply_scan_results = NULL;
-
- unifi_trace(priv, UDBG2,
- "scan_results: Scan translated to %d bytes\n",
- current_ev - scan_results);
- return (current_ev - scan_results);
-}
-
-
-int sme_mgt_connect(unifi_priv_t *priv)
-{
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_connect: invalid smepriv\n");
- return -EIO;
- }
-
- unifi_trace(priv, UDBG2, "sme_mgt_connect: %.*s\n",
- priv->connection_config.ssid.length,
- priv->connection_config.ssid.ssid);
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeConnectReqSend(0, CSR_WIFI_INTERFACE_IN_USE, priv->connection_config);
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- if (priv->sme_reply.reply_status)
- unifi_trace(priv, UDBG1, "sme_mgt_connect: failed with SME status %d\n",
- priv->sme_reply.reply_status);
-
- return convert_sme_error(priv->sme_reply.reply_status);
-}
-
-
-int sme_mgt_disconnect(unifi_priv_t *priv)
-{
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_disconnect: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeDisconnectReqSend(0, CSR_WIFI_INTERFACE_IN_USE);
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4, "sme_mgt_disconnect: <-- (status=%d)\n", priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-}
-
-
-int sme_mgt_pmkid(unifi_priv_t *priv,
- CsrWifiSmeListAction action,
- CsrWifiSmePmkidList *pmkid_list)
-{
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_pmkid: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmePmkidReqSend(0, CSR_WIFI_INTERFACE_IN_USE, action,
- pmkid_list->pmkidsCount, pmkid_list->pmkids);
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4, "sme_mgt_pmkid: <-- (status=%d)\n", priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-}
-
-
-int sme_mgt_mib_get(unifi_priv_t *priv,
- unsigned char *varbind, int *length)
-{
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_mib_get: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- priv->mib_cfm_buffer = varbind;
- priv->mib_cfm_buffer_length = MAX_VARBIND_LENGTH;
-
- CsrWifiSmeMibGetReqSend(0, *length, varbind);
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r) {
- priv->mib_cfm_buffer_length = 0;
- priv->mib_cfm_buffer = NULL;
- return r;
- }
-
- *length = priv->mib_cfm_buffer_length;
-
- priv->mib_cfm_buffer_length = 0;
- priv->mib_cfm_buffer = NULL;
- unifi_trace(priv, UDBG4, "sme_mgt_mib_get: <-- (status=%d)\n", priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-}
-
-int sme_mgt_mib_set(unifi_priv_t *priv,
- unsigned char *varbind, int length)
-{
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_mib_get: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeMibSetReqSend(0, length, varbind);
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4, "sme_mgt_mib_set: <-- (status=%d)\n", priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-}
-
-#endif /* CSR_SUPPORT_WEXT */
-
-int sme_mgt_power_config_set(unifi_priv_t *priv, CsrWifiSmePowerConfig *powerConfig)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_set_value_async: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmePowerConfigSetReqSend(0, *powerConfig);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_set_value_async: unifi_mgt_set_value_req <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_set_value: invalid smepriv\n");
- return -EIO;
- }
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtPowerConfigSetReq(priv->smepriv, *powerConfig);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-int sme_mgt_sme_config_set(unifi_priv_t *priv, CsrWifiSmeStaConfig *staConfig, CsrWifiSmeDeviceConfig *deviceConfig)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_sme_config_set: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeSmeStaConfigSetReqSend(0, CSR_WIFI_INTERFACE_IN_USE, *staConfig);
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_sme_config_set: CsrWifiSmeSmeStaConfigSetReq <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeSmeCommonConfigSetReqSend(0, *deviceConfig);
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_sme_config_set: CsrWifiSmeSmeCommonConfigSetReq <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
-
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_sme_config_set: invalid smepriv\n");
- return -EIO;
- }
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtSmeConfigSetReq(priv->smepriv, *staConfig);
- status = CsrWifiSmeMgtDeviceConfigSetReq(priv->smepriv, *deviceConfig);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-#ifdef CSR_SUPPORT_WEXT
-
-int sme_mgt_mib_config_set(unifi_priv_t *priv, CsrWifiSmeMibConfig *mibConfig)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_mib_config_set: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeMibConfigSetReqSend(0, *mibConfig);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_mib_config_set: unifi_mgt_set_mib_config_req <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_mib_config_set: invalid smepriv\n");
- return -EIO;
- }
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtMibConfigSetReq(priv->smepriv, *mibConfig);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-int sme_mgt_coex_config_set(unifi_priv_t *priv, CsrWifiSmeCoexConfig *coexConfig)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_coex_config_set: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeCoexConfigSetReqSend(0, *coexConfig);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_coex_config_set: unifi_mgt_set_mib_config_req <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_coex_config_set: invalid smepriv\n");
- return -EIO;
- }
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtCoexConfigSetReq(priv->smepriv, *coexConfig);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-#endif /* CSR_SUPPORT_WEXT */
-
-int sme_mgt_host_config_set(unifi_priv_t *priv, CsrWifiSmeHostConfig *hostConfig)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_host_config_set: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeHostConfigSetReqSend(0, CSR_WIFI_INTERFACE_IN_USE, *hostConfig);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_host_config_set: unifi_mgt_set_host_config_req <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_host_config_set: invalid smepriv\n");
- return -EIO;
- }
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtHostConfigSetReq(priv->smepriv, *hostConfig);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-#ifdef CSR_SUPPORT_WEXT
-
-int sme_mgt_versions_get(unifi_priv_t *priv, CsrWifiSmeVersions *versions)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_versions_get: invalid smepriv\n");
- return -EIO;
- }
-
- unifi_trace(priv, UDBG4, "sme_mgt_versions_get: unifi_mgt_versions_get_req -->\n");
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeVersionsGetReqSend(0);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- /* store the reply */
- if (versions != NULL) {
- memcpy((unsigned char*)versions,
- (unsigned char*)&priv->sme_reply.versions,
- sizeof(CsrWifiSmeVersions));
- }
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_versions_get: unifi_mgt_versions_get_req <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
-
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtVersionsGetReq(priv->smepriv, versions);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-#endif /* CSR_SUPPORT_WEXT */
-
-int sme_mgt_power_config_get(unifi_priv_t *priv, CsrWifiSmePowerConfig *powerConfig)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_power_config_get: invalid smepriv\n");
- return -EIO;
- }
-
- unifi_trace(priv, UDBG4, "sme_mgt_power_config_get: unifi_mgt_power_config_req -->\n");
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmePowerConfigGetReqSend(0);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- /* store the reply */
- if (powerConfig != NULL) {
- memcpy((unsigned char*)powerConfig,
- (unsigned char*)&priv->sme_reply.powerConfig,
- sizeof(CsrWifiSmePowerConfig));
- }
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_get_versions: unifi_mgt_power_config_req <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
-
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtPowerConfigGetReq(priv->smepriv, powerConfig);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-int sme_mgt_host_config_get(unifi_priv_t *priv, CsrWifiSmeHostConfig *hostConfig)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_host_config_get: invalid smepriv\n");
- return -EIO;
- }
-
- unifi_trace(priv, UDBG4, "sme_mgt_host_config_get: unifi_mgt_host_config_get_req -->\n");
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeHostConfigGetReqSend(0, CSR_WIFI_INTERFACE_IN_USE);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- /* store the reply */
- if (hostConfig != NULL)
- memcpy((unsigned char*)hostConfig,
- (unsigned char*)&priv->sme_reply.hostConfig,
- sizeof(CsrWifiSmeHostConfig));
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_host_config_get: unifi_mgt_host_config_get_req <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
-
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtHostConfigGetReq(priv->smepriv, hostConfig);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-int sme_mgt_sme_config_get(unifi_priv_t *priv, CsrWifiSmeStaConfig *staConfig, CsrWifiSmeDeviceConfig *deviceConfig)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_sme_config_get: invalid smepriv\n");
- return -EIO;
- }
-
- unifi_trace(priv, UDBG4, "sme_mgt_sme_config_get: unifi_mgt_sme_config_get_req -->\n");
-
- /* Common device config */
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeSmeCommonConfigGetReqSend(0);
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- /* store the reply */
- if (deviceConfig != NULL)
- memcpy((unsigned char*)deviceConfig,
- (unsigned char*)&priv->sme_reply.deviceConfig,
- sizeof(CsrWifiSmeDeviceConfig));
-
- /* STA config */
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeSmeStaConfigGetReqSend(0, CSR_WIFI_INTERFACE_IN_USE);
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- /* store the reply */
- if (staConfig != NULL)
- memcpy((unsigned char*)staConfig,
- (unsigned char*)&priv->sme_reply.staConfig,
- sizeof(CsrWifiSmeStaConfig));
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_sme_config_get: unifi_mgt_sme_config_get_req <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
-
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtSmeConfigGetReq(priv->smepriv, staConfig);
- status = CsrWifiSmeMgtDeviceConfigGetReq(priv->smepriv, deviceConfig);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-int sme_mgt_coex_info_get(unifi_priv_t *priv, CsrWifiSmeCoexInfo *coexInfo)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_coex_info_get: invalid smepriv\n");
- return -EIO;
- }
-
- unifi_trace(priv, UDBG4, "sme_mgt_coex_info_get: unifi_mgt_coex_info_get_req -->\n");
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeCoexInfoGetReqSend(0);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- /* store the reply */
- if (coexInfo != NULL)
- memcpy((unsigned char*)coexInfo,
- (unsigned char*)&priv->sme_reply.coexInfo,
- sizeof(CsrWifiSmeCoexInfo));
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_coex_info_get: unifi_mgt_coex_info_get_req <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
-
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtCoexInfoGetReq(priv->smepriv, coexInfo);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-#ifdef CSR_SUPPORT_WEXT
-
-int sme_mgt_coex_config_get(unifi_priv_t *priv, CsrWifiSmeCoexConfig *coexConfig)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_coex_config_get: invalid smepriv\n");
- return -EIO;
- }
-
- unifi_trace(priv, UDBG4, "sme_mgt_coex_config_get: unifi_mgt_coex_config_get_req -->\n");
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeCoexConfigGetReqSend(0);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- /* store the reply */
- if (coexConfig != NULL)
- memcpy((unsigned char*)coexConfig,
- (unsigned char*)&priv->sme_reply.coexConfig,
- sizeof(CsrWifiSmeCoexConfig));
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_coex_config_get: unifi_mgt_coex_config_get_req <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
-
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtCoexConfigGetReq(priv->smepriv, coexConfig);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-int sme_mgt_mib_config_get(unifi_priv_t *priv, CsrWifiSmeMibConfig *mibConfig)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_mib_config_get: invalid smepriv\n");
- return -EIO;
- }
-
- unifi_trace(priv, UDBG4, "sme_mgt_mib_config_get: unifi_mgt_mib_config_get_req -->\n");
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeMibConfigGetReqSend(0);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- /* store the reply */
- if (mibConfig != NULL)
- memcpy((unsigned char*)mibConfig,
- (unsigned char*)&priv->sme_reply.mibConfig,
- sizeof(CsrWifiSmeMibConfig));
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_mib_config_get: unifi_mgt_mib_config_get_req <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
-
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtMibConfigGetReq(priv->smepriv, mibConfig);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-int sme_mgt_connection_info_get(unifi_priv_t *priv, CsrWifiSmeConnectionInfo *connectionInfo)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_connection_info_get: invalid smepriv\n");
- return -EIO;
- }
-
- unifi_trace(priv, UDBG4, "sme_mgt_connection_info_get: unifi_mgt_connection_info_get_req -->\n");
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeConnectionInfoGetReqSend(0, CSR_WIFI_INTERFACE_IN_USE);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- /* store the reply */
- if (connectionInfo != NULL)
- memcpy((unsigned char*)connectionInfo,
- (unsigned char*)&priv->sme_reply.connectionInfo,
- sizeof(CsrWifiSmeConnectionInfo));
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_connection_info_get: unifi_mgt_connection_info_get_req <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
-
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtConnectionInfoGetReq(priv->smepriv, connectionInfo);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-int sme_mgt_connection_config_get(unifi_priv_t *priv, CsrWifiSmeConnectionConfig *connectionConfig)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_connection_config_get: invalid smepriv\n");
- return -EIO;
- }
-
- unifi_trace(priv, UDBG4, "sme_mgt_connection_config_get: unifi_mgt_connection_config_get_req -->\n");
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeConnectionConfigGetReqSend(0, CSR_WIFI_INTERFACE_IN_USE);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- /* store the reply */
- if (connectionConfig != NULL)
- memcpy((unsigned char*)connectionConfig,
- (unsigned char*)&priv->sme_reply.connectionConfig,
- sizeof(CsrWifiSmeConnectionConfig));
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_connection_config_get: unifi_mgt_connection_config_get_req <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
-
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtConnectionConfigGetReq(priv->smepriv, connectionConfig);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-int sme_mgt_connection_stats_get(unifi_priv_t *priv, CsrWifiSmeConnectionStats *connectionStats)
-{
-#ifdef CSR_SME_USERSPACE
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_connection_stats_get: invalid smepriv\n");
- return -EIO;
- }
-
- unifi_trace(priv, UDBG4, "sme_mgt_connection_stats_get: unifi_mgt_connection_stats_get_req -->\n");
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeConnectionStatsGetReqSend(0, CSR_WIFI_INTERFACE_IN_USE);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- /* store the reply */
- if (connectionStats != NULL)
- memcpy((unsigned char*)connectionStats,
- (unsigned char*)&priv->sme_reply.connectionStats,
- sizeof(CsrWifiSmeConnectionStats));
-
- unifi_trace(priv, UDBG4,
- "sme_mgt_connection_stats_get: unifi_mgt_connection_stats_get_req <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
-
- return convert_sme_error(priv->sme_reply.reply_status);
-#else
- CsrResult status;
- CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
- status = CsrWifiSmeMgtConnectionStatsGetReq(priv->smepriv, connectionStats);
- CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
- return convert_sme_error(status);
-#endif
-}
-
-#endif /* CSR_SUPPORT_WEXT */
-
-int sme_mgt_packet_filter_set(unifi_priv_t *priv)
-{
- CsrWifiIp4Address ipAddress = {{0xFF, 0xFF, 0xFF, 0xFF }};
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_packet_filter_set: invalid smepriv\n");
- return -EIO;
- }
- if (priv->packet_filters.arp_filter) {
- ipAddress.a[0] = (priv->sta_ip_address ) & 0xFF;
- ipAddress.a[1] = (priv->sta_ip_address >> 8) & 0xFF;
- ipAddress.a[2] = (priv->sta_ip_address >> 16) & 0xFF;
- ipAddress.a[3] = (priv->sta_ip_address >> 24) & 0xFF;
- }
-
- unifi_trace(priv, UDBG5,
- "sme_mgt_packet_filter_set: IP address %d.%d.%d.%d\n",
- ipAddress.a[0], ipAddress.a[1],
- ipAddress.a[2], ipAddress.a[3]);
-
- /* Doesn't block for a confirm */
- CsrWifiSmePacketFilterSetReqSend(0, CSR_WIFI_INTERFACE_IN_USE,
- priv->packet_filters.tclas_ies_length,
- priv->filter_tclas_ies,
- priv->packet_filters.filter_mode,
- ipAddress);
- return 0;
-}
-
-int sme_mgt_tspec(unifi_priv_t *priv, CsrWifiSmeListAction action,
- u32 tid, CsrWifiSmeDataBlock *tspec, CsrWifiSmeDataBlock *tclas)
-{
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_mgt_tspec: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiSmeTspecReqSend(0, CSR_WIFI_INTERFACE_IN_USE,
- action, tid, TRUE, 0,
- tspec->length, tspec->data,
- tclas->length, tclas->data);
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4, "sme_mgt_tspec: <-- (status=%d)\n", priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-}
-
-
-
-int sme_sys_suspend(unifi_priv_t *priv)
-{
- int r;
- CsrResult csrResult;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_sys_suspend: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- /* Suspend the SME, which MAY cause it to power down UniFi */
- CsrWifiRouterCtrlSuspendIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, 0, priv->wol_suspend);
- r = sme_wait_for_reply(priv, UNIFI_SME_SYS_LONG_TIMEOUT);
- if (r) {
- /* No reply - forcibly power down in case the request wasn't processed */
- unifi_notice(priv,
- "suspend: SME did not reply %s, ",
- (priv->ptest_mode | priv->wol_suspend) ? "leave powered" : "power off UniFi anyway\n");
-
- /* Leave power on for production test, though */
- if (!priv->ptest_mode) {
- /* Put UniFi to deep sleep, in case we can not power it off */
- CsrSdioClaim(priv->sdio);
- unifi_trace(priv, UDBG1, "Force deep sleep");
- csrResult = unifi_force_low_power_mode(priv->card);
-
- /* For WOL, the UniFi must stay powered */
- if (!priv->wol_suspend) {
- unifi_trace(priv, UDBG1, "Power off\n");
- CsrSdioPowerOff(priv->sdio);
- }
- CsrSdioRelease(priv->sdio);
- }
- }
-
- if (priv->wol_suspend) {
- unifi_trace(priv, UDBG1, "UniFi left powered for WOL\n");
-
- /* Remove the IRQ, which also disables the card SDIO interrupt.
- * Disabling the card SDIO interrupt enables the PIO WOL source.
- * Removal of the of the handler ensures that in both SDIO and PIO cases
- * the card interrupt only wakes the host. The card will be polled
- * after resume to handle any pending data.
- */
- if (csr_sdio_linux_remove_irq(priv->sdio)) {
- unifi_notice(priv, "WOL csr_sdio_linux_remove_irq failed\n");
- }
-
- if (enable_wol == UNIFI_WOL_SDIO) {
- /* Because csr_sdio_linux_remove_irq() disabled the card SDIO interrupt,
- * it must be left enabled to wake-on-SDIO.
- */
- unifi_trace(priv, UDBG1, "Enable card SDIO interrupt for SDIO WOL\n");
-
- CsrSdioClaim(priv->sdio);
- csrResult = CsrSdioInterruptEnable(priv->sdio);
- CsrSdioRelease(priv->sdio);
-
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "WOL CsrSdioInterruptEnable failed %d\n", csrResult);
- }
- } else {
- unifi_trace(priv, UDBG1, "Disabled card SDIO interrupt for PIO WOL\n");
- }
-
- /* Prevent the BH thread from running during the suspend.
- * Upon resume, sme_sys_resume() will trigger a wifi-on, this will cause
- * the BH thread to be re-enabled and reinstall the ISR.
- */
- priv->bh_thread.block_thread = 1;
-
- unifi_trace(priv, UDBG1, "unifi_suspend: suspended BH");
- }
-
- /* Consider UniFi to be uninitialised */
- priv->init_progress = UNIFI_INIT_NONE;
-
- unifi_trace(priv, UDBG1, "sme_sys_suspend: <-- (r=%d status=%d)\n", r, priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-}
-
-
-int sme_sys_resume(unifi_priv_t *priv)
-{
- int r;
-
- unifi_trace(priv, UDBG1, "sme_sys_resume %s\n", priv->wol_suspend ? "warm" : "");
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_sys_resume: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiRouterCtrlResumeIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, priv->wol_suspend);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_SYS_LONG_TIMEOUT);
- if (r)
- unifi_notice(priv,
- "resume: SME did not reply, return success anyway\n");
-
- return 0;
-}
-
-#ifdef CSR_SUPPORT_WEXT_AP
-int sme_ap_stop(unifi_priv_t *priv, u16 interface_tag)
-{
- int r;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_ap_stop: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiNmeApStopReqSend(0, interface_tag);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4,
- "sme_ap_stop <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-
-}
-
-int sme_ap_start(unifi_priv_t *priv, u16 interface_tag,
- CsrWifiSmeApConfig_t * ap_config)
-{
- int r;
- CsrWifiSmeApP2pGoConfig p2p_go_param;
- memset(&p2p_go_param, 0, sizeof(CsrWifiSmeApP2pGoConfig));
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_ap_start: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiNmeApStartReqSend(0, interface_tag, CSR_WIFI_AP_TYPE_LEGACY, FALSE,
- ap_config->ssid, 1, ap_config->channel,
- ap_config->credentials, ap_config->max_connections,
- p2p_go_param, FALSE);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4,
- "sme_ap_start <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-}
-
-int sme_ap_config(unifi_priv_t *priv,
- CsrWifiSmeApMacConfig *ap_mac_config,
- CsrWifiNmeApConfig *group_security_config)
-{
- int r;
- CsrWifiSmeApP2pGoConfig p2p_go_param;
- memset(&p2p_go_param, 0, sizeof(CsrWifiSmeApP2pGoConfig));
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_ap_config: invalid smepriv\n");
- return -EIO;
- }
-
- r = sme_init_request(priv);
- if (r)
- return -EIO;
-
- CsrWifiNmeApConfigSetReqSend(0, *group_security_config,
- *ap_mac_config);
-
- r = sme_wait_for_reply(priv, UNIFI_SME_MGT_SHORT_TIMEOUT);
- if (r)
- return r;
-
- unifi_trace(priv, UDBG4,
- "sme_ap_config <-- (r=%d status=%d)\n",
- r, priv->sme_reply.reply_status);
- return convert_sme_error(priv->sme_reply.reply_status);
-}
-#endif
diff --git a/drivers/staging/csr/sme_mgt.c b/drivers/staging/csr/sme_mgt.c
deleted file mode 100644
index 58d1b3b72932..000000000000
--- a/drivers/staging/csr/sme_mgt.c
+++ /dev/null
@@ -1,1012 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: sme_mgt.c
- *
- * PURPOSE:
- * This file contains the driver specific implementation of
- * the SME MGT SAP.
- * It is part of the porting exercise.
- *
- * Copyright (C) 2008-2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-
-#include "csr_wifi_hip_unifiversion.h"
-#include "unifi_priv.h"
-#include "csr_wifi_hip_conversions.h"
-/*
- * This file implements the SME MGT API. It contains the following functions:
- * CsrWifiSmeWifiFlightmodeCfmSend()
- * CsrWifiSmeWifiOnCfmSend()
- * CsrWifiSmeWifiOffCfmSend()
- * CsrWifiSmeWifiOffIndSend()
- * CsrWifiSmeScanFullCfmSend()
- * CsrWifiSmeScanResultsGetCfmSend()
- * CsrWifiSmeScanResultIndSend()
- * CsrWifiSmeScanResultsFlushCfmSend()
- * CsrWifiSmeConnectCfmSend()
- * CsrWifiSmeMediaStatusIndSend()
- * CsrWifiSmeDisconnectCfmSend()
- * CsrWifiSmeKeyCfmSend()
- * CsrWifiSmeMulticastAddressCfmSend()
- * CsrWifiSmeSetValueCfmSend()
- * CsrWifiSmeGetValueCfmSend()
- * CsrWifiSmeMicFailureIndSend()
- * CsrWifiSmePmkidCfmSend()
- * CsrWifiSmePmkidCandidateListIndSend()
- * CsrWifiSmeMibSetCfmSend()
- * CsrWifiSmeMibGetCfmSend()
- * CsrWifiSmeMibGetNextCfmSend()
- * CsrWifiSmeConnectionQualityIndSend()
- * CsrWifiSmePacketFilterSetCfmSend()
- * CsrWifiSmeTspecCfmSend()
- * CsrWifiSmeTspecIndSend()
- * CsrWifiSmeBlacklistCfmSend()
- * CsrWifiSmeEventMaskSetCfmSend()
- * CsrWifiSmeRoamStartIndSend()
- * CsrWifiSmeRoamCompleteIndSend()
- * CsrWifiSmeAssociationStartIndSend()
- * CsrWifiSmeAssociationCompleteIndSend()
- * CsrWifiSmeIbssStationIndSend()
- */
-
-
-void CsrWifiSmeMicFailureIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeMicFailureInd* ind = (CsrWifiSmeMicFailureInd*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeMicFailureIndSend: invalid priv\n");
- return;
- }
-
- unifi_trace(priv, UDBG1,
- "CsrWifiSmeMicFailureIndSend: count=%d, KeyType=%d\n",
- ind->count, ind->keyType);
-
- wext_send_michaelmicfailure_event(priv, ind->count, ind->address, ind->keyType, ind->interfaceTag);
-#endif
-}
-
-
-void CsrWifiSmePmkidCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmePmkidCfm* cfm = (CsrWifiSmePmkidCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmePmkidCfmSend: Invalid ospriv.\n");
- return;
- }
-
- /*
- * WEXT never does a GET operation the PMKIDs, so we don't need
- * handle data returned in pmkids.
- */
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-
-void CsrWifiSmePmkidCandidateListIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmePmkidCandidateListInd* ind = (CsrWifiSmePmkidCandidateListInd*)msg;
- int i;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "CsrWifiSmePmkidCandidateListIndSend: invalid smepriv\n");
- return;
- }
-
- for (i = 0; i < ind->pmkidCandidatesCount; i++)
- {
- wext_send_pmkid_candidate_event(priv, ind->pmkidCandidates[i].bssid, ind->pmkidCandidates[i].preAuthAllowed, ind->interfaceTag);
- }
-#endif
-}
-
-void CsrWifiSmeScanResultsFlushCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeScanResultsGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeScanResultsGetCfm* cfm = (CsrWifiSmeScanResultsGetCfm*)msg;
- int bytesRequired = cfm->scanResultsCount * sizeof(CsrWifiSmeScanResult);
- int i;
- u8* current_buff;
- CsrWifiSmeScanResult* scanCopy;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeScanResultsGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- /* Calc the size of the buffer reuired */
- for (i = 0; i < cfm->scanResultsCount; ++i) {
- const CsrWifiSmeScanResult *scan_result = &cfm->scanResults[i];
- bytesRequired += scan_result->informationElementsLength;
- }
-
- /* Take a Copy of the scan Results :-) */
- scanCopy = kmalloc(bytesRequired, GFP_KERNEL);
- memcpy(scanCopy, cfm->scanResults, sizeof(CsrWifiSmeScanResult) * cfm->scanResultsCount);
-
- /* Take a Copy of the Info Elements AND update the scan result pointers */
- current_buff = (u8*)&scanCopy[cfm->scanResultsCount];
- for (i = 0; i < cfm->scanResultsCount; ++i)
- {
- CsrWifiSmeScanResult *scan_result = &scanCopy[i];
- memcpy(current_buff, scan_result->informationElements, scan_result->informationElementsLength);
- scan_result->informationElements = current_buff;
- current_buff += scan_result->informationElementsLength;
- }
-
- priv->sme_reply.reply_scan_results_count = cfm->scanResultsCount;
- priv->sme_reply.reply_scan_results = scanCopy;
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-
-void CsrWifiSmeScanFullCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeScanFullCfm* cfm = (CsrWifiSmeScanFullCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeScanFullCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-
-void CsrWifiSmeScanResultIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-
-}
-
-
-void CsrWifiSmeConnectCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeConnectCfm* cfm = (CsrWifiSmeConnectCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeConnectCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-
-void CsrWifiSmeDisconnectCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeDisconnectCfm* cfm = (CsrWifiSmeDisconnectCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeDisconnectCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-
-void CsrWifiSmeKeyCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeKeyCfm* cfm = (CsrWifiSmeKeyCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeKeyCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-
-void CsrWifiSmeMulticastAddressCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeMulticastAddressCfm* cfm = (CsrWifiSmeMulticastAddressCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeMulticastAddressCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeWifiFlightmodeCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeWifiFlightmodeCfm* cfm = (CsrWifiSmeWifiFlightmodeCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeWifiFlightmodeCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeWifiOnCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeWifiOnCfm* cfm = (CsrWifiSmeWifiOnCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeWifiOnCfmSend: Invalid ospriv.\n");
- return;
- }
-
- unifi_trace(priv, UDBG4,
- "CsrWifiSmeWifiOnCfmSend: wake up status %d\n", cfm->status);
-#ifdef CSR_SUPPORT_WEXT_AP
- sme_complete_request(priv, cfm->status);
-#endif
-
-#endif
-}
-
-void CsrWifiSmeWifiOffCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeWifiOffCfm* cfm = (CsrWifiSmeWifiOffCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeWifiOffCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-
-void CsrWifiSmeWifiOffIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeWifiOffInd* ind = (CsrWifiSmeWifiOffInd*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiRouterCtrlStoppedReqSend: Invalid ospriv.\n");
- return;
- }
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlStoppedReqSend: invalid smepriv\n");
- return;
- }
-
- /*
- * If the status indicates an error, the SME is in a stopped state.
- * We need to start it again in order to reinitialise UniFi.
- */
- switch (ind->reason) {
- case CSR_WIFI_SME_CONTROL_INDICATION_ERROR:
- unifi_trace(priv, UDBG1,
- "CsrWifiRouterCtrlStoppedReqSend: Restarting SME (ind:%d)\n",
- ind->reason);
-
- /* On error, restart the SME */
- sme_mgt_wifi_on(priv);
- break;
- case CSR_WIFI_SME_CONTROL_INDICATION_EXIT:
-#ifdef CSR_SUPPORT_WEXT_AP
- sme_complete_request(priv, 0);
-#endif
- break;
- default:
- break;
- }
-
-#endif
-}
-
-void CsrWifiSmeVersionsGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeVersionsGetCfm* cfm = (CsrWifiSmeVersionsGetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeVersionsGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- priv->sme_reply.versions = cfm->versions;
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmePowerConfigGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmePowerConfigGetCfm* cfm = (CsrWifiSmePowerConfigGetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmePowerConfigGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- priv->sme_reply.powerConfig = cfm->powerConfig;
- sme_complete_request(priv, cfm->status);
-}
-
-void CsrWifiSmeHostConfigGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeHostConfigGetCfm* cfm = (CsrWifiSmeHostConfigGetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeHostConfigGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- priv->sme_reply.hostConfig = cfm->hostConfig;
- sme_complete_request(priv, cfm->status);
-}
-
-void CsrWifiSmeCoexInfoGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeCoexInfoGetCfm* cfm = (CsrWifiSmeCoexInfoGetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeCoexInfoGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- priv->sme_reply.coexInfo = cfm->coexInfo;
- sme_complete_request(priv, cfm->status);
-}
-
-void CsrWifiSmeCoexConfigGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeCoexConfigGetCfm* cfm = (CsrWifiSmeCoexConfigGetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeCoexConfigGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- priv->sme_reply.coexConfig = cfm->coexConfig;
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeMibConfigGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeMibConfigGetCfm* cfm = (CsrWifiSmeMibConfigGetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeMibConfigGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- priv->sme_reply.mibConfig = cfm->mibConfig;
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeConnectionInfoGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeConnectionInfoGetCfm* cfm = (CsrWifiSmeConnectionInfoGetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeConnectionInfoGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- priv->sme_reply.connectionInfo = cfm->connectionInfo;
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeConnectionConfigGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeConnectionConfigGetCfm* cfm = (CsrWifiSmeConnectionConfigGetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeConnectionConfigGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- priv->sme_reply.connectionConfig = cfm->connectionConfig;
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeConnectionStatsGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeConnectionStatsGetCfm* cfm = (CsrWifiSmeConnectionStatsGetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeConnectionStatsGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- priv->sme_reply.connectionStats = cfm->connectionStats;
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeMibSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeMibSetCfm* cfm = (CsrWifiSmeMibSetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeMibSetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeMibGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeMibGetCfm* cfm = (CsrWifiSmeMibGetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeMibGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- if (cfm->mibAttribute == NULL) {
- unifi_error(priv, "CsrWifiSmeMibGetCfmSend: Empty reply.\n");
- sme_complete_request(priv, cfm->status);
- return;
- }
-
- if ((priv->mib_cfm_buffer != NULL) &&
- (priv->mib_cfm_buffer_length >= cfm->mibAttributeLength)) {
- memcpy(priv->mib_cfm_buffer, cfm->mibAttribute, cfm->mibAttributeLength);
- priv->mib_cfm_buffer_length = cfm->mibAttributeLength;
- } else {
- unifi_error(priv,
- "CsrWifiSmeMibGetCfmSend: No room to store MIB data (have=%d need=%d).\n",
- priv->mib_cfm_buffer_length, cfm->mibAttributeLength);
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeMibGetNextCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeMibGetNextCfm* cfm = (CsrWifiSmeMibGetNextCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeMibGetNextCfmSend: Invalid ospriv.\n");
- return;
- }
-
- /* Need to copy MIB data */
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeConnectionQualityIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeConnectionQualityInd* ind = (CsrWifiSmeConnectionQualityInd*)msg;
- int signal, noise, snr;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeConnectionQualityIndSend: Invalid ospriv.\n");
- return;
- }
-
- /*
- * level and noise below are mapped into an unsigned 8 bit number,
- * ranging from [-192; 63]. The way this is achieved is simply to
- * add 0x100 onto the number if it is negative,
- * once clipped to the correct range.
- */
- signal = ind->linkQuality.unifiRssi;
- /* Clip range of snr */
- snr = (ind->linkQuality.unifiSnr > 0) ? ind->linkQuality.unifiSnr : 0; /* In dB relative, from 0 - 255 */
- snr = (snr < 255) ? snr : 255;
- noise = signal - snr;
-
- /* Clip range of signal */
- signal = (signal < 63) ? signal : 63;
- signal = (signal > -192) ? signal : -192;
-
- /* Clip range of noise */
- noise = (noise < 63) ? noise : 63;
- noise = (noise > -192) ? noise : -192;
-
- /* Make u8 */
- signal = ( signal < 0 ) ? signal + 0x100 : signal;
- noise = ( noise < 0 ) ? noise + 0x100 : noise;
-
- priv->wext_wireless_stats.qual.level = (u8)signal; /* -192 : 63 */
- priv->wext_wireless_stats.qual.noise = (u8)noise; /* -192 : 63 */
- priv->wext_wireless_stats.qual.qual = snr; /* 0 : 255 */
- priv->wext_wireless_stats.qual.updated = 0;
-
-#if WIRELESS_EXT > 16
- priv->wext_wireless_stats.qual.updated |= IW_QUAL_LEVEL_UPDATED |
- IW_QUAL_NOISE_UPDATED |
- IW_QUAL_QUAL_UPDATED;
-#if WIRELESS_EXT > 18
- priv->wext_wireless_stats.qual.updated |= IW_QUAL_DBM;
-#endif
-#endif
-#endif
-}
-
-void CsrWifiSmePacketFilterSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmePacketFilterSetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- /* The packet filter set request does not block for a reply */
-}
-
-void CsrWifiSmeTspecCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeTspecCfm* cfm = (CsrWifiSmeTspecCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeTspecCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-}
-
-void CsrWifiSmeTspecIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeBlacklistCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeEventMaskSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-
-void CsrWifiSmeRoamStartIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeRoamCompleteIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- /* This is called when the association completes, before any 802.1x authentication */
-}
-
-void CsrWifiSmeAssociationStartIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeAssociationCompleteIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeIbssStationIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeWifiOnIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeRestrictedAccessEnableCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeRestrictedAccessDisableCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-
-void CsrWifiSmeAdhocConfigGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeAdhocConfigSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeAdhocConfigSetCfm* cfm = (CsrWifiSmeAdhocConfigSetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeSmeConfigSetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeCalibrationDataGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeCalibrationDataSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeCalibrationDataSetCfm* cfm = (CsrWifiSmeCalibrationDataSetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeSmeConfigSetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeCcxConfigGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeCcxConfigSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeCcxConfigSetCfm* cfm = (CsrWifiSmeCcxConfigSetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeSmeConfigSetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeCloakedSsidsGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeCloakedSsidsSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeCloakedSsidsSetCfm* cfm = (CsrWifiSmeCloakedSsidsSetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeSmeConfigSetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-
-void CsrWifiSmeCoexConfigSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeCoexConfigSetCfm* cfm = (CsrWifiSmeCoexConfigSetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeSmeConfigSetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeHostConfigSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeHostConfigSetCfm* cfm = (CsrWifiSmeHostConfigSetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeSmeConfigSetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-}
-
-void CsrWifiSmeLinkQualityGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-
-void CsrWifiSmeMibConfigSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeMibConfigSetCfm* cfm = (CsrWifiSmeMibConfigSetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeSmeConfigSetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmePermanentMacAddressGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmePowerConfigSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmePowerConfigSetCfm* cfm = (CsrWifiSmePowerConfigSetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeSmeConfigSetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-}
-
-void CsrWifiSmeRegulatoryDomainInfoGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeRoamingConfigGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeMediaStatusIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeMediaStatusInd* ind = (CsrWifiSmeMediaStatusInd*)msg;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "CsrWifiSmeMediaStatusIndSend: invalid smepriv\n");
- return;
- }
-
- if (ind->mediaStatus == CSR_WIFI_SME_MEDIA_STATUS_CONNECTED) {
- /*
- * Send wireless-extension event up to userland to announce
- * connection.
- */
- wext_send_assoc_event(priv,
- (unsigned char *)ind->connectionInfo.bssid.a,
- (unsigned char *)ind->connectionInfo.assocReqInfoElements,
- ind->connectionInfo.assocReqInfoElementsLength,
- (unsigned char *)ind->connectionInfo.assocRspInfoElements,
- ind->connectionInfo.assocRspInfoElementsLength,
- (unsigned char *)ind->connectionInfo.assocScanInfoElements,
- ind->connectionInfo.assocScanInfoElementsLength);
-
- unifi_trace(priv, UDBG2, "CsrWifiSmeMediaStatusIndSend: IBSS=%pM\n",
- ind->connectionInfo.bssid.a);
-
- sme_mgt_packet_filter_set(priv);
-
- } else {
- /*
- * Send wireless-extension event up to userland to announce
- * connection lost to a BSS.
- */
- wext_send_disassoc_event(priv);
- }
-#endif
-}
-
-void CsrWifiSmeRoamingConfigSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeRoamingConfigSetCfm* cfm = (CsrWifiSmeRoamingConfigSetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeRoamingConfigSetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-}
-
-void CsrWifiSmeScanConfigGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeScanConfigSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_SUPPORT_WEXT
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeScanConfigSetCfm* cfm = (CsrWifiSmeScanConfigSetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeSmeConfigSetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-#endif
-}
-
-void CsrWifiSmeStationMacAddressGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeSmeCommonConfigGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeSmeCommonConfigGetCfm* cfm = (CsrWifiSmeSmeCommonConfigGetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeSmeCommonConfigGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- priv->sme_reply.deviceConfig = cfm->deviceConfig;
- sme_complete_request(priv, cfm->status);
-}
-
-void CsrWifiSmeSmeStaConfigGetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeSmeStaConfigGetCfm* cfm = (CsrWifiSmeSmeStaConfigGetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeSmeStaConfigGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- priv->sme_reply.staConfig = cfm->smeConfig;
- sme_complete_request(priv, cfm->status);
-}
-
-void CsrWifiSmeSmeCommonConfigSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeSmeCommonConfigSetCfm* cfm = (CsrWifiSmeSmeCommonConfigSetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeSmeCommonConfigGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-}
-
-void CsrWifiSmeSmeStaConfigSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiSmeSmeStaConfigSetCfm* cfm = (CsrWifiSmeSmeStaConfigSetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiSmeSmeStaConfigGetCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-}
-
-void CsrWifiSmeGetInterfaceCapabilityCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeErrorIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeInfoIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeCoreDumpIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-void CsrWifiSmeAmpStatusChangeIndHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiSmeActivateCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-void CsrWifiSmeDeactivateCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-#ifdef CSR_SUPPORT_WEXT
-#ifdef CSR_SUPPORT_WEXT_AP
-void CsrWifiNmeApStartCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiNmeApStartCfm* cfm = (CsrWifiNmeApStartCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiNmeApStartCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-}
-
-void CsrWifiNmeApStopCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiNmeApStopCfm* cfm = (CsrWifiNmeApStopCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiNmeApStopCfmSend: Invalid ospriv.\n");
- return;
- }
-
- sme_complete_request(priv, cfm->status);
-}
-
-void CsrWifiNmeApConfigSetCfmHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiNmeApConfigSetCfm* cfm = (CsrWifiNmeApConfigSetCfm*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiNmeApConfigSetCfmSend: Invalid ospriv.\n");
- return;
- }
- sme_complete_request(priv, cfm->status);
-}
-#endif
-#endif
diff --git a/drivers/staging/csr/sme_native.c b/drivers/staging/csr/sme_native.c
deleted file mode 100644
index d0b9be31e12c..000000000000
--- a/drivers/staging/csr/sme_native.c
+++ /dev/null
@@ -1,566 +0,0 @@
-/*
- * ***************************************************************************
- *
- * FILE: sme_native.c
- *
- * Copyright (C) 2005-2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ***************************************************************************
- */
-
-#include <linux/netdevice.h>
-#include "unifi_priv.h"
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_conversions.h"
-
-static const unsigned char wildcard_address[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
-int
-uf_sme_init(unifi_priv_t *priv)
-{
- sema_init(&priv->mlme_blocking_mutex, 1);
-
-#ifdef CSR_SUPPORT_WEXT
- {
- int r = uf_init_wext_interface(priv);
- if (r != 0) {
- return r;
- }
- }
-#endif
-
- return 0;
-} /* uf_sme_init() */
-
-
-void
-uf_sme_deinit(unifi_priv_t *priv)
-{
-
- /* Free memory allocated for the scan table */
-/* unifi_clear_scan_table(priv); */
-
- /* Cancel any pending workqueue tasks */
- flush_workqueue(priv->unifi_workqueue);
-
-#ifdef CSR_SUPPORT_WEXT
- uf_deinit_wext_interface(priv);
-#endif
-
-} /* uf_sme_deinit() */
-
-
-int sme_mgt_wifi_on(unifi_priv_t *priv)
-{
- int r, i;
- s32 csrResult;
-
- if (priv == NULL) {
- return -EINVAL;
- }
- /* Initialize the interface mode to None */
- for (i=0; i<CSR_WIFI_NUM_INTERFACES; i++) {
- priv->interfacePriv[i]->interfaceMode = 0;
- }
-
- /* Set up interface mode so that get_packet_priority() can
- * select the right QOS priority when WMM is enabled.
- */
- priv->interfacePriv[0]->interfaceMode = CSR_WIFI_ROUTER_CTRL_MODE_STA;
-
- r = uf_request_firmware_files(priv, UNIFI_FW_STA);
- if (r) {
- unifi_error(priv, "sme_mgt_wifi_on: Failed to get f/w\n");
- return r;
- }
-
- /*
- * The request to initialise UniFi might come while UniFi is running.
- * We need to block all I/O activity until the reset completes, otherwise
- * an SDIO error might occur resulting an indication to the SME which
- * makes it think that the initialisation has failed.
- */
- priv->bh_thread.block_thread = 1;
-
- /* Power on UniFi */
- CsrSdioClaim(priv->sdio);
- csrResult = CsrSdioPowerOn(priv->sdio);
- CsrSdioRelease(priv->sdio);
- if(csrResult != CSR_RESULT_SUCCESS && csrResult != CSR_SDIO_RESULT_NOT_RESET) {
- return -EIO;
- }
-
- if (csrResult == CSR_RESULT_SUCCESS) {
- /* Initialise UniFi hardware */
- r = uf_init_hw(priv);
- if (r) {
- return r;
- }
- }
-
- /* Re-enable the I/O thread */
- priv->bh_thread.block_thread = 0;
-
- /* Disable deep sleep signalling during the firmware initialisation, to
- * prevent the wakeup mechanism raising the SDIO clock beyond INIT before
- * the first MLME-RESET.ind. It gets re-enabled at the CONNECTED.ind,
- * immediately after the MLME-RESET.ind
- */
- csrResult = unifi_configure_low_power_mode(priv->card,
- UNIFI_LOW_POWER_DISABLED,
- UNIFI_PERIODIC_WAKE_HOST_DISABLED);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_warning(priv,
- "sme_mgt_wifi_on: unifi_configure_low_power_mode() returned an error\n");
- }
-
-
- /* Start the I/O thread */
- CsrSdioClaim(priv->sdio);
- r = uf_init_bh(priv);
- if (r) {
- CsrSdioPowerOff(priv->sdio);
- CsrSdioRelease(priv->sdio);
- return r;
- }
- CsrSdioRelease(priv->sdio);
-
- priv->init_progress = UNIFI_INIT_FW_DOWNLOADED;
-
- return 0;
-}
-
-int
-sme_sys_suspend(unifi_priv_t *priv)
-{
- const int interfaceNum = 0; /* FIXME */
- CsrResult csrResult;
-
- /* Abort any pending requests. */
- uf_abort_mlme(priv);
-
- /* Allow our mlme request to go through. */
- priv->io_aborted = 0;
-
- /* Send MLME-RESET.req to UniFi. */
- unifi_reset_state(priv, priv->netdev[interfaceNum]->dev_addr, 0);
-
- /* Stop the network traffic */
- netif_carrier_off(priv->netdev[interfaceNum]);
-
- /* Put UniFi to deep sleep */
- CsrSdioClaim(priv->sdio);
- csrResult = unifi_force_low_power_mode(priv->card);
- CsrSdioRelease(priv->sdio);
-
- return 0;
-} /* sme_sys_suspend() */
-
-
-int
-sme_sys_resume(unifi_priv_t *priv)
-{
-#ifdef CSR_SUPPORT_WEXT
- /* Send disconnect event so clients will re-initialise connection. */
- memset(priv->wext_conf.current_ssid, 0, UNIFI_MAX_SSID_LEN);
- memset((void*)priv->wext_conf.current_bssid, 0, ETH_ALEN);
- priv->wext_conf.capability = 0;
- wext_send_disassoc_event(priv);
-#endif
- return 0;
-} /* sme_sys_resume() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * sme_native_log_event
- *
- * Callback function to be registered as the SME event callback.
- * Copies the signal content into a new udi_log_t struct and adds
- * it to the read queue for the SME client.
- *
- * Arguments:
- * arg This is the value given to unifi_add_udi_hook, in
- * this case a pointer to the client instance.
- * signal Pointer to the received signal.
- * signal_len Size of the signal structure in bytes.
- * bulkdata Pointers to any associated bulk data.
- * dir Direction of the signal. Zero means from host,
- * non-zero means to host.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void
-sme_native_log_event(ul_client_t *pcli,
- const u8 *sig_packed, int sig_len,
- const bulk_data_param_t *bulkdata,
- int dir)
-{
- unifi_priv_t *priv;
- udi_log_t *logptr;
- u8 *p;
- int i, r;
- int signal_len;
- int total_len;
- udi_msg_t *msgptr;
- CSR_SIGNAL signal;
- ul_client_t *client = pcli;
-
- if (client == NULL) {
- unifi_error(NULL, "sme_native_log_event: client has exited\n");
- return;
- }
-
- priv = uf_find_instance(client->instance);
- if (!priv) {
- unifi_error(priv, "invalid priv\n");
- return;
- }
-
- /* Just a sanity check */
- if ((sig_packed == NULL) || (sig_len <= 0)) {
- return;
- }
-
- /* Get the unpacked signal */
- r = read_unpack_signal(sig_packed, &signal);
- if (r == 0) {
- signal_len = SigGetSize(&signal);
- } else {
- u16 receiver_id = CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sig_packed) + sizeof(u16)) & 0xFF00;
-
- /* The control indications are 1 byte, pass them to client. */
- if (sig_len == 1) {
- unifi_trace(priv, UDBG5,
- "Control indication (0x%x) for native SME.\n",
- *sig_packed);
-
- *(u8*)&signal = *sig_packed;
- signal_len = sig_len;
- } else if (receiver_id == 0) {
- /*
- * Also "unknown" signals with a ReceiverId of 0 are passed to the client
- * without unpacking. (This is a code size optimisation to allow signals
- * that the driver not interested in to be dropped from the unpack code).
- */
- unifi_trace(priv, UDBG5,
- "Signal 0x%.4X with ReceiverId 0 for native SME.\n",
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN(sig_packed));
-
- *(u8*)&signal = *sig_packed;
- signal_len = sig_len;
- } else {
- unifi_error(priv,
- "sme_native_log_event - Received unknown signal 0x%.4X.\n",
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN(sig_packed));
- return;
- }
- }
-
- unifi_trace(priv, UDBG3, "sme_native_log_event: signal 0x%.4X for %d\n",
- signal.SignalPrimitiveHeader.SignalId,
- client->client_id);
-
- total_len = signal_len;
- /* Calculate the buffer we need to store signal plus bulk data */
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++) {
- total_len += bulkdata->d[i].data_length;
- }
-
- /* Allocate log structure plus actual signal. */
- logptr = kmalloc(sizeof(udi_log_t) + total_len, GFP_KERNEL);
-
- if (logptr == NULL) {
- unifi_error(priv,
- "Failed to allocate %d bytes for a UDI log record\n",
- sizeof(udi_log_t) + total_len);
- return;
- }
-
- /* Fill in udi_log struct */
- INIT_LIST_HEAD(&logptr->q);
- msgptr = &logptr->msg;
- msgptr->length = sizeof(udi_msg_t) + total_len;
- msgptr->timestamp = jiffies_to_msecs(jiffies);
- msgptr->direction = dir;
- msgptr->signal_length = signal_len;
-
- /* Copy signal and bulk data to the log */
- p = (u8 *)(msgptr + 1);
- memcpy(p, &signal, signal_len);
- p += signal_len;
-
- /* Append any bulk data */
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++) {
- int len = bulkdata->d[i].data_length;
-
- /*
- * Len here might not be the same as the length in the bulk data slot.
- * The slot length will always be even, but len could be odd.
- */
- if (len > 0) {
- if (bulkdata->d[i].os_data_ptr) {
- memcpy(p, bulkdata->d[i].os_data_ptr, len);
- } else {
- memset(p, 0, len);
- }
- p += len;
- }
- }
-
- /* Add to tail of log queue */
- down(&client->udi_sem);
- list_add_tail(&logptr->q, &client->udi_log);
- up(&client->udi_sem);
-
- /* Wake any waiting user process */
- wake_up_interruptible(&client->udi_wq);
-
-} /* sme_native_log_event() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_ta_indicate_protocol
- *
- * Report that a packet of a particular type has been seen
- *
- * Arguments:
- * drv_priv The device context pointer passed to ta_init.
- * protocol The protocol type enum value.
- * direction Whether the packet was a tx or rx.
- * src_addr The source MAC address from the data packet.
- *
- * Returns:
- * None.
- *
- * Notes:
- * We defer the actual sending to a background workqueue,
- * see uf_ta_ind_wq().
- * ---------------------------------------------------------------------------
- */
-void
-unifi_ta_indicate_protocol(void *ospriv,
- CsrWifiRouterCtrlTrafficPacketType packet_type,
- CsrWifiRouterCtrlProtocolDirection direction,
- const CsrWifiMacAddress *src_addr)
-{
-
-} /* unifi_ta_indicate_protocol */
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_ta_indicate_sampling
- *
- * Send the TA sampling information to the SME.
- *
- * Arguments:
- * drv_priv The device context pointer passed to ta_init.
- * stats The TA sampling data to send.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void
-unifi_ta_indicate_sampling(void *ospriv, CsrWifiRouterCtrlTrafficStats *stats)
-{
-
-} /* unifi_ta_indicate_sampling() */
-
-
-void
-unifi_ta_indicate_l4stats(void *ospriv,
- u32 rxTcpThroughput,
- u32 txTcpThroughput,
- u32 rxUdpThroughput,
- u32 txUdpThroughput)
-{
-
-} /* unifi_ta_indicate_l4stats() */
-
-/*
- * ---------------------------------------------------------------------------
- * uf_native_process_udi_signal
- *
- * Process interesting signals from the UDI interface.
- *
- * Arguments:
- * pcli A pointer to the client instance.
- * signal Pointer to the received signal.
- * signal_len Size of the signal structure in bytes.
- * bulkdata Pointers to any associated bulk data.
- * dir Direction of the signal. Zero means from host,
- * non-zero means to host.
- *
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void
-uf_native_process_udi_signal(ul_client_t *pcli,
- const u8 *packed_signal, int packed_signal_len,
- const bulk_data_param_t *bulkdata, int dir)
-{
-
-} /* uf_native_process_udi_signal() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * sme_native_mlme_event_handler
- *
- * Callback function to be used as the udi_event_callback when registering
- * as a client.
- * This function implements a blocking request-reply interface for WEXT.
- * To use it, a client specifies this function as the udi_event_callback
- * to ul_register_client(). The signal dispatcher in
- * unifi_receive_event() will call this function to deliver a signal.
- *
- * Arguments:
- * pcli Pointer to the client instance.
- * signal Pointer to the received signal.
- * signal_len Size of the signal structure in bytes.
- * bulkdata Pointer to structure containing any associated bulk data.
- * dir Direction of the signal. Zero means from host,
- * non-zero means to host.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void
-sme_native_mlme_event_handler(ul_client_t *pcli,
- const u8 *sig_packed, int sig_len,
- const bulk_data_param_t *bulkdata,
- int dir)
-{
- CSR_SIGNAL signal;
- int signal_len;
- unifi_priv_t *priv = uf_find_instance(pcli->instance);
- int id, r;
-
- /* Just a sanity check */
- if ((sig_packed == NULL) || (sig_len <= 0)) {
- return;
- }
-
- /* Get the unpacked signal */
- r = read_unpack_signal(sig_packed, &signal);
- if (r == 0) {
- signal_len = SigGetSize(&signal);
- } else {
- unifi_error(priv,
- "sme_native_mlme_event_handler - Received unknown signal 0x%.4X.\n",
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN(sig_packed));
- return;
- }
-
- id = signal.SignalPrimitiveHeader.SignalId;
- unifi_trace(priv, UDBG4, "wext - Process signal 0x%.4X\n", id);
-
- /*
- * Take the appropriate action for the signal.
- */
- switch (id) {
- /*
- * Confirm replies from UniFi.
- * These all have zero or one CSR_DATAREF member. (FIXME: check this is still true for softmac)
- */
- case CSR_MA_PACKET_CONFIRM_ID:
- case CSR_MLME_RESET_CONFIRM_ID:
- case CSR_MLME_GET_CONFIRM_ID:
- case CSR_MLME_SET_CONFIRM_ID:
- case CSR_MLME_GET_NEXT_CONFIRM_ID:
- case CSR_MLME_POWERMGT_CONFIRM_ID:
- case CSR_MLME_SCAN_CONFIRM_ID:
- case CSR_MLME_HL_SYNC_CONFIRM_ID:
- case CSR_MLME_MEASURE_CONFIRM_ID:
- case CSR_MLME_SETKEYS_CONFIRM_ID:
- case CSR_MLME_DELETEKEYS_CONFIRM_ID:
- case CSR_MLME_HL_SYNC_CANCEL_CONFIRM_ID:
- case CSR_MLME_ADD_PERIODIC_CONFIRM_ID:
- case CSR_MLME_DEL_PERIODIC_CONFIRM_ID:
- case CSR_MLME_ADD_AUTONOMOUS_SCAN_CONFIRM_ID:
- case CSR_MLME_DEL_AUTONOMOUS_SCAN_CONFIRM_ID:
- case CSR_MLME_SET_PACKET_FILTER_CONFIRM_ID:
- case CSR_MLME_STOP_MEASURE_CONFIRM_ID:
- case CSR_MLME_PAUSE_AUTONOMOUS_SCAN_CONFIRM_ID:
- case CSR_MLME_ADD_TRIGGERED_GET_CONFIRM_ID:
- case CSR_MLME_DEL_TRIGGERED_GET_CONFIRM_ID:
- case CSR_MLME_ADD_BLACKOUT_CONFIRM_ID:
- case CSR_MLME_DEL_BLACKOUT_CONFIRM_ID:
- case CSR_MLME_ADD_RX_TRIGGER_CONFIRM_ID:
- case CSR_MLME_DEL_RX_TRIGGER_CONFIRM_ID:
- case CSR_MLME_CONNECT_STATUS_CONFIRM_ID:
- case CSR_MLME_MODIFY_BSS_PARAMETER_CONFIRM_ID:
- case CSR_MLME_ADD_TEMPLATE_CONFIRM_ID:
- case CSR_MLME_CONFIG_QUEUE_CONFIRM_ID:
- case CSR_MLME_ADD_TSPEC_CONFIRM_ID:
- case CSR_MLME_DEL_TSPEC_CONFIRM_ID:
- case CSR_MLME_START_AGGREGATION_CONFIRM_ID:
- case CSR_MLME_STOP_AGGREGATION_CONFIRM_ID:
- case CSR_MLME_SM_START_CONFIRM_ID:
- case CSR_MLME_LEAVE_CONFIRM_ID:
- case CSR_MLME_SET_TIM_CONFIRM_ID:
- case CSR_MLME_GET_KEY_SEQUENCE_CONFIRM_ID:
- case CSR_MLME_SET_CHANNEL_CONFIRM_ID:
- case CSR_MLME_ADD_MULTICAST_ADDRESS_CONFIRM_ID:
- case CSR_DEBUG_GENERIC_CONFIRM_ID:
- unifi_mlme_copy_reply_and_wakeup_client(pcli, &signal, signal_len, bulkdata);
- break;
-
- case CSR_MLME_CONNECTED_INDICATION_ID:
- /* We currently ignore the connected-ind for softmac f/w development */
- unifi_info(priv, "CSR_MLME_CONNECTED_INDICATION_ID ignored\n");
- break;
-
- default:
- break;
- }
-
-} /* sme_native_mlme_event_handler() */
-
-
-
-/*
- * -------------------------------------------------------------------------
- * unifi_reset_state
- *
- * Ensure that a MAC address has been set.
- * Send the MLME-RESET signal.
- * This must be called at least once before starting to do any
- * network activities (e.g. scan, join etc).
- *
- * Arguments:
- * priv Pointer to device private context struct
- * macaddr Pointer to chip MAC address.
- * If this is FF:FF:FF:FF:FF:FF it will be replaced
- * with the MAC address from the chip.
- * set_default_mib 1 if the f/w must reset the MIB to the default values
- * 0 otherwise
- *
- * Returns:
- * 0 on success, an error code otherwise.
- * -------------------------------------------------------------------------
- */
-int
-unifi_reset_state(unifi_priv_t *priv, unsigned char *macaddr,
- unsigned char set_default_mib)
-{
- int r = 0;
-
-#ifdef CSR_SUPPORT_WEXT
- /* The reset clears any 802.11 association. */
- priv->wext_conf.flag_associated = 0;
-#endif
-
- return r;
-} /* unifi_reset_state() */
-
diff --git a/drivers/staging/csr/sme_sys.c b/drivers/staging/csr/sme_sys.c
deleted file mode 100644
index b5258d71d250..000000000000
--- a/drivers/staging/csr/sme_sys.c
+++ /dev/null
@@ -1,3260 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: sme_sys.c
- *
- * PURPOSE:
- * Driver specific implementation of the SME SYS SAP.
- * It is part of the porting exercise.
- *
- * Copyright (C) 2008-2011 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-
-#include "csr_wifi_hip_unifiversion.h"
-#include "unifi_priv.h"
-#include "csr_wifi_hip_conversions.h"
-#ifdef CSR_SUPPORT_WEXT_AP
-#include "csr_wifi_sme_sef.h"
-#endif
-
-/*
- * This file implements the SME SYS API and contains the following functions:
- * CsrWifiRouterCtrlMediaStatusReqHandler()
- * CsrWifiRouterCtrlHipReqHandler()
- * CsrWifiRouterCtrlPortConfigureReqHandler()
- * CsrWifiRouterCtrlWifiOnReqHandler()
- * CsrWifiRouterCtrlWifiOffReqHandler()
- * CsrWifiRouterCtrlSuspendResHandler()
- * CsrWifiRouterCtrlResumeResHandler()
- * CsrWifiRouterCtrlQosControlReqHandler()
- * CsrWifiRouterCtrlConfigurePowerModeReqHandler()
- * CsrWifiRouterCtrlWifiOnResHandler()
- * CsrWifiRouterCtrlWifiOffRspHandler()
- * CsrWifiRouterCtrlMulticastAddressResHandler()
- * CsrWifiRouterCtrlTrafficConfigReqHandler()
- * CsrWifiRouterCtrlTrafficClassificationReqHandler()
- * CsrWifiRouterCtrlTclasAddReqHandler()
- * CsrWifiRouterCtrlTclasDelReqHandler()
- * CsrWifiRouterCtrlSetModeReqHandler()
- * CsrWifiRouterCtrlWapiMulticastFilterReqHandler()
- * CsrWifiRouterCtrlWapiUnicastFilterReqHandler()
- * CsrWifiRouterCtrlWapiUnicastTxPktReqHandler()
- * CsrWifiRouterCtrlWapiRxPktReqHandler()
- * CsrWifiRouterCtrlWapiFilterReqHandler()
- */
-
-#ifdef CSR_SUPPORT_SME
-static void check_inactivity_timer_expire_func(unsigned long data);
-void uf_send_disconnected_ind_wq(struct work_struct *work);
-#endif
-
-void send_auto_ma_packet_confirm(unifi_priv_t *priv,
- netInterface_priv_t *interfacePriv,
- struct list_head *buffered_frames_list)
-{
- tx_buffered_packets_t *buffered_frame_item = NULL;
- struct list_head *listHead;
- struct list_head *placeHolder;
- int client_id;
-
- CSR_SIGNAL unpacked_signal;
- u8 sigbuf[UNIFI_PACKED_SIGBUF_SIZE];
- u16 packed_siglen;
-
-
- list_for_each_safe(listHead, placeHolder, buffered_frames_list)
- {
- buffered_frame_item = list_entry(listHead, tx_buffered_packets_t, q);
-
- if(!buffered_frame_item) {
- unifi_error(priv, "Entry should exist, otherwise it is a (BUG)\n");
- continue;
- }
-
- if ((interfacePriv->interfaceMode != CSR_WIFI_ROUTER_CTRL_MODE_NONE) &&
- (priv->wifi_on_state == wifi_on_done))
- {
-
- unifi_warning(priv, "Send MA_PACKET_CONFIRM to SenderProcessId = %x for (HostTag = %x TransmissionControl = %x)\n",
- (buffered_frame_item->leSenderProcessId),
- buffered_frame_item->hostTag,
- buffered_frame_item->transmissionControl);
-
- client_id = buffered_frame_item->leSenderProcessId & 0xFF00;
-
- if (client_id == priv->sme_cli->sender_id)
- {
- /* construct a MA-PACKET.confirm message for SME */
- memset(&unpacked_signal, 0, sizeof(unpacked_signal));
- unpacked_signal.SignalPrimitiveHeader.SignalId = CSR_MA_PACKET_CONFIRM_ID;
- unpacked_signal.SignalPrimitiveHeader.ReceiverProcessId = buffered_frame_item->leSenderProcessId;
- unpacked_signal.SignalPrimitiveHeader.SenderProcessId = CSR_WIFI_ROUTER_IFACEQUEUE;
-
- unpacked_signal.u.MaPacketConfirm.VirtualInterfaceIdentifier = uf_get_vif_identifier(interfacePriv->interfaceMode,
- interfacePriv->InterfaceTag);
- unpacked_signal.u.MaPacketConfirm.TransmissionStatus = CSR_RESULT_FAILURE;
- unpacked_signal.u.MaPacketConfirm.RetryCount = 0;
- unpacked_signal.u.MaPacketConfirm.Rate = buffered_frame_item->rate;
- unpacked_signal.u.MaPacketConfirm.HostTag = buffered_frame_item->hostTag;
-
- write_pack(&unpacked_signal, sigbuf, &packed_siglen);
- unifi_warning(priv, "MA_PACKET_CONFIRM for SME (0x%x, 0x%x, 0x%x, 0x%x)\n",
- unpacked_signal.SignalPrimitiveHeader.ReceiverProcessId,
- unpacked_signal.SignalPrimitiveHeader.SenderProcessId,
- unpacked_signal.u.MaPacketConfirm.VirtualInterfaceIdentifier,
- unpacked_signal.u.MaPacketConfirm.HostTag);
-
- CsrWifiRouterCtrlHipIndSend(priv->CSR_WIFI_SME_IFACEQUEUE,
- packed_siglen,
- (u8 *)sigbuf,
- 0, NULL,
- 0, NULL);
- }
- else if((buffered_frame_item->hostTag & 0x80000000))
- {
- /* construct a MA-PACKET.confirm message for NME */
- unifi_warning(priv, "MA_PACKET_CONFIRM for NME (0x%x, 0x%x, 0x%x, 0x%x)\n",
- buffered_frame_item->leSenderProcessId,
- buffered_frame_item->interfaceTag,
- buffered_frame_item->transmissionControl,
- (buffered_frame_item->hostTag & 0x3FFFFFFF));
-
- CsrWifiRouterMaPacketCfmSend((buffered_frame_item->leSenderProcessId & 0xFF),
- buffered_frame_item->interfaceTag,
- CSR_RESULT_FAILURE,
- (buffered_frame_item->hostTag & 0x3FFFFFFF),
- buffered_frame_item->rate);
-
- }
- else
- {
- unifi_warning(priv, "Buffered packet dropped without sending a confirm\n");
- }
-
- }
-
- list_del(listHead);
- kfree(buffered_frame_item);
- buffered_frame_item = NULL;
- }
-}
-
-void CsrWifiRouterCtrlMediaStatusReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlMediaStatusReq* req = (CsrWifiRouterCtrlMediaStatusReq*)msg;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[req->interfaceTag];
- unsigned long flags;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlMediaStatusReqHandler: invalid smepriv\n");
- return;
- }
- if (req->interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "CsrWifiRouterCtrlMediaStatusReqHandler: invalid interfaceTag\n");
- return;
- }
- unifi_trace(priv, UDBG3, "CsrWifiRouterCtrlMediaStatusReqHandler: Mode = %d req->mediaStatus = %d\n", interfacePriv->interfaceMode, req->mediaStatus);
- if (interfacePriv->interfaceMode != CSR_WIFI_ROUTER_CTRL_MODE_AMP) {
- bulk_data_desc_t bulk_data;
-
- bulk_data.data_length = 0;
-
- spin_lock_irqsave(&priv->m4_lock, flags);
- if (interfacePriv->m4_bulk_data.data_length > 0) {
- bulk_data = interfacePriv->m4_bulk_data;
- interfacePriv->m4_bulk_data.net_buf_length = 0;
- interfacePriv->m4_bulk_data.data_length = 0;
- interfacePriv->m4_bulk_data.os_data_ptr = interfacePriv->m4_bulk_data.os_net_buf_ptr = NULL;
- }
- spin_unlock_irqrestore(&priv->m4_lock, flags);
-
- if (bulk_data.data_length != 0) {
- unifi_trace(priv, UDBG5, "CsrWifiRouterCtrlMediaStatusReqHandler: free M4\n");
- unifi_net_data_free(priv, &bulk_data);
- }
-
- if ((req->mediaStatus == CSR_WIFI_SME_MEDIA_STATUS_CONNECTED) &&
- (interfacePriv->connected != UnifiConnected)) {
-
- switch(interfacePriv->interfaceMode){
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- interfacePriv->connected = UnifiConnected;
- netif_carrier_on(priv->netdev[req->interfaceTag]);
-#ifdef CSR_SUPPORT_WEXT
- wext_send_started_event(priv);
-#endif
- unifi_trace(priv, UDBG1,
- "CsrWifiRouterCtrlMediaStatusReqHandler: AP/P2PGO setting netif_carrier_on\n");
- netif_tx_wake_all_queues(priv->netdev[req->interfaceTag]);
- break;
-
- default:
-#ifdef CSR_SUPPORT_WEXT
- /* In the WEXT builds (sme and native), the userspace is not ready
- * to process any EAPOL or WAPI packets, until it has been informed
- * of the NETDEV_CHANGE.
- */
- if (interfacePriv->netdev_callback_registered && (interfacePriv->interfaceMode != CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI)) {
- interfacePriv->wait_netdev_change = TRUE;
- unifi_trace(priv, UDBG1,
- "CsrWifiRouterCtrlMediaStatusReqHandler: waiting for NETDEV_CHANGE\n");
- /*
- * Carrier can go to on, only after wait_netdev_change is set to TRUE.
- * Otherwise there can be a race in uf_netdev_event().
- */
- netif_carrier_on(priv->netdev[req->interfaceTag]);
- unifi_trace(priv, UDBG1,
- "CsrWifiRouterCtrlMediaStatusReqHandler: STA/P2PCLI setting netif_carrier_on\n");
- }
- else
-#endif
- {
- /* In the NME build, the userspace does not wait for the NETDEV_CHANGE
- * so it is ready to process all the EAPOL or WAPI packets.
- * At this point, we enable all the Tx queues, and we indicate any packets
- * that are queued (and the respective port is opened).
- */
- static const CsrWifiMacAddress broadcast_address = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}};
- interfacePriv->connected = UnifiConnected;
- unifi_trace(priv, UDBG1,
- "CsrWifiRouterMediaStatusReqHandler: UnifiConnected && netif_carrier_on\n");
- netif_carrier_on(priv->netdev[req->interfaceTag]);
- netif_tx_wake_all_queues(priv->netdev[req->interfaceTag]);
- uf_process_rx_pending_queue(priv, UF_UNCONTROLLED_PORT_Q, broadcast_address, 1, interfacePriv->InterfaceTag);
- uf_process_rx_pending_queue(priv, UF_CONTROLLED_PORT_Q, broadcast_address, 1, interfacePriv->InterfaceTag);
- }
- break;
- }
- }
-
- if (req->mediaStatus == CSR_WIFI_SME_MEDIA_STATUS_DISCONNECTED) {
-#ifdef CSR_SUPPORT_WEXT
- unifi_trace(priv, UDBG1,
- "CsrWifiRouterMediaStatusReqHandler: cancel waiting for NETDEV_CHANGE\n");
- interfacePriv->wait_netdev_change = FALSE;
-#endif
- unifi_trace(priv, UDBG1,
- "CsrWifiRouterMediaStatusReqHandler: setting netif_carrier_off\n");
- netif_carrier_off(priv->netdev[req->interfaceTag]);
-#ifdef CSR_SUPPORT_WEXT
- switch(interfacePriv->interfaceMode){
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- wext_send_started_event(priv);
- break;
- default:
- break;
- }
-#endif
- interfacePriv->connected = UnifiNotConnected;
- }
- } else {
- /* For AMP, just update the L2 connected flag */
- if (req->mediaStatus == CSR_WIFI_SME_MEDIA_STATUS_CONNECTED) {
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlMediaStatusReqHandler: AMP connected\n");
- interfacePriv->connected = UnifiConnected;
- } else {
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlMediaStatusReqHandler: AMP disconnected\n");
- interfacePriv->connected = UnifiNotConnected;
- }
- }
-}
-
-
-void CsrWifiRouterCtrlHipReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlHipReq* hipreq = (CsrWifiRouterCtrlHipReq*)msg;
- bulk_data_param_t bulkdata;
- u8 *signal_ptr;
- int signal_length;
- int r=0;
- void *dest;
- CsrResult csrResult;
- CSR_SIGNAL *signal;
- u16 interfaceTag = 0;
- CSR_MA_PACKET_REQUEST *req;
- netInterface_priv_t *interfacePriv;
-
- if (priv == NULL) {
- return;
- }
- if (priv->smepriv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlHipReqHandler: invalid smepriv\n");
- return;
- }
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "CsrWifiRouterCtrlHipReqHandler: invalid interfaceTag\n");
- return;
- }
-
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- /* Initialize bulkdata to avoid os_net_buf is garbage */
- memset(&bulkdata, 0, sizeof(bulk_data_param_t));
-
- signal = (CSR_SIGNAL *)hipreq->mlmeCommand;
-
- unifi_trace(priv, UDBG4, "CsrWifiRouterCtrlHipReqHandler: 0x04%X ---->\n",
- *((u16*)hipreq->mlmeCommand));
-
- /* Construct the signal. */
- signal_ptr = (u8*)hipreq->mlmeCommand;
- signal_length = hipreq->mlmeCommandLength;
-
- /*
- * The MSB of the sender ID needs to be set to the client ID.
- * The LSB is controlled by the SME.
- */
- signal_ptr[5] = (priv->sme_cli->sender_id >> 8) & 0xff;
-
- /* Allocate buffers for the bulk data. */
- if (hipreq->dataRef1Length) {
- csrResult = unifi_net_data_malloc(priv, &bulkdata.d[0], hipreq->dataRef1Length);
- if (csrResult == CSR_RESULT_SUCCESS) {
- dest = (void*)bulkdata.d[0].os_data_ptr;
- memcpy(dest, hipreq->dataRef1, hipreq->dataRef1Length);
- bulkdata.d[0].data_length = hipreq->dataRef1Length;
- } else {
- unifi_warning(priv, "signal not sent down, allocation failed in CsrWifiRouterCtrlHipReqHandler\n");
- return;
- }
- } else {
- bulkdata.d[0].os_data_ptr = NULL;
- bulkdata.d[0].data_length = 0;
- }
- if (hipreq->dataRef2Length) {
- csrResult = unifi_net_data_malloc(priv, &bulkdata.d[1], hipreq->dataRef2Length);
- if (csrResult == CSR_RESULT_SUCCESS) {
- dest = (void*)bulkdata.d[1].os_data_ptr;
- memcpy(dest, hipreq->dataRef2, hipreq->dataRef2Length);
- bulkdata.d[1].data_length = hipreq->dataRef2Length;
- } else {
- if (bulkdata.d[0].data_length)
- {
- unifi_net_data_free(priv, &bulkdata.d[0]);
- }
- unifi_warning(priv, "signal not sent down, allocation failed in CsrWifiRouterCtrlHipReqHandler\n");
- return;
- }
- } else {
- bulkdata.d[1].os_data_ptr = NULL;
- bulkdata.d[1].data_length = 0;
- }
-
- unifi_trace(priv, UDBG3, "SME SEND: Signal 0x%.4X \n",
- *((u16*)signal_ptr));
- if (signal->SignalPrimitiveHeader.SignalId == CSR_MA_PACKET_REQUEST_ID)
- {
- CSR_SIGNAL unpacked_signal;
- read_unpack_signal((u8 *) signal, &unpacked_signal);
- req = &unpacked_signal.u.MaPacketRequest;
- interfaceTag = req->VirtualInterfaceIdentifier & 0xff;
- switch(interfacePriv->interfaceMode)
- {
- case CSR_WIFI_ROUTER_CTRL_MODE_NONE:
- unifi_error(priv, "CsrWifiRouterCtrlHipReqHandler: invalid mode: NONE \n");
- break;
- default:
- unifi_trace(priv, UDBG5, "mode is %x\n", interfacePriv->interfaceMode);
- }
- /* While sending ensure that first 2 bits b31 and b30 are 00. These are used for local routing*/
- r = uf_process_ma_packet_req(priv, req->Ra.x, (req->HostTag & 0x3FFFFFFF), interfaceTag,
- req->TransmissionControl, req->TransmitRate,
- req->Priority, signal->SignalPrimitiveHeader.SenderProcessId,
- &bulkdata);
- if (r)
- {
- if (bulkdata.d[0].data_length)
- {
- unifi_net_data_free(priv, &bulkdata.d[0]);
- }
- if (bulkdata.d[1].data_length)
- {
- unifi_net_data_free(priv, &bulkdata.d[1]);
- }
- }
- } else {
- /* ul_send_signal_raw frees the bulk data if it fails */
- r = ul_send_signal_raw(priv, signal_ptr, signal_length, &bulkdata);
- }
-
- if (r) {
- unifi_error(priv,
- "CsrWifiRouterCtrlHipReqHandler: Failed to send signal (0x%.4X - %u)\n",
- *((u16*)signal_ptr), r);
- CsrWifiRouterCtrlWifiOffIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, CSR_WIFI_SME_CONTROL_INDICATION_ERROR);
- }
-
- unifi_trace(priv, UDBG4, "CsrWifiRouterCtrlHipReqHandler: <----\n");
-}
-
-#ifdef CSR_WIFI_SEND_GRATUITOUS_ARP
-static void
-uf_send_gratuitous_arp(unifi_priv_t *priv, u16 interfaceTag)
-{
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- CSR_PRIORITY priority;
- CSR_SIGNAL signal;
- bulk_data_param_t bulkdata;
- CsrResult csrResult;
- struct sk_buff *skb, *newSkb = NULL;
- s8 protection;
- int r;
- static const u8 arp_req[36] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00,
- 0x08, 0x06, 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01,
- 0x00, 0x02, 0x5f, 0x20, 0x2f, 0x02,
- 0xc0, 0xa8, 0x00, 0x02,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xc0, 0xa8, 0x00, 0x02};
-
- csrResult = unifi_net_data_malloc(priv, &bulkdata.d[0], sizeof(arp_req));
- if (csrResult != CSR_RESULT_SUCCESS)
- {
- unifi_error(priv, "Failed to allocate bulk data in CsrWifiSmeRoamCompleteIndHandler()\n");
- return;
- }
- skb = (struct sk_buff *)(bulkdata.d[0].os_net_buf_ptr);
- skb->len = bulkdata.d[0].data_length;
-
- memcpy(skb->data, arp_req, sizeof(arp_req));
- /* add MAC and IP address */
- memcpy(skb->data + 16, priv->netdev[interfaceTag]->dev_addr, ETH_ALEN);
- skb->data[22] = (priv->sta_ip_address ) & 0xFF;
- skb->data[23] = (priv->sta_ip_address >> 8) & 0xFF;
- skb->data[24] = (priv->sta_ip_address >> 16) & 0xFF;
- skb->data[25] = (priv->sta_ip_address >> 24) & 0xFF;
- skb->data[32] = (priv->sta_ip_address ) & 0xFF;
- skb->data[33] = (priv->sta_ip_address >> 8) & 0xFF;
- skb->data[34] = (priv->sta_ip_address >> 16) & 0xFF;
- skb->data[35] = (priv->sta_ip_address >> 24) & 0xFF;
-
- bulkdata.d[1].os_data_ptr = NULL;
- bulkdata.d[1].os_net_buf_ptr = NULL;
- bulkdata.d[1].net_buf_length = bulkdata.d[1].data_length = 0;
-
- if ((protection = uf_get_protection_bit_from_interfacemode(priv, interfaceTag, &arp_req[26])) < 0)
- {
- unifi_error(priv, "CsrWifiSmeRoamCompleteIndHandler: Failed to determine protection mode\n");
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return;
- }
-
- if ((priv->sta_wmm_capabilities & QOS_CAPABILITY_WMM_ENABLED) == 1)
- {
- priority = CSR_QOS_UP0;
- }
- else
- {
- priority = CSR_CONTENTION;
- }
-
- if (prepare_and_add_macheader(priv, skb, newSkb, priority, &bulkdata,
- interfaceTag, &arp_req[26],
- priv->netdev[interfaceTag]->dev_addr, protection))
- {
- unifi_error(priv, "CsrWifiSmeRoamCompleteIndHandler: failed to create MAC header\n");
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return;
- }
- bulkdata.d[0].os_data_ptr = skb->data;
- bulkdata.d[0].os_net_buf_ptr = skb;
- bulkdata.d[0].data_length = skb->len;
-
- unifi_frame_ma_packet_req(priv, priority, 0, 0xffffffff, interfaceTag,
- CSR_NO_CONFIRM_REQUIRED, priv->netdev_client->sender_id,
- interfacePriv->bssid.a, &signal);
-
- r = ul_send_signal_unpacked(priv, &signal, &bulkdata);
- if (r)
- {
- unifi_error(priv, "CsrWifiSmeRoamCompleteIndHandler: failed to send QOS data null packet result: %d\n", r);
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return;
- }
-
-}
-#endif /* CSR_WIFI_SEND_GRATUITOUS_ARP */
-
-/*
- * ---------------------------------------------------------------------------
- * configure_data_port
- *
- * Store the new controlled port configuration.
- *
- * Arguments:
- * priv Pointer to device private context struct
- * port_cfg Pointer to the port configuration
- *
- * Returns:
- * An unifi_ControlledPortAction value.
- * ---------------------------------------------------------------------------
- */
-static int
-configure_data_port(unifi_priv_t *priv,
- CsrWifiRouterCtrlPortAction port_action,
- const CsrWifiMacAddress *macAddress,
- const int queue,
- u16 interfaceTag)
-{
- const u8 broadcast_mac_address[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
- unifi_port_config_t *port;
- netInterface_priv_t *interfacePriv;
- int i;
- const char* controlled_string; /* cosmetic "controlled"/"uncontrolled" for trace */
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "configure_data_port: bad interfaceTag\n");
- return -EFAULT;
- }
-
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- if (queue == UF_CONTROLLED_PORT_Q) {
- port = &interfacePriv->controlled_data_port;
- controlled_string = "controlled";
- } else {
- port = &interfacePriv->uncontrolled_data_port;
- controlled_string = "uncontrolled";
- }
-
- unifi_trace(priv, UDBG2,
- "port config request %pM %s with port_action %d.\n",
- macAddress->a, controlled_string, port_action);
-
- /* If the new configuration has the broadcast MAC address or if we are in infrastructure mode then clear the list first and set port overide mode */
- if ((CSR_WIFI_ROUTER_CTRL_MODE_STA == interfacePriv->interfaceMode ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI) ||
- !memcmp(macAddress->a, broadcast_mac_address, ETH_ALEN)) {
-
- port->port_cfg[0].port_action = port_action;
- port->port_cfg[0].mac_address = *macAddress;
- port->port_cfg[0].in_use = TRUE;
- port->entries_in_use = 1;
- port->overide_action = UF_DATA_PORT_OVERIDE;
-
- unifi_trace(priv, UDBG2, "%s port override on\n",
- (queue == UF_CONTROLLED_PORT_Q) ? "Controlled" : "Uncontrolled");
-
- /* Discard the remaining entries in the port config table */
- for (i = 1; i < UNIFI_MAX_CONNECTIONS; i++) {
- port->port_cfg[i].in_use = FALSE;
- }
-
- if (port_action == CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN) {
- unifi_trace(priv, UDBG1, "%s port broadcast set to open.\n",
- (queue == UF_CONTROLLED_PORT_Q) ? "Controlled" : "Uncontrolled");
-
- /*
- * Ask stack to schedule for transmission any packets queued
- * while controlled port was not open.
- * Use netif_schedule() instead of netif_wake_queue() because
- * transmission should be already enabled at this point. If it
- * is not, probably the interface is down and should remain as is.
- */
- uf_resume_data_plane(priv, queue, *macAddress, interfaceTag);
-
-#ifdef CSR_WIFI_SEND_GRATUITOUS_ARP
- if ((CSR_WIFI_ROUTER_CTRL_MODE_STA == interfacePriv->interfaceMode) &&
- (queue == UF_CONTROLLED_PORT_Q) && (priv->sta_ip_address != 0xFFFFFFFF))
- {
- uf_send_gratuitous_arp(priv, interfaceTag);
- }
-#endif
- } else {
- unifi_trace(priv, UDBG1, "%s port broadcast set to %s.\n",
- (queue == UF_CONTROLLED_PORT_Q) ? "Controlled" : "Uncontrolled",
- (port_action == CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD) ? "discard": "closed");
-
- /* If port is closed, discard all the pending Rx packets */
- if (port_action == CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD) {
- uf_free_pending_rx_packets(priv, queue, *macAddress, interfaceTag);
- }
- }
- } else {
- /* store the new configuration, either in the entry with matching mac address (if already present),
- * otherwise in a new entry
- */
-
- int found_entry_flag;
- int first_free_slot = -1;
-
- /* If leaving override mode, free the port entry used for override */
- if (port->overide_action == UF_DATA_PORT_OVERIDE) {
- port->port_cfg[0].in_use = FALSE;
- port->entries_in_use = 0;
- port->overide_action = UF_DATA_PORT_NOT_OVERIDE;
-
- unifi_trace(priv, UDBG2, "%s port override off\n",
- (queue == UF_CONTROLLED_PORT_Q) ? "Controlled" : "Uncontrolled");
- }
-
- found_entry_flag = 0;
- for (i = 0; i < UNIFI_MAX_CONNECTIONS; i++) {
- if (port->port_cfg[i].in_use) {
- if (!memcmp(&port->port_cfg[i].mac_address.a, macAddress->a, ETH_ALEN)) {
- /* We've seen this address before, reconfigure it */
- port->port_cfg[i].port_action = port_action;
- found_entry_flag = 1;
- break;
- }
- } else if (first_free_slot == -1) {
- /* Remember the first free slot on the way past so it can be claimed
- * if this turns out to be a new MAC address (to save walking the list again).
- */
- first_free_slot = i;
- }
- }
-
- /* At this point we found an existing entry and have updated it, or need to
- * add a new entry. If all slots are allocated, give up and return an error.
- */
- if (!found_entry_flag) {
- if (first_free_slot == -1) {
- unifi_error(priv, "no free slot found in port config array (%d used)\n", port->entries_in_use);
- return -EFAULT;
- } else {
- port->entries_in_use++;
- }
-
- unifi_trace(priv, UDBG3, "port config index assigned in config_data_port = %d\n", first_free_slot);
- port->port_cfg[first_free_slot].in_use = TRUE;
- port->port_cfg[first_free_slot].port_action = port_action;
- port->port_cfg[first_free_slot].mac_address = *macAddress;
- }
-
- if (port_action == CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN) {
- /*
- * Ask stack to schedule for transmission any packets queued
- * while controlled port was not open.
- * Use netif_schedule() instead of netif_wake_queue() because
- * transmission should be already enabled at this point. If it
- * is not, probably the interface is down and should remain as is.
- */
- uf_resume_data_plane(priv, queue, *macAddress, interfaceTag);
- }
-
- /*
- * If port is closed, discard all the pending Rx packets
- * coming from the peer station.
- */
- if (port_action == CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD) {
- uf_free_pending_rx_packets(priv, queue, *macAddress, interfaceTag);
- }
-
- unifi_trace(priv, UDBG2,
- "port config %pM with port_action %d.\n",
- macAddress->a, port_action);
- }
- return 0;
-} /* configure_data_port() */
-
-
-void CsrWifiRouterCtrlPortConfigureReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlPortConfigureReq* req = (CsrWifiRouterCtrlPortConfigureReq*)msg;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[req->interfaceTag];
-
- unifi_trace(priv, UDBG3, "entering CsrWifiRouterCtrlPortConfigureReqHandler\n");
- if (priv->smepriv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlPortConfigureReqHandler: invalid smepriv\n");
- return;
- }
-
- /* To update the protection status of the peer/station */
- switch(interfacePriv->interfaceMode)
- {
- case CSR_WIFI_ROUTER_CTRL_MODE_STA:
- case CSR_WIFI_ROUTER_CTRL_MODE_AMP:
- case CSR_WIFI_ROUTER_CTRL_MODE_IBSS:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI:
- /* Since for Unifi as a station, the station record not maintained & interfaceID is
- * only needed to update the peer protection status
- */
- interfacePriv->protect = req->setProtection;
- break;
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- {
- u8 i;
- CsrWifiRouterCtrlStaInfo_t *staRecord;
- /* Ifscontrolled port is open means, The peer has been added to station record
- * so that the protection corresponding to the peer is valid in this req
- */
- if (req->controlledPortAction == CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN) {
- for(i =0; i < UNIFI_MAX_CONNECTIONS; i++) {
- staRecord = (CsrWifiRouterCtrlStaInfo_t *) (interfacePriv->staInfo[i]);
- if (staRecord) {
- /* Find the matching station record & set the protection type */
- if (!memcmp(req->macAddress.a, staRecord->peerMacAddress.a, ETH_ALEN)) {
- staRecord->protection = req->setProtection;
- break;
- }
- }
- }
- }
- }
- break;
- default:
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlPortConfigureReqHandler(0x%.4X) Uncaught mode %d\n",
- msg->source, interfacePriv->interfaceMode);
- }
-
- configure_data_port(priv, req->uncontrolledPortAction, (const CsrWifiMacAddress *)&req->macAddress,
- UF_UNCONTROLLED_PORT_Q, req->interfaceTag);
- configure_data_port(priv, req->controlledPortAction, (const CsrWifiMacAddress *)&req->macAddress,
- UF_CONTROLLED_PORT_Q, req->interfaceTag);
-
- CsrWifiRouterCtrlPortConfigureCfmSend(msg->source, req->clientData, req->interfaceTag,
- CSR_RESULT_SUCCESS, req->macAddress);
- unifi_trace(priv, UDBG3, "leaving CsrWifiRouterCtrlPortConfigureReqHandler\n");
-}
-
-
-void CsrWifiRouterCtrlWifiOnReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlVersions versions;
- CsrWifiRouterCtrlWifiOnReq* req = (CsrWifiRouterCtrlWifiOnReq*)msg;
- int r, i;
- CsrResult csrResult;
-
- if (priv == NULL) {
- return;
- }
- if( priv->wol_suspend ) {
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlWifiOnReqHandler: Don't reset mode\n");
- } else {
-#ifdef ANDROID_BUILD
- /* Take the wakelock while Wi-Fi On is in progress */
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlWifiOnReqHandler: take wake lock\n");
- wake_lock(&unifi_sdio_wake_lock);
-#endif
- for (i=0; i<CSR_WIFI_NUM_INTERFACES; i++) {
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlWifiOnReqHandler: Setting interface %d to NONE\n", i );
-
- priv->interfacePriv[i]->interfaceMode = 0;
- }
- }
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlWifiOnReqHandler(0x%.4X) req->dataLength=%d req->data=0x%x\n", msg->source, req->dataLength, req->data);
-
- if(req->dataLength==3 && req->data && req->data[0]==0 && req->data[1]==1 && req->data[2]==1)
- {
- priv->cmanrTestMode = TRUE;
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlWifiOnReqHandler: cmanrTestMode=%d\n", priv->cmanrTestMode);
- }
- else
- {
- priv->cmanrTestMode = FALSE;
- }
-
- /*
- * The request to initialise UniFi might come while UniFi is running.
- * We need to block all I/O activity until the reset completes, otherwise
- * an SDIO error might occur resulting an indication to the SME which
- * makes it think that the initialisation has failed.
- */
- priv->bh_thread.block_thread = 1;
-
- /* Update the wifi_on state */
- priv->wifi_on_state = wifi_on_in_progress;
-
- /* If UniFi was unpowered, acquire the firmware for download to chip */
- if (!priv->wol_suspend) {
- r = uf_request_firmware_files(priv, UNIFI_FW_STA);
- if (r) {
- unifi_error(priv, "CsrWifiRouterCtrlWifiOnReqHandler: Failed to get f/w\n");
- CsrWifiRouterCtrlWifiOnCfmSend(msg->source, req->clientData, CSR_RESULT_FAILURE);
- return;
- }
- } else {
- unifi_trace(priv, UDBG1, "Don't need firmware\n");
- }
-
- /* Power on UniFi (which may not necessarily have been off) */
- CsrSdioClaim(priv->sdio);
- csrResult = CsrSdioPowerOn(priv->sdio);
- CsrSdioRelease(priv->sdio);
- if (csrResult != CSR_RESULT_SUCCESS && csrResult != CSR_SDIO_RESULT_NOT_RESET) {
- unifi_error(priv, "CsrWifiRouterCtrlWifiOnReqHandler: Failed to power on UniFi\n");
- CsrWifiRouterCtrlWifiOnCfmSend(msg->source, req->clientData, CSR_RESULT_FAILURE);
- return;
- }
-
- /* If CsrSdioPowerOn() returns CSR_RESULT_SUCCESS, it means that we need to initialise UniFi */
- if (csrResult == CSR_RESULT_SUCCESS && !priv->wol_suspend) {
- /* Initialise UniFi hardware */
- r = uf_init_hw(priv);
- if (r) {
- unifi_error(priv, "CsrWifiRouterCtrlWifiOnReqHandler: Failed to initialise h/w, error %d\n", r);
- CsrWifiRouterCtrlWifiOnCfmSend(msg->source, req->clientData, CSR_RESULT_FAILURE);
- return;
- }
- } else {
- unifi_trace(priv, UDBG1, "UniFi already initialised\n");
- }
-
- /* Completed handling of wake up from suspend with UniFi powered */
- priv->wol_suspend = FALSE;
-
- /* Re-enable the I/O thread */
- priv->bh_thread.block_thread = 0;
-
- /*
- * Start the I/O thread. The thread might be already running.
- * This fine, just carry on with the request.
- */
- r = uf_init_bh(priv);
- if (r) {
- CsrSdioClaim(priv->sdio);
- CsrSdioPowerOff(priv->sdio);
- CsrSdioRelease(priv->sdio);
- CsrWifiRouterCtrlWifiOnCfmSend(msg->source, req->clientData, CSR_RESULT_FAILURE);
- return;
- }
-
- /* Get the version information from the core */
- unifi_card_info(priv->card, &priv->card_info);
-
- /* Set the sme queue id */
- priv->CSR_WIFI_SME_IFACEQUEUE = msg->source;
- CSR_WIFI_SME_IFACEQUEUE = msg->source;
-
-
- /* Copy to the unifiio_card_info structure. */
- versions.chipId = priv->card_info.chip_id;
- versions.chipVersion = priv->card_info.chip_version;
- versions.firmwareBuild = priv->card_info.fw_build;
- versions.firmwareHip = priv->card_info.fw_hip_version;
- versions.routerBuild = (char*)CSR_WIFI_VERSION;
- versions.routerHip = (UNIFI_HIP_MAJOR_VERSION << 8) | UNIFI_HIP_MINOR_VERSION;
-
- CsrWifiRouterCtrlWifiOnIndSend(msg->source, 0, CSR_RESULT_SUCCESS, versions);
-
- /* Update the wifi_on state */
- priv->wifi_on_state = wifi_on_done;
-}
-
-
-/*
- * wifi_off:
- * Common code for CsrWifiRouterCtrlWifiOffReqHandler() and
- * CsrWifiRouterCtrlWifiOffRspHandler().
- */
-static void
-wifi_off(unifi_priv_t *priv)
-{
- int power_off;
- int priv_instance;
- int i;
- CsrResult csrResult;
-
-
- /* Already off? */
- if (priv->wifi_on_state == wifi_on_unspecified) {
- unifi_trace(priv, UDBG1, "wifi_off already\n");
- return;
- }
-
- unifi_trace(priv, UDBG1, "wifi_off\n");
-
- /* Destroy the Traffic Analysis Module */
- cancel_work_sync(&priv->ta_ind_work.task);
- cancel_work_sync(&priv->ta_sample_ind_work.task);
-#ifdef CSR_SUPPORT_WEXT
- cancel_work_sync(&priv->sme_config_task);
- wext_send_disassoc_event(priv);
-#endif
-
- /* Cancel pending M4 stuff */
- for (i = 0; i < CSR_WIFI_NUM_INTERFACES; i++) {
- if (priv->netdev[i]) {
- netInterface_priv_t *netpriv = (netInterface_priv_t *) netdev_priv(priv->netdev[i]);
- cancel_work_sync(&netpriv->send_m4_ready_task);
- }
- }
- flush_workqueue(priv->unifi_workqueue);
-
- /* fw_init parameter can prevent power off UniFi, for debugging */
- priv_instance = uf_find_priv(priv);
- if (priv_instance == -1) {
- unifi_warning(priv,
- "CsrWifiRouterCtrlStopReqHandler: Unknown priv instance, will power off card.\n");
- power_off = 1;
- } else {
- power_off = (fw_init[priv_instance] > 0) ? 0 : 1;
- }
-
- /* Production test mode requires power to the chip, too */
- if (priv->ptest_mode) {
- power_off = 0;
- }
-
- /* Stop the bh_thread */
- uf_stop_thread(priv, &priv->bh_thread);
-
- /* Read the f/w panic codes, if any. Protect against second wifi_off() call,
- * which may happen if SME requests a wifi_off and closes the char device */
- if (priv->init_progress != UNIFI_INIT_NONE) {
- CsrSdioClaim(priv->sdio);
- unifi_capture_panic(priv->card);
- CsrSdioRelease(priv->sdio);
- }
-
- /* Unregister the interrupt handler */
- if (csr_sdio_linux_remove_irq(priv->sdio)) {
- unifi_notice(priv,
- "csr_sdio_linux_remove_irq failed to talk to card.\n");
- }
-
- if (power_off) {
- unifi_trace(priv, UDBG2,
- "Force low power and try to power off\n");
- /* Put UniFi to deep sleep, in case we can not power it off */
- CsrSdioClaim(priv->sdio);
- csrResult = unifi_force_low_power_mode(priv->card);
- CsrSdioRelease(priv->sdio);
-
- CsrSdioPowerOff(priv->sdio);
- }
-
- /* Consider UniFi to be uninitialised */
- priv->init_progress = UNIFI_INIT_NONE;
- priv->wifi_on_state = wifi_on_unspecified;
-
-
-} /* wifi_off() */
-
-
-void CsrWifiRouterCtrlWifiOffReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlWifiOffReq* req = (CsrWifiRouterCtrlWifiOffReq*)msg;
- int i = 0;
-
- if (priv == NULL) {
- return;
- }
-
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlWifiOffReqHandler(0x%.4X)\n", msg->source);
-
- /* Stop the network traffic on all interfaces before freeing the core. */
- for (i=0; i<CSR_WIFI_NUM_INTERFACES; i++) {
- netInterface_priv_t *interfacePriv = priv->interfacePriv[i];
- if (interfacePriv->netdev_registered == 1) {
- netif_carrier_off(priv->netdev[i]);
- netif_tx_stop_all_queues(priv->netdev[i]);
- interfacePriv->connected = UnifiConnectedUnknown;
- }
- interfacePriv->interfaceMode = 0;
-
- /* Enable all queues by default */
- interfacePriv->queueEnabled[0] = 1;
- interfacePriv->queueEnabled[1] = 1;
- interfacePriv->queueEnabled[2] = 1;
- interfacePriv->queueEnabled[3] = 1;
- }
- wifi_off(priv);
-
- CsrWifiRouterCtrlWifiOffCfmSend(msg->source, req->clientData);
-
- /* If this is called in response to closing the character device, the
- * caller must use uf_sme_cancel_request() to terminate any pending SME
- * blocking request or there will be a delay while the operation times out.
- */
-}
-
-
-void CsrWifiRouterCtrlQosControlReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlQosControlReq* req = (CsrWifiRouterCtrlQosControlReq*)msg;
- netInterface_priv_t *interfacePriv;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlQosControlReqHandler: invalid smepriv\n");
- return;
- }
-
- unifi_trace(priv, UDBG4, "CsrWifiRouterCtrlQosControlReqHandler:scontrol = %d", req->control);
-
- if (req->interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "CsrWifiRouterCtrlQosControlReqHandler: interfaceID >= CSR_WIFI_NUM_INTERFACES.\n");
- return;
- }
- interfacePriv = priv->interfacePriv[req->interfaceTag];
-
- if (req->control == CSR_WIFI_ROUTER_CTRL_QOS_CONTROL_WMM_ON) {
- priv->sta_wmm_capabilities |= QOS_CAPABILITY_WMM_ENABLED;
- unifi_trace(priv, UDBG1, "WMM enabled\n");
-
- unifi_trace(priv, UDBG1, "Queue Config %x\n", req->queueConfig);
-
- interfacePriv->queueEnabled[UNIFI_TRAFFIC_Q_BK] = (req->queueConfig & CSR_WIFI_ROUTER_CTRL_QUEUE_BK_ENABLE)?1:0;
- interfacePriv->queueEnabled[UNIFI_TRAFFIC_Q_BE] = (req->queueConfig & CSR_WIFI_ROUTER_CTRL_QUEUE_BE_ENABLE)?1:0;
- interfacePriv->queueEnabled[UNIFI_TRAFFIC_Q_VI] = (req->queueConfig & CSR_WIFI_ROUTER_CTRL_QUEUE_VI_ENABLE)?1:0;
- interfacePriv->queueEnabled[UNIFI_TRAFFIC_Q_VO] = (req->queueConfig & CSR_WIFI_ROUTER_CTRL_QUEUE_VO_ENABLE)?1:0;
-
- } else {
- priv->sta_wmm_capabilities = 0;
- unifi_trace(priv, UDBG1, "WMM disabled\n");
- }
-}
-
-
-void CsrWifiRouterCtrlTclasAddReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlTclasAddReq* req = (CsrWifiRouterCtrlTclasAddReq*)msg;
-
- if (priv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlTclasAddReqHandler: invalid smepriv\n");
- return;
- }
-
- CsrWifiRouterCtrlTclasAddCfmSend(msg->source, req->clientData, req->interfaceTag , CSR_RESULT_SUCCESS);
-}
-
-void CsrWifiRouterCtrlTclasDelReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlTclasDelReq* req = (CsrWifiRouterCtrlTclasDelReq*)msg;
-
- if (priv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlTclasDelReqHandler: invalid smepriv\n");
- return;
- }
-
- CsrWifiRouterCtrlTclasDelCfmSend(msg->source, req->clientData, req->interfaceTag, CSR_RESULT_SUCCESS);
-}
-
-
-void CsrWifiRouterCtrlConfigurePowerModeReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlConfigurePowerModeReq* req = (CsrWifiRouterCtrlConfigurePowerModeReq*)msg;
- enum unifi_low_power_mode pm;
- CsrResult csrResult;
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlConfigurePowerModeReqHandler: invalid smepriv\n");
- return;
- }
-
- if (req->mode == CSR_WIFI_ROUTER_CTRL_LOW_POWER_MODE_DISABLED) {
- pm = UNIFI_LOW_POWER_DISABLED;
- } else {
- pm = UNIFI_LOW_POWER_ENABLED;
- }
-
- unifi_trace(priv, UDBG2,
- "CsrWifiRouterCtrlConfigurePowerModeReqHandler (mode=%d, wake=%d)\n",
- req->mode, req->wakeHost);
- csrResult = unifi_configure_low_power_mode(priv->card, pm,
- (req->wakeHost ? UNIFI_PERIODIC_WAKE_HOST_ENABLED : UNIFI_PERIODIC_WAKE_HOST_DISABLED));
-}
-
-
-void CsrWifiRouterCtrlWifiOnResHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlWifiOnRes* res = (CsrWifiRouterCtrlWifiOnRes*)msg;
-
- if (priv == NULL) {
- unifi_error(NULL, "CsrWifiRouterCtrlWifiOnResHandler: Invalid ospriv.\n");
- return;
- }
-
- unifi_trace(priv, UDBG1,
- "CsrWifiRouterCtrlWifiOnResHandler: status %d (patch %u)\n", res->status, res->smeVersions.firmwarePatch);
-
- if (res->smeVersions.firmwarePatch != 0) {
- unifi_info(priv, "Firmware patch %d\n", res->smeVersions.firmwarePatch);
- }
-
- if (res->numInterfaceAddress > CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "WifiOnResHandler bad numInterfaceAddress %d\n", res->numInterfaceAddress);
- return;
- }
-
- /* UniFi is now initialised, complete the init. */
- if (res->status == CSR_RESULT_SUCCESS)
- {
- int i; /* used as a loop counter */
- u32 intmode = CSR_WIFI_INTMODE_DEFAULT;
-#ifdef CSR_WIFI_SPLIT_PATCH
- u8 switching_ap_fw = FALSE;
-#endif
- /* Register the UniFi device with the OS network manager */
- unifi_trace(priv, UDBG3, "Card Init Completed Successfully\n");
-
- /* Store the MAC address in the netdev */
- for(i=0;i<res->numInterfaceAddress;i++)
- {
- memcpy(priv->netdev[i]->dev_addr, res->stationMacAddress[i].a, ETH_ALEN);
- }
-
- /* Copy version structure into the private versions field */
- priv->sme_versions = res->smeVersions;
-
- unifi_trace(priv, UDBG2, "network interfaces count = %d\n",
- res->numInterfaceAddress);
-
- /* Register the netdevs for each interface. */
- for(i=0;i<res->numInterfaceAddress;i++)
- {
- netInterface_priv_t *interfacePriv = priv->interfacePriv[i];
- if(!interfacePriv->netdev_registered)
- {
- int r;
- unifi_trace(priv, UDBG3, "registering net device %d\n", i);
- r = uf_register_netdev(priv, i);
- if (r)
- {
- /* unregister the net_device that are registered in the previous iterations */
- uf_unregister_netdev(priv);
- unifi_error(priv, "Failed to register the network device.\n");
- CsrWifiRouterCtrlWifiOnCfmSend(msg->source, res->clientData, CSR_RESULT_FAILURE);
- return;
- }
- }
-#ifdef CSR_WIFI_SPLIT_PATCH
- else
- {
- /* If a netdev is already registered, we have received this WifiOnRes
- * in response to switching AP/STA firmware in a ModeSetReq.
- * Rememeber this in order to send a ModeSetCfm once
- */
- switching_ap_fw = TRUE;
- }
-#endif
- }
- priv->totalInterfaceCount = res->numInterfaceAddress;
-
- /* If the MIB has selected f/w scheduled interrupt mode, apply it now
- * but let module param override.
- */
- if (run_bh_once != -1) {
- intmode = (u32)run_bh_once;
- } else if (res->scheduledInterrupt) {
- intmode = CSR_WIFI_INTMODE_RUN_BH_ONCE;
- }
- unifi_set_interrupt_mode(priv->card, intmode);
-
- priv->init_progress = UNIFI_INIT_COMPLETED;
-
- /* Acknowledge the CsrWifiRouterCtrlWifiOnReq now */
- CsrWifiRouterCtrlWifiOnCfmSend(msg->source, res->clientData, CSR_RESULT_SUCCESS);
-
-#ifdef CSR_WIFI_SPLIT_PATCH
- if (switching_ap_fw && (priv->pending_mode_set.common.destination != 0xaaaa)) {
- unifi_info(priv, "Completed firmware reload with %s patch\n",
- CSR_WIFI_HIP_IS_AP_FW(priv->interfacePriv[0]->interfaceMode) ? "AP" : "STA");
-
- /* Confirm the ModeSetReq that requested the AP/STA patch switch */
- CsrWifiRouterCtrlModeSetCfmSend(priv->pending_mode_set.common.source,
- priv->pending_mode_set.clientData,
- priv->pending_mode_set.interfaceTag,
- priv->pending_mode_set.mode,
- CSR_RESULT_SUCCESS);
- priv->pending_mode_set.common.destination = 0xaaaa;
- }
-#endif
- unifi_info(priv, "UniFi ready\n");
-
-#ifdef ANDROID_BUILD
- /* Release the wakelock */
- unifi_trace(priv, UDBG1, "ready: release wake lock\n");
- wake_unlock(&unifi_sdio_wake_lock);
-#endif
- /* Firmware initialisation is complete, so let the SDIO bus
- * clock be raised when convienent to the core.
- */
- unifi_request_max_sdio_clock(priv->card);
-
-#ifdef CSR_SUPPORT_WEXT
- /* Notify the Android wpa_supplicant that we are ready */
- wext_send_started_event(priv);
-
- queue_work(priv->unifi_workqueue, &priv->sme_config_task);
-#endif
-
- } else {
- /* Acknowledge the CsrWifiRouterCtrlWifiOnReq now */
- CsrWifiRouterCtrlWifiOnCfmSend(msg->source, res->clientData, CSR_RESULT_FAILURE);
- }
-}
-
-
-void CsrWifiRouterCtrlWifiOffResHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-
-void CsrWifiRouterCtrlMulticastAddressResHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-
-void CsrWifiRouterMaPacketSubscribeReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterMaPacketSubscribeReq* req = (CsrWifiRouterMaPacketSubscribeReq*)msg;
- u8 i;
- CsrResult result;
-
- if (priv == NULL) {
- unifi_error(priv, "CsrWifiRouterMaPacketSubscribeReqHandler: invalid priv\n");
- return;
- }
-
- /* Look for an unused filter */
-
- result = CSR_WIFI_RESULT_NO_ROOM;
- for (i = 0; i < MAX_MA_UNIDATA_IND_FILTERS; i++) {
-
- if (!priv->sme_unidata_ind_filters[i].in_use) {
-
- priv->sme_unidata_ind_filters[i].in_use = 1;
- priv->sme_unidata_ind_filters[i].appHandle = msg->source;
- priv->sme_unidata_ind_filters[i].encapsulation = req->encapsulation;
- priv->sme_unidata_ind_filters[i].protocol = req->protocol;
-
- priv->sme_unidata_ind_filters[i].oui[2] = (u8) (req->oui & 0xFF);
- priv->sme_unidata_ind_filters[i].oui[1] = (u8) ((req->oui >> 8) & 0xFF);
- priv->sme_unidata_ind_filters[i].oui[0] = (u8) ((req->oui >> 16) & 0xFF);
-
- result = CSR_RESULT_SUCCESS;
- break;
- }
- }
-
- unifi_trace(priv, UDBG1,
- "subscribe_req: encap=%d, handle=%d, result=%d\n",
- req->encapsulation, i, result);
- CsrWifiRouterMaPacketSubscribeCfmSend(msg->source, req->interfaceTag, i, result, 0);
-}
-
-
-void CsrWifiRouterMaPacketUnsubscribeReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterMaPacketUnsubscribeReq* req = (CsrWifiRouterMaPacketUnsubscribeReq*)msg;
- CsrResult result;
-
- if (priv == NULL) {
- unifi_error(priv, "CsrWifiRouterMaPacketUnsubscribeReqHandler: invalid priv\n");
- return;
- }
-
- result = CSR_WIFI_RESULT_NOT_FOUND;
-
- if (req->subscriptionHandle < MAX_MA_UNIDATA_IND_FILTERS) {
- if (priv->sme_unidata_ind_filters[req->subscriptionHandle].in_use) {
- priv->sme_unidata_ind_filters[req->subscriptionHandle].in_use = 0;
- result = CSR_RESULT_SUCCESS;
- } else {
- result = CSR_WIFI_RESULT_NOT_FOUND;
- }
- }
-
- unifi_trace(priv, UDBG1,
- "unsubscribe_req: handle=%d, result=%d\n",
- req->subscriptionHandle, result);
- CsrWifiRouterMaPacketUnsubscribeCfmSend(msg->source, req->interfaceTag, result);
-}
-
-
-void CsrWifiRouterCtrlCapabilitiesReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlCapabilitiesReq* req = (CsrWifiRouterCtrlCapabilitiesReq*)msg;
-
- if (priv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlCapabilitiesReqHandler: invalid priv\n");
- return;
- }
-
- CsrWifiRouterCtrlCapabilitiesCfmSend(msg->source, req->clientData,
- UNIFI_SOFT_COMMAND_Q_LENGTH - 1,
- UNIFI_SOFT_TRAFFIC_Q_LENGTH - 1);
-}
-
-
-void CsrWifiRouterCtrlSuspendResHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlSuspendRes* res = (CsrWifiRouterCtrlSuspendRes*)msg;
-
- if (priv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlSuspendResHandler: invalid priv\n");
- return;
- }
-
- sme_complete_request(priv, res->status);
-}
-
-
-void CsrWifiRouterCtrlResumeResHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlResumeRes* res = (CsrWifiRouterCtrlResumeRes*)msg;
-
- if (priv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlResumeResHandler: invalid priv\n");
- return;
- }
-
- sme_complete_request(priv, res->status);
-}
-
-
-void CsrWifiRouterCtrlTrafficConfigReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlTrafficConfigReq* req = (CsrWifiRouterCtrlTrafficConfigReq*)msg;
- CsrResult csrResult;
-
- if (priv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlTrafficConfigReqHandler: invalid smepriv\n");
- return;
- }
- if (req->trafficConfigType == CSR_WIFI_ROUTER_CTRL_TRAFFIC_CONFIG_TYPE_FILTER)
- {
- req->config.packetFilter |= CSR_WIFI_ROUTER_CTRL_TRAFFIC_PACKET_TYPE_CUSTOM;
- }
- csrResult = unifi_ta_configure(priv->card, req->trafficConfigType, (const CsrWifiRouterCtrlTrafficConfig *)&req->config);
-}
-
-void CsrWifiRouterCtrlTrafficClassificationReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlTrafficClassificationReq* req = (CsrWifiRouterCtrlTrafficClassificationReq*)msg;
-
- if (priv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlTrafficClassificationReqHandler: invalid smepriv\n");
- return;
- }
-
- unifi_ta_classification(priv->card, req->trafficType, req->period);
-}
-
-static int
-_sys_packet_req(unifi_priv_t *priv, const CSR_SIGNAL *signal,
- u8 subscriptionHandle,
- u16 frameLength, u8 *frame,
- int proto)
-{
- int r;
- const sme_ma_unidata_ind_filter_t *subs;
- bulk_data_param_t bulkdata;
- CSR_MA_PACKET_REQUEST req = signal->u.MaPacketRequest;
- struct sk_buff *skb, *newSkb = NULL;
- CsrWifiMacAddress peerMacAddress;
- CsrResult csrResult;
- u16 interfaceTag = req.VirtualInterfaceIdentifier & 0xff;
- u8 eapolStore = FALSE;
- s8 protection = 0;
- netInterface_priv_t *interfacePriv;
- unsigned long flags;
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "_sys_packet_req: interfaceID >= CSR_WIFI_NUM_INTERFACES.\n");
- return -EINVAL;
- }
- interfacePriv = priv->interfacePriv[interfaceTag];
- if (!priv->sme_unidata_ind_filters[subscriptionHandle].in_use) {
- unifi_error(priv, "_sys_packet_req: unknown subscription.\n");
- return -EINVAL;
- }
-
- subs = &priv->sme_unidata_ind_filters[subscriptionHandle];
- unifi_trace(priv, UDBG1,
- "_sys_packet_req: handle=%d, subs=%p, encap=%d\n",
- subscriptionHandle, subs, subs->encapsulation);
-
- csrResult = unifi_net_data_malloc(priv, &bulkdata.d[0], frameLength);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "_sys_packet_req: failed to allocate bulkdata.\n");
- return (int)CsrHipResultToStatus(csrResult);
- }
-
- /* get the peer Mac address */
- memcpy(&peerMacAddress, frame, ETH_ALEN);
-
- /* Determine if we need to add encapsulation header */
- if (subs->encapsulation == CSR_WIFI_ROUTER_ENCAPSULATION_ETHERNET) {
- memcpy((void*)bulkdata.d[0].os_data_ptr, frame, frameLength);
-
- /* The translation is performed on the skb */
- skb = (struct sk_buff*)bulkdata.d[0].os_net_buf_ptr;
-
- unifi_trace(priv, UDBG1,
- "_sys_packet_req: skb_add_llc_snap -->\n");
- r = skb_add_llc_snap(priv->netdev[interfaceTag], skb, proto);
- unifi_trace(priv, UDBG1,
- "_sys_packet_req: skb_add_llc_snap <--\n");
- if (r) {
- unifi_error(priv,
- "_sys_packet_req: failed to translate eth frame.\n");
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return r;
- }
-
- bulkdata.d[0].data_length = skb->len;
- } else {
- /* Crop the MAC addresses from the packet */
- memcpy((void*)bulkdata.d[0].os_data_ptr, frame + 2*ETH_ALEN, frameLength - 2*ETH_ALEN);
- bulkdata.d[0].data_length = frameLength - 2*ETH_ALEN;
- skb = (struct sk_buff*)bulkdata.d[0].os_net_buf_ptr;
- skb->len = bulkdata.d[0].data_length;
-
- }
-
- bulkdata.d[1].os_data_ptr = NULL;
- bulkdata.d[1].os_net_buf_ptr = NULL;
- bulkdata.d[1].data_length = 0;
-
- /* check for m4 detection */
- if (0 == uf_verify_m4(priv, bulkdata.d[0].os_data_ptr, bulkdata.d[0].data_length)) {
- eapolStore = TRUE;
- }
-
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- if (proto == ETH_P_WAI)
- {
- protection = 0; /*WAI packets always sent unencrypted*/
- }
- else
- {
-#endif
-
-#ifdef CSR_SUPPORT_SME
- if ((protection = uf_get_protection_bit_from_interfacemode(priv, interfaceTag, peerMacAddress.a)) < 0) {
- unifi_error(priv, "unicast address, but destination not in station record database\n");
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return -1;
- }
-#else
- protection = 0;
-#endif
-
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- }
-#endif
-
- /* add Mac header */
- if (prepare_and_add_macheader(priv, skb, newSkb, req.Priority, &bulkdata, interfaceTag, frame, frame + ETH_ALEN, protection)) {
- unifi_error(priv, "failed to create MAC header\n");
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return -1;
- }
-
- if (eapolStore) {
- spin_lock_irqsave(&priv->m4_lock, flags);
- /* Store the EAPOL M4 packet for later */
- interfacePriv->m4_signal = *signal;
- interfacePriv->m4_bulk_data.net_buf_length = bulkdata.d[0].net_buf_length;
- interfacePriv->m4_bulk_data.data_length = bulkdata.d[0].data_length;
- interfacePriv->m4_bulk_data.os_data_ptr = bulkdata.d[0].os_data_ptr;
- interfacePriv->m4_bulk_data.os_net_buf_ptr = bulkdata.d[0].os_net_buf_ptr;
- spin_unlock_irqrestore(&priv->m4_lock, flags);
- /* Send a signal to SME */
- unifi_trace(priv, UDBG1, "_sys_packet_req: Sending CsrWifiRouterCtrlM4ReadyToSendInd\n");
- CsrWifiRouterCtrlM4ReadyToSendIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, interfaceTag, peerMacAddress);
- return 0;
- }
-
- /* Send the signal to UniFi */
- /* Set the B31 to 1 for local routing*/
- r= uf_process_ma_packet_req(priv, peerMacAddress.a, (req.HostTag | 0x80000000), interfaceTag, 0,
- (CSR_RATE)0, req.Priority, signal->SignalPrimitiveHeader.SenderProcessId, &bulkdata);
- if (r) {
- unifi_error(priv,
- "_sys_packet_req: failed to send signal.\n");
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return r;
- }
- /* The final CsrWifiRouterMaPacketCfmSend() will called when the actual MA-PACKET.cfm is received from the chip */
-
- return 0;
-}
-
-void CsrWifiRouterMaPacketReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- int r;
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterMaPacketReq* mareq = (CsrWifiRouterMaPacketReq*)msg;
- llc_snap_hdr_t *snap;
- u16 snap_protocol;
- CSR_SIGNAL signal;
- CSR_MA_PACKET_REQUEST *req = &signal.u.MaPacketRequest;
- CsrWifiRouterCtrlPortAction controlPortaction;
- u8 *daddr, *saddr;
- u16 interfaceTag = mareq->interfaceTag & 0x00ff;
- int queue;
- netInterface_priv_t *interfacePriv;
-
- if (!mareq->frame || !priv || !priv->smepriv)
- {
- unifi_error(priv, "CsrWifiRouterMaPacketReqHandler: invalid frame/priv/priv->smepriv\n");
- return;
- }
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "CsrWifiRouterMaPacketReqHandler: interfaceID >= CSR_WIFI_NUM_INTERFACES.\n");
- return;
- }
-
- interfacePriv = priv->interfacePriv[interfaceTag];
- /* get a pointer to dest & source Mac address */
- daddr = mareq->frame;
- saddr = (mareq->frame + ETH_ALEN);
- /* point to the proper position of frame, since frame has MAC header */
- snap = (llc_snap_hdr_t *) (mareq->frame + 2 * ETH_ALEN);
- snap_protocol = ntohs(snap->protocol);
- if((snap_protocol == ETH_P_PAE)
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- || (snap_protocol == ETH_P_WAI)
-#endif
- )
- {
- queue = UF_UNCONTROLLED_PORT_Q;
- }
- else
- {
- queue = UF_CONTROLLED_PORT_Q;
- }
-
- /* Controlled port restrictions apply to the packets */
- controlPortaction = uf_sme_port_state(priv, daddr, queue, interfaceTag);
- if (controlPortaction != CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN)
- {
- unifi_warning(priv, "CsrWifiRouterMaPacketReqHandler: (%s)controlled port is closed.\n", (queue == UF_CONTROLLED_PORT_Q)?"":"un");
- if(mareq->cfmRequested)
- {
- CsrWifiRouterMaPacketCfmSend(msg->source,
- interfaceTag,
- CSR_RESULT_FAILURE,
- mareq->hostTag, 0);
- }
- return;
- }
-
- signal.SignalPrimitiveHeader.SignalId = CSR_MA_PACKET_REQUEST_ID;
- /* Store the appHandle in the LSB of the SenderId. */
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(((priv->sme_cli->sender_id & 0xff00) | (unsigned int)msg->source),
- (u8*)&signal.SignalPrimitiveHeader.SenderProcessId);
- signal.SignalPrimitiveHeader.ReceiverProcessId = 0;
-
- /* Fill in the MA-PACKET.req signal */
- memcpy(req->Ra.x, daddr, ETH_ALEN);
- req->Priority = mareq->priority;
- req->TransmitRate = 0; /* Let firmware select the rate*/
- req->VirtualInterfaceIdentifier = uf_get_vif_identifier(interfacePriv->interfaceMode, interfaceTag);
- req->HostTag = mareq->hostTag;
-
- if(mareq->cfmRequested)
- req->TransmissionControl = 0;
- else
- req->TransmissionControl = CSR_NO_CONFIRM_REQUIRED;
-
- r = _sys_packet_req(priv, &signal, mareq->subscriptionHandle,
- mareq->frameLength, mareq->frame, snap_protocol);
-
- if (r && mareq->cfmRequested)
- {
- CsrWifiRouterMaPacketCfmSend(msg->source, interfaceTag,
- CSR_RESULT_FAILURE,
- mareq->hostTag, 0);
- }
- return;
-}
-
-void CsrWifiRouterMaPacketCancelReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-void CsrWifiRouterCtrlM4TransmitReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlM4TransmitReq* req = (CsrWifiRouterCtrlM4TransmitReq*)msg;
- int r;
- bulk_data_param_t bulkdata;
- netInterface_priv_t *interfacePriv;
- CSR_SIGNAL m4_signal;
- unsigned long flags;
-
- if (priv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlM4TransmitReqHandler: invalid smepriv\n");
- return;
- }
- if (req->interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "M4TransmitReqHandler: interfaceTag >= CSR_WIFI_NUM_INTERFACES\n");
- return;
- }
-
- interfacePriv = priv->interfacePriv[req->interfaceTag];
- spin_lock_irqsave(&priv->m4_lock, flags);
- if (interfacePriv->m4_bulk_data.data_length == 0) {
- spin_unlock_irqrestore(&priv->m4_lock, flags);
- unifi_error(priv, "CsrWifiRouterCtrlM4TransmitReqHandler: invalid buffer\n");
- return;
- }
-
- memcpy(&bulkdata.d[0], &interfacePriv->m4_bulk_data, sizeof(bulk_data_desc_t));
-
- interfacePriv->m4_bulk_data.net_buf_length = 0;
- interfacePriv->m4_bulk_data.data_length = 0;
- interfacePriv->m4_bulk_data.os_data_ptr = interfacePriv->m4_bulk_data.os_net_buf_ptr = NULL;
- m4_signal = interfacePriv->m4_signal;
- spin_unlock_irqrestore(&priv->m4_lock, flags);
-
- bulkdata.d[1].os_data_ptr = NULL;
- bulkdata.d[1].data_length = 0;
-
- interfacePriv->m4_sent = TRUE;
- m4_signal.u.MaPacketRequest.HostTag |= 0x80000000;
- /* Store the hostTag for later varification */
- interfacePriv->m4_hostTag = m4_signal.u.MaPacketRequest.HostTag;
- r = ul_send_signal_unpacked(priv, &m4_signal, &bulkdata);
- unifi_trace(priv, UDBG1,
- "CsrWifiRouterCtrlM4TransmitReqHandler: sent\n");
- if (r) {
- unifi_error(priv,
- "CsrWifiRouterCtrlM4TransmitReqHandler: failed to send signal.\n");
- unifi_net_data_free(priv, &bulkdata.d[0]);
- }
-}
-
-/* reset the station records when the mode is set as CSR_WIFI_ROUTER_CTRL_MODE_NONE */
-static void CsrWifiRouterCtrlResetStationRecordList(unifi_priv_t *priv, u16 interfaceTag)
-{
- u8 i, j;
- CsrWifiRouterCtrlStaInfo_t *staInfo=NULL;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- unsigned long lock_flags;
-
- /* create a list for sending confirms of un-delivered packets */
- struct list_head send_cfm_list;
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "CsrWifiRouterCtrlResetStationRecordList: bad interfaceTag\n");
- return;
- }
-
- INIT_LIST_HEAD(&send_cfm_list);
-
- /* Reset the station record to NULL if mode is NONE */
- for(i = 0; i < UNIFI_MAX_CONNECTIONS; i++) {
- if ((staInfo=interfacePriv->staInfo[i]) != NULL) {
- uf_prepare_send_cfm_list_for_queued_pkts(priv,
- &send_cfm_list,
- &(staInfo->mgtFrames));
- uf_flush_list(priv, &(staInfo->mgtFrames));
- for(j=0;j<MAX_ACCESS_CATOGORY;j++){
- uf_prepare_send_cfm_list_for_queued_pkts(priv,
- &send_cfm_list,
- &(staInfo->dataPdu[j]));
- uf_flush_list(priv, &(staInfo->dataPdu[j]));
- }
-
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- /* Removing station record information from port config array */
- memset(staInfo->peerControlledPort, 0, sizeof(unifi_port_cfg_t));
- staInfo->peerControlledPort->port_action = CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD;
- staInfo->peerControlledPort->in_use = FALSE;
- interfacePriv->controlled_data_port.entries_in_use--;
-
- memset(staInfo->peerUnControlledPort, 0, sizeof(unifi_port_cfg_t));
- staInfo->peerUnControlledPort->port_action = CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD;
- staInfo->peerUnControlledPort->in_use = FALSE;
- interfacePriv->uncontrolled_data_port.entries_in_use--;
-
- kfree(interfacePriv->staInfo[i]);
- interfacePriv->staInfo[i] = NULL;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- }
- }
- /* after the critical region process the list of frames that requested cfm
- * and send cfm to requestor one by one
- */
- send_auto_ma_packet_confirm(priv, interfacePriv, &send_cfm_list);
-
-#ifdef CSR_SUPPORT_SME
- /* Interface Independent, no of packet queued, incase of mode is None or AP set to 0 */
- switch(interfacePriv->interfaceMode)
- {
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- case CSR_WIFI_ROUTER_CTRL_MODE_NONE:
- if (priv->noOfPktQueuedInDriver) {
- unifi_warning(priv, "After reset the noOfPktQueuedInDriver = %x\n", priv->noOfPktQueuedInDriver);
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- priv->noOfPktQueuedInDriver = 0;
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- }
- break;
- case CSR_WIFI_ROUTER_CTRL_MODE_IBSS:
- break;
- default:
- unifi_error(priv, "interfacemode is not correct in CsrWifiRouterCtrlResetStationRecordList: debug\n");
- }
-#endif
-
- if (((interfacePriv->controlled_data_port.entries_in_use != 0) || (interfacePriv->uncontrolled_data_port.entries_in_use != 0))
- && (interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_NONE)) {
- /* Print in case if the value of entries goes to -ve/+ve (apart from 0)
- * we expect the entries should be zero here if mode is set as NONE
- */
- unifi_trace(priv, UDBG3, "In %s controlled port entries = %d, uncontrolled port entries = %d\n",
- __FUNCTION__, interfacePriv->controlled_data_port.entries_in_use,
- interfacePriv->uncontrolled_data_port.entries_in_use);
- }
-}
-
-void CsrWifiRouterCtrlInterfaceReset(unifi_priv_t *priv, u16 interfaceTag)
-{
- netInterface_priv_t *interfacePriv;
-
- /* create a list for sending confirms of un-delivered packets */
- struct list_head send_cfm_list;
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "CsrWifiRouterCtrlInterfaceReset: bad interfaceTag\n");
- return;
- }
-
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- INIT_LIST_HEAD(&send_cfm_list);
-
- /* Enable all queues by default */
- interfacePriv->queueEnabled[0] = 1;
- interfacePriv->queueEnabled[1] = 1;
- interfacePriv->queueEnabled[2] = 1;
- interfacePriv->queueEnabled[3] = 1;
-
- uf_prepare_send_cfm_list_for_queued_pkts(priv,
- &send_cfm_list,
- &(interfacePriv->genericMgtFrames));
- uf_flush_list(priv, &(interfacePriv->genericMgtFrames));
-
- uf_prepare_send_cfm_list_for_queued_pkts(priv,
- &send_cfm_list,
- &(interfacePriv->genericMulticastOrBroadCastMgtFrames));
- uf_flush_list(priv, &(interfacePriv->genericMulticastOrBroadCastMgtFrames));
-
- uf_prepare_send_cfm_list_for_queued_pkts(priv,
- &send_cfm_list,
- &(interfacePriv->genericMulticastOrBroadCastFrames));
-
- uf_flush_list(priv, &(interfacePriv->genericMulticastOrBroadCastFrames));
-
- /* process the list of frames that requested cfm
- and send cfm to requestor one by one */
- send_auto_ma_packet_confirm(priv, interfacePriv, &send_cfm_list);
-
- /* Reset the station record to NULL if mode is tried to set as NONE */
- switch(interfacePriv->interfaceMode)
- {
- case CSR_WIFI_ROUTER_CTRL_MODE_STA:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI:
- case CSR_WIFI_ROUTER_CTRL_MODE_MONITOR:
- case CSR_WIFI_ROUTER_CTRL_MODE_AMP:
- /* station records not available in these modes */
- break;
- default:
- CsrWifiRouterCtrlResetStationRecordList(priv, interfaceTag);
- }
-
- interfacePriv->num_stations_joined = 0;
- interfacePriv->sta_activity_check_enabled = FALSE;
-}
-
-
-void CsrWifiRouterCtrlModeSetReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlModeSetReq* req = (CsrWifiRouterCtrlModeSetReq*)msg;
-
- if (priv == NULL)
- {
- unifi_error(priv, "CsrWifiRouterCtrlModeSetReqHandler: invalid smepriv\n");
- return;
- }
-
- if (req->interfaceTag < CSR_WIFI_NUM_INTERFACES)
- {
- netInterface_priv_t *interfacePriv = priv->interfacePriv[req->interfaceTag];
-#ifdef CSR_WIFI_SPLIT_PATCH
- u8 old_mode = interfacePriv->interfaceMode;
-#endif
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlModeSetReqHandler: interfacePriv->interfaceMode = %d\n",
- interfacePriv->interfaceMode);
-
- interfacePriv->interfaceMode = req->mode;
-
-#ifdef CSR_WIFI_SPLIT_PATCH
- /* Detect a change in mode that requires a switch to/from the AP firmware patch.
- * This should only happen when transitioning in/out of AP modes.
- */
- if (CSR_WIFI_HIP_IS_AP_FW(req->mode) != CSR_WIFI_HIP_IS_AP_FW(old_mode))
- {
- CsrWifiRouterCtrlVersions versions;
- int r;
-
-#ifdef ANDROID_BUILD
- /* Take the wakelock while switching patch */
- unifi_trace(priv, UDBG1, "patch switch: take wake lock\n");
- wake_lock(&unifi_sdio_wake_lock);
-#endif
- unifi_info(priv, "Resetting UniFi with %s patch\n", CSR_WIFI_HIP_IS_AP_FW(req->mode) ? "AP" : "STA");
-
- r = uf_request_firmware_files(priv, UNIFI_FW_STA);
- if (r) {
- unifi_error(priv, "CsrWifiRouterCtrlModeSetReqHandler: Failed to get f/w\n");
- CsrWifiRouterCtrlModeSetCfmSend(msg->source, req->clientData, req->interfaceTag,
- req->mode, CSR_RESULT_FAILURE);
- return;
- }
-
- /* Block the I/O thread */
- priv->bh_thread.block_thread = 1;
-
- /* Reset and download the new patch */
- r = uf_init_hw(priv);
- if (r) {
- unifi_error(priv, "CsrWifiRouterCtrlWifiOnReqHandler: Failed to initialise h/w, error %d\n", r);
- CsrWifiRouterCtrlModeSetCfmSend(msg->source, req->clientData, req->interfaceTag,
- req->mode, CSR_RESULT_FAILURE);
- return;
- }
-
- /* Re-enable the I/O thread */
- priv->bh_thread.block_thread = 0;
-
- /* Get the version information from the core */
- unifi_card_info(priv->card, &priv->card_info);
-
- /* Copy to the unifiio_card_info structure. */
- versions.chipId = priv->card_info.chip_id;
- versions.chipVersion = priv->card_info.chip_version;
- versions.firmwareBuild = priv->card_info.fw_build;
- versions.firmwareHip = priv->card_info.fw_hip_version;
- versions.routerBuild = (char*)CSR_WIFI_VERSION;
- versions.routerHip = (UNIFI_HIP_MAJOR_VERSION << 8) | UNIFI_HIP_MINOR_VERSION;
-
- /* Now that new firmware is running, send a WifiOnInd to the NME. This will
- * cause it to retransfer the MIB.
- */
- CsrWifiRouterCtrlWifiOnIndSend(msg->source, 0, CSR_RESULT_SUCCESS, versions);
-
- /* Store the request so we know where to send the ModeSetCfm */
- priv->pending_mode_set = *req;
- }
- else
-#endif
- {
- /* No patch switch, confirm straightaway */
- CsrWifiRouterCtrlModeSetCfmSend(msg->source, req->clientData, req->interfaceTag,
- req->mode, CSR_RESULT_SUCCESS);
- }
-
- interfacePriv->bssid = req->bssid;
- /* For modes other than AP/P2PGO, set below member FALSE */
- interfacePriv->intraBssEnabled = FALSE;
- /* Initialise the variable bcTimSet with a value
- * other then CSR_WIFI_TIM_SET or CSR_WIFI_TIM_RESET value
- */
- interfacePriv->bcTimSet = 0xFF;
- interfacePriv->bcTimSetReqPendingFlag = FALSE;
- /* Initialise the variable bcTimSetReqQueued with a value
- * other then CSR_WIFI_TIM_SET or CSR_WIFI_TIM_RESET value
- */
- interfacePriv->bcTimSetReqQueued =0xFF;
- CsrWifiRouterCtrlInterfaceReset(priv, req->interfaceTag);
-
- if(req->mode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- req->mode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- interfacePriv->protect = req->protection;
- interfacePriv->dtimActive=FALSE;
- interfacePriv->multicastPduHostTag = 0xffffffff;
- /* For AP/P2PGO mode SME sending intraBssDistEnabled
- * i.e. for AP: intraBssDistEnabled = TRUE, for P2PGO
- * intraBssDistEnabled = TRUE/FALSE on requirement
- */
- interfacePriv->intraBssEnabled = req->intraBssDistEnabled;
- unifi_trace(priv, UDBG3, "CsrWifiRouterCtrlModeSetReqHandler: IntraBssDisEnabled = %d\n",
- req->intraBssDistEnabled);
- } else if (req->mode == CSR_WIFI_ROUTER_CTRL_MODE_NONE) {
- netif_carrier_off(priv->netdev[req->interfaceTag]);
- interfacePriv->connected = UnifiConnectedUnknown;
- }
- }
- else {
- unifi_error(priv, "CsrWifiRouterCtrlModeSetReqHandler: invalid interfaceTag :%d\n", req->interfaceTag);
- }
-}
-
-void CsrWifiRouterMaPacketResHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-}
-
-/* delete the station record from the station record data base */
-static int peer_delete_record(unifi_priv_t *priv, CsrWifiRouterCtrlPeerDelReq *req)
-{
- u8 j;
- CsrWifiRouterCtrlStaInfo_t *staInfo = NULL;
- unifi_port_config_t *controlledPort;
- unifi_port_config_t *unControlledPort;
- netInterface_priv_t *interfacePriv;
-
- u8 ba_session_idx = 0;
- ba_session_rx_struct *ba_session_rx = NULL;
- ba_session_tx_struct *ba_session_tx = NULL;
-
- /* create a list for sending confirms of un-delivered packets */
- struct list_head send_cfm_list;
-
- unsigned long lock_flags;
-
- if ((req->peerRecordHandle >= UNIFI_MAX_CONNECTIONS) || (req->interfaceTag >= CSR_WIFI_NUM_INTERFACES)) {
- unifi_error(priv, "handle/interfaceTag is not proper, handle = %d, interfaceTag = %d\n", req->peerRecordHandle, req->interfaceTag);
- return CSR_RESULT_FAILURE;
- }
-
- INIT_LIST_HEAD(&send_cfm_list);
-
- interfacePriv = priv->interfacePriv[req->interfaceTag];
- /* remove the station record & make it NULL */
- if ((staInfo=interfacePriv->staInfo[req->peerRecordHandle])!=NULL) {
-
- uf_prepare_send_cfm_list_for_queued_pkts(priv,
- &send_cfm_list,
- &(staInfo->mgtFrames));
-
- uf_flush_list(priv, &(staInfo->mgtFrames));
- for(j=0;j<MAX_ACCESS_CATOGORY;j++){
- uf_prepare_send_cfm_list_for_queued_pkts(priv,
- &send_cfm_list,
- &(staInfo->dataPdu[j]));
- uf_flush_list(priv, &(staInfo->dataPdu[j]));
- }
-
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- /* clear the port configure array info, for the corresponding peer entry */
- controlledPort = &interfacePriv->controlled_data_port;
- unControlledPort = &interfacePriv->uncontrolled_data_port;
-
- unifi_trace(priv, UDBG1, "peer_delete_record: Peer found handle = %d, port in use: cont(%d), unCont(%d)\n",
- req->peerRecordHandle, controlledPort->entries_in_use, unControlledPort->entries_in_use);
-
- memset(staInfo->peerControlledPort, 0, sizeof(unifi_port_cfg_t));
- staInfo->peerControlledPort->port_action = CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD;
- staInfo->peerControlledPort->in_use = FALSE;
- if (controlledPort->entries_in_use) {
- controlledPort->entries_in_use--;
- } else {
- unifi_warning(priv, "number of controlled port entries is zero, trying to decrement: debug\n");
- }
-
- memset(staInfo->peerUnControlledPort, 0, sizeof(unifi_port_cfg_t));
- staInfo->peerUnControlledPort->port_action = CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD;
- staInfo->peerUnControlledPort->in_use = FALSE;
- if (unControlledPort->entries_in_use) {
- unControlledPort->entries_in_use--;
- } else {
- unifi_warning(priv, "number of uncontrolled port entries is zero, trying to decrement: debug\n");
- }
-
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- /* update the TIM with zero */
- if (interfacePriv->interfaceMode != CSR_WIFI_ROUTER_CTRL_MODE_IBSS &&
- staInfo->timSet == CSR_WIFI_TIM_SET) {
- unifi_trace(priv, UDBG3, "peer is deleted so TIM updated to 0, in firmware\n");
- update_tim(priv, staInfo->aid, 0, req->interfaceTag, req->peerRecordHandle);
- }
-
-
- /* Stop BA session if it is active, for this peer address all BA sessions
- (per tID per role) are closed */
-
- down(&priv->ba_mutex);
- for(ba_session_idx=0; ba_session_idx < MAX_SUPPORTED_BA_SESSIONS_RX; ba_session_idx++){
- ba_session_rx = priv->interfacePriv[req->interfaceTag]->ba_session_rx[ba_session_idx];
- if(ba_session_rx) {
- if(!memcmp(ba_session_rx->macAddress.a, staInfo->peerMacAddress.a, ETH_ALEN)){
- blockack_session_stop(priv,
- req->interfaceTag,
- CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_RECIPIENT,
- ba_session_rx->tID,
- ba_session_rx->macAddress);
- }
- }
- }
-
- for(ba_session_idx=0; ba_session_idx < MAX_SUPPORTED_BA_SESSIONS_TX; ba_session_idx++){
- ba_session_tx = priv->interfacePriv[req->interfaceTag]->ba_session_tx[ba_session_idx];
- if(ba_session_tx) {
- if(!memcmp(ba_session_tx->macAddress.a, staInfo->peerMacAddress.a, ETH_ALEN)){
- blockack_session_stop(priv,
- req->interfaceTag,
- CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ORIGINATOR,
- ba_session_tx->tID,
- ba_session_tx->macAddress);
- }
- }
- }
-
- up(&priv->ba_mutex);
-
-#ifdef CSR_SUPPORT_SME
- unifi_trace(priv, UDBG1, "Canceling work queue for STA with AID: %d\n", staInfo->aid);
- cancel_work_sync(&staInfo->send_disconnected_ind_task);
-#endif
-
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
-#ifdef CSR_SUPPORT_SME
- interfacePriv->num_stations_joined--;
-
- staInfo->nullDataHostTag = INVALID_HOST_TAG;
-
- if ((interfacePriv->sta_activity_check_enabled) &&
- (interfacePriv->num_stations_joined < STA_INACTIVE_DETECTION_TRIGGER_THRESHOLD))
- {
- unifi_trace(priv, UDBG1, "STOPPING the Inactivity Timer (num of stations = %d)\n", interfacePriv->num_stations_joined);
- interfacePriv->sta_activity_check_enabled = FALSE;
- del_timer_sync(&interfacePriv->sta_activity_check_timer);
- }
-#endif
-
- /* Free the station record for corresponding peer */
- kfree(interfacePriv->staInfo[req->peerRecordHandle]);
- interfacePriv->staInfo[req->peerRecordHandle] = NULL;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
-
- /* after the critical region process the list of frames that requested cfm
- and send cfm to requestor one by one */
- send_auto_ma_packet_confirm(priv, interfacePriv, &send_cfm_list);
-
-
- }
- else
- {
- unifi_trace(priv, UDBG3, " peer not found: Delete request Peer handle[%d]\n", req->peerRecordHandle);
- }
-
- return CSR_RESULT_SUCCESS;
-}
-
-void CsrWifiRouterCtrlPeerDelReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- CsrWifiRouterCtrlPeerDelReq* req = (CsrWifiRouterCtrlPeerDelReq*)msg;
- CsrResult status = CSR_RESULT_SUCCESS;
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- netInterface_priv_t *interfacePriv;
-
- unifi_trace(priv, UDBG2, "entering CsrWifiRouterCtrlPeerDelReqHandler\n");
- if (priv == NULL)
- {
- unifi_error(priv, "CsrWifiRouterCtrlPeerDelReqHandler: invalid smepriv\n");
- return;
- }
-
- if (req->interfaceTag >= CSR_WIFI_NUM_INTERFACES)
- {
- unifi_error(priv, "CsrWifiRouterCtrlPeerDelReqHandler: bad interfaceTag\n");
- return;
- }
-
- interfacePriv = priv->interfacePriv[req->interfaceTag];
-
- switch(interfacePriv->interfaceMode)
- {
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- case CSR_WIFI_ROUTER_CTRL_MODE_IBSS:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- /* remove the station from station record data base */
- status = peer_delete_record(priv, req);
- break;
- case CSR_WIFI_ROUTER_CTRL_MODE_STA:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI:
- default:
- /* No station record to maintain in these modes */
- break;
- }
-
- CsrWifiRouterCtrlPeerDelCfmSend(msg->source, req->clientData, req->interfaceTag, status);
- unifi_trace(priv, UDBG2, "leaving CsrWifiRouterCtrlPeerDelReqHandler \n");
-}
-
-/* Add the new station to the station record data base */
-static int peer_add_new_record(unifi_priv_t *priv, CsrWifiRouterCtrlPeerAddReq *req, u32 *handle)
-{
- u8 i, powerModeTemp = 0;
- u8 freeSlotFound = FALSE;
- CsrWifiRouterCtrlStaInfo_t *newRecord = NULL;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[req->interfaceTag];
- u32 currentTime, currentTimeHi;
- unsigned long lock_flags;
-
- if (req->interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "peer_add_new_record: bad interfaceTag\n");
- return CSR_RESULT_FAILURE;
- }
-
- currentTime = CsrTimeGet(&currentTimeHi);
-
- for(i = 0; i < UNIFI_MAX_CONNECTIONS; i++) {
- if(interfacePriv->staInfo[i] == NULL) {
- /* Slot is empty, so can be used for station record */
- freeSlotFound = TRUE;
- *handle = i;
-
- /* Allocate for the new station record , to avoid race condition would happen between ADD_PEER &
- * DEL_PEER the allocation made atomic memory rather than kernel memory
- */
- newRecord = kmalloc(sizeof(CsrWifiRouterCtrlStaInfo_t), GFP_ATOMIC);
- if (!newRecord) {
- unifi_error(priv, "failed to allocate the %d bytes of mem for station record\n",
- sizeof(CsrWifiRouterCtrlStaInfo_t));
- return CSR_RESULT_FAILURE;
- }
-
- unifi_trace(priv, UDBG1, "peer_add_new_record: handle = %d AID = %d addr = %x:%x:%x:%x:%x:%x LI=%u\n",
- *handle, req->associationId, req->peerMacAddress.a[0], req->peerMacAddress.a[1], req->peerMacAddress.a[2],
- req->peerMacAddress.a[3], req->peerMacAddress.a[4], req->peerMacAddress.a[5],
- req->staInfo.listenIntervalInTus);
-
- /* disable the preemption until station record updated */
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
-
- interfacePriv->staInfo[i] = newRecord;
- /* Initialize the record*/
- memset(newRecord, 0, sizeof(CsrWifiRouterCtrlStaInfo_t));
- /* update the station record */
- memcpy(newRecord->peerMacAddress.a, req->peerMacAddress.a, ETH_ALEN);
- newRecord->wmmOrQosEnabled = req->staInfo.wmmOrQosEnabled;
-
- /* maxSpLength is bit map in qosInfo field, so converting accordingly */
- newRecord->maxSpLength = req->staInfo.maxSpLength * 2;
-
- /*Max SP 0 mean any number of packets. since we buffer only 512
- packets we are hard coding this to zero for the moment */
-
- if(newRecord->maxSpLength == 0)
- newRecord->maxSpLength=512;
-
- newRecord->assignedHandle = i;
-
- /* copy power save mode of all access catagory (Trigger/Delivery/both enabled/disabled) */
- powerModeTemp = (u8) ((req->staInfo.powersaveMode >> 4) & 0xff);
-
- if(!(req->staInfo.powersaveMode & 0x0001))
- newRecord->powersaveMode[UNIFI_TRAFFIC_Q_BK]= CSR_WIFI_AC_LEGACY_POWER_SAVE;
- else
- newRecord->powersaveMode[UNIFI_TRAFFIC_Q_BK]= powerModeTemp & 0x03;
-
- if(!(req->staInfo.powersaveMode & 0x0002))
- newRecord->powersaveMode[UNIFI_TRAFFIC_Q_BE]= CSR_WIFI_AC_LEGACY_POWER_SAVE;
- else
- newRecord->powersaveMode[UNIFI_TRAFFIC_Q_BE]= ((powerModeTemp & 0x0C)>> 2);
-
- if(!(req->staInfo.powersaveMode & 0x0004))
- newRecord->powersaveMode[UNIFI_TRAFFIC_Q_VI]= CSR_WIFI_AC_LEGACY_POWER_SAVE;
- else
- newRecord->powersaveMode[UNIFI_TRAFFIC_Q_VI]= ((powerModeTemp & 0x30)>> 4);
-
- if(!(req->staInfo.powersaveMode & 0x0008))
- newRecord->powersaveMode[UNIFI_TRAFFIC_Q_VO]= CSR_WIFI_AC_LEGACY_POWER_SAVE;
- else
- newRecord->powersaveMode[UNIFI_TRAFFIC_Q_VO]= ((powerModeTemp & 0xC0)>> 6);
-
- {
- u8 k;
- for(k=0; k< MAX_ACCESS_CATOGORY ;k++)
- unifi_trace(priv, UDBG2, "peer_add_new_record: WMM : %d ,AC %d, powersaveMode %x \n",
- req->staInfo.wmmOrQosEnabled, k, newRecord->powersaveMode[k]);
- }
-
- unifi_trace(priv, UDBG3, "newRecord->wmmOrQosEnabled : %d , MAX SP : %d\n",
- newRecord->wmmOrQosEnabled, newRecord->maxSpLength);
-
- /* Initialize the mgtFrames & data Pdu list */
- {
- u8 j;
- INIT_LIST_HEAD(&newRecord->mgtFrames);
- for(j = 0; j < MAX_ACCESS_CATOGORY; j++) {
- INIT_LIST_HEAD(&newRecord->dataPdu[j]);
- }
- }
-
- newRecord->lastActivity = currentTime;
- newRecord->activity_flag = TRUE;
-
- /* enable the preemption as station record updated */
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
-
- /* First time port actions are set for the peer with below information */
- configure_data_port(priv, CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN, &newRecord->peerMacAddress,
- UF_UNCONTROLLED_PORT_Q, req->interfaceTag);
-
- if (interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_IBSS) {
- configure_data_port(priv, CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN, &newRecord->peerMacAddress,
- UF_CONTROLLED_PORT_Q, req->interfaceTag);
- } else {
- configure_data_port(priv, CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD, &newRecord->peerMacAddress,
- UF_CONTROLLED_PORT_Q, req->interfaceTag);
- }
-
-
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- /* Port status must be already set before calling the Add Peer request */
- newRecord->peerControlledPort = uf_sme_port_config_handle(priv, newRecord->peerMacAddress.a,
- UF_CONTROLLED_PORT_Q, req->interfaceTag);
- newRecord->peerUnControlledPort = uf_sme_port_config_handle(priv, newRecord->peerMacAddress.a,
- UF_UNCONTROLLED_PORT_Q, req->interfaceTag);
-
- if (!newRecord->peerControlledPort || !newRecord->peerUnControlledPort) {
- /* enable the preemption as station record failed to update */
- unifi_warning(priv, "Un/ControlledPort record not found in port configuration array index = %d\n", i);
- kfree(interfacePriv->staInfo[i]);
- interfacePriv->staInfo[i] = NULL;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- return CSR_RESULT_FAILURE;
- }
-
- newRecord->currentPeerState = CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_ACTIVE;
-
- /* changes done during block ack handling */
- newRecord->txSuspend = FALSE;
-
- /*U-APSD related data structure*/
- newRecord->timRequestPendingFlag = FALSE;
-
- /* Initialise the variable updateTimReqQueued with a value
- * other then CSR_WIFI_TIM_SET or CSR_WIFI_TIM_RESET value
- */
- newRecord->updateTimReqQueued = 0xFF;
- newRecord->timSet = CSR_WIFI_TIM_RESET;
- newRecord->uapsdActive = FALSE;
- newRecord->noOfSpFramesSent =0;
- newRecord->triggerFramePriority = CSR_QOS_UP0;
-
- /* The protection bit is updated once the port opens for corresponding peer in
- * routerPortConfigure request */
-
- /* update the association ID */
- newRecord->aid = req->associationId;
-
-#ifdef CSR_SUPPORT_SME
- interfacePriv->num_stations_joined++;
- newRecord->interfacePriv = interfacePriv;
- newRecord->listenIntervalInTus = req->staInfo.listenIntervalInTus;
- newRecord->nullDataHostTag = INVALID_HOST_TAG;
-
- INIT_WORK(&newRecord->send_disconnected_ind_task, uf_send_disconnected_ind_wq);
-
- if(!(interfacePriv->sta_activity_check_enabled) &&
- (interfacePriv->num_stations_joined >= STA_INACTIVE_DETECTION_TRIGGER_THRESHOLD)){
- unifi_trace(priv, UDBG1,
- "peer_add_new_record: STARTING the Inactivity Timer (num of stations = %d)",
- interfacePriv->num_stations_joined);
-
- interfacePriv->sta_activity_check_enabled = TRUE;
- interfacePriv->sta_activity_check_timer.function = check_inactivity_timer_expire_func;
- interfacePriv->sta_activity_check_timer.data = (unsigned long)interfacePriv;
-
- init_timer(&interfacePriv->sta_activity_check_timer);
- mod_timer(&interfacePriv->sta_activity_check_timer,
- (jiffies + usecs_to_jiffies(STA_INACTIVE_DETECTION_TIMER_INTERVAL * 1000 * 1000)));
-
- }
-#endif
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- break;
- }
- }
-
- if(!freeSlotFound) {
- unifi_error(priv, "Limited connectivity, Free slot not found for station record addition\n");
- return CSR_RESULT_FAILURE;
- }
- return CSR_RESULT_SUCCESS;
-}
-
-#ifdef CSR_SUPPORT_SME
-static void check_inactivity_timer_expire_func(unsigned long data)
-{
- struct unifi_priv *priv;
- CsrWifiRouterCtrlStaInfo_t *sta_record = NULL;
- u8 i = 0;
- u32 now;
- u32 inactive_time;
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *) data;
-
- if (!interfacePriv)
- {
- return;
- }
-
- priv = interfacePriv->privPtr;
-
- if (interfacePriv->InterfaceTag >= CSR_WIFI_NUM_INTERFACES)
- {
- unifi_error(priv, "check_inactivity_timer_expire_func: Invalid interfaceTag\n");
- return;
- }
-
- /* RUN Algorithm to check inactivity for each connected station */
- now = CsrTimeGet(NULL);
-
- for(i = 0; i < UNIFI_MAX_CONNECTIONS; i++) {
- if(interfacePriv->staInfo[i] != NULL) {
- sta_record = interfacePriv->staInfo[i];
-
- if (sta_record->activity_flag == TRUE){
- sta_record->activity_flag = FALSE;
- sta_record->lastActivity = now;
- continue;
- }
-
- if (sta_record->lastActivity > now)
- {
- /* simple timer wrap (for 1 wrap) */
- inactive_time = CsrTimeAdd((u32)CsrTimeSub(CSR_SCHED_TIME_MAX, sta_record->lastActivity), now);
- }
- else
- {
- inactive_time = (u32)CsrTimeSub(now, sta_record->lastActivity);
- }
-
- if (inactive_time >= STA_INACTIVE_TIMEOUT_VAL)
- {
- unifi_trace(priv, UDBG1, "STA is Inactive - AID = %d inactive_time = %d\n",
- sta_record->aid,
- inactive_time);
-
- /* station is in-active, if it is in active mode send a null frame
- * and the station should acknowledge the null frame, if acknowledgement
- * is not received throw out the station.
- * If the station is in Power Save, update TIM for the station so
- * that it wakes up and register some activity through PS-Poll or
- * trigger frame.
- */
- if (sta_record->currentPeerState == CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_ACTIVE)
- {
- unifi_trace(priv, UDBG1, "STA power save state - Active, send a NULL frame to check if it is ALIVE\n");
- uf_send_nulldata ( priv,
- sta_record->interfacePriv->InterfaceTag,
- sta_record->peerMacAddress.a,
- CSR_CONTENTION,
- sta_record);
- }
- else if (sta_record->currentPeerState == CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_POWER_SAVE)
- {
- if((sta_record->timSet == CSR_WIFI_TIM_SET) ||
- (sta_record->timSet == CSR_WIFI_TIM_SETTING))
- {
- unifi_trace(priv, UDBG1, "STA power save state - PS, TIM is already SET\n");
-
- /* If TIM is set and we do not have any activity for
- * more than 3 listen intervals then send a disconnected
- * indication to SME, to delete the station from station
- * record list.
- * The inactivity is already more than STA_INACTIVE_TIMEOUT_VAL
- * and this check ensures if the listen interval is a larger
- * value than STA_INACTIVE_TIMEOUT_VAL.
- */
- if (inactive_time > (3 * (sta_record->listenIntervalInTus * 1024)))
- {
- unifi_trace(priv, UDBG1, "STA is inactive for more than 3 listen intervals\n");
- queue_work( priv->unifi_workqueue,
- &sta_record->send_disconnected_ind_task);
- }
-
- }
- else
- {
- unifi_trace(priv, UDBG1, "STA power save state - PS, update TIM to see if it is ALIVE\n");
- update_tim(priv,
- sta_record->aid,
- CSR_WIFI_TIM_SET,
- interfacePriv->InterfaceTag,
- sta_record->assignedHandle);
- }
- }
- }
- }
- }
-
- /* re-run the timer interrupt */
- mod_timer(&interfacePriv->sta_activity_check_timer,
- (jiffies + usecs_to_jiffies(STA_INACTIVE_DETECTION_TIMER_INTERVAL * 1000 * 1000)));
-
-}
-
-
-void uf_send_disconnected_ind_wq(struct work_struct *work)
-{
-
- CsrWifiRouterCtrlStaInfo_t *staInfo = container_of(work, CsrWifiRouterCtrlStaInfo_t, send_disconnected_ind_task);
- unifi_priv_t *priv;
- u16 interfaceTag;
- struct list_head send_cfm_list;
- u8 j;
-
- if(!staInfo) {
- return;
- }
-
- if(!staInfo->interfacePriv) {
- return;
- }
-
- priv = staInfo->interfacePriv->privPtr;
- interfaceTag = staInfo->interfacePriv->InterfaceTag;
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "uf_send_disconnected_ind_wq: invalid interfaceTag\n");
- return;
- }
-
- /* The SME/NME may be waiting for confirmation for requested frames to this station.
- * So loop through buffered frames for this station and if confirmation is
- * requested, send auto confirmation with failure status. Also flush the frames so
- * that these are not processed again in PEER_DEL_REQ handler.
- */
- INIT_LIST_HEAD(&send_cfm_list);
-
- uf_prepare_send_cfm_list_for_queued_pkts(priv,
- &send_cfm_list,
- &(staInfo->mgtFrames));
-
- uf_flush_list(priv, &(staInfo->mgtFrames));
-
- for(j = 0; j < MAX_ACCESS_CATOGORY; j++){
- uf_prepare_send_cfm_list_for_queued_pkts(priv,
- &send_cfm_list,
- &(staInfo->dataPdu[j]));
-
- uf_flush_list(priv, &(staInfo->dataPdu[j]));
- }
-
- send_auto_ma_packet_confirm(priv, staInfo->interfacePriv, &send_cfm_list);
-
- unifi_warning(priv, "uf_send_disconnected_ind_wq: Router Disconnected IND Peer (%x-%x-%x-%x-%x-%x)\n",
- staInfo->peerMacAddress.a[0],
- staInfo->peerMacAddress.a[1],
- staInfo->peerMacAddress.a[2],
- staInfo->peerMacAddress.a[3],
- staInfo->peerMacAddress.a[4],
- staInfo->peerMacAddress.a[5]);
-
- CsrWifiRouterCtrlConnectedIndSend(priv->CSR_WIFI_SME_IFACEQUEUE,
- 0,
- staInfo->interfacePriv->InterfaceTag,
- staInfo->peerMacAddress,
- CSR_WIFI_ROUTER_CTRL_PEER_DISCONNECTED);
-
-
- return;
-}
-
-
-#endif
-void CsrWifiRouterCtrlPeerAddReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- CsrWifiRouterCtrlPeerAddReq* req = (CsrWifiRouterCtrlPeerAddReq*)msg;
- CsrResult status = CSR_RESULT_SUCCESS;
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- u32 handle = 0;
- netInterface_priv_t *interfacePriv;
-
- unifi_trace(priv, UDBG2, "entering CsrWifiRouterCtrlPeerAddReqHandler \n");
- if (priv == NULL)
- {
- unifi_error(priv, "CsrWifiRouterCtrlPeerAddReqHandler: invalid smepriv\n");
- return;
- }
-
- if (req->interfaceTag >= CSR_WIFI_NUM_INTERFACES)
- {
- unifi_error(priv, "CsrWifiRouterCtrlPeerAddReqHandler: bad interfaceTag\n");
- return;
- }
-
- interfacePriv = priv->interfacePriv[req->interfaceTag];
-
- switch(interfacePriv->interfaceMode)
- {
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- case CSR_WIFI_ROUTER_CTRL_MODE_IBSS:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- /* Add station record */
- status = peer_add_new_record(priv, req, &handle);
- break;
- case CSR_WIFI_ROUTER_CTRL_MODE_STA:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI:
- default:
- /* No station record to maintain in these modes */
- break;
- }
-
- CsrWifiRouterCtrlPeerAddCfmSend(msg->source, req->clientData, req->interfaceTag, req->peerMacAddress, handle, status);
- unifi_trace(priv, UDBG2, "leaving CsrWifiRouterCtrlPeerAddReqHandler \n");
-}
-
-void CsrWifiRouterCtrlPeerUpdateReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- CsrWifiRouterCtrlPeerUpdateReq* req = (CsrWifiRouterCtrlPeerUpdateReq*)msg;
- CsrResult status = CSR_RESULT_SUCCESS;
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
-
- unifi_trace(priv, UDBG2, "entering CsrWifiRouterCtrlPeerUpdateReqHandler \n");
- if (priv == NULL)
- {
- unifi_error(priv, "CsrWifiRouterCtrlPeerUpdateReqHandler: invalid smepriv\n");
- return;
- }
-
- CsrWifiRouterCtrlPeerUpdateCfmSend(msg->source, req->clientData, req->interfaceTag, status);
- unifi_trace(priv, UDBG2, "leaving CsrWifiRouterCtrlPeerUpdateReqHandler \n");
-}
-
-
- void CsrWifiRouterCtrlRawSdioDeinitialiseReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- /* This will never be called as it is intercepted in the Userspace */
-}
-
-void CsrWifiRouterCtrlRawSdioInitialiseReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- /* This will never be called as it is intercepted in the Userspace */
-}
-
-void
-uf_send_ba_err_wq(struct work_struct *work)
-{
- ba_session_rx_struct *ba_session = container_of(work, ba_session_rx_struct, send_ba_err_task);
- unifi_priv_t *priv;
-
- if(!ba_session) {
- return;
- }
-
- if(!ba_session->interfacePriv) {
- return;
- }
-
- priv = ba_session->interfacePriv->privPtr;
-
- if (ba_session->interfacePriv->InterfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "%s: invalid interfaceTag\n", __FUNCTION__);
- return;
- }
-
- unifi_warning(priv, "%s: Calling CsrWifiRouterCtrlBlockAckErrorIndSend(%d, %d, %d, %d, %x:%x:%x:%x:%x:%x, %d)\n",
- __FUNCTION__,
- priv->CSR_WIFI_SME_IFACEQUEUE,
- 0,
- ba_session->interfacePriv->InterfaceTag,
- ba_session->tID,
- ba_session->macAddress.a[0],
- ba_session->macAddress.a[1],
- ba_session->macAddress.a[2],
- ba_session->macAddress.a[3],
- ba_session->macAddress.a[4],
- ba_session->macAddress.a[5],
- CSR_RESULT_SUCCESS
- );
- CsrWifiRouterCtrlBlockAckErrorIndSend(priv->CSR_WIFI_SME_IFACEQUEUE,
- 0,
- ba_session->interfacePriv->InterfaceTag,
- ba_session->tID,
- ba_session->macAddress,
- CSR_RESULT_SUCCESS);
-}
-
-
-static void ba_session_terminate_timer_func(unsigned long data)
-{
- ba_session_rx_struct *ba_session = (ba_session_rx_struct*)data;
- struct unifi_priv *priv;
-
- if(!ba_session) {
- return;
- }
-
- if(!ba_session->interfacePriv) {
- return;
- }
-
- priv = ba_session->interfacePriv->privPtr;
-
- if (ba_session->interfacePriv->InterfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "%s: invalid interfaceTag\n", __FUNCTION__);
- return;
- }
-
- queue_work(priv->unifi_workqueue, &ba_session->send_ba_err_task);
-}
-
-
-u8 blockack_session_stop(unifi_priv_t *priv,
- u16 interfaceTag,
- CsrWifiRouterCtrlBlockAckRole role,
- u16 tID,
- CsrWifiMacAddress macAddress)
-{
- netInterface_priv_t *interfacePriv;
- ba_session_rx_struct *ba_session_rx = NULL;
- ba_session_tx_struct *ba_session_tx = NULL;
- u8 ba_session_idx = 0;
- int i;
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "%s: bad interfaceTag = %d\n", __FUNCTION__, interfaceTag);
- return FALSE;
- }
-
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- if(!interfacePriv) {
- unifi_error(priv, "%s: bad interfacePriv\n", __FUNCTION__);
- return FALSE;
- }
-
- if(tID > 15) {
- unifi_error(priv, "%s: bad tID = %d\n", __FUNCTION__, tID);
- return FALSE;
- }
-
- if((role != CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ORIGINATOR) &&
- (role != CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_RECIPIENT)) {
- unifi_error(priv, "%s: bad role = %d\n", __FUNCTION__, role);
- return FALSE;
- }
-
- unifi_warning(priv,
- "%s: stopping ba_session for peer = %pM role = %d tID = %d\n",
- __func__, macAddress.a, role, tID);
-
- /* find out the appropriate ba session (/station /tid /role) for which stop is requested */
- if (role == CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_RECIPIENT){
- for (ba_session_idx =0; ba_session_idx < MAX_SUPPORTED_BA_SESSIONS_RX; ba_session_idx++){
-
- ba_session_rx = interfacePriv->ba_session_rx[ba_session_idx];
-
- if(ba_session_rx){
- if ((!memcmp(ba_session_rx->macAddress.a, macAddress.a, ETH_ALEN)) && (ba_session_rx->tID == tID)){
- break;
- }
- }
- }
-
- if (!ba_session_rx || (ba_session_idx == MAX_SUPPORTED_BA_SESSIONS_RX)) {
- unifi_error(priv, "%s: bad ba_session for Rx [tID=%d]\n", __FUNCTION__, tID);
- return FALSE;
- }
-
-
- if(ba_session_rx->timeout) {
- del_timer_sync(&ba_session_rx->timer);
- }
- cancel_work_sync(&ba_session_rx->send_ba_err_task);
- for (i = 0; i < ba_session_rx->wind_size; i++) {
- if(ba_session_rx->buffer[i].active) {
- frame_desc_struct *frame_desc = &ba_session_rx->buffer[i];
- unifi_net_data_free(priv, &frame_desc->bulkdata.d[0]);
- }
- }
- kfree(ba_session_rx->buffer);
-
- interfacePriv->ba_session_rx[ba_session_idx] = NULL;
- kfree(ba_session_rx);
- }else if (role == CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ORIGINATOR){
- for (ba_session_idx =0; ba_session_idx < MAX_SUPPORTED_BA_SESSIONS_TX; ba_session_idx++){
- ba_session_tx = interfacePriv->ba_session_tx[ba_session_idx];
- if(ba_session_tx){
- if ((!memcmp(ba_session_tx->macAddress.a, macAddress.a, ETH_ALEN)) && (ba_session_tx->tID == tID)){
- break;
- }
- }
- }
-
- if (!ba_session_tx || (ba_session_idx == MAX_SUPPORTED_BA_SESSIONS_TX)) {
- unifi_error(priv, "%s: bad ba_session for Tx [tID=%d]\n", __FUNCTION__, tID);
- return FALSE;
- }
- interfacePriv->ba_session_tx[ba_session_idx] = NULL;
- kfree(ba_session_tx);
-
- }
-
- return TRUE;
-}
-
-
-void CsrWifiRouterCtrlBlockAckDisableReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- CsrWifiRouterCtrlBlockAckDisableReq* req = (CsrWifiRouterCtrlBlockAckDisableReq*)msg;
- u8 r;
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
-
- unifi_trace(priv, UDBG6, "%s: in ok\n", __FUNCTION__);
-
- down(&priv->ba_mutex);
- r = blockack_session_stop(priv,
- req->interfaceTag,
- req->role,
- req->trafficStreamID,
- req->macAddress);
- up(&priv->ba_mutex);
-
- CsrWifiRouterCtrlBlockAckDisableCfmSend(msg->source,
- req->clientData,
- req->interfaceTag,
- r?CSR_RESULT_SUCCESS:CSR_RESULT_FAILURE);
-
- unifi_trace(priv, UDBG6, "%s: out ok\n", __FUNCTION__);
-}
-
-
-u8 blockack_session_start(unifi_priv_t *priv,
- u16 interfaceTag,
- u16 tID,
- u16 timeout,
- CsrWifiRouterCtrlBlockAckRole role,
- u16 wind_size,
- u16 start_sn,
- CsrWifiMacAddress macAddress
- )
-{
- netInterface_priv_t *interfacePriv;
- ba_session_rx_struct *ba_session_rx = NULL;
- ba_session_tx_struct *ba_session_tx = NULL;
- u8 ba_session_idx = 0;
-
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "%s: bad interfaceTag = %d\n", __FUNCTION__, interfaceTag);
- return FALSE;
- }
-
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- if(!interfacePriv) {
- unifi_error(priv, "%s: bad interfacePriv\n", __FUNCTION__);
- return FALSE;
- }
-
- if(tID > 15)
- {
- unifi_error(priv, "%s: bad tID=%d\n", __FUNCTION__, tID);
- return FALSE;
- }
-
- if(wind_size > MAX_BA_WIND_SIZE) {
- unifi_error(priv, "%s: bad wind_size = %d\n", __FUNCTION__, wind_size);
- return FALSE;
- }
-
- if(role != CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ORIGINATOR &&
- role != CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_RECIPIENT) {
- unifi_error(priv, "%s: bad role = %d\n", __FUNCTION__, role);
- return FALSE;
- }
-
- unifi_warning(priv,
- "%s: ba session with peer= (%pM)\n", __func__,
- macAddress.a);
-
- unifi_warning(priv, "%s: ba session for tID=%d timeout=%d role=%d wind_size=%d start_sn=%d\n", __FUNCTION__,
- tID,
- timeout,
- role,
- wind_size,
- start_sn);
-
- /* Check if BA session exists for per station, per TID, per role or not.
- if BA session exists update parameters and if it does not exist
- create a new BA session */
- if (role == CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ORIGINATOR){
- for (ba_session_idx =0; ba_session_idx < MAX_SUPPORTED_BA_SESSIONS_TX; ba_session_idx++){
- ba_session_tx = interfacePriv->ba_session_tx[ba_session_idx];
- if (ba_session_tx) {
- if ((!memcmp(ba_session_tx->macAddress.a, macAddress.a, ETH_ALEN)) && (ba_session_tx->tID == tID)){
- unifi_warning(priv, "%s: ba_session for Tx already exists\n", __FUNCTION__);
- return TRUE;
- }
- }
- }
-
- /* we have to create new ba_session_tx struct */
- ba_session_tx = NULL;
-
- /* loop through until an empty BA session slot is there and save the session there */
- for (ba_session_idx=0; ba_session_idx < MAX_SUPPORTED_BA_SESSIONS_TX ; ba_session_idx++){
- if (!(interfacePriv->ba_session_tx[ba_session_idx])){
- break;
- }
- }
- if (ba_session_idx == MAX_SUPPORTED_BA_SESSIONS_TX){
- unifi_error(priv, "%s: All ba_session used for Tx, NO free session available\n", __FUNCTION__);
- return FALSE;
- }
-
- /* create and populate the new BA session structure */
- ba_session_tx = kzalloc(sizeof(ba_session_tx_struct), GFP_KERNEL);
- if (!ba_session_tx) {
- unifi_error(priv, "%s: kmalloc failed for ba_session_tx\n", __FUNCTION__);
- return FALSE;
- }
-
- ba_session_tx->interfacePriv = interfacePriv;
- ba_session_tx->tID = tID;
- ba_session_tx->macAddress = macAddress;
-
- interfacePriv->ba_session_tx[ba_session_idx] = ba_session_tx;
-
- } else if (role == CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_RECIPIENT){
-
- for (ba_session_idx =0; ba_session_idx < MAX_SUPPORTED_BA_SESSIONS_RX; ba_session_idx++){
- ba_session_rx = interfacePriv->ba_session_rx[ba_session_idx];
- if (ba_session_rx) {
- if ((!memcmp(ba_session_rx->macAddress.a, macAddress.a, ETH_ALEN)) && (ba_session_rx->tID == tID)){
- unifi_warning(priv, "%s: ba_session for Rx[tID = %d] already exists\n", __FUNCTION__, tID);
-
- if(ba_session_rx->wind_size == wind_size &&
- ba_session_rx->timeout == timeout &&
- ba_session_rx->expected_sn == start_sn) {
- return TRUE;
- }
-
- if(ba_session_rx->timeout) {
- del_timer_sync(&ba_session_rx->timer);
- ba_session_rx->timeout = 0;
- }
-
- if(ba_session_rx->wind_size != wind_size) {
- blockack_session_stop(priv, interfaceTag, role, tID, macAddress);
- } else {
- if (timeout) {
- ba_session_rx->timeout = timeout;
- ba_session_rx->timer.function = ba_session_terminate_timer_func;
- ba_session_rx->timer.data = (unsigned long)ba_session_rx;
- init_timer(&ba_session_rx->timer);
- mod_timer(&ba_session_rx->timer, (jiffies + usecs_to_jiffies((ba_session_rx->timeout) * 1024)));
- }
- /*
- * The starting sequence number shall remain same if the BA
- * enable request is issued to update BA parameters only. If
- * it is not same, then we scroll our window to the new starting
- * sequence number. This could happen if the DELBA frame from
- * originator is lost and then we receive ADDBA frame with new SSN.
- */
- if(ba_session_rx->start_sn != start_sn) {
- scroll_ba_window(priv, interfacePriv, ba_session_rx, start_sn);
- }
- return TRUE;
- }
- }
- }
- }
-
- /* we could have a valid BA session pointer here or un-initialized
- ba session pointer. but in any case we have to create a new session.
- so re-initialize the ba_session pointer */
- ba_session_rx = NULL;
-
- /* loop through until an empty BA session slot is there and save the session there */
- for (ba_session_idx=0; ba_session_idx < MAX_SUPPORTED_BA_SESSIONS_RX ; ba_session_idx++){
- if (!(interfacePriv->ba_session_rx[ba_session_idx])){
- break;
- }
- }
- if (ba_session_idx == MAX_SUPPORTED_BA_SESSIONS_RX){
- unifi_error(priv, "%s: All ba_session used for Rx, NO free session available\n", __FUNCTION__);
- return FALSE;
- }
-
- /* It is observed that with some devices there is a race between
- * EAPOL exchanges and BA session establishment. This results in
- * some EAPOL authentication packets getting stuck in BA reorder
- * buffer and hence the conection cannot be established. To avoid
- * this we check here if the EAPOL authentication is complete and
- * if so then only allow the BA session to establish.
- *
- * It is verified that the peers normally re-establish
- * the BA session after the initial rejection.
- */
- if (CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN != uf_sme_port_state(priv, macAddress.a, UF_CONTROLLED_PORT_Q, interfacePriv->InterfaceTag))
- {
- unifi_warning(priv, "blockack_session_start: Controlled port not opened, Reject BA request\n");
- return FALSE;
- }
-
- ba_session_rx = kzalloc(sizeof(ba_session_rx_struct), GFP_KERNEL);
- if (!ba_session_rx) {
- unifi_error(priv, "%s: kmalloc failed for ba_session_rx\n", __FUNCTION__);
- return FALSE;
- }
-
- ba_session_rx->wind_size = wind_size;
- ba_session_rx->start_sn = ba_session_rx->expected_sn = start_sn;
- ba_session_rx->trigger_ba_after_ssn = FALSE;
-
- ba_session_rx->buffer = kzalloc(ba_session_rx->wind_size*sizeof(frame_desc_struct), GFP_KERNEL);
- if (!ba_session_rx->buffer) {
- kfree(ba_session_rx);
- unifi_error(priv, "%s: kmalloc failed for buffer\n", __FUNCTION__);
- return FALSE;
- }
-
- INIT_WORK(&ba_session_rx->send_ba_err_task, uf_send_ba_err_wq);
- if (timeout) {
- ba_session_rx->timeout = timeout;
- ba_session_rx->timer.function = ba_session_terminate_timer_func;
- ba_session_rx->timer.data = (unsigned long)ba_session_rx;
- init_timer(&ba_session_rx->timer);
- mod_timer(&ba_session_rx->timer, (jiffies + usecs_to_jiffies((ba_session_rx->timeout) * 1024)));
- }
-
- ba_session_rx->interfacePriv = interfacePriv;
- ba_session_rx->tID = tID;
- ba_session_rx->macAddress = macAddress;
-
- interfacePriv->ba_session_rx[ba_session_idx] = ba_session_rx;
- }
- return TRUE;
-}
-
-void CsrWifiRouterCtrlBlockAckEnableReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
- CsrWifiRouterCtrlBlockAckEnableReq* req = (CsrWifiRouterCtrlBlockAckEnableReq*)msg;
- u8 r;
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
-
- unifi_trace(priv, UDBG6, ">>%s\n", __FUNCTION__);
- down(&priv->ba_mutex);
- r = blockack_session_start(priv,
- req->interfaceTag,
- req->trafficStreamID,
- req->timeout,
- req->role,
- req->bufferSize,
- req->ssn,
- req->macAddress
- );
- up(&priv->ba_mutex);
-
- CsrWifiRouterCtrlBlockAckEnableCfmSend(msg->source,
- req->clientData,
- req->interfaceTag,
- r?CSR_RESULT_SUCCESS:CSR_RESULT_FAILURE);
- unifi_trace(priv, UDBG6, "<<%s: r=%d\n", __FUNCTION__, r);
-
-}
-
-void CsrWifiRouterCtrlWapiMulticastFilterReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
-
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlWapiMulticastFilterReq* req = (CsrWifiRouterCtrlWapiMulticastFilterReq*)msg;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[req->interfaceTag];
-
- if (CSR_WIFI_ROUTER_CTRL_MODE_STA == interfacePriv->interfaceMode) {
-
- unifi_trace(priv, UDBG6, ">>%s\n", __FUNCTION__);
-
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlWapiMulticastFilterReq: req->status = %d\n", req->status);
-
- /* status 1 - Filter on
- * status 0 - Filter off */
- priv->wapi_multicast_filter = req->status;
-
- unifi_trace(priv, UDBG6, "<<%s\n", __FUNCTION__);
- } else {
-
- unifi_warning(priv, "%s is NOT applicable for interface mode - %d\n", __FUNCTION__, interfacePriv->interfaceMode);
-
- }
-#elif defined(UNIFI_DEBUG)
- /*WAPI Disabled*/
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- unifi_error(priv, "CsrWifiRouterCtrlWapiMulticastFilterReqHandler: called when WAPI isn't enabled\n");
-#endif
-}
-
-void CsrWifiRouterCtrlWapiUnicastFilterReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
-
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlWapiUnicastFilterReq* req = (CsrWifiRouterCtrlWapiUnicastFilterReq*)msg;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[req->interfaceTag];
-
- if (CSR_WIFI_ROUTER_CTRL_MODE_STA == interfacePriv->interfaceMode) {
-
- unifi_trace(priv, UDBG6, ">>%s\n", __FUNCTION__);
-
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlWapiUnicastFilterReq: req->status= %d\n", req->status);
-
- if ((priv->wapi_unicast_filter == 1) && (req->status == 0)) {
- /* When we have successfully re-associated and obtained a new unicast key with keyid = 0 */
- priv->wapi_unicast_queued_pkt_filter = 1;
- }
-
- /* status 1 - Filter ON
- * status 0 - Filter OFF */
- priv->wapi_unicast_filter = req->status;
-
- unifi_trace(priv, UDBG6, "<<%s\n", __FUNCTION__);
- } else {
-
- unifi_warning(priv, "%s is NOT applicable for interface mode - %d\n", __FUNCTION__, interfacePriv->interfaceMode);
-
- }
-#elif defined(UNIFI_DEBUG)
- /*WAPI Disabled*/
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- unifi_error(priv, "CsrWifiRouterCtrlWapiUnicastFilterReqHandler: called when WAPI isn't enabled\n");
-#endif
-}
-
-void CsrWifiRouterCtrlWapiRxPktReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
-
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlWapiRxPktReq* req = (CsrWifiRouterCtrlWapiRxPktReq*)msg;
- int client_id, receiver_id;
- bulk_data_param_t bulkdata;
- CsrResult res;
- ul_client_t *client;
- CSR_SIGNAL signal;
- CSR_MA_PACKET_INDICATION *pkt_ind;
- netInterface_priv_t *interfacePriv;
-
- if (priv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlWapiRxPktReq : invalid priv\n", __func__);
- return;
- }
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlWapiRxPktReq : invalid sme priv\n", __func__);
- return;
- }
-
- interfacePriv = priv->interfacePriv[req->interfaceTag];
-
- if (CSR_WIFI_ROUTER_CTRL_MODE_STA == interfacePriv->interfaceMode) {
-
- unifi_trace(priv, UDBG6, ">>%s\n", __FUNCTION__);
-
-
- if (req->dataLength == 0 || req->data == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlWapiRxPktReq: invalid request\n", __FUNCTION__);
- return;
- }
-
- res = unifi_net_data_malloc(priv, &bulkdata.d[0], req->dataLength);
- if (res != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "CsrWifiRouterCtrlWapiRxPktReq: Could not allocate net data\n", __FUNCTION__);
- return;
- }
-
- /* This function is expected to be called only when the MIC has been verified by SME to be correct
- * So reset the reception status to rx_success */
- res = read_unpack_signal(req->signal, &signal);
- if (res) {
- unifi_error(priv, "CsrWifiRouterCtrlWapiRxPktReqHandler: Received unknown or corrupted signal.\n");
- return;
- }
- pkt_ind = (CSR_MA_PACKET_INDICATION*) (&((&signal)->u).MaPacketIndication);
- if (pkt_ind->ReceptionStatus != CSR_MICHAEL_MIC_ERROR) {
- unifi_error(priv, "CsrWifiRouterCtrlWapiRxPktReqHandler: Unknown signal with reception status = %d\n", pkt_ind->ReceptionStatus);
- return;
- } else {
- unifi_trace(priv, UDBG4, "CsrWifiRouterCtrlWapiRxPktReqHandler: MIC verified , RX_SUCCESS \n", __FUNCTION__);
- pkt_ind->ReceptionStatus = CSR_RX_SUCCESS;
- write_pack(&signal, req->signal, &(req->signalLength));
- }
-
- memcpy((void*)bulkdata.d[0].os_data_ptr, req->data, req->dataLength);
-
- receiver_id = CSR_GET_UINT16_FROM_LITTLE_ENDIAN((req->signal) + sizeof(s16)) & 0xFFF0;
- client_id = (receiver_id & 0x0F00) >> UDI_SENDER_ID_SHIFT;
-
- client = &priv->ul_clients[client_id];
-
- if (client && client->event_hook) {
- unifi_trace(priv, UDBG3,
- "CsrWifiRouterCtrlWapiRxPktReq: "
- "Sending signal to client %d, (s:0x%X, r:0x%X) - Signal 0x%X \n",
- client->client_id, client->sender_id, receiver_id,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN(req->signal));
-
- client->event_hook(client, req->signal, req->signalLength, &bulkdata, UDI_TO_HOST);
- } else {
- unifi_trace(priv, UDBG4, "No client to give the packet to\n");
- unifi_net_data_free(priv, &bulkdata.d[0]);
- }
-
- unifi_trace(priv, UDBG6, "<<%s\n", __FUNCTION__);
- } else {
- unifi_warning(priv, "%s is NOT applicable for interface mode - %d\n", __FUNCTION__, interfacePriv->interfaceMode);
- }
-#elif defined(UNIFI_DEBUG)
- /*WAPI Disabled*/
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- unifi_error(priv, "CsrWifiRouterCtrlWapiRxPktReqHandler: called when WAPI isn't enabled\n");
-#endif
-}
-
-void CsrWifiRouterCtrlWapiUnicastTxPktReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#if (defined(CSR_WIFI_SECURITY_WAPI_ENABLE) && defined(CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION))
-
- unifi_priv_t *priv = (unifi_priv_t*) drvpriv;
- CsrWifiRouterCtrlWapiUnicastTxPktReq *req = (CsrWifiRouterCtrlWapiUnicastTxPktReq*) msg;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[req->interfaceTag];
- bulk_data_param_t bulkdata;
- u8 macHeaderLengthInBytes = MAC_HEADER_SIZE;
- /*KeyID, Reserved, PN, MIC*/
- u8 appendedCryptoFields = 1 + 1 + 16 + 16;
- CsrResult result;
- /* Retrieve the MA PACKET REQ fields from the Signal retained from send_ma_pkt_request() */
- CSR_MA_PACKET_REQUEST *storedSignalMAPktReq = &interfacePriv->wapi_unicast_ma_pkt_sig.u.MaPacketRequest;
-
- if (CSR_WIFI_ROUTER_CTRL_MODE_STA == interfacePriv->interfaceMode) {
-
- unifi_trace(priv, UDBG6, ">>%s\n", __FUNCTION__);
-
- if (priv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlWapiUnicastTxPktReqHandler : invalid priv\n", __FUNCTION__);
- return;
- }
- if (priv->smepriv == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlWapiUnicastTxPktReqHandler : invalid sme priv\n", __FUNCTION__);
- return;
- }
- if (req->data == NULL) {
- unifi_error(priv, "CsrWifiRouterCtrlWapiUnicastTxPktReqHandler: invalid request\n", __FUNCTION__);
- return;
- } else {
- /* If it is QoS data (type = data subtype = QoS), frame header contains QoS control field */
- if ((req->data[0] & 0x88) == 0x88) {
- macHeaderLengthInBytes = macHeaderLengthInBytes + QOS_CONTROL_HEADER_SIZE;
- }
- }
- if ( !(req->dataLength>(macHeaderLengthInBytes+appendedCryptoFields)) ) {
- unifi_error(priv, "CsrWifiRouterCtrlWapiUnicastTxPktReqHandler: invalid dataLength\n", __FUNCTION__);
- return;
- }
-
- /* Encrypted DATA Packet contained in (req->data)
- * -------------------------------------------------------------------
- * |MAC Header| KeyId | Reserved | PN | xxDataxx | xxMICxxx |
- * -------------------------------------------------------------------
- * (<-----Encrypted----->)
- * -------------------------------------------------------------------
- * |24/26(QoS)| 1 | 1 | 16 | x | 16 |
- * -------------------------------------------------------------------
- */
- result = unifi_net_data_malloc(priv, &bulkdata.d[0], req->dataLength);
- if (result != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "CsrWifiRouterCtrlWapiUnicastTxPktReqHandler: Could not allocate net data\n", __FUNCTION__);
- return;
- }
- memcpy((void*)bulkdata.d[0].os_data_ptr, req->data, req->dataLength);
- bulkdata.d[0].data_length = req->dataLength;
- bulkdata.d[1].os_data_ptr = NULL;
- bulkdata.d[1].data_length = 0;
-
- /* Send UniFi msg */
- /* Here hostTag is been sent as 0xffffffff, its been appended properly while framing MA-Packet request in pdu_processing.c file */
- result = uf_process_ma_packet_req(priv,
- storedSignalMAPktReq->Ra.x,
- storedSignalMAPktReq->HostTag,/* Ask for a new HostTag */
- req->interfaceTag,
- storedSignalMAPktReq->TransmissionControl,
- storedSignalMAPktReq->TransmitRate,
- storedSignalMAPktReq->Priority, /* Retained value */
- interfacePriv->wapi_unicast_ma_pkt_sig.SignalPrimitiveHeader.SenderProcessId, /*FIXME AP: VALIDATE ???*/
- &bulkdata);
-
- if (result == NETDEV_TX_OK) {
- (priv->netdev[req->interfaceTag])->trans_start = jiffies;
- /* Should really count tx stats in the UNITDATA.status signal but
- * that doesn't have the length.
- */
- interfacePriv->stats.tx_packets++;
-
- /* count only the packet payload */
- interfacePriv->stats.tx_bytes += req->dataLength - macHeaderLengthInBytes - appendedCryptoFields;
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlWapiUnicastTxPktReqHandler: (Packet Sent), sent count = %x\n", interfacePriv->stats.tx_packets);
- } else {
- /* Failed to send: fh queue was full, and the skb was discarded*/
- unifi_trace(priv, UDBG1, "(HIP validation failure) Result = %d\n", result);
- unifi_net_data_free(priv, &bulkdata.d[0]);
-
- interfacePriv->stats.tx_dropped++;
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlWapiUnicastTxPktReqHandler: (Packet Drop), dropped count = %x\n", interfacePriv->stats.tx_dropped);
- }
-
- unifi_trace(priv, UDBG6, "<<%s\n", __FUNCTION__);
-
- } else {
-
- unifi_warning(priv, "%s is NOT applicable for interface mode - %d\n", __FUNCTION__, interfacePriv->interfaceMode);
-
- }
-#elif defined(UNIFI_DEBUG)
- /*WAPI Disabled*/
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- unifi_error(priv, "CsrWifiRouterCtrlWapiUnicastTxPktReqHandler: called when WAPI SW ENCRYPTION isn't enabled\n");
-#endif
-}
-
-void CsrWifiRouterCtrlWapiFilterReqHandler(void* drvpriv, CsrWifiFsmEvent* msg)
-{
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
-
-#ifdef CSR_WIFI_SECURITY_WAPI_QOSCTRL_MIC_WORKAROUND
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- CsrWifiRouterCtrlWapiFilterReq* req = (CsrWifiRouterCtrlWapiFilterReq*)msg;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[req->interfaceTag];
-
- if (CSR_WIFI_ROUTER_CTRL_MODE_STA == interfacePriv->interfaceMode) {
-
- unifi_trace(priv, UDBG6, ">>%s\n", __FUNCTION__);
-
- unifi_trace(priv, UDBG1, "CsrWifiRouterCtrlWapiFilterReq: req->isWapiConnected [0/1] = %d \n", req->isWapiConnected);
-
- priv->isWapiConnection = req->isWapiConnected;
-
- unifi_trace(priv, UDBG6, "<<%s\n", __FUNCTION__);
- } else {
-
- unifi_warning(priv, "%s is NOT applicable for interface mode - %d\n", __FUNCTION__, interfacePriv->interfaceMode);
-
- }
-#endif
-
-#elif defined(UNIFI_DEBUG)
- /*WAPI Disabled*/
- unifi_priv_t *priv = (unifi_priv_t*)drvpriv;
- unifi_error(priv, "CsrWifiRouterCtrlWapiFilterReq: called when WAPI isn't enabled\n");
-#endif
-}
diff --git a/drivers/staging/csr/sme_userspace.c b/drivers/staging/csr/sme_userspace.c
deleted file mode 100644
index b919b001ef7c..000000000000
--- a/drivers/staging/csr/sme_userspace.c
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- *****************************************************************************
- *
- * FILE : sme_userspace.c
- *
- * PURPOSE : Support functions for userspace SME helper application.
- *
- *
- * Copyright (C) 2008-2011 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- *****************************************************************************
- */
-
-#include "unifi_priv.h"
-
-/*
- * Fix Me..... These need to be the correct values...
- * Dynamic from the user space.
- */
-CsrSchedQid CSR_WIFI_ROUTER_IFACEQUEUE = 0xFFFF;
-CsrSchedQid CSR_WIFI_SME_IFACEQUEUE = 0xFFFF;
-#ifdef CSR_SUPPORT_WEXT_AP
-CsrSchedQid CSR_WIFI_NME_IFACEQUEUE = 0xFFFF;
-#endif
-int
-uf_sme_init(unifi_priv_t *priv)
-{
- int i, j;
-
- CsrWifiRouterTransportInit(priv);
-
- priv->smepriv = priv;
-
- init_waitqueue_head(&priv->sme_request_wq);
-
- priv->filter_tclas_ies = NULL;
- memset(&priv->packet_filters, 0, sizeof(uf_cfg_bcast_packet_filter_t));
-
-#ifdef CSR_SUPPORT_WEXT
- priv->ignore_bssid_join = FALSE;
- priv->mib_data.length = 0;
-
- uf_sme_wext_set_defaults(priv);
-#endif /* CSR_SUPPORT_WEXT*/
-
- priv->sta_ip_address = 0xFFFFFFFF;
-
- priv->wifi_on_state = wifi_on_unspecified;
-
- sema_init(&priv->sme_sem, 1);
- memset(&priv->sme_reply, 0, sizeof(sme_reply_t));
-
- priv->ta_ind_work.in_use = 0;
- priv->ta_sample_ind_work.in_use = 0;
-
- priv->CSR_WIFI_SME_IFACEQUEUE = 0xFFFF;
-
- for (i = 0; i < MAX_MA_UNIDATA_IND_FILTERS; i++) {
- priv->sme_unidata_ind_filters[i].in_use = 0;
- }
-
- /* Create a work queue item for Traffic Analysis indications to SME */
- INIT_WORK(&priv->ta_ind_work.task, uf_ta_ind_wq);
- INIT_WORK(&priv->ta_sample_ind_work.task, uf_ta_sample_ind_wq);
-#ifdef CSR_SUPPORT_WEXT
- INIT_WORK(&priv->sme_config_task, uf_sme_config_wq);
-#endif
-
- for (i = 0; i < CSR_WIFI_NUM_INTERFACES; i++) {
- netInterface_priv_t *interfacePriv = priv->interfacePriv[i];
- interfacePriv->m4_sent = FALSE;
- interfacePriv->m4_bulk_data.net_buf_length = 0;
- interfacePriv->m4_bulk_data.data_length = 0;
- interfacePriv->m4_bulk_data.os_data_ptr = interfacePriv->m4_bulk_data.os_net_buf_ptr = NULL;
-
- memset(&interfacePriv->controlled_data_port, 0, sizeof(unifi_port_config_t));
- interfacePriv->controlled_data_port.entries_in_use = 1;
- interfacePriv->controlled_data_port.port_cfg[0].in_use = TRUE;
- interfacePriv->controlled_data_port.port_cfg[0].port_action = CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD;
- interfacePriv->controlled_data_port.overide_action = UF_DATA_PORT_OVERIDE;
-
- memset(&interfacePriv->uncontrolled_data_port, 0, sizeof(unifi_port_config_t));
- interfacePriv->uncontrolled_data_port.entries_in_use = 1;
- interfacePriv->uncontrolled_data_port.port_cfg[0].in_use = TRUE;
- interfacePriv->uncontrolled_data_port.port_cfg[0].port_action = CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD;
- interfacePriv->uncontrolled_data_port.overide_action = UF_DATA_PORT_OVERIDE;
-
- /* Mark the remainder of the port config table as unallocated */
- for(j = 1; j < UNIFI_MAX_CONNECTIONS; j++) {
- interfacePriv->controlled_data_port.port_cfg[j].in_use = FALSE;
- interfacePriv->controlled_data_port.port_cfg[j].port_action = CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD;
-
- interfacePriv->uncontrolled_data_port.port_cfg[j].in_use = FALSE;
- interfacePriv->uncontrolled_data_port.port_cfg[j].port_action = CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD;
- }
-
- /* intializing the lists */
- INIT_LIST_HEAD(&interfacePriv->genericMgtFrames);
- INIT_LIST_HEAD(&interfacePriv->genericMulticastOrBroadCastMgtFrames);
- INIT_LIST_HEAD(&interfacePriv->genericMulticastOrBroadCastFrames);
-
- for(j = 0; j < UNIFI_MAX_CONNECTIONS; j++) {
- interfacePriv->staInfo[j] = NULL;
- }
-
- interfacePriv->num_stations_joined = 0;
- interfacePriv->sta_activity_check_enabled = FALSE;
- }
-
-
- return 0;
-} /* uf_sme_init() */
-
-
-void
-uf_sme_deinit(unifi_priv_t *priv)
-{
- int i, j;
- u8 ba_session_idx;
- ba_session_rx_struct *ba_session_rx = NULL;
- ba_session_tx_struct *ba_session_tx = NULL;
- CsrWifiRouterCtrlStaInfo_t *staInfo = NULL;
- netInterface_priv_t *interfacePriv = NULL;
-
- /* Free any TCLASs previously allocated */
- if (priv->packet_filters.tclas_ies_length) {
- priv->packet_filters.tclas_ies_length = 0;
- kfree(priv->filter_tclas_ies);
- priv->filter_tclas_ies = NULL;
- }
-
- for (i = 0; i < MAX_MA_UNIDATA_IND_FILTERS; i++) {
- priv->sme_unidata_ind_filters[i].in_use = 0;
- }
-
- /* Remove all the Peer database, before going down */
- for (i = 0; i < CSR_WIFI_NUM_INTERFACES; i++) {
- down(&priv->ba_mutex);
- for(ba_session_idx=0; ba_session_idx < MAX_SUPPORTED_BA_SESSIONS_RX; ba_session_idx++){
- ba_session_rx = priv->interfacePriv[i]->ba_session_rx[ba_session_idx];
- if(ba_session_rx) {
- blockack_session_stop(priv,
- i,
- CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_RECIPIENT,
- ba_session_rx->tID,
- ba_session_rx->macAddress);
- }
- }
- for(ba_session_idx=0; ba_session_idx < MAX_SUPPORTED_BA_SESSIONS_TX; ba_session_idx++){
- ba_session_tx = priv->interfacePriv[i]->ba_session_tx[ba_session_idx];
- if(ba_session_tx) {
- blockack_session_stop(priv,
- i,
- CSR_WIFI_ROUTER_CTRL_BLOCK_ACK_ORIGINATOR,
- ba_session_tx->tID,
- ba_session_tx->macAddress);
- }
- }
-
- up(&priv->ba_mutex);
- interfacePriv = priv->interfacePriv[i];
- if(interfacePriv){
- for(j = 0; j < UNIFI_MAX_CONNECTIONS; j++) {
- if ((staInfo=interfacePriv->staInfo[j]) != NULL) {
- /* Clear the STA activity parameters before freeing station Record */
- unifi_trace(priv, UDBG1, "uf_sme_deinit: Canceling work queue for STA with AID: %d\n", staInfo->aid);
- cancel_work_sync(&staInfo->send_disconnected_ind_task);
- staInfo->nullDataHostTag = INVALID_HOST_TAG;
- }
- }
- if (interfacePriv->sta_activity_check_enabled){
- interfacePriv->sta_activity_check_enabled = FALSE;
- del_timer_sync(&interfacePriv->sta_activity_check_timer);
- }
- }
- CsrWifiRouterCtrlInterfaceReset(priv, i);
- priv->interfacePriv[i]->interfaceMode = CSR_WIFI_ROUTER_CTRL_MODE_NONE;
- }
-
-
-} /* uf_sme_deinit() */
-
-
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_ta_indicate_protocol
- *
- * Report that a packet of a particular type has been seen
- *
- * Arguments:
- * drv_priv The device context pointer passed to ta_init.
- * protocol The protocol type enum value.
- * direction Whether the packet was a tx or rx.
- * src_addr The source MAC address from the data packet.
- *
- * Returns:
- * None.
- *
- * Notes:
- * We defer the actual sending to a background workqueue,
- * see uf_ta_ind_wq().
- * ---------------------------------------------------------------------------
- */
-void
-unifi_ta_indicate_protocol(void *ospriv,
- CsrWifiRouterCtrlTrafficPacketType packet_type,
- CsrWifiRouterCtrlProtocolDirection direction,
- const CsrWifiMacAddress *src_addr)
-{
- unifi_priv_t *priv = (unifi_priv_t*)ospriv;
-
- if (priv->ta_ind_work.in_use) {
- unifi_warning(priv,
- "unifi_ta_indicate_protocol: workqueue item still in use, not sending\n");
- return;
- }
-
- if (CSR_WIFI_ROUTER_CTRL_PROTOCOL_DIRECTION_RX == direction)
- {
- u16 interfaceTag = 0;
- CsrWifiRouterCtrlTrafficProtocolIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0,
- interfaceTag,
- packet_type,
- direction,
- *src_addr);
- }
- else
- {
- priv->ta_ind_work.packet_type = packet_type;
- priv->ta_ind_work.direction = direction;
- priv->ta_ind_work.src_addr = *src_addr;
-
- queue_work(priv->unifi_workqueue, &priv->ta_ind_work.task);
- }
-
-} /* unifi_ta_indicate_protocol() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_ta_indicate_sampling
- *
- * Send the TA sampling information to the SME.
- *
- * Arguments:
- * drv_priv The device context pointer passed to ta_init.
- * stats The TA sampling data to send.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void
-unifi_ta_indicate_sampling(void *ospriv, CsrWifiRouterCtrlTrafficStats *stats)
-{
- unifi_priv_t *priv = (unifi_priv_t*)ospriv;
-
- if (!priv) {
- return;
- }
-
- if (priv->ta_sample_ind_work.in_use) {
- unifi_warning(priv,
- "unifi_ta_indicate_sampling: workqueue item still in use, not sending\n");
- return;
- }
-
- priv->ta_sample_ind_work.stats = *stats;
-
- queue_work(priv->unifi_workqueue, &priv->ta_sample_ind_work.task);
-
-} /* unifi_ta_indicate_sampling() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_ta_indicate_l4stats
- *
- * Send the TA TCP/UDP throughput information to the driver.
- *
- * Arguments:
- * drv_priv The device context pointer passed to ta_init.
- * rxTcpThroughput TCP RX throughput in KiloBytes
- * txTcpThroughput TCP TX throughput in KiloBytes
- * rxUdpThroughput UDP RX throughput in KiloBytes
- * txUdpThroughput UDP TX throughput in KiloBytes
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void
-unifi_ta_indicate_l4stats(void *ospriv,
- u32 rxTcpThroughput,
- u32 txTcpThroughput,
- u32 rxUdpThroughput,
- u32 txUdpThroughput)
-{
- unifi_priv_t *priv = (unifi_priv_t*)ospriv;
-
- if (!priv) {
- return;
- }
- /* Save the info. The actual action will be taken in unifi_ta_indicate_sampling() */
- priv->rxTcpThroughput = rxTcpThroughput;
- priv->txTcpThroughput = txTcpThroughput;
- priv->rxUdpThroughput = rxUdpThroughput;
- priv->txUdpThroughput = txUdpThroughput;
-} /* unifi_ta_indicate_l4stats() */
diff --git a/drivers/staging/csr/sme_userspace.h b/drivers/staging/csr/sme_userspace.h
deleted file mode 100644
index ebe371c732b2..000000000000
--- a/drivers/staging/csr/sme_userspace.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * ***************************************************************************
- * FILE: sme_userspace.h
- *
- * PURPOSE: SME related definitions.
- *
- * Copyright (C) 2007-2008 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ***************************************************************************
- */
-#ifndef __LINUX_SME_USERSPACE_H__
-#define __LINUX_SME_USERSPACE_H__ 1
-
-#include <linux/kernel.h>
-
-int uf_sme_init(unifi_priv_t *priv);
-void uf_sme_deinit(unifi_priv_t *priv);
-int uf_sme_queue_message(unifi_priv_t *priv, u8 *buffer, int length);
-
-
-#include "csr_wifi_router_lib.h"
-#include "csr_wifi_router_sef.h"
-#include "csr_wifi_router_ctrl_lib.h"
-#include "csr_wifi_router_ctrl_sef.h"
-#include "csr_wifi_sme_task.h"
-#ifdef CSR_SUPPORT_WEXT_AP
-#include "csr_wifi_nme_ap_lib.h"
-#endif
-#include "csr_wifi_sme_lib.h"
-
-void CsrWifiRouterTransportInit(unifi_priv_t *priv);
-void CsrWifiRouterTransportRecv(unifi_priv_t *priv, u8 *buffer, size_t bufferLength);
-void CsrWifiRouterTransportDeInit(unifi_priv_t *priv);
-
-#endif /* __LINUX_SME_USERSPACE_H__ */
diff --git a/drivers/staging/csr/sme_wext.c b/drivers/staging/csr/sme_wext.c
deleted file mode 100644
index 84f11cb53596..000000000000
--- a/drivers/staging/csr/sme_wext.c
+++ /dev/null
@@ -1,3327 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: sme_wext.c
- *
- * PURPOSE:
- * Handlers for ioctls from iwconfig.
- * These provide the control plane operations.
- *
- * Copyright (C) 2007-2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-#include <linux/types.h>
-#include <linux/etherdevice.h>
-#include <linux/if_arp.h>
-#include <asm/uaccess.h>
-#include <linux/ctype.h>
-#include "unifi_priv.h"
-#include <linux/rtnetlink.h>
-
-#define CHECK_INITED(_priv) \
- do { \
- if (_priv->init_progress != UNIFI_INIT_COMPLETED) { \
- unifi_trace(_priv, UDBG2, "%s unifi not ready, failing wext call\n", __FUNCTION__); \
- return -ENODEV; \
- } \
- } while (0)
-
-/* Workaround for the wpa_supplicant hanging issue - disabled on Android */
-#ifndef ANDROID_BUILD
-#define CSR_WIFI_WEXT_HANG_WORKAROUND
-#endif
-
-#ifdef CSR_WIFI_WEXT_HANG_WORKAROUND
-# define UF_RTNL_LOCK() rtnl_lock()
-# define UF_RTNL_UNLOCK() rtnl_unlock()
-#else
-# define UF_RTNL_LOCK()
-# define UF_RTNL_UNLOCK()
-#endif
-
-
-/*
- * ---------------------------------------------------------------------------
- * Helper functions
- * ---------------------------------------------------------------------------
- */
-
-/*
- * ---------------------------------------------------------------------------
- * wext_freq_to_channel
- * channel_to_mhz
- *
- * These functions convert between channel number and frequency.
- *
- * Arguments:
- * ch Channel number, as defined in 802.11 specs
- * m, e Mantissa and exponent as provided by wireless extension.
- *
- * Returns:
- * channel or frequency (in MHz) value
- * ---------------------------------------------------------------------------
- */
-static int
-wext_freq_to_channel(int m, int e)
-{
- int mhz;
-
- mhz = m;
- while (e < 6) {
- mhz /= 10;
- e++;
- }
- while (e > 6) {
- mhz *= 10;
- e--;
- }
-
- if (mhz >= 5000) {
- return ((mhz - 5000) / 5);
- }
-
- if (mhz == 2482) {
- return 14;
- }
-
- if (mhz >= 2407) {
- return ((mhz - 2407) / 5);
- }
-
- return 0;
-} /* wext_freq_to_channel() */
-
-static int
-channel_to_mhz(int ch, int dot11a)
-{
-
- if (ch == 0) return 0;
- if (ch > 200) return 0;
-
- /* 5G */
- if (dot11a) {
- return (5000 + (5 * ch));
- }
-
- /* 2.4G */
- if (ch == 14) {
- return 2484;
- }
-
- if ((ch < 14) && (ch > 0)) {
- return (2407 + (5 * ch));
- }
-
- return 0;
-}
-#ifdef CSR_SUPPORT_WEXT_AP
-void uf_sme_wext_ap_set_defaults(unifi_priv_t *priv)
-{
- memcpy(priv->ap_config.ssid.ssid, "defaultssid", sizeof("defaultssid"));
-
- priv->ap_config.ssid.length = 8;
- priv->ap_config.channel = 6;
- priv->ap_config.if_index = 1;
- priv->ap_config.credentials.authType = 0;
- priv->ap_config.max_connections=8;
-
- priv->group_sec_config.apGroupkeyTimeout = 0;
- priv->group_sec_config.apStrictGtkRekey = 0;
- priv->group_sec_config.apGmkTimeout = 0;
- priv->group_sec_config.apResponseTimeout = 100; /* Default*/
- priv->group_sec_config.apRetransLimit = 3; /* Default*/
- /* Set default params even if they may not be used*/
- /* Until Here*/
-
- priv->ap_mac_config.preamble = CSR_WIFI_SME_USE_LONG_PREAMBLE;
- priv->ap_mac_config.shortSlotTimeEnabled = FALSE;
- priv->ap_mac_config.ctsProtectionType=CSR_WIFI_SME_CTS_PROTECTION_AUTOMATIC;
-
- priv->ap_mac_config.wmmEnabled = TRUE;
- priv->ap_mac_config.wmmApParams[0].cwMin=4;
- priv->ap_mac_config.wmmApParams[0].cwMax=10;
- priv->ap_mac_config.wmmApParams[0].aifs=3;
- priv->ap_mac_config.wmmApParams[0].txopLimit=0;
- priv->ap_mac_config.wmmApParams[0].admissionControlMandatory=FALSE;
- priv->ap_mac_config.wmmApParams[1].cwMin=4;
- priv->ap_mac_config.wmmApParams[1].cwMax=10;
- priv->ap_mac_config.wmmApParams[1].aifs=7;
- priv->ap_mac_config.wmmApParams[1].txopLimit=0;
- priv->ap_mac_config.wmmApParams[1].admissionControlMandatory=FALSE;
- priv->ap_mac_config.wmmApParams[2].cwMin=3;
- priv->ap_mac_config.wmmApParams[2].cwMax=4;
- priv->ap_mac_config.wmmApParams[2].aifs=1;
- priv->ap_mac_config.wmmApParams[2].txopLimit=94;
- priv->ap_mac_config.wmmApParams[2].admissionControlMandatory=FALSE;
- priv->ap_mac_config.wmmApParams[3].cwMin=2;
- priv->ap_mac_config.wmmApParams[3].cwMax=3;
- priv->ap_mac_config.wmmApParams[3].aifs=1;
- priv->ap_mac_config.wmmApParams[3].txopLimit=47;
- priv->ap_mac_config.wmmApParams[3].admissionControlMandatory=FALSE;
-
- priv->ap_mac_config.wmmApBcParams[0].cwMin=4;
- priv->ap_mac_config.wmmApBcParams[0].cwMax=10;
- priv->ap_mac_config.wmmApBcParams[0].aifs=3;
- priv->ap_mac_config.wmmApBcParams[0].txopLimit=0;
- priv->ap_mac_config.wmmApBcParams[0].admissionControlMandatory=FALSE;
- priv->ap_mac_config.wmmApBcParams[1].cwMin=4;
- priv->ap_mac_config.wmmApBcParams[1].cwMax=10;
- priv->ap_mac_config.wmmApBcParams[1].aifs=7;
- priv->ap_mac_config.wmmApBcParams[1].txopLimit=0;
- priv->ap_mac_config.wmmApBcParams[1].admissionControlMandatory=FALSE;
- priv->ap_mac_config.wmmApBcParams[2].cwMin=3;
- priv->ap_mac_config.wmmApBcParams[2].cwMax=4;
- priv->ap_mac_config.wmmApBcParams[2].aifs=2;
- priv->ap_mac_config.wmmApBcParams[2].txopLimit=94;
- priv->ap_mac_config.wmmApBcParams[2].admissionControlMandatory=FALSE;
- priv->ap_mac_config.wmmApBcParams[3].cwMin=2;
- priv->ap_mac_config.wmmApBcParams[3].cwMax=3;
- priv->ap_mac_config.wmmApBcParams[3].aifs=2;
- priv->ap_mac_config.wmmApBcParams[3].txopLimit=47;
- priv->ap_mac_config.wmmApBcParams[3].admissionControlMandatory=FALSE;
-
- priv->ap_mac_config.accessType=CSR_WIFI_AP_ACCESS_TYPE_NONE;
- priv->ap_mac_config.macAddressListCount=0;
- priv->ap_mac_config.macAddressList=NULL;
-
- priv->ap_mac_config.apHtParams.rxStbc=1;
- priv->ap_mac_config.apHtParams.rifsModeAllowed=TRUE;
- priv->ap_mac_config.apHtParams.greenfieldSupported=FALSE;
- priv->ap_mac_config.apHtParams.shortGi20MHz=TRUE;
- priv->ap_mac_config.apHtParams.htProtection=0;
- priv->ap_mac_config.apHtParams.dualCtsProtection=FALSE;
-
- priv->ap_mac_config.phySupportedBitmap =
- (CSR_WIFI_SME_AP_PHY_SUPPORT_B|CSR_WIFI_SME_AP_PHY_SUPPORT_G|CSR_WIFI_SME_AP_PHY_SUPPORT_N);
- priv->ap_mac_config.beaconInterval= 100;
- priv->ap_mac_config.dtimPeriod=3;
- priv->ap_mac_config.maxListenInterval=0x00ff;/* Set it to a large value
- to enable different types of
- devices to join us */
- priv->ap_mac_config.supportedRatesCount =
- uf_configure_supported_rates(priv->ap_mac_config.supportedRates, priv->ap_mac_config.phySupportedBitmap);
-}
-#endif
-/*
- * ---------------------------------------------------------------------------
- * uf_sme_wext_set_defaults
- *
- * Set up power-on defaults for driver config.
- *
- * Note: The SME Management API *cannot* be used in this function.
- *
- * Arguments:
- * priv Pointer to device private context struct
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void
-uf_sme_wext_set_defaults(unifi_priv_t *priv)
-{
- memset(&priv->connection_config, 0, sizeof(CsrWifiSmeConnectionConfig));
-
- priv->connection_config.bssType = CSR_WIFI_SME_BSS_TYPE_INFRASTRUCTURE;
- priv->connection_config.authModeMask = CSR_WIFI_SME_AUTH_MODE_80211_OPEN;
- priv->connection_config.encryptionModeMask = CSR_WIFI_SME_ENCRYPTION_CIPHER_NONE;
- priv->connection_config.privacyMode = CSR_WIFI_SME_80211_PRIVACY_MODE_DISABLED;
- priv->connection_config.wmmQosInfo = 0xFF;
- priv->connection_config.ifIndex = CSR_WIFI_SME_RADIO_IF_BOTH;
- priv->connection_config.adhocJoinOnly = FALSE;
- priv->connection_config.adhocChannel = 6;
-
- priv->wep_tx_key_index = 0;
-
- priv->wext_wireless_stats.qual.qual = 0;
- priv->wext_wireless_stats.qual.level = 0;
- priv->wext_wireless_stats.qual.noise = 0;
- priv->wext_wireless_stats.qual.updated = 0x70;
-#ifdef CSR_SUPPORT_WEXT_AP
- /* Initialize the default configuration for AP */
- uf_sme_wext_ap_set_defaults(priv);
-#endif
-
-
-} /* uf_sme_wext_set_defaults() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * WEXT methods
- * ---------------------------------------------------------------------------
- */
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_giwname - handler for SIOCGIWNAME
- * unifi_siwfreq - handler for SIOCSIWFREQ
- * unifi_giwfreq - handler for SIOCGIWFREQ
- * unifi_siwmode - handler for SIOCSIWMODE
- * unifi_giwmode - handler for SIOCGIWMODE
- * unifi_giwrange - handler for SIOCGIWRANGE
- * unifi_siwap - handler for SIOCSIWAP
- * unifi_giwap - handler for SIOCGIWAP
- * unifi_siwscan - handler for SIOCSIWSCAN
- * unifi_giwscan - handler for SIOCGIWSCAN
- * unifi_siwessid - handler for SIOCSIWESSID
- * unifi_giwessid - handler for SIOCGIWESSID
- * unifi_siwencode - handler for SIOCSIWENCODE
- * unifi_giwencode - handler for SIOCGIWENCODE
- *
- * Handler functions for IW extensions.
- * These are registered via the unifi_iw_handler_def struct below
- * and called by the generic IW driver support code.
- * See include/net/iw_handler.h.
- *
- * Arguments:
- * None.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static int
-iwprivsdefs(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- int r;
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- CsrWifiSmeMibConfig mibConfig;
- CsrWifiSmePowerConfig powerConfig;
-
- unifi_trace(priv, UDBG1, "iwprivs80211defaults: reload defaults\n");
-
- uf_sme_wext_set_defaults(priv);
-
- /* Get, modify and set the MIB data */
- r = sme_mgt_mib_config_get(priv, &mibConfig);
- if (r) {
- unifi_error(priv, "iwprivs80211defaults: Get CsrWifiSmeMibConfigValue failed.\n");
- return r;
- }
- mibConfig.dot11RtsThreshold = 2347;
- mibConfig.dot11FragmentationThreshold = 2346;
- r = sme_mgt_mib_config_set(priv, &mibConfig);
- if (r) {
- unifi_error(priv, "iwprivs80211defaults: Set CsrWifiSmeMibConfigValue failed.\n");
- return r;
- }
-
- powerConfig.powerSaveLevel = CSR_WIFI_SME_POWER_SAVE_LEVEL_LOW;
- powerConfig.listenIntervalTu = 100;
- powerConfig.rxDtims = 1;
-
- r = sme_mgt_power_config_set(priv, &powerConfig);
- if (r) {
- unifi_error(priv, "iwprivs80211defaults: Set unifi_PowerConfigValue failed.\n");
- return r;
- }
-
- return 0;
-} /* iwprivsdefs() */
-
-static int
-iwprivs80211ps(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- int r = 0;
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
-
- int ps_mode = (int)(*extra);
- CsrWifiSmePowerConfig powerConfig;
-
- unifi_trace(priv, UDBG1, "iwprivs80211ps: power save mode = %d\n", ps_mode);
-
- r = sme_mgt_power_config_get(priv, &powerConfig);
- if (r) {
- unifi_error(priv, "iwprivs80211ps: Get unifi_PowerConfigValue failed.\n");
- return r;
- }
-
- switch (ps_mode) {
- case CSR_PMM_ACTIVE_MODE:
- powerConfig.powerSaveLevel = CSR_WIFI_SME_POWER_SAVE_LEVEL_LOW;
- break;
- case CSR_PMM_POWER_SAVE:
- powerConfig.powerSaveLevel = CSR_WIFI_SME_POWER_SAVE_LEVEL_HIGH;
- break;
- case CSR_PMM_FAST_POWER_SAVE:
- powerConfig.powerSaveLevel = CSR_WIFI_SME_POWER_SAVE_LEVEL_MED;
- break;
- default:
- powerConfig.powerSaveLevel = CSR_WIFI_SME_POWER_SAVE_LEVEL_AUTO;
- break;
- }
-
- r = sme_mgt_power_config_set(priv, &powerConfig);
- if (r) {
- unifi_error(priv, "iwprivs80211ps: Set unifi_PowerConfigValue failed.\n");
- }
-
- return r;
-}
-
-static int
-iwprivg80211ps(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
-
- CsrWifiSmePowerConfig powerConfig;
- int r;
-
- r = sme_mgt_power_config_get(priv, &powerConfig);
- if (r) {
- unifi_error(priv, "iwprivg80211ps: Get 802.11 power mode failed.\n");
- return r;
- }
-
- switch (powerConfig.powerSaveLevel) {
- case CSR_WIFI_SME_POWER_SAVE_LEVEL_LOW:
- snprintf(extra, IWPRIV_POWER_SAVE_MAX_STRING,
- "Power save mode: %d (Active)",
- powerConfig.powerSaveLevel);
- break;
- case CSR_WIFI_SME_POWER_SAVE_LEVEL_MED:
- snprintf(extra, IWPRIV_POWER_SAVE_MAX_STRING,
- "Power save mode: %d (Fast)",
- powerConfig.powerSaveLevel);
- break;
- case CSR_WIFI_SME_POWER_SAVE_LEVEL_HIGH:
- snprintf(extra, IWPRIV_POWER_SAVE_MAX_STRING,
- "Power save mode: %d (Full)",
- powerConfig.powerSaveLevel);
- break;
- case CSR_WIFI_SME_POWER_SAVE_LEVEL_AUTO:
- snprintf(extra, IWPRIV_POWER_SAVE_MAX_STRING,
- "Power save mode: %d (Auto)",
- powerConfig.powerSaveLevel);
- break;
- default:
- snprintf(extra, IWPRIV_POWER_SAVE_MAX_STRING,
- "Power save mode: %d (Unknown)",
- powerConfig.powerSaveLevel);
- break;
- }
-
- wrqu->data.length = strlen(extra) + 1;
-
- return 0;
-}
-
-static int
-iwprivssmedebug(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- /* No longer supported on the API */
-#if defined (CSR_WIFI_HIP_DEBUG_OFFLINE)
- unifi_debug_buf_dump();
-#endif
-
- return 0;
-}
-
-#ifdef CSR_SUPPORT_WEXT_AP
-#define PARAM_TYPE_INT 0
-#define PARAM_TYPE_STRING 1
-#define CSR_WIFI_MAX_SSID_LEN 32
-#define CSR_WIFI_MAX_SEC_LEN 16
-#define CSR_WIFI_MAX_KEY_LEN 65
-
-static int hex_look_up(char x)
-{
- if(x>='0' && x<='9')
- return (x-48);
- if(x>= 'a' && x <= 'f')
- return (x-87);
- return -1;
-}
-
-static int power (int a, int b)
-{
- int i;
- int num =1;
- for(i=0;i<b;i++)
- num *=a;
- return num;
-}
-
-static int decode_parameter_from_string(unifi_priv_t* priv, char **str_ptr,
- const char *token, int param_type,
- void *dst, int param_max_len)
-{
- u8 int_str[7] = "0";
- u32 param_str_len;
- u8 *param_str_begin, *param_str_end;
- u8 *orig_str = *str_ptr;
-
- if (!strncmp(*str_ptr, token, strlen(token))) {
- strsep(str_ptr, "=,");
- param_str_begin = *str_ptr;
- strsep(str_ptr, "=,");
- if (*str_ptr == NULL) {
- param_str_len = strlen(param_str_begin);
- } else {
- param_str_end = *str_ptr-1;
- param_str_len = param_str_end - param_str_begin;
- }
- unifi_trace(priv, UDBG2, "'token:%s', len:%d, ", token, param_str_len);
- if (param_str_len > param_max_len) {
- unifi_notice(priv, "extracted param len:%d is > MAX:%d\n", param_str_len, param_max_len);
- param_str_len = param_max_len;
- }
- switch (param_type) {
- case PARAM_TYPE_INT:
- {
- u32 *pdst_int = dst, num =0;
- int i, j=0;
- if (param_str_len > sizeof(int_str)) {
- param_str_len = sizeof(int_str);
- }
- memcpy(int_str, param_str_begin, param_str_len);
- for(i = param_str_len; i>0;i--) {
- if(int_str[i-1] >= '0' && int_str[i-1] <='9') {
- num += ((int_str[i-1]-'0')*power(10, j));
- j++;
- } else {
- unifi_error(priv, "decode_parameter_from_string:not a number %c\n", (int_str[i-1]));
- return -1;
- }
- }
- *pdst_int = num;
- unifi_trace(priv, UDBG2, "decode_parameter_from_string:decoded int = %d\n", *pdst_int);
- }
- break;
- default:
- memcpy(dst, param_str_begin, param_str_len);
- *((char *)dst + param_str_len) = 0;
- unifi_trace(priv, UDBG2, "decode_parameter_from_string:decoded string = %s\n", (char *)dst);
- break;
- }
- } else {
- unifi_error(priv, "decode_parameter_from_string: Token:%s not found in %s \n", token, orig_str);
- return -1;
- }
- return 0;
-}
-static int store_ap_advanced_config_from_string(unifi_priv_t *priv, char *param_str)
-{
- char * str_ptr=param_str;
- int ret = 0, tmp_var;
- char phy_mode[6];
- CsrWifiSmeApMacConfig * ap_mac_config = &priv->ap_mac_config;
-
- /* Check for BI */
- ret = decode_parameter_from_string(priv, &str_ptr, "BI=",
- PARAM_TYPE_INT, &tmp_var, 5);
- if(ret) {
- unifi_error(priv, "store_ap_advanced_config_from_string: BI not found\n");
- return -1;
- }
- ap_mac_config->beaconInterval = tmp_var;
- ret = decode_parameter_from_string(priv, &str_ptr, "DTIM_PER=",
- PARAM_TYPE_INT, &tmp_var, 5);
- if(ret) {
- unifi_error(priv, "store_ap_advanced_config_from_string: DTIM_PER not found\n");
- return -1;
- }
- ap_mac_config->dtimPeriod = tmp_var;
- ret = decode_parameter_from_string(priv, &str_ptr, "WMM=",
- PARAM_TYPE_INT, &tmp_var, 5);
- if(ret) {
- unifi_error(priv, "store_ap_advanced_config_from_string: WMM not found\n");
- return -1;
- }
- ap_mac_config->wmmEnabled = tmp_var;
- ret = decode_parameter_from_string(priv, &str_ptr, "PHY=",
- PARAM_TYPE_STRING, phy_mode, 5);
- if(ret) {
- unifi_error(priv, "store_ap_advanced_config_from_string: PHY not found\n");
- } else {
- if(strstr(phy_mode, "b")){
- ap_mac_config->phySupportedBitmap = CSR_WIFI_SME_AP_PHY_SUPPORT_B;
- }
- if(strstr(phy_mode, "g")) {
- ap_mac_config->phySupportedBitmap |= CSR_WIFI_SME_AP_PHY_SUPPORT_G;
- }
- if(strstr(phy_mode, "n")) {
- ap_mac_config->phySupportedBitmap |= CSR_WIFI_SME_AP_PHY_SUPPORT_N;
- }
- ap_mac_config->supportedRatesCount =
- uf_configure_supported_rates(ap_mac_config->supportedRates, ap_mac_config->phySupportedBitmap);
- }
- return ret;
-}
-
-static int store_ap_config_from_string( unifi_priv_t * priv, char *param_str)
-
-{
- char *str_ptr = param_str;
- char sub_cmd[16];
- char sec[CSR_WIFI_MAX_SEC_LEN];
- char key[CSR_WIFI_MAX_KEY_LEN];
- int ret = 0, tmp_var;
- CsrWifiSmeApConfig_t *ap_config = &priv->ap_config;
- CsrWifiSmeApMacConfig * ap_mac_config = &priv->ap_mac_config;
- memset(sub_cmd, 0, sizeof(sub_cmd));
- if(!strstr(param_str, "END")) {
- unifi_error(priv, "store_ap_config_from_string:Invalid config string:%s\n", param_str);
- return -1;
- }
- if (decode_parameter_from_string(priv, &str_ptr, "ASCII_CMD=",
- PARAM_TYPE_STRING, sub_cmd, 6) != 0) {
- return -1;
- }
- if (strncmp(sub_cmd, "AP_CFG", 6)) {
-
- if(!strncmp(sub_cmd , "ADVCFG", 6)) {
- return store_ap_advanced_config_from_string(priv, str_ptr);
- }
- unifi_error(priv, "store_ap_config_from_string: sub_cmd:%s != 'AP_CFG or ADVCFG'!\n", sub_cmd);
- return -1;
- }
- memset(ap_config, 0, sizeof(CsrWifiSmeApConfig_t));
- ret = decode_parameter_from_string(priv, &str_ptr, "SSID=",
- PARAM_TYPE_STRING, ap_config->ssid.ssid,
- CSR_WIFI_MAX_SSID_LEN);
- if(ret) {
- unifi_error(priv, "store_ap_config_from_string: SSID not found\n");
- return -1;
- }
- ap_config->ssid.length = strlen(ap_config->ssid.ssid);
-
- ret = decode_parameter_from_string(priv, &str_ptr, "SEC=",
- PARAM_TYPE_STRING, sec, CSR_WIFI_MAX_SEC_LEN);
- if(ret) {
- unifi_error(priv, "store_ap_config_from_string: SEC not found\n");
- return -1;
- }
- ret = decode_parameter_from_string(priv, &str_ptr, "KEY=",
- PARAM_TYPE_STRING, key, CSR_WIFI_MAX_KEY_LEN);
- if(!strcasecmp(sec, "open")) {
- unifi_trace(priv, UDBG2, "store_ap_config_from_string: security open");
- ap_config->credentials.authType = CSR_WIFI_SME_AP_AUTH_TYPE_OPEN_SYSTEM;
- if(ret) {
- unifi_notice(priv, "store_ap_config_from_string: KEY not found:fine with Open\n");
- }
- }
- else if(!strcasecmp(sec, "wpa2-psk")) {
- int i, j=0;
- CsrWifiNmeApAuthPers *pers =
- ((CsrWifiNmeApAuthPers *)&(ap_config->credentials.nmeAuthType.authTypePersonal));
- u8 *psk = pers->authPers_credentials.psk.psk;
-
- unifi_trace(priv, UDBG2, "store_ap_config_from_string: security WPA2");
- if(ret) {
- unifi_error(priv, "store_ap_config_from_string: KEY not found for WPA2\n");
- return -1;
- }
- ap_config->credentials.authType = CSR_WIFI_SME_AP_AUTH_TYPE_PERSONAL;
- pers->authSupport = CSR_WIFI_SME_RSN_AUTH_WPA2PSK;
- pers->rsnCapabilities =0;
- pers->wapiCapabilities =0;
- pers->pskOrPassphrase=CSR_WIFI_NME_AP_CREDENTIAL_TYPE_PSK;
- pers->authPers_credentials.psk.encryptionMode =
- (CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_CCMP |CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_CCMP) ;
- for(i=0;i<32;i++){
- psk[i] = (16*hex_look_up(key[j]))+hex_look_up(key[j+1]);
- j+=2;
- }
-
- } else {
- unifi_notice(priv, "store_ap_config_from_string: Unknown security: Assuming Open");
- ap_config->credentials.authType = CSR_WIFI_SME_AP_AUTH_TYPE_OPEN_SYSTEM;
- return -1;
- }
- /* Get the decoded value in a temp int variable to ensure that other fields within the struct
- which are of type other than int are not over written */
- ret = decode_parameter_from_string(priv, &str_ptr, "CHANNEL=", PARAM_TYPE_INT, &tmp_var, 5);
- if(ret)
- return -1;
- ap_config->channel = tmp_var;
- ret = decode_parameter_from_string(priv, &str_ptr, "PREAMBLE=", PARAM_TYPE_INT, &tmp_var, 5);
- if(ret)
- return -1;
- ap_mac_config->preamble = tmp_var;
- ret = decode_parameter_from_string(priv, &str_ptr, "MAX_SCB=", PARAM_TYPE_INT, &tmp_var, 5);
- ap_config->max_connections = tmp_var;
- return ret;
-}
-
-static int
-iwprivsapstart(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- int r;
-
- unifi_trace(priv, UDBG1, "iwprivsapstart\n" );
- r = sme_ap_start(priv, interfacePriv->InterfaceTag, &priv->ap_config);
- if(r) {
- unifi_error(priv, "iwprivsapstart AP START failed : %d\n", -r);
- }
- return r;
-}
-
-static int
-iwprivsapconfig(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- char *cfg_str = NULL;
- int r;
-
- unifi_trace(priv, UDBG1, "iwprivsapconfig\n" );
- if (wrqu->data.length != 0) {
- char *str;
- if (!(cfg_str = kmalloc(wrqu->data.length+1, GFP_KERNEL)))
- {
- return -ENOMEM;
- }
- if (copy_from_user(cfg_str, wrqu->data.pointer, wrqu->data.length)) {
- kfree(cfg_str);
- return -EFAULT;
- }
- cfg_str[wrqu->data.length] = 0;
- unifi_trace(priv, UDBG2, "length:%d\n", wrqu->data.length);
- unifi_trace(priv, UDBG2, "AP configuration string:%s\n", cfg_str);
- str = cfg_str;
- if ((r = store_ap_config_from_string(priv, str))) {
- unifi_error(priv, "iwprivsapconfig:Failed to decode the string %d\n", r);
- kfree(cfg_str);
- return -EIO;
-
- }
- } else {
- unifi_error(priv, "iwprivsapconfig argument length = 0 \n");
- return -EIO;
- }
- r = sme_ap_config(priv, &priv->ap_mac_config, &priv->group_sec_config);
- if(r) {
- unifi_error(priv, "iwprivsapstop AP Config failed : %d\n", -r);
- } else if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_trace(priv, UDBG1, "iwprivsapconfig: Starting the AP");
- r = sme_ap_start(priv, interfacePriv->InterfaceTag, &priv->ap_config);
- if(r) {
- unifi_error(priv, "iwprivsapstart AP START failed : %d\n", -r);
- }
- }
- kfree(cfg_str);
- return r;
-}
-
-static int
-iwprivsapstop(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- int r;
- u16 interface_tag = interfacePriv->InterfaceTag;
-
- unifi_trace(priv, UDBG1, "iwprivsapstop\n" );
- r = sme_ap_stop(priv, interface_tag);
- if(r) {
- unifi_error(priv, "iwprivsapstop AP STOP failed : %d\n", -r);
- }
- return r;
-}
-
-#ifdef ANDROID_BUILD
-static int
-iwprivsapfwreload(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
-
- unifi_trace(priv, UDBG1, "iwprivsapfwreload\n" );
- return 0;
-}
-
-static int
-iwprivsstackstart(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- unifi_trace(priv, UDBG1, "iwprivsstackstart\n" );
- return 0;
-}
-
-static int
-iwprivsstackstop(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- int r = 0;
- u16 interface_tag = interfacePriv->InterfaceTag;
-
- unifi_trace(priv, UDBG1, "iwprivsstackstop\n" );
-
- switch(interfacePriv->interfaceMode) {
- case CSR_WIFI_ROUTER_CTRL_MODE_STA:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI:
- case CSR_WIFI_ROUTER_CTRL_MODE_IBSS:
- r = sme_mgt_disconnect(priv);
- break;
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- r = sme_ap_stop(priv, interface_tag);
- break;
- default :
- break;
- }
-
- if(r) {
- unifi_error(priv, "iwprivsstackstop Stack stop failed : %d\n", -r);
- }
- return 0;
-}
-#endif /* ANDROID_BUILD */
-#endif /* CSR_SUPPORT_WEXT_AP */
-
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
-static int
-iwprivsconfwapi(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- u8 enable;
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
-
- unifi_trace(priv, UDBG1, "iwprivsconfwapi\n" );
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "iwprivsconfwapi: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
- enable = *(u8*)(extra);
-
- if (enable) {
- priv->connection_config.authModeMask = CSR_WIFI_SME_AUTH_MODE_80211_OPEN;
- priv->connection_config.authModeMask |= (CSR_WIFI_SME_AUTH_MODE_WAPI_WAIPSK | CSR_WIFI_SME_AUTH_MODE_WAPI_WAI);
- priv->connection_config.encryptionModeMask |=
- CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_SMS4 | CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_SMS4;
- } else {
- priv->connection_config.authModeMask &= ~(CSR_WIFI_SME_AUTH_MODE_WAPI_WAIPSK | CSR_WIFI_SME_AUTH_MODE_WAPI_WAI);
- priv->connection_config.encryptionModeMask &=
- ~(CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_SMS4 | CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_SMS4);
- }
-
- return 0;
-}
-
-static int
-iwprivswpikey(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- int r = 0, i;
- CsrWifiSmeKey key;
- unifiio_wapi_key_t inKey;
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
-
- unifi_trace(priv, UDBG1, "iwprivswpikey\n" );
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "iwprivswpikey: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
- inKey = *(unifiio_wapi_key_t*)(extra);
-
- if (inKey.unicastKey) {
- key.keyType = CSR_WIFI_SME_KEY_TYPE_PAIRWISE;
- } else {
- key.keyType = CSR_WIFI_SME_KEY_TYPE_GROUP;
- }
-
- key.keyIndex = inKey.keyIndex;
-
- /* memcpy(key.keyRsc, inKey.keyRsc, 16); */
- for (i = 0; i < 16; i+= 2)
- {
- key.keyRsc[i/2] = inKey.keyRsc[i+1] << 8 | inKey.keyRsc[i];
- }
-
- memcpy(key.address.a, inKey.address, 6);
- key.keyLength = 32;
- memcpy(key.key, inKey.key, 32);
- key.authenticator = 0;
- key.wepTxKey = 0;
-
- unifi_trace(priv, UDBG1, "keyType = %d, keyIndex = %d, wepTxKey = %d, keyRsc = %x:%x, auth = %d, address = %x:%x, "
- "keylength = %d, key = %x:%x\n", key.keyType, key.keyIndex, key.wepTxKey,
- key.keyRsc[0], key.keyRsc[7], key.authenticator,
- key.address.a[0], key.address.a[5], key.keyLength, key.key[0],
- key.key[15]);
-
- r = sme_mgt_key(priv, &key, CSR_WIFI_SME_LIST_ACTION_ADD);
- if (r) {
- unifi_error(priv, "SETKEYS request was rejected with result %d\n", r);
- return convert_sme_error(r);
- }
-
- return r;
-}
-#endif
-
-
-static int
-unifi_giwname(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- char *name = wrqu->name;
- unifi_trace(priv, UDBG2, "unifi_giwname\n");
-
- if (priv->if_index == CSR_INDEX_5G) {
- strcpy(name, "IEEE 802.11-a");
- } else {
- strcpy(name, "IEEE 802.11-bgn");
- }
- return 0;
-} /* unifi_giwname() */
-
-
-static int
-unifi_siwfreq(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- struct iw_freq *freq = (struct iw_freq *)wrqu;
-
- unifi_trace(priv, UDBG2, "unifi_siwfreq\n");
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_siwfreq: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- /*
- * Channel is stored in the connection configuration,
- * and set later when ask for a connection.
- */
- if ((freq->e == 0) && (freq->m <= 1000)) {
- priv->connection_config.adhocChannel = freq->m;
- } else {
- priv->connection_config.adhocChannel = wext_freq_to_channel(freq->m, freq->e);
- }
-
- return 0;
-} /* unifi_siwfreq() */
-
-
-static int
-unifi_giwfreq(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- struct iw_freq *freq = (struct iw_freq *)wrqu;
- int err = 0;
- CsrWifiSmeConnectionInfo connectionInfo;
-
- unifi_trace(priv, UDBG2, "unifi_giwfreq\n");
- CHECK_INITED(priv);
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_giwfreq: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- UF_RTNL_UNLOCK();
- err = sme_mgt_connection_info_get(priv, &connectionInfo);
- UF_RTNL_LOCK();
-
- freq->m = channel_to_mhz(connectionInfo.channelNumber,
- (connectionInfo.networkType80211 == CSR_WIFI_SME_RADIO_IF_GHZ_5_0));
- freq->e = 6;
-
- return convert_sme_error(err);
-} /* unifi_giwfreq() */
-
-
-static int
-unifi_siwmode(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
-
- unifi_trace(priv, UDBG2, "unifi_siwmode\n");
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_siwmode: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- switch(wrqu->mode) {
- case IW_MODE_ADHOC:
- priv->connection_config.bssType = CSR_WIFI_SME_BSS_TYPE_ADHOC;
- break;
- case IW_MODE_INFRA:
- priv->connection_config.bssType = CSR_WIFI_SME_BSS_TYPE_INFRASTRUCTURE;
- break;
- case IW_MODE_AUTO:
- priv->connection_config.bssType = CSR_WIFI_SME_BSS_TYPE_ANY_BSS;
- break;
- default:
- unifi_notice(priv, "Unknown IW MODE value.\n");
- }
-
- /* Clear the SSID and BSSID configuration */
- priv->connection_config.ssid.length = 0;
- memset(priv->connection_config.bssid.a, 0xFF, ETH_ALEN);
-
- return 0;
-} /* unifi_siwmode() */
-
-
-
-static int
-unifi_giwmode(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- int r = 0;
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- CsrWifiSmeConnectionConfig connectionConfig;
-
- unifi_trace(priv, UDBG2, "unifi_giwmode\n");
- CHECK_INITED(priv);
-
- unifi_trace(priv, UDBG2, "unifi_giwmode: Exisitng mode = 0x%x\n",
- interfacePriv->interfaceMode);
- switch(interfacePriv->interfaceMode) {
- case CSR_WIFI_ROUTER_CTRL_MODE_STA:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI:
- wrqu->mode = IW_MODE_INFRA;
- break;
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- wrqu->mode = IW_MODE_MASTER;
- break;
- case CSR_WIFI_ROUTER_CTRL_MODE_IBSS:
- wrqu->mode = IW_MODE_ADHOC;
- break;
- case CSR_WIFI_ROUTER_CTRL_MODE_P2P:
- case CSR_WIFI_ROUTER_CTRL_MODE_NONE:
- UF_RTNL_UNLOCK();
- r = sme_mgt_connection_config_get(priv, &connectionConfig);
- UF_RTNL_LOCK();
- if (r == 0) {
- switch(connectionConfig.bssType) {
- case CSR_WIFI_SME_BSS_TYPE_ADHOC:
- wrqu->mode = IW_MODE_ADHOC;
- break;
- case CSR_WIFI_SME_BSS_TYPE_INFRASTRUCTURE:
- wrqu->mode = IW_MODE_INFRA;
- break;
- default:
- wrqu->mode = IW_MODE_AUTO;
- unifi_notice(priv, "Unknown IW MODE value.\n");
- }
- }
- break;
- default:
- wrqu->mode = IW_MODE_AUTO;
- unifi_notice(priv, "Unknown IW MODE value.\n");
-
- }
- unifi_trace(priv, UDBG4, "unifi_giwmode: mode = 0x%x\n", wrqu->mode);
- return r;
-} /* unifi_giwmode() */
-
-
-
-static int
-unifi_giwrange(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- struct iw_point *dwrq = &wrqu->data;
- struct iw_range *range = (struct iw_range *) extra;
- int i;
-
- unifi_trace(NULL, UDBG2, "unifi_giwrange\n");
-
- dwrq->length = sizeof(struct iw_range);
- memset(range, 0, sizeof(*range));
- range->min_nwid = 0x0000;
- range->max_nwid = 0x0000;
-
- /*
- * Don't report the frequency/channel table, then the channel
- * number returned elsewhere will be printed as a channel number.
- */
-
- /* Ranges of values reported in quality structs */
- range->max_qual.qual = 40; /* Max expected qual value */
- range->max_qual.level = -120; /* Noise floor in dBm */
- range->max_qual.noise = -120; /* Noise floor in dBm */
-
-
- /* space for IW_MAX_BITRATES (8 up to WE15, 32 later) */
- i = 0;
-#if WIRELESS_EXT > 15
- range->bitrate[i++] = 2 * 500000;
- range->bitrate[i++] = 4 * 500000;
- range->bitrate[i++] = 11 * 500000;
- range->bitrate[i++] = 22 * 500000;
- range->bitrate[i++] = 12 * 500000;
- range->bitrate[i++] = 18 * 500000;
- range->bitrate[i++] = 24 * 500000;
- range->bitrate[i++] = 36 * 500000;
- range->bitrate[i++] = 48 * 500000;
- range->bitrate[i++] = 72 * 500000;
- range->bitrate[i++] = 96 * 500000;
- range->bitrate[i++] = 108 * 500000;
-#else
- range->bitrate[i++] = 2 * 500000;
- range->bitrate[i++] = 4 * 500000;
- range->bitrate[i++] = 11 * 500000;
- range->bitrate[i++] = 22 * 500000;
- range->bitrate[i++] = 24 * 500000;
- range->bitrate[i++] = 48 * 500000;
- range->bitrate[i++] = 96 * 500000;
- range->bitrate[i++] = 108 * 500000;
-#endif /* WIRELESS_EXT < 16 */
- range->num_bitrates = i;
-
- range->max_encoding_tokens = NUM_WEPKEYS;
- range->num_encoding_sizes = 2;
- range->encoding_size[0] = 5;
- range->encoding_size[1] = 13;
-
- range->we_version_source = 20;
- range->we_version_compiled = WIRELESS_EXT;
-
- /* Number of channels available in h/w */
- range->num_channels = 14;
- /* Number of entries in freq[] array */
- range->num_frequency = 14;
- for (i = 0; (i < range->num_frequency) && (i < IW_MAX_FREQUENCIES); i++) {
- int chan = i + 1;
- range->freq[i].i = chan;
- range->freq[i].m = channel_to_mhz(chan, 0);
- range->freq[i].e = 6;
- }
- if ((i+3) < IW_MAX_FREQUENCIES) {
- range->freq[i].i = 36;
- range->freq[i].m = channel_to_mhz(36, 1);
- range->freq[i].e = 6;
- range->freq[i+1].i = 40;
- range->freq[i+1].m = channel_to_mhz(40, 1);
- range->freq[i+1].e = 6;
- range->freq[i+2].i = 44;
- range->freq[i+2].m = channel_to_mhz(44, 1);
- range->freq[i+2].e = 6;
- range->freq[i+3].i = 48;
- range->freq[i+3].m = channel_to_mhz(48, 1);
- range->freq[i+3].e = 6;
- }
-
-#if WIRELESS_EXT > 16
- /* Event capability (kernel + driver) */
- range->event_capa[0] = (IW_EVENT_CAPA_K_0 |
- IW_EVENT_CAPA_MASK(SIOCGIWTHRSPY) |
- IW_EVENT_CAPA_MASK(SIOCGIWAP) |
- IW_EVENT_CAPA_MASK(SIOCGIWSCAN));
- range->event_capa[1] = IW_EVENT_CAPA_K_1;
- range->event_capa[4] = (IW_EVENT_CAPA_MASK(IWEVTXDROP) |
- IW_EVENT_CAPA_MASK(IWEVCUSTOM) |
- IW_EVENT_CAPA_MASK(IWEVREGISTERED) |
- IW_EVENT_CAPA_MASK(IWEVEXPIRED));
-#endif /* WIRELESS_EXT > 16 */
-
-#if WIRELESS_EXT > 17
- range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 |
- IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP;
-#endif /* WIRELESS_EXT > 17 */
-
-
- return 0;
-} /* unifi_giwrange() */
-
-
-static int
-unifi_siwap(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- int err = 0;
-
- CHECK_INITED(priv);
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_siwap: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- if (wrqu->ap_addr.sa_family != ARPHRD_ETHER) {
- return -EINVAL;
- }
-
- unifi_trace(priv, UDBG1, "unifi_siwap: asked for %pM\n",
- wrqu->ap_addr.sa_data);
-
- if (is_zero_ether_addr(wrqu->ap_addr.sa_data)) {
- priv->ignore_bssid_join = FALSE;
- err = sme_mgt_disconnect(priv);
- if (err) {
- unifi_trace(priv, UDBG4, "unifi_siwap: Disconnect failed, status %d\n", err);
- }
- return 0;
- }
-
- if (priv->ignore_bssid_join) {
- unifi_trace(priv, UDBG4, "unifi_siwap: ignoring second join\n");
- priv->ignore_bssid_join = FALSE;
- } else {
- memcpy(priv->connection_config.bssid.a, wrqu->ap_addr.sa_data, ETH_ALEN);
- unifi_trace(priv, UDBG1, "unifi_siwap: Joining %X:%X:%X:%X:%X:%X\n",
- priv->connection_config.bssid.a[0],
- priv->connection_config.bssid.a[1],
- priv->connection_config.bssid.a[2],
- priv->connection_config.bssid.a[3],
- priv->connection_config.bssid.a[4],
- priv->connection_config.bssid.a[5]);
- err = sme_mgt_connect(priv);
- if (err) {
- unifi_error(priv, "unifi_siwap: Join failed, status %d\n", err);
- return convert_sme_error(err);
- }
- }
-
- return 0;
-} /* unifi_siwap() */
-
-
-static int
-unifi_giwap(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- CsrWifiSmeConnectionInfo connectionInfo;
- int r = 0;
- u8 *bssid;
-
- CHECK_INITED(priv);
- unifi_trace(priv, UDBG2, "unifi_giwap\n");
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "iwprivswpikey: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
- UF_RTNL_UNLOCK();
- r = sme_mgt_connection_info_get(priv, &connectionInfo);
- UF_RTNL_LOCK();
-
- if (r == 0) {
- bssid = connectionInfo.bssid.a;
- wrqu->ap_addr.sa_family = ARPHRD_ETHER;
- unifi_trace(priv, UDBG4, "unifi_giwap: BSSID = %pM\n", bssid);
-
- memcpy(wrqu->ap_addr.sa_data, bssid, ETH_ALEN);
- } else {
- memset(wrqu->ap_addr.sa_data, 0, ETH_ALEN);
- }
-
- return 0;
-} /* unifi_giwap() */
-
-
-static int
-unifi_siwscan(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- int r;
- CsrWifiSsid scan_ssid;
- unsigned char *channel_list = NULL;
- int chans_good = 0;
-#if WIRELESS_EXT > 17
- struct iw_point *data = &wrqu->data;
- struct iw_scan_req *req = (struct iw_scan_req *) extra;
-#endif
-
- CHECK_INITED(priv);
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_siwscan: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
-#if WIRELESS_EXT > 17
- /* Providing a valid channel list will force an active scan */
- if (req) {
- if ((req->num_channels > 0) && (req->num_channels < IW_MAX_FREQUENCIES)) {
- channel_list = kmalloc(req->num_channels, GFP_KERNEL);
- if (channel_list) {
- int i;
- for (i = 0; i < req->num_channels; i++) {
- /* Convert frequency to channel number */
- int ch = wext_freq_to_channel(req->channel_list[i].m,
- req->channel_list[i].e);
- if (ch) {
- channel_list[chans_good++] = ch;
- }
- }
- unifi_trace(priv, UDBG1,
- "SIWSCAN: Scanning %d channels\n", chans_good);
- } else {
- /* Fall back to scanning all */
- unifi_error(priv, "SIWSCAN: Can't alloc channel_list (%d)\n",
- req->num_channels);
- }
- }
- }
-
- if (req && (data->flags & IW_SCAN_THIS_ESSID)) {
- memcpy(scan_ssid.ssid, req->essid, req->essid_len);
- scan_ssid.length = req->essid_len;
- unifi_trace(priv, UDBG1,
- "SIWSCAN: Scanning for %.*s\n",
- scan_ssid.length, scan_ssid.ssid);
- } else
-#endif
- {
- unifi_trace(priv, UDBG1, "SIWSCAN: Scanning for all APs\n");
- scan_ssid.length = 0;
- }
-
- r = sme_mgt_scan_full(priv, &scan_ssid, chans_good, channel_list);
- if (r) {
- unifi_error(priv, "SIWSCAN: Scan returned error %d\n", r);
- } else {
- unifi_trace(priv, UDBG1, "SIWSCAN: Scan done\n");
- wext_send_scan_results_event(priv);
- }
-
- if (channel_list) {
- kfree(channel_list);
- }
-
- return r;
-
-} /* unifi_siwscan() */
-
-
-static const unsigned char *
-unifi_find_info_element(int id, const unsigned char *info, int len)
-{
- const unsigned char *ie = info;
-
- while (len > 1)
- {
- int e_id, e_len;
- e_id = ie[0];
- e_len = ie[1];
-
- /* Return if we find a match */
- if (e_id == id)
- {
- return ie;
- }
-
- len -= (e_len + 2);
- ie += (e_len + 2);
- }
-
- return NULL;
-} /* unifi_find_info_element() */
-
-
-/*
- * Translate scan data returned from the card to a card independent
- * format that the Wireless Tools will understand - Jean II
- */
-int
-unifi_translate_scan(struct net_device *dev,
- struct iw_request_info *info,
- char *current_ev, char *end_buf,
- CsrWifiSmeScanResult *scan_data,
- int scan_index)
-{
- struct iw_event iwe; /* Temporary buffer */
- unsigned char *info_elems;
- int info_elem_len;
- const unsigned char *elem;
- u16 capabilities;
- int signal, noise, snr;
- char *start_buf = current_ev;
- char *current_val; /* For rates */
- int i, r;
-
- info_elems = scan_data->informationElements;
- info_elem_len = scan_data->informationElementsLength;
-
- if (!scan_data->informationElementsLength || !scan_data->informationElements) {
- unifi_error(NULL, "*** NULL SCAN IEs ***\n");
- return -EIO;
- }
-
- /* get capinfo bits */
- capabilities = scan_data->capabilityInformation;
-
- unifi_trace(NULL, UDBG5, "Capabilities: 0x%x\n", capabilities);
-
- /* First entry *MUST* be the AP MAC address */
- memset(&iwe, 0, sizeof(iwe));
- iwe.cmd = SIOCGIWAP;
- iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
- memcpy(iwe.u.ap_addr.sa_data, scan_data->bssid.a, ETH_ALEN);
- iwe.len = IW_EV_ADDR_LEN;
- r = uf_iwe_stream_add_event(info, start_buf, end_buf, &iwe, IW_EV_ADDR_LEN);
- if (r < 0) {
- return r;
- }
- start_buf += r;
-
- /* Other entries will be displayed in the order we give them */
-
- /* Add the ESSID */
- /* find SSID in Info Elems */
- elem = unifi_find_info_element(IE_SSID_ID, info_elems, info_elem_len);
- if (elem) {
- int e_len = elem[1];
- const unsigned char *e_ptr = elem + 2;
- unsigned char buf[33];
-
- memset(&iwe, 0, sizeof(iwe));
- iwe.cmd = SIOCGIWESSID;
- iwe.u.essid.length = e_len;
- if (iwe.u.essid.length > 32) {
- iwe.u.essid.length = 32;
- }
- iwe.u.essid.flags = scan_index;
- memcpy(buf, e_ptr, iwe.u.essid.length);
- buf[iwe.u.essid.length] = '\0';
- r = uf_iwe_stream_add_point(info, start_buf, end_buf, &iwe, buf);
- if (r < 0) {
- return r;
- }
- start_buf += r;
-
- }
-
- /* Add mode */
- memset(&iwe, 0, sizeof(iwe));
- iwe.cmd = SIOCGIWMODE;
- if (scan_data->bssType == CSR_WIFI_SME_BSS_TYPE_INFRASTRUCTURE) {
- iwe.u.mode = IW_MODE_INFRA;
- } else {
- iwe.u.mode = IW_MODE_ADHOC;
- }
- iwe.len = IW_EV_UINT_LEN;
- r = uf_iwe_stream_add_event(info, start_buf, end_buf, &iwe, IW_EV_UINT_LEN);
- if (r < 0) {
- return r;
- }
- start_buf += r;
-
- /* Add frequency. iwlist will convert to channel using table given in giwrange */
- memset(&iwe, 0, sizeof(iwe));
- iwe.cmd = SIOCGIWFREQ;
- iwe.u.freq.m = scan_data->channelFrequency;
- iwe.u.freq.e = 6;
- r = uf_iwe_stream_add_event(info, start_buf, end_buf, &iwe, IW_EV_FREQ_LEN);
- if (r < 0) {
- return r;
- }
- start_buf += r;
-
-
- /* Add quality statistics */
- iwe.cmd = IWEVQUAL;
- /*
- * level and noise below are mapped into an unsigned 8 bit number,
- * ranging from [-192; 63]. The way this is achieved is simply to
- * add 0x100 onto the number if it is negative,
- * once clipped to the correct range.
- */
- signal = scan_data->rssi; /* This value is in dBm */
- /* Clip range of snr */
- snr = (scan_data->snr > 0) ? scan_data->snr : 0; /* In dB relative, from 0 - 255 */
- snr = (snr < 255) ? snr : 255;
- noise = signal - snr;
-
- /* Clip range of signal */
- signal = (signal < 63) ? signal : 63;
- signal = (signal > -192) ? signal : -192;
-
- /* Clip range of noise */
- noise = (noise < 63) ? noise : 63;
- noise = (noise > -192) ? noise : -192;
-
- /* Make u8 */
- signal = ( signal < 0 ) ? signal + 0x100 : signal;
- noise = ( noise < 0 ) ? noise + 0x100 : noise;
-
- iwe.u.qual.level = (u8)signal; /* -192 : 63 */
- iwe.u.qual.noise = (u8)noise; /* -192 : 63 */
- iwe.u.qual.qual = snr; /* 0 : 255 */
- iwe.u.qual.updated = 0;
-#if WIRELESS_EXT > 16
- iwe.u.qual.updated |= IW_QUAL_LEVEL_UPDATED | IW_QUAL_NOISE_UPDATED |
- IW_QUAL_QUAL_UPDATED;
-#if WIRELESS_EXT > 18
- iwe.u.qual.updated |= IW_QUAL_DBM;
-#endif
-#endif
- r = uf_iwe_stream_add_event(info, start_buf, end_buf, &iwe, IW_EV_QUAL_LEN);
- if (r < 0) {
- return r;
- }
- start_buf += r;
-
- /* Add encryption capability */
- iwe.cmd = SIOCGIWENCODE;
- if (capabilities & SIG_CAP_PRIVACY) {
- iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY;
- } else {
- iwe.u.data.flags = IW_ENCODE_DISABLED;
- }
- iwe.u.data.length = 0;
- iwe.len = IW_EV_POINT_LEN + iwe.u.data.length;
- r = uf_iwe_stream_add_point(info, start_buf, end_buf, &iwe, "");
- if (r < 0) {
- return r;
- }
- start_buf += r;
-
-
- /*
- * Rate : stuffing multiple values in a single event require a bit
- * more of magic - Jean II
- */
- current_val = start_buf + IW_EV_LCP_LEN;
-
- iwe.cmd = SIOCGIWRATE;
- /* Those two flags are ignored... */
- iwe.u.bitrate.fixed = iwe.u.bitrate.disabled = 0;
-
- elem = unifi_find_info_element(IE_SUPPORTED_RATES_ID,
- info_elems, info_elem_len);
- if (elem) {
- int e_len = elem[1];
- const unsigned char *e_ptr = elem + 2;
-
- /*
- * Count how many rates we have.
- * Zero marks the end of the list, if the list is not truncated.
- */
- /* Max 8 values */
- for (i = 0; i < e_len; i++) {
- if (e_ptr[i] == 0) {
- break;
- }
- /* Bit rate given in 500 kb/s units (+ 0x80) */
- iwe.u.bitrate.value = ((e_ptr[i] & 0x7f) * 500000);
- /* Add new value to event */
- r = uf_iwe_stream_add_value(info, start_buf, current_val, end_buf, &iwe, IW_EV_PARAM_LEN);
- if (r < 0) {
- return r;
- }
- current_val +=r;
-
- }
- }
- elem = unifi_find_info_element(IE_EXTENDED_SUPPORTED_RATES_ID,
- info_elems, info_elem_len);
- if (elem) {
- int e_len = elem[1];
- const unsigned char *e_ptr = elem + 2;
-
- /*
- * Count how many rates we have.
- * Zero marks the end of the list, if the list is not truncated.
- */
- /* Max 8 values */
- for (i = 0; i < e_len; i++) {
- if (e_ptr[i] == 0) {
- break;
- }
- /* Bit rate given in 500 kb/s units (+ 0x80) */
- iwe.u.bitrate.value = ((e_ptr[i] & 0x7f) * 500000);
- /* Add new value to event */
- r = uf_iwe_stream_add_value(info, start_buf, current_val, end_buf, &iwe, IW_EV_PARAM_LEN);
- if (r < 0) {
- return r;
- }
- current_val +=r;
- }
- }
- /* Check if we added any rates event */
- if ((current_val - start_buf) > IW_EV_LCP_LEN) {
- start_buf = current_val;
- }
-
-
-#if WIRELESS_EXT > 17
- memset(&iwe, 0, sizeof(iwe));
- iwe.cmd = IWEVGENIE;
- iwe.u.data.length = info_elem_len;
-
- r = uf_iwe_stream_add_point(info, start_buf, end_buf, &iwe, info_elems);
- if (r < 0) {
- return r;
- }
-
- start_buf += r;
-#endif /* WE > 17 */
-
- return (start_buf - current_ev);
-} /* unifi_translate_scan() */
-
-
-
-static int
-unifi_giwscan(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- struct iw_point *dwrq = &wrqu->data;
- int r;
-
- CHECK_INITED(priv);
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_giwscan: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- unifi_trace(priv, UDBG1,
- "unifi_giwscan: buffer (%d bytes) \n",
- dwrq->length);
- UF_RTNL_UNLOCK();
- r = sme_mgt_scan_results_get_async(priv, info, extra, dwrq->length);
- UF_RTNL_LOCK();
- if (r < 0) {
- unifi_trace(priv, UDBG1,
- "unifi_giwscan: buffer (%d bytes) not big enough.\n",
- dwrq->length);
- return r;
- }
-
- dwrq->length = r;
- dwrq->flags = 0;
-
- return 0;
-} /* unifi_giwscan() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_siwessid
- *
- * Request to join a network or start and AdHoc.
- *
- * Arguments:
- * dev Pointer to network device struct.
- * info Pointer to broken-out ioctl request.
- * data Pointer to argument data.
- * essid Pointer to string giving name of network to join
- * or start
- *
- * Returns:
- * 0 on success and everything complete
- * -EINPROGRESS to have the higher level call the commit method.
- * ---------------------------------------------------------------------------
- */
-static int
-unifi_siwessid(struct net_device *dev, struct iw_request_info *info,
- struct iw_point *data, char *essid)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- int len;
- int err = 0;
-
- CHECK_INITED(priv);
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_siwessid: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- len = 0;
- if (data->flags & 1) {
- /* Limit length */
- len = data->length;
- if (len > UNIFI_MAX_SSID_LEN) {
- len = UNIFI_MAX_SSID_LEN;
- }
- }
-
-#ifdef UNIFI_DEBUG
- {
- char essid_str[UNIFI_MAX_SSID_LEN+1];
- int i;
-
- for (i = 0; i < len; i++) {
- essid_str[i] = (isprint(essid[i]) ? essid[i] : '?');
- }
- essid_str[i] = '\0';
-
- unifi_trace(priv, UDBG1, "unifi_siwessid: asked for '%*s' (%d)\n", len, essid_str, len);
- unifi_trace(priv, UDBG2, " with authModeMask = %d", priv->connection_config.authModeMask);
- }
-#endif
-
- memset(priv->connection_config.bssid.a, 0xFF, ETH_ALEN);
- if (len) {
- if (essid[len - 1] == 0) {
- len --;
- }
-
- memcpy(priv->connection_config.ssid.ssid, essid, len);
- priv->connection_config.ssid.length = len;
-
- } else {
- priv->connection_config.ssid.length = 0;
- }
-
- UF_RTNL_UNLOCK();
- err = sme_mgt_connect(priv);
- UF_RTNL_LOCK();
- if (err) {
- unifi_error(priv, "unifi_siwessid: Join failed, status %d\n", err);
- return convert_sme_error(err);
- }
-
- return 0;
-} /* unifi_siwessid() */
-
-
-static int
-unifi_giwessid(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *essid)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- struct iw_point *data = &wrqu->essid;
- CsrWifiSmeConnectionInfo connectionInfo;
- int r = 0;
-
- unifi_trace(priv, UDBG2, "unifi_giwessid\n");
- CHECK_INITED(priv);
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_giwessid: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
- UF_RTNL_UNLOCK();
- r = sme_mgt_connection_info_get(priv, &connectionInfo);
- UF_RTNL_LOCK();
-
- if (r == 0) {
- data->length = connectionInfo.ssid.length;
- strncpy(essid,
- connectionInfo.ssid.ssid,
- data->length);
- data->flags = 1; /* active */
-
- unifi_trace(priv, UDBG2, "unifi_giwessid: %.*s\n",
- data->length, essid);
- }
-
-
- return 0;
-} /* unifi_giwessid() */
-
-
-static int
-unifi_siwrate(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- struct iw_param *args = &wrqu->bitrate;
- CsrWifiSmeMibConfig mibConfig;
- int r;
-
- CHECK_INITED(priv);
- unifi_trace(priv, UDBG2, "unifi_siwrate\n");
-
- /*
- * If args->fixed == 0, value is max rate or -1 for best
- * If args->fixed == 1, value is rate to set or -1 for best
- * args->disabled and args->flags are not used in SIOCSIWRATE
- */
-
- /* Get, modify and set the MIB data */
- UF_RTNL_UNLOCK();
- r = sme_mgt_mib_config_get(priv, &mibConfig);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "unifi_siwrate: Get CsrWifiSmeMibConfigValue failed.\n");
- return r;
- }
-
- /* Default to auto rate algorithm */
- /* in 500Kbit/s, 0 means auto */
- mibConfig.unifiFixTxDataRate = 0;
-
- if (args->value != -1) {
- mibConfig.unifiFixTxDataRate = args->value / 500000;
- }
-
- /* 1 means rate is a maximum, 2 means rate is a set value */
- if (args->fixed == 1) {
- mibConfig.unifiFixMaxTxDataRate = 0;
- } else {
- mibConfig.unifiFixMaxTxDataRate = 1;
- }
- UF_RTNL_UNLOCK();
- r = sme_mgt_mib_config_set(priv, &mibConfig);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "unifi_siwrate: Set CsrWifiSmeMibConfigValue failed.\n");
- return r;
- }
-
-
- return 0;
-} /* unifi_siwrate() */
-
-
-
-static int
-unifi_giwrate(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- struct iw_param *args = &wrqu->bitrate;
- int r;
- int bitrate, flag;
- CsrWifiSmeMibConfig mibConfig;
- CsrWifiSmeConnectionStats connectionStats;
-
- unifi_trace(priv, UDBG2, "unifi_giwrate\n");
- CHECK_INITED(priv);
-
- flag = 0;
- bitrate = 0;
- UF_RTNL_UNLOCK();
- r = sme_mgt_mib_config_get(priv, &mibConfig);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "unifi_giwrate: Get CsrWifiSmeMibConfigValue failed.\n");
- return r;
- }
-
- bitrate = mibConfig.unifiFixTxDataRate;
- flag = mibConfig.unifiFixMaxTxDataRate;
-
- /* Used the value returned by the SME if MIB returns 0 */
- if (bitrate == 0) {
- UF_RTNL_UNLOCK();
- r = sme_mgt_connection_stats_get(priv, &connectionStats);
- UF_RTNL_LOCK();
- /* Ignore errors, we may be disconnected */
- if (r == 0) {
- bitrate = connectionStats.unifiTxDataRate;
- }
- }
-
- args->value = bitrate * 500000;
- args->fixed = !flag;
-
- return 0;
-} /* unifi_giwrate() */
-
-
-static int
-unifi_siwrts(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- int val = wrqu->rts.value;
- int r = 0;
- CsrWifiSmeMibConfig mibConfig;
-
- unifi_trace(priv, UDBG2, "unifi_siwrts\n");
- CHECK_INITED(priv);
-
- if (wrqu->rts.disabled) {
- val = 2347;
- }
-
- if ( (val < 0) || (val > 2347) )
- {
- return -EINVAL;
- }
-
- /* Get, modify and set the MIB data */
- UF_RTNL_UNLOCK();
- r = sme_mgt_mib_config_get(priv, &mibConfig);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "unifi_siwrts: Get CsrWifiSmeMibConfigValue failed.\n");
- return r;
- }
- mibConfig.dot11RtsThreshold = val;
- UF_RTNL_UNLOCK();
- r = sme_mgt_mib_config_set(priv, &mibConfig);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "unifi_siwrts: Set CsrWifiSmeMibConfigValue failed.\n");
- return r;
- }
-
- return 0;
-}
-
-
-static int
-unifi_giwrts(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- int r;
- int rts_thresh;
- CsrWifiSmeMibConfig mibConfig;
-
- unifi_trace(priv, UDBG2, "unifi_giwrts\n");
- CHECK_INITED(priv);
-
- UF_RTNL_UNLOCK();
- r = sme_mgt_mib_config_get(priv, &mibConfig);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "unifi_giwrts: Get CsrWifiSmeMibConfigValue failed.\n");
- return r;
- }
-
- rts_thresh = mibConfig.dot11RtsThreshold;
- if (rts_thresh > 2347) {
- rts_thresh = 2347;
- }
-
- wrqu->rts.value = rts_thresh;
- wrqu->rts.disabled = (rts_thresh == 2347);
- wrqu->rts.fixed = 1;
-
- return 0;
-}
-
-
-static int
-unifi_siwfrag(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- int val = wrqu->frag.value;
- int r = 0;
- CsrWifiSmeMibConfig mibConfig;
-
- unifi_trace(priv, UDBG2, "unifi_siwfrag\n");
- CHECK_INITED(priv);
-
- if (wrqu->frag.disabled)
- val = 2346;
-
- if ( (val < 256) || (val > 2347) )
- return -EINVAL;
-
- /* Get, modify and set the MIB data */
- UF_RTNL_UNLOCK();
- r = sme_mgt_mib_config_get(priv, &mibConfig);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "unifi_siwfrag: Get CsrWifiSmeMibConfigValue failed.\n");
- return r;
- }
- /* Fragmentation Threashold must be even */
- mibConfig.dot11FragmentationThreshold = (val & ~0x1);
- UF_RTNL_UNLOCK();
- r = sme_mgt_mib_config_set(priv, &mibConfig);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "unifi_siwfrag: Set CsrWifiSmeMibConfigValue failed.\n");
- return r;
- }
-
- return 0;
-}
-
-
-static int
-unifi_giwfrag(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- int r;
- int frag_thresh;
- CsrWifiSmeMibConfig mibConfig;
-
- unifi_trace(priv, UDBG2, "unifi_giwfrag\n");
- CHECK_INITED(priv);
-
- UF_RTNL_UNLOCK();
- r = sme_mgt_mib_config_get(priv, &mibConfig);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "unifi_giwfrag: Get CsrWifiSmeMibConfigValue failed.\n");
- return r;
- }
-
- frag_thresh = mibConfig.dot11FragmentationThreshold;
-
- /* Build the return structure */
- wrqu->frag.value = frag_thresh;
- wrqu->frag.disabled = (frag_thresh >= 2346);
- wrqu->frag.fixed = 1;
-
- return 0;
-}
-
-
-static int
-unifi_siwencode(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- struct iw_point *erq = &wrqu->encoding;
- int index;
- int rc = 0;
- int privacy = -1;
- CsrWifiSmeKey sme_key;
-
- unifi_trace(priv, UDBG2, "unifi_siwencode\n");
-
- CHECK_INITED(priv);
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_siwencode: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- /*
- * Key index is encoded in the flags.
- * 0 - use current default,
- * 1-4 - if a key value is given set that key
- * if not use that key
- */
- index = (erq->flags & IW_ENCODE_INDEX); /* key number, 1-4 */
- if ((index < 0) || (index > 4)) {
- unifi_error(priv, "unifi_siwencode: Request to set an invalid key (index:%d)", index);
- return -EINVAL;
- }
-
- /*
- * Basic checking: do we have a key to set ?
- * The IW_ENCODE_NOKEY flag is set when no key is present (only change flags),
- * but older versions rely on sending a key id 1-4.
- */
- if (erq->length > 0) {
-
- /* Check the size of the key */
- if ((erq->length > LARGE_KEY_SIZE) || (erq->length < SMALL_KEY_SIZE)) {
- unifi_error(priv, "unifi_siwencode: Request to set an invalid key (length:%d)",
- erq->length);
- return -EINVAL;
- }
-
- /* Check the index (none (i.e. 0) means use current) */
- if ((index < 1) || (index > 4)) {
- /* If we do not have a previous key, use 1 as default */
- if (!priv->wep_tx_key_index) {
- priv->wep_tx_key_index = 1;
- }
- index = priv->wep_tx_key_index;
- }
-
- /* If we didn't have a key and a valid index is set, we want to remember it*/
- if (!priv->wep_tx_key_index) {
- priv->wep_tx_key_index = index;
- }
-
- unifi_trace(priv, UDBG1, "Tx key Index is %d\n", priv->wep_tx_key_index);
-
- privacy = 1;
-
- /* Check if the key is not marked as invalid */
- if ((erq->flags & IW_ENCODE_NOKEY) == 0) {
-
- unifi_trace(priv, UDBG1, "New %s key (len=%d, index=%d)\n",
- (priv->wep_tx_key_index == index) ? "tx" : "",
- erq->length, index);
-
- sme_key.wepTxKey = (priv->wep_tx_key_index == index);
- if (priv->wep_tx_key_index == index) {
- sme_key.keyType = CSR_WIFI_SME_KEY_TYPE_PAIRWISE;
- } else {
- sme_key.keyType = CSR_WIFI_SME_KEY_TYPE_GROUP;
- }
- /* Key index is zero based in SME but 1 based in wext */
- sme_key.keyIndex = (index - 1);
- sme_key.keyLength = erq->length;
- sme_key.authenticator = 0;
- memset(sme_key.address.a, 0xFF, ETH_ALEN);
- memcpy(sme_key.key, extra, erq->length);
-
- UF_RTNL_UNLOCK();
- rc = sme_mgt_key(priv, &sme_key, CSR_WIFI_SME_LIST_ACTION_ADD);
- UF_RTNL_LOCK();
- if (rc) {
- unifi_error(priv, "unifi_siwencode: Set key failed (%d)", rc);
- return convert_sme_error(rc);
- }
-
- /* Store the key to be reported by the SIOCGIWENCODE handler */
- priv->wep_keys[index - 1].len = erq->length;
- memcpy(priv->wep_keys[index - 1].key, extra, erq->length);
- }
- } else {
- /*
- * No additional key data, so it must be a request to change the
- * active key.
- */
- if (index != 0) {
- unifi_trace(priv, UDBG1, "Tx key Index is %d\n", index - 1);
-
- /* Store the index to be reported by the SIOCGIWENCODE handler */
- priv->wep_tx_key_index = index;
-
- sme_key.wepTxKey = 1;
- sme_key.keyType = CSR_WIFI_SME_KEY_TYPE_PAIRWISE;
-
- /* Key index is zero based in SME but 1 based in wext */
- sme_key.keyIndex = (index - 1);
- sme_key.keyLength = 0;
- sme_key.authenticator = 0;
- UF_RTNL_UNLOCK();
- rc = sme_mgt_key(priv, &sme_key, CSR_WIFI_SME_LIST_ACTION_ADD);
- UF_RTNL_LOCK();
- if (rc) {
- unifi_error(priv, "unifi_siwencode: Set key failed (%d)", rc);
- return convert_sme_error(rc);
- }
-
- /* Turn on encryption */
- privacy = 1;
- }
- }
-
- /* Read the flags */
- if (erq->flags & IW_ENCODE_DISABLED) {
- /* disable encryption */
- unifi_trace(priv, UDBG1, "disable WEP encryption\n");
- privacy = 0;
-
- priv->wep_tx_key_index = 0;
-
- unifi_trace(priv, UDBG1, "IW_ENCODE_DISABLED: CSR_WIFI_SME_AUTH_MODE_80211_OPEN\n");
- priv->connection_config.authModeMask = CSR_WIFI_SME_AUTH_MODE_80211_OPEN;
- }
-
- if (erq->flags & IW_ENCODE_RESTRICTED) {
- /* Use shared key auth */
- unifi_trace(priv, UDBG1, "IW_ENCODE_RESTRICTED: CSR_WIFI_SME_AUTH_MODE_80211_SHARED\n");
- priv->connection_config.authModeMask = CSR_WIFI_SME_AUTH_MODE_80211_SHARED;
-
- /* Turn on encryption */
- privacy = 1;
- }
- if (erq->flags & IW_ENCODE_OPEN) {
- unifi_trace(priv, UDBG1, "IW_ENCODE_OPEN: CSR_WIFI_SME_AUTH_MODE_80211_OPEN\n");
- priv->connection_config.authModeMask = CSR_WIFI_SME_AUTH_MODE_80211_OPEN;
- }
-
- /* Commit the changes to flags if needed */
- if (privacy != -1) {
- priv->connection_config.privacyMode = privacy ? CSR_WIFI_SME_80211_PRIVACY_MODE_ENABLED : CSR_WIFI_SME_80211_PRIVACY_MODE_DISABLED;
- priv->connection_config.encryptionModeMask = privacy ? (CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_WEP40 |
- CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_WEP104 |
- CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_WEP40 |
- CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_WEP104) :
- CSR_WIFI_SME_ENCRYPTION_CIPHER_NONE;
- }
-
- return convert_sme_error(rc);
-
-} /* unifi_siwencode() */
-
-
-
-static int
-unifi_giwencode(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- struct iw_point *erq = &wrqu->encoding;
-
- unifi_trace(priv, UDBG2, "unifi_giwencode\n");
-
- CHECK_INITED(priv);
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_giwencode: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- if (priv->connection_config.authModeMask == CSR_WIFI_SME_AUTH_MODE_80211_SHARED) {
- erq->flags = IW_ENCODE_RESTRICTED;
- }
- else {
- if (priv->connection_config.privacyMode == CSR_WIFI_SME_80211_PRIVACY_MODE_DISABLED) {
- erq->flags = IW_ENCODE_DISABLED;
- } else {
- erq->flags = IW_ENCODE_OPEN;
- }
- }
-
- erq->length = 0;
-
- if (erq->flags != IW_ENCODE_DISABLED) {
- int index = priv->wep_tx_key_index;
-
- if ((index > 0) && (index <= NUM_WEPKEYS)) {
- erq->flags |= (index & IW_ENCODE_INDEX);
- erq->length = priv->wep_keys[index - 1].len;
- memcpy(extra, priv->wep_keys[index - 1].key, erq->length);
- } else {
- unifi_notice(priv, "unifi_giwencode: Surprise, do not have a valid key index (%d)\n",
- index);
- }
- }
-
- return 0;
-} /* unifi_giwencode() */
-
-
-static int
-unifi_siwpower(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- struct iw_param *args = &wrqu->power;
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- int listen_interval, wake_for_dtim;
- int r = 0;
- CsrWifiSmePowerConfig powerConfig;
-
- unifi_trace(priv, UDBG2, "unifi_siwpower\n");
-
- CHECK_INITED(priv);
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_siwpower: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
- UF_RTNL_UNLOCK();
- r = sme_mgt_power_config_get(priv, &powerConfig);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "unifi_siwpower: Get unifi_PowerConfigValue failed.\n");
- return r;
- }
-
- listen_interval = -1;
- wake_for_dtim = -1;
- if (args->disabled) {
- powerConfig.powerSaveLevel = CSR_WIFI_SME_POWER_SAVE_LEVEL_LOW;
- }
- else
- {
- powerConfig.powerSaveLevel = CSR_WIFI_SME_POWER_SAVE_LEVEL_HIGH;
-
- switch (args->flags & IW_POWER_TYPE) {
- case 0:
- /* not specified */
- break;
- case IW_POWER_PERIOD:
- listen_interval = args->value / 1000;
- break;
- default:
- return -EINVAL;
- }
-
- switch (args->flags & IW_POWER_MODE) {
- case 0:
- /* not specified */
- break;
- case IW_POWER_UNICAST_R:
- /* not interested in broadcast packets */
- wake_for_dtim = 0;
- break;
- case IW_POWER_ALL_R:
- /* yes, we are interested in broadcast packets */
- wake_for_dtim = 1;
- break;
- default:
- return -EINVAL;
- }
- }
-
- if (listen_interval > 0) {
- powerConfig.listenIntervalTu = listen_interval;
- unifi_trace(priv, UDBG4, "unifi_siwpower: new Listen Interval = %d.\n",
- powerConfig.listenIntervalTu);
- }
-
- if (wake_for_dtim >= 0) {
- powerConfig.rxDtims = wake_for_dtim;
- }
- UF_RTNL_UNLOCK();
- r = sme_mgt_power_config_set(priv, &powerConfig);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "unifi_siwpower: Set unifi_PowerConfigValue failed.\n");
- return r;
- }
-
- return 0;
-} /* unifi_siwpower() */
-
-
-static int
-unifi_giwpower(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- struct iw_param *args = &wrqu->power;
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- CsrWifiSmePowerConfig powerConfig;
- int r;
-
- unifi_trace(priv, UDBG2, "unifi_giwpower\n");
-
- CHECK_INITED(priv);
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_giwpower: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- args->flags = 0;
- UF_RTNL_UNLOCK();
- r = sme_mgt_power_config_get(priv, &powerConfig);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "unifi_giwpower: Get unifi_PowerConfigValue failed.\n");
- return r;
- }
-
- unifi_trace(priv, UDBG4, "unifi_giwpower: mode=%d\n",
- powerConfig.powerSaveLevel);
-
- args->disabled = (powerConfig.powerSaveLevel == CSR_WIFI_SME_POWER_SAVE_LEVEL_LOW);
- if (args->disabled) {
- args->flags = 0;
- return 0;
- }
-
- args->value = powerConfig.listenIntervalTu * 1000;
- args->flags |= IW_POWER_PERIOD;
-
- if (powerConfig.rxDtims) {
- args->flags |= IW_POWER_ALL_R;
- } else {
- args->flags |= IW_POWER_UNICAST_R;
- }
-
- return 0;
-} /* unifi_giwpower() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_siwcommit - handler for SIOCSIWCOMMIT
- *
- * Apply all the parameters that have been set.
- * In practice this means:
- * - do a scan
- * - join a network or start an AdHoc
- * - authenticate and associate.
- *
- * Arguments:
- * None.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static int
-unifi_siwcommit(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- return 0;
-} /* unifi_siwcommit() */
-
-
-
-static int
-unifi_siwmlme(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- struct iw_mlme *mlme = (struct iw_mlme *)extra;
-
- unifi_trace(priv, UDBG2, "unifi_siwmlme\n");
- CHECK_INITED(priv);
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_siwmlme: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- switch (mlme->cmd) {
- case IW_MLME_DEAUTH:
- case IW_MLME_DISASSOC:
- UF_RTNL_UNLOCK();
- sme_mgt_disconnect(priv);
- UF_RTNL_LOCK();
- break;
- default:
- return -EOPNOTSUPP;
- }
-
- return 0;
-} /* unifi_siwmlme() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_siwgenie
- * unifi_giwgenie
- *
- * WPA : Generic IEEE 802.11 information element (e.g., for WPA/RSN/WMM).
- * Handlers for SIOCSIWGENIE, SIOCGIWGENIE - set/get generic IE
- *
- * The host program (e.g. wpa_supplicant) uses this call to set the
- * additional IEs to accompany the next (Associate?) request.
- *
- * Arguments:
- * None.
- *
- * Returns:
- * None.
- * Notes:
- * From wireless.h:
- * This ioctl uses struct iw_point and data buffer that includes IE id
- * and len fields. More than one IE may be included in the
- * request. Setting the generic IE to empty buffer (len=0) removes the
- * generic IE from the driver.
- * ---------------------------------------------------------------------------
- */
-static int
-unifi_siwgenie(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- int len;
-
- unifi_trace(priv, UDBG2, "unifi_siwgenie\n");
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_siwgenie: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- if ( priv->connection_config.mlmeAssociateReqInformationElements) {
- kfree( priv->connection_config.mlmeAssociateReqInformationElements);
- }
- priv->connection_config.mlmeAssociateReqInformationElementsLength = 0;
- priv->connection_config.mlmeAssociateReqInformationElements = NULL;
-
- len = wrqu->data.length;
- if (len == 0) {
- return 0;
- }
-
- priv->connection_config.mlmeAssociateReqInformationElements = kmalloc(len, GFP_KERNEL);
- if (priv->connection_config.mlmeAssociateReqInformationElements == NULL) {
- return -ENOMEM;
- }
-
- priv->connection_config.mlmeAssociateReqInformationElementsLength = len;
- memcpy( priv->connection_config.mlmeAssociateReqInformationElements, extra, len);
-
- return 0;
-} /* unifi_siwgenie() */
-
-
-static int
-unifi_giwgenie(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- int len;
-
- unifi_trace(priv, UDBG2, "unifi_giwgenie\n");
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_giwgenie: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- len = priv->connection_config.mlmeAssociateReqInformationElementsLength;
-
- if (len == 0) {
- wrqu->data.length = 0;
- return 0;
- }
-
- if (wrqu->data.length < len) {
- return -E2BIG;
- }
-
- wrqu->data.length = len;
- memcpy(extra, priv->connection_config.mlmeAssociateReqInformationElements, len);
-
- return 0;
-} /* unifi_giwgenie() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_siwauth
- * unifi_giwauth
- *
- * Handlers for SIOCSIWAUTH, SIOCGIWAUTH
- * Set/get various authentication parameters.
- *
- * Arguments:
- *
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static int
-_unifi_siwauth(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- CsrWifiSmeAuthModeMask new_auth;
-
- unifi_trace(priv, UDBG2, "unifi_siwauth\n");
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_siwauth: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- /*
- * This ioctl is safe to call even when UniFi is powered off.
- * wpa_supplicant calls it to test whether we support WPA.
- */
-
- switch (wrqu->param.flags & IW_AUTH_INDEX) {
-
- case IW_AUTH_WPA_ENABLED:
- unifi_trace(priv, UDBG1, "IW_AUTH_WPA_ENABLED: %d\n", wrqu->param.value);
-
- if (wrqu->param.value == 0) {
- unifi_trace(priv, UDBG5, "IW_AUTH_WPA_ENABLED: CSR_WIFI_SME_AUTH_MODE_80211_OPEN\n");
- priv->connection_config.authModeMask = CSR_WIFI_SME_AUTH_MODE_80211_OPEN;
- }
- break;
-
- case IW_AUTH_PRIVACY_INVOKED:
- unifi_trace(priv, UDBG1, "IW_AUTH_PRIVACY_INVOKED: %d\n", wrqu->param.value);
-
- priv->connection_config.privacyMode = wrqu->param.value ? CSR_WIFI_SME_80211_PRIVACY_MODE_ENABLED : CSR_WIFI_SME_80211_PRIVACY_MODE_DISABLED;
- if (wrqu->param.value == CSR_WIFI_SME_80211_PRIVACY_MODE_DISABLED)
- {
- priv->connection_config.encryptionModeMask = CSR_WIFI_SME_ENCRYPTION_CIPHER_NONE;
- }
- break;
-
- case IW_AUTH_80211_AUTH_ALG:
- /*
- IW_AUTH_ALG_OPEN_SYSTEM 0x00000001
- IW_AUTH_ALG_SHARED_KEY 0x00000002
- IW_AUTH_ALG_LEAP 0x00000004
- */
- new_auth = 0;
- if (wrqu->param.value & IW_AUTH_ALG_OPEN_SYSTEM) {
- unifi_trace(priv, UDBG1, "IW_AUTH_80211_AUTH_ALG: %d (IW_AUTH_ALG_OPEN_SYSTEM)\n", wrqu->param.value);
- new_auth |= CSR_WIFI_SME_AUTH_MODE_80211_OPEN;
- }
- if (wrqu->param.value & IW_AUTH_ALG_SHARED_KEY) {
- unifi_trace(priv, UDBG1, "IW_AUTH_80211_AUTH_ALG: %d (IW_AUTH_ALG_SHARED_KEY)\n", wrqu->param.value);
- new_auth |= CSR_WIFI_SME_AUTH_MODE_80211_SHARED;
- }
- if (wrqu->param.value & IW_AUTH_ALG_LEAP) {
- /* Initial exchanges using open-system to set EAP */
- unifi_trace(priv, UDBG1, "IW_AUTH_80211_AUTH_ALG: %d (IW_AUTH_ALG_LEAP)\n", wrqu->param.value);
- new_auth |= CSR_WIFI_SME_AUTH_MODE_8021X_OTHER1X;
- }
- if (new_auth == 0) {
- unifi_trace(priv, UDBG1, "IW_AUTH_80211_AUTH_ALG: invalid value %d\n",
- wrqu->param.value);
- return -EINVAL;
- } else {
- priv->connection_config.authModeMask = new_auth;
- }
- break;
-
- case IW_AUTH_WPA_VERSION:
- unifi_trace(priv, UDBG1, "IW_AUTH_WPA_VERSION: %d\n", wrqu->param.value);
- priv->ignore_bssid_join = TRUE;
- /*
- IW_AUTH_WPA_VERSION_DISABLED 0x00000001
- IW_AUTH_WPA_VERSION_WPA 0x00000002
- IW_AUTH_WPA_VERSION_WPA2 0x00000004
- */
-
- if (!(wrqu->param.value & IW_AUTH_WPA_VERSION_DISABLED)) {
-
- priv->connection_config.authModeMask = CSR_WIFI_SME_AUTH_MODE_80211_OPEN;
-
- if (wrqu->param.value & IW_AUTH_WPA_VERSION_WPA) {
- unifi_trace(priv, UDBG4, "IW_AUTH_WPA_VERSION: WPA, WPA-PSK\n");
- priv->connection_config.authModeMask |= (CSR_WIFI_SME_AUTH_MODE_8021X_WPA | CSR_WIFI_SME_AUTH_MODE_8021X_WPAPSK);
- }
- if (wrqu->param.value & IW_AUTH_WPA_VERSION_WPA2) {
- unifi_trace(priv, UDBG4, "IW_AUTH_WPA_VERSION: WPA2, WPA2-PSK\n");
- priv->connection_config.authModeMask |= (CSR_WIFI_SME_AUTH_MODE_8021X_WPA2 | CSR_WIFI_SME_AUTH_MODE_8021X_WPA2PSK);
- }
- }
- break;
-
- case IW_AUTH_CIPHER_PAIRWISE:
- unifi_trace(priv, UDBG1, "IW_AUTH_CIPHER_PAIRWISE: %d\n", wrqu->param.value);
- /*
- * one of:
- IW_AUTH_CIPHER_NONE 0x00000001
- IW_AUTH_CIPHER_WEP40 0x00000002
- IW_AUTH_CIPHER_TKIP 0x00000004
- IW_AUTH_CIPHER_CCMP 0x00000008
- IW_AUTH_CIPHER_WEP104 0x00000010
- */
-
- priv->connection_config.encryptionModeMask = CSR_WIFI_SME_ENCRYPTION_CIPHER_NONE;
-
- if (wrqu->param.value & IW_AUTH_CIPHER_WEP40) {
- priv->connection_config.encryptionModeMask |=
- CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_WEP40 | CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_WEP40;
- }
- if (wrqu->param.value & IW_AUTH_CIPHER_WEP104) {
- priv->connection_config.encryptionModeMask |=
- CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_WEP104 | CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_WEP104;
- }
- if (wrqu->param.value & IW_AUTH_CIPHER_TKIP) {
- priv->connection_config.encryptionModeMask |=
- CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_TKIP | CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_TKIP;
- }
- if (wrqu->param.value & IW_AUTH_CIPHER_CCMP) {
- priv->connection_config.encryptionModeMask |=
- CSR_WIFI_SME_ENCRYPTION_CIPHER_PAIRWISE_CCMP | CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_CCMP;
- }
-
- break;
-
- case IW_AUTH_CIPHER_GROUP:
- unifi_trace(priv, UDBG1, "IW_AUTH_CIPHER_GROUP: %d\n", wrqu->param.value);
- /*
- * Use the WPA version and the group cipher suite to set the permitted
- * group key in the MIB. f/w uses this value to validate WPA and RSN IEs
- * in the probe responses from the desired BSS(ID)
- */
-
- priv->connection_config.encryptionModeMask &= ~(CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_WEP40 |
- CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_WEP104 |
- CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_TKIP |
- CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_CCMP);
- if (wrqu->param.value & IW_AUTH_CIPHER_WEP40) {
- priv->connection_config.encryptionModeMask |= CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_WEP40;
- }
- if (wrqu->param.value & IW_AUTH_CIPHER_WEP104) {
- priv->connection_config.encryptionModeMask |= CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_WEP104;
- }
- if (wrqu->param.value & IW_AUTH_CIPHER_TKIP) {
- priv->connection_config.encryptionModeMask |= CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_TKIP;
- }
- if (wrqu->param.value & IW_AUTH_CIPHER_CCMP) {
- priv->connection_config.encryptionModeMask |= CSR_WIFI_SME_ENCRYPTION_CIPHER_GROUP_CCMP;
- }
-
- break;
-
- case IW_AUTH_KEY_MGMT:
- unifi_trace(priv, UDBG1, "IW_AUTH_KEY_MGMT: %d\n", wrqu->param.value);
- /*
- IW_AUTH_KEY_MGMT_802_1X 1
- IW_AUTH_KEY_MGMT_PSK 2
- */
- if (priv->connection_config.authModeMask & (CSR_WIFI_SME_AUTH_MODE_8021X_WPA | CSR_WIFI_SME_AUTH_MODE_8021X_WPAPSK)) {
- /* Check for explicitly set mode. */
- if (wrqu->param.value == IW_AUTH_KEY_MGMT_802_1X) {
- priv->connection_config.authModeMask &= ~CSR_WIFI_SME_AUTH_MODE_8021X_WPAPSK;
- }
- if (wrqu->param.value == IW_AUTH_KEY_MGMT_PSK) {
- priv->connection_config.authModeMask &= ~CSR_WIFI_SME_AUTH_MODE_8021X_WPA;
- }
- unifi_trace(priv, UDBG5, "IW_AUTH_KEY_MGMT: WPA: %d\n",
- priv->connection_config.authModeMask);
- }
- if (priv->connection_config.authModeMask & (CSR_WIFI_SME_AUTH_MODE_8021X_WPA2 | CSR_WIFI_SME_AUTH_MODE_8021X_WPA2PSK)) {
- /* Check for explicitly set mode. */
- if (wrqu->param.value == IW_AUTH_KEY_MGMT_802_1X) {
- priv->connection_config.authModeMask &= ~CSR_WIFI_SME_AUTH_MODE_8021X_WPA2PSK;
- }
- if (wrqu->param.value == IW_AUTH_KEY_MGMT_PSK) {
- priv->connection_config.authModeMask &= ~CSR_WIFI_SME_AUTH_MODE_8021X_WPA2;
- }
- unifi_trace(priv, UDBG5, "IW_AUTH_KEY_MGMT: WPA2: %d\n",
- priv->connection_config.authModeMask);
- }
-
- break;
- case IW_AUTH_TKIP_COUNTERMEASURES:
- /*
- * Set to true at the start of the 60 second backup-off period
- * following 2 MichaelMIC failures within 60s.
- */
- unifi_trace(priv, UDBG1, "IW_AUTH_TKIP_COUNTERMEASURES: %d\n", wrqu->param.value);
- break;
-
- case IW_AUTH_DROP_UNENCRYPTED:
- /*
- * Set to true on init.
- * Set to false just before associate if encryption will not be
- * required.
- *
- * Note this is not the same as the 802.1X controlled port
- */
- unifi_trace(priv, UDBG1, "IW_AUTH_DROP_UNENCRYPTED: %d\n", wrqu->param.value);
- break;
-
- case IW_AUTH_RX_UNENCRYPTED_EAPOL:
- /*
- * This is set by wpa_supplicant to allow unencrypted EAPOL messages
- * even if pairwise keys are set when not using WPA. IEEE 802.1X
- * specifies that these frames are not encrypted, but WPA encrypts
- * them when pairwise keys are in use.
- * I think the UniFi f/w handles this decision for us.
- */
- unifi_trace(priv, UDBG1, "IW_AUTH_RX_UNENCRYPTED_EAPOL: %d\n", wrqu->param.value);
- break;
-
- case IW_AUTH_ROAMING_CONTROL:
- unifi_trace(priv, UDBG1, "IW_AUTH_ROAMING_CONTROL: %d\n", wrqu->param.value);
- break;
-
- default:
- unifi_trace(priv, UDBG1, "Unsupported auth param %d to 0x%X\n",
- wrqu->param.flags & IW_AUTH_INDEX,
- wrqu->param.value);
- return -EOPNOTSUPP;
- }
-
- unifi_trace(priv, UDBG2, "authModeMask = %d", priv->connection_config.authModeMask);
-
- return 0;
-} /* _unifi_siwauth() */
-
-
-static int
-unifi_siwauth(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- int err = 0;
-
- UF_RTNL_UNLOCK();
- err = _unifi_siwauth(dev, info, wrqu, extra);
- UF_RTNL_LOCK();
-
- return err;
-} /* unifi_siwauth() */
-
-
-static int
-unifi_giwauth(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- unifi_trace(NULL, UDBG2, "unifi_giwauth\n");
- return -EOPNOTSUPP;
-} /* unifi_giwauth() */
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_siwencodeext
- * unifi_giwencodeext
- *
- * Handlers for SIOCSIWENCODEEXT, SIOCGIWENCODEEXT - set/get
- * encoding token & mode
- *
- * Arguments:
- * None.
- *
- * Returns:
- * None.
- *
- * Notes:
- * For WPA/WPA2 we don't take note of the IW_ENCODE_EXT_SET_TX_KEY flag.
- * This flag means "use this key to encode transmissions"; we just
- * assume only one key will be set and that is the one to use.
- * ---------------------------------------------------------------------------
- */
-static int
-_unifi_siwencodeext(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
- int r = 0;
- unsigned char *keydata;
- unsigned char tkip_key[32];
- int keyid;
- unsigned char *a = (unsigned char *)ext->addr.sa_data;
- CsrWifiSmeKey sme_key;
- CsrWifiSmeKeyType key_type;
-
- CHECK_INITED(priv);
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_siwencodeext: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- unifi_trace(priv, UDBG1, "siwencodeext: flags=0x%X, alg=%d, ext_flags=0x%X, len=%d, index=%d,\n",
- wrqu->encoding.flags, ext->alg, ext->ext_flags,
- ext->key_len, (wrqu->encoding.flags & IW_ENCODE_INDEX));
- unifi_trace(priv, UDBG3, " addr=%pM\n", a);
-
- if ((ext->key_len == 0) && (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY)) {
- /* This means use a different key (given by key_idx) for Tx. */
- /* NYI */
- unifi_trace(priv, UDBG1, KERN_ERR "unifi_siwencodeext: NYI should change tx key id here!!\n");
- return -ENOTSUPP;
- }
-
- memset(&sme_key, 0, sizeof(sme_key));
-
- keydata = (unsigned char *)(ext + 1);
- keyid = (wrqu->encoding.flags & IW_ENCODE_INDEX);
-
- /*
- * Check for request to delete keys for an address.
- */
- /* Pick out request for no privacy. */
- if (ext->alg == IW_ENCODE_ALG_NONE) {
-
- unifi_trace(priv, UDBG1, "Deleting %s key %d\n",
- (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) ? "GROUP" : "PAIRWISE",
- keyid);
-
- if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) {
- sme_key.keyType = CSR_WIFI_SME_KEY_TYPE_GROUP;
- } else {
- sme_key.keyType = CSR_WIFI_SME_KEY_TYPE_PAIRWISE;
- }
- sme_key.keyIndex = (keyid - 1);
- sme_key.keyLength = 0;
- sme_key.authenticator = 0;
- memcpy(sme_key.address.a, a, ETH_ALEN);
- UF_RTNL_UNLOCK();
- r = sme_mgt_key(priv, &sme_key, CSR_WIFI_SME_LIST_ACTION_REMOVE);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "Delete key request was rejected with result %d\n", r);
- return convert_sme_error(r);
- }
-
- return 0;
- }
-
- /*
- * Request is to set a key, not delete
- */
-
- /* Pick out WEP and use set_wep_key(). */
- if (ext->alg == IW_ENCODE_ALG_WEP) {
- /* WEP-40, WEP-104 */
-
- /* Check for valid key length */
- if (!((ext->key_len == 5) || (ext->key_len == 13))) {
- unifi_trace(priv, UDBG1, KERN_ERR "Invalid length for WEP key: %d\n", ext->key_len);
- return -EINVAL;
- }
-
- unifi_trace(priv, UDBG1, "Setting WEP key %d tx:%d\n",
- keyid, ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY);
-
- if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {
- sme_key.wepTxKey = TRUE;
- sme_key.keyType = CSR_WIFI_SME_KEY_TYPE_PAIRWISE;
- } else {
- sme_key.wepTxKey = FALSE;
- sme_key.keyType = CSR_WIFI_SME_KEY_TYPE_GROUP;
- }
- sme_key.keyIndex = (keyid - 1);
- sme_key.keyLength = ext->key_len;
- sme_key.authenticator = 0;
- memset(sme_key.address.a, 0xFF, ETH_ALEN);
- memcpy(sme_key.key, keydata, ext->key_len);
- UF_RTNL_UNLOCK();
- r = sme_mgt_key(priv, &sme_key, CSR_WIFI_SME_LIST_ACTION_ADD);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "siwencodeext: Set key failed (%d)", r);
- return convert_sme_error(r);
- }
-
- return 0;
- }
-
- /*
- *
- * If we reach here, we are dealing with a WPA/WPA2 key
- *
- */
- if (ext->key_len > 32) {
- return -EINVAL;
- }
-
- /*
- * TKIP keys from wpa_supplicant need swapping.
- * What about other supplicants (when they come along)?
- */
- if ((ext->alg == IW_ENCODE_ALG_TKIP) && (ext->key_len == 32)) {
- memcpy(tkip_key, keydata, 16);
- memcpy(tkip_key + 16, keydata + 24, 8);
- memcpy(tkip_key + 24, keydata + 16, 8);
- keydata = tkip_key;
- }
-
- key_type = (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) ?
- CSR_WIFI_SME_KEY_TYPE_GROUP : /* Group Key */
- CSR_WIFI_SME_KEY_TYPE_PAIRWISE; /* Pairwise Key */
-
- sme_key.keyType = key_type;
- sme_key.keyIndex = (keyid - 1);
- sme_key.keyLength = ext->key_len;
- sme_key.authenticator = 0;
- memcpy(sme_key.address.a, ext->addr.sa_data, ETH_ALEN);
- if (ext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) {
-
- unifi_trace(priv, UDBG5, "RSC first 6 bytes = %*phC\n",
- 6, ext->rx_seq);
-
- /* memcpy((u8*)(&sme_key.keyRsc), ext->rx_seq, 8); */
- sme_key.keyRsc[0] = ext->rx_seq[1] << 8 | ext->rx_seq[0];
- sme_key.keyRsc[1] = ext->rx_seq[3] << 8 | ext->rx_seq[2];
- sme_key.keyRsc[2] = ext->rx_seq[5] << 8 | ext->rx_seq[4];
- sme_key.keyRsc[3] = ext->rx_seq[7] << 8 | ext->rx_seq[6];
-
- }
-
- memcpy(sme_key.key, keydata, ext->key_len);
- UF_RTNL_UNLOCK();
- r = sme_mgt_key(priv, &sme_key, CSR_WIFI_SME_LIST_ACTION_ADD);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "SETKEYS request was rejected with result %d\n", r);
- return convert_sme_error(r);
- }
-
- return r;
-} /* _unifi_siwencodeext() */
-
-
-static int
-unifi_siwencodeext(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- int err = 0;
-
- err = _unifi_siwencodeext(dev, info, wrqu, extra);
-
- return err;
-} /* unifi_siwencodeext() */
-
-
-static int
-unifi_giwencodeext(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- return -EOPNOTSUPP;
-} /* unifi_giwencodeext() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_siwpmksa
- *
- * SIOCSIWPMKSA - PMKSA cache operation
- * The caller passes a pmksa structure:
- * - cmd one of ADD, REMOVE, FLUSH
- * - bssid MAC address
- * - pmkid ID string (16 bytes)
- *
- * Arguments:
- * None.
- *
- * Returns:
- * None.
- *
- * Notes:
- * This is not needed since we provide a siwgenie method.
- * ---------------------------------------------------------------------------
- */
-#define UNIFI_PMKID_KEY_SIZE 16
-static int
-unifi_siwpmksa(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
- struct iw_pmksa *pmksa = (struct iw_pmksa *)extra;
- CsrResult r = 0;
- CsrWifiSmePmkidList pmkid_list;
- CsrWifiSmePmkid pmkid;
- CsrWifiSmeListAction action;
-
- CHECK_INITED(priv);
-
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
- unifi_error(priv, "unifi_siwpmksa: not permitted in Mode %d\n",
- interfacePriv->interfaceMode);
- return -EPERM;
- }
-
-
- unifi_trace(priv, UDBG1, "SIWPMKSA: cmd %d, %pM\n", pmksa->cmd,
- pmksa->bssid.sa_data);
-
- pmkid_list.pmkids = NULL;
- switch (pmksa->cmd) {
- case IW_PMKSA_ADD:
- pmkid_list.pmkids = &pmkid;
- action = CSR_WIFI_SME_LIST_ACTION_ADD;
- pmkid_list.pmkidsCount = 1;
- memcpy(pmkid.bssid.a, pmksa->bssid.sa_data, ETH_ALEN);
- memcpy(pmkid.pmkid, pmksa->pmkid, UNIFI_PMKID_KEY_SIZE);
- break;
- case IW_PMKSA_REMOVE:
- pmkid_list.pmkids = &pmkid;
- action = CSR_WIFI_SME_LIST_ACTION_REMOVE;
- pmkid_list.pmkidsCount = 1;
- memcpy(pmkid.bssid.a, pmksa->bssid.sa_data, ETH_ALEN);
- memcpy(pmkid.pmkid, pmksa->pmkid, UNIFI_PMKID_KEY_SIZE);
- break;
- case IW_PMKSA_FLUSH:
- /* Replace current PMKID's with an empty list */
- pmkid_list.pmkidsCount = 0;
- action = CSR_WIFI_SME_LIST_ACTION_FLUSH;
- break;
- default:
- unifi_notice(priv, "SIWPMKSA: Unknown command (0x%x)\n", pmksa->cmd);
- return -EINVAL;
- }
-
- /* Set the Value the pmkid's will have 1 added OR 1 removed OR be cleared at this point */
- UF_RTNL_UNLOCK();
- r = sme_mgt_pmkid(priv, action, &pmkid_list);
- UF_RTNL_LOCK();
- if (r) {
- unifi_error(priv, "SIWPMKSA: Set PMKID's Failed.\n");
- }
-
- return r;
-
-} /* unifi_siwpmksa() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_get_wireless_stats
- *
- * get_wireless_stats method for Linux wireless extensions.
- *
- * Arguments:
- * dev Pointer to associated netdevice.
- *
- * Returns:
- * Pointer to iw_statistics struct.
- * ---------------------------------------------------------------------------
- */
-struct iw_statistics *
-unifi_get_wireless_stats(struct net_device *dev)
-{
- netInterface_priv_t *interfacePriv = (netInterface_priv_t *)netdev_priv(dev);
- unifi_priv_t *priv = interfacePriv->privPtr;
-
- if (priv->init_progress != UNIFI_INIT_COMPLETED) {
- return NULL;
- }
-
- return &priv->wext_wireless_stats;
-} /* unifi_get_wireless_stats() */
-
-
-/*
- * Structures to export the Wireless Handlers
- */
-
-static const struct iw_priv_args unifi_private_args[] = {
- /*{ cmd, set_args, get_args, name } */
- { SIOCIWS80211POWERSAVEPRIV, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
- IW_PRIV_TYPE_NONE, "iwprivs80211ps" },
- { SIOCIWG80211POWERSAVEPRIV, IW_PRIV_TYPE_NONE,
- IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | IWPRIV_POWER_SAVE_MAX_STRING, "iwprivg80211ps" },
- { SIOCIWS80211RELOADDEFAULTSPRIV, IW_PRIV_TYPE_NONE,
- IW_PRIV_TYPE_NONE, "iwprivsdefs" },
- { SIOCIWSSMEDEBUGPRIV, IW_PRIV_TYPE_CHAR | IWPRIV_SME_DEBUG_MAX_STRING, IW_PRIV_TYPE_NONE, "iwprivssmedebug" },
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- { SIOCIWSCONFWAPIPRIV, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
- IW_PRIV_TYPE_NONE, "iwprivsconfwapi" },
- { SIOCIWSWAPIKEYPRIV, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | sizeof(unifiio_wapi_key_t),
- IW_PRIV_TYPE_NONE, "iwprivswpikey" },
-#endif
-#ifdef CSR_SUPPORT_WEXT_AP
- { SIOCIWSAPCFGPRIV, IW_PRIV_TYPE_CHAR | 256, IW_PRIV_TYPE_NONE, "AP_SET_CFG" },
- { SIOCIWSAPSTARTPRIV, 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED|IWPRIV_SME_MAX_STRING, "AP_BSS_START" },
- { SIOCIWSAPSTOPPRIV, IW_PRIV_TYPE_CHAR |IW_PRIV_SIZE_FIXED|0,
- IW_PRIV_TYPE_CHAR |IW_PRIV_SIZE_FIXED|0, "AP_BSS_STOP" },
-#ifdef ANDROID_BUILD
- { SIOCIWSFWRELOADPRIV, IW_PRIV_TYPE_CHAR |256,
- IW_PRIV_TYPE_CHAR |IW_PRIV_SIZE_FIXED|0, "WL_FW_RELOAD" },
- { SIOCIWSSTACKSTART, 0,
- IW_PRIV_TYPE_CHAR |IW_PRIV_SIZE_FIXED|IWPRIV_SME_MAX_STRING, "START" },
- { SIOCIWSSTACKSTOP, 0,
- IW_PRIV_TYPE_CHAR |IW_PRIV_SIZE_FIXED|IWPRIV_SME_MAX_STRING, "STOP" },
-#endif /* ANDROID_BUILD */
-#endif /* CSR_SUPPORT_WEXT_AP */
-};
-
-static const iw_handler unifi_handler[] =
-{
- (iw_handler) unifi_siwcommit, /* SIOCSIWCOMMIT */
- (iw_handler) unifi_giwname, /* SIOCGIWNAME */
- (iw_handler) NULL, /* SIOCSIWNWID */
- (iw_handler) NULL, /* SIOCGIWNWID */
- (iw_handler) unifi_siwfreq, /* SIOCSIWFREQ */
- (iw_handler) unifi_giwfreq, /* SIOCGIWFREQ */
- (iw_handler) unifi_siwmode, /* SIOCSIWMODE */
- (iw_handler) unifi_giwmode, /* SIOCGIWMODE */
- (iw_handler) NULL, /* SIOCSIWSENS */
- (iw_handler) NULL, /* SIOCGIWSENS */
- (iw_handler) NULL, /* SIOCSIWRANGE */
- (iw_handler) unifi_giwrange, /* SIOCGIWRANGE */
- (iw_handler) NULL, /* SIOCSIWPRIV */
- (iw_handler) NULL, /* SIOCGIWPRIV */
- (iw_handler) NULL, /* SIOCSIWSTATS */
- (iw_handler) NULL, /* SIOCGIWSTATS */
- (iw_handler) NULL, /* SIOCSIWSPY */
- (iw_handler) NULL, /* SIOCGIWSPY */
- (iw_handler) NULL, /* SIOCSIWTHRSPY */
- (iw_handler) NULL, /* SIOCGIWTHRSPY */
- (iw_handler) unifi_siwap, /* SIOCSIWAP */
- (iw_handler) unifi_giwap, /* SIOCGIWAP */
-#if WIRELESS_EXT > 17
- /* WPA : IEEE 802.11 MLME requests */
- unifi_siwmlme, /* SIOCSIWMLME, request MLME operation */
-#else
- (iw_handler) NULL, /* -- hole -- */
-#endif
- (iw_handler) NULL, /* SIOCGIWAPLIST */
- (iw_handler) unifi_siwscan, /* SIOCSIWSCAN */
- (iw_handler) unifi_giwscan, /* SIOCGIWSCAN */
- (iw_handler) unifi_siwessid, /* SIOCSIWESSID */
- (iw_handler) unifi_giwessid, /* SIOCGIWESSID */
- (iw_handler) NULL, /* SIOCSIWNICKN */
- (iw_handler) NULL, /* SIOCGIWNICKN */
- (iw_handler) NULL, /* -- hole -- */
- (iw_handler) NULL, /* -- hole -- */
- unifi_siwrate, /* SIOCSIWRATE */
- unifi_giwrate, /* SIOCGIWRATE */
- unifi_siwrts, /* SIOCSIWRTS */
- unifi_giwrts, /* SIOCGIWRTS */
- unifi_siwfrag, /* SIOCSIWFRAG */
- unifi_giwfrag, /* SIOCGIWFRAG */
- (iw_handler) NULL, /* SIOCSIWTXPOW */
- (iw_handler) NULL, /* SIOCGIWTXPOW */
- (iw_handler) NULL, /* SIOCSIWRETRY */
- (iw_handler) NULL, /* SIOCGIWRETRY */
- unifi_siwencode, /* SIOCSIWENCODE */
- unifi_giwencode, /* SIOCGIWENCODE */
- unifi_siwpower, /* SIOCSIWPOWER */
- unifi_giwpower, /* SIOCGIWPOWER */
-#if WIRELESS_EXT > 17
- (iw_handler) NULL, /* -- hole -- */
- (iw_handler) NULL, /* -- hole -- */
-
- /* WPA : Generic IEEE 802.11 informatiom element (e.g., for WPA/RSN/WMM). */
- unifi_siwgenie, /* SIOCSIWGENIE */ /* set generic IE */
- unifi_giwgenie, /* SIOCGIWGENIE */ /* get generic IE */
-
- /* WPA : Authentication mode parameters */
- unifi_siwauth, /* SIOCSIWAUTH */ /* set authentication mode params */
- unifi_giwauth, /* SIOCGIWAUTH */ /* get authentication mode params */
-
- /* WPA : Extended version of encoding configuration */
- unifi_siwencodeext, /* SIOCSIWENCODEEXT */ /* set encoding token & mode */
- unifi_giwencodeext, /* SIOCGIWENCODEEXT */ /* get encoding token & mode */
-
- /* WPA2 : PMKSA cache management */
- unifi_siwpmksa, /* SIOCSIWPMKSA */ /* PMKSA cache operation */
- (iw_handler) NULL, /* -- hole -- */
-#endif /* WIRELESS_EXT > 17 */
-};
-
-
-static const iw_handler unifi_private_handler[] =
-{
- iwprivs80211ps, /* SIOCIWFIRSTPRIV */
- iwprivg80211ps, /* SIOCIWFIRSTPRIV + 1 */
- iwprivsdefs, /* SIOCIWFIRSTPRIV + 2 */
- (iw_handler) NULL,
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- iwprivsconfwapi, /* SIOCIWFIRSTPRIV + 4 */
- (iw_handler) NULL, /* SIOCIWFIRSTPRIV + 5 */
- iwprivswpikey, /* SIOCIWFIRSTPRIV + 6 */
-#else
- (iw_handler) NULL,
- (iw_handler) NULL,
- (iw_handler) NULL,
-#endif
- (iw_handler) NULL,
- iwprivssmedebug, /* SIOCIWFIRSTPRIV + 8 */
-#ifdef CSR_SUPPORT_WEXT_AP
- (iw_handler) NULL,
- iwprivsapconfig,
- (iw_handler) NULL,
- iwprivsapstart,
- (iw_handler) NULL,
- iwprivsapstop,
- (iw_handler) NULL,
-#ifdef ANDROID_BUILD
- iwprivsapfwreload,
- (iw_handler) NULL,
- iwprivsstackstart,
- (iw_handler) NULL,
- iwprivsstackstop,
-#else
- (iw_handler) NULL,
- (iw_handler) NULL,
- (iw_handler) NULL,
- (iw_handler) NULL,
- (iw_handler) NULL,
-#endif /* ANDROID_BUILD */
-#else
- (iw_handler) NULL,
- (iw_handler) NULL,
- (iw_handler) NULL,
- (iw_handler) NULL,
- (iw_handler) NULL,
- (iw_handler) NULL,
- (iw_handler) NULL,
- (iw_handler) NULL,
- (iw_handler) NULL,
- (iw_handler) NULL,
- (iw_handler) NULL,
- (iw_handler) NULL,
-#endif /* CSR_SUPPORT_WEXT_AP */
-};
-
-struct iw_handler_def unifi_iw_handler_def =
-{
- .num_standard = sizeof(unifi_handler) / sizeof(iw_handler),
- .num_private = sizeof(unifi_private_handler) / sizeof(iw_handler),
- .num_private_args = sizeof(unifi_private_args) / sizeof(struct iw_priv_args),
- .standard = (iw_handler *) unifi_handler,
- .private = (iw_handler *) unifi_private_handler,
- .private_args = (struct iw_priv_args *) unifi_private_args,
-#if IW_HANDLER_VERSION >= 6
- .get_wireless_stats = unifi_get_wireless_stats,
-#endif
-};
-
-
diff --git a/drivers/staging/csr/ul_int.c b/drivers/staging/csr/ul_int.c
deleted file mode 100644
index eb286e5f7467..000000000000
--- a/drivers/staging/csr/ul_int.c
+++ /dev/null
@@ -1,528 +0,0 @@
-/*
- * ***************************************************************************
- * FILE: ul_int.c
- *
- * PURPOSE:
- * Manage list of client applications using UniFi.
- *
- * Copyright (C) 2006-2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ***************************************************************************
- */
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_conversions.h"
-#include "unifi_priv.h"
-#include "unifiio.h"
-#include "unifi_os.h"
-
-static void free_bulkdata_buffers(unifi_priv_t *priv, bulk_data_param_t *bulkdata);
-static void reset_driver_status(unifi_priv_t *priv);
-
-/*
- * ---------------------------------------------------------------------------
- * ul_init_clients
- *
- * Initialise the clients array to empty.
- *
- * Arguments:
- * priv Pointer to device private context struct
- *
- * Returns:
- * None.
- *
- * Notes:
- * This function needs to be called before priv is stored in
- * Unifi_instances[].
- * ---------------------------------------------------------------------------
- */
-void
-ul_init_clients(unifi_priv_t *priv)
-{
- int id;
- ul_client_t *ul_clients;
-
- sema_init(&priv->udi_logging_mutex, 1);
- priv->logging_client = NULL;
-
- ul_clients = priv->ul_clients;
-
- for (id = 0; id < MAX_UDI_CLIENTS; id++) {
- memset(&ul_clients[id], 0, sizeof(ul_client_t));
-
- ul_clients[id].client_id = id;
- ul_clients[id].sender_id = UDI_SENDER_ID_BASE + (id << UDI_SENDER_ID_SHIFT);
- ul_clients[id].instance = -1;
- ul_clients[id].event_hook = NULL;
-
- INIT_LIST_HEAD(&ul_clients[id].udi_log);
- init_waitqueue_head(&ul_clients[id].udi_wq);
- sema_init(&ul_clients[id].udi_sem, 1);
-
- ul_clients[id].wake_up_wq_id = 0;
- ul_clients[id].seq_no = 0;
- ul_clients[id].wake_seq_no = 0;
- ul_clients[id].snap_filter.count = 0;
- }
-} /* ul_init_clients() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * ul_register_client
- *
- * This function registers a new ul client.
- *
- * Arguments:
- * priv Pointer to device private context struct
- * configuration Special configuration for the client.
- * udi_event_clbk Callback for receiving event from unifi.
- *
- * Returns:
- * 0 if a new clients is registered, -1 otherwise.
- * ---------------------------------------------------------------------------
- */
-ul_client_t *
-ul_register_client(unifi_priv_t *priv, unsigned int configuration,
- udi_event_t udi_event_clbk)
-{
- unsigned char id, ref;
- ul_client_t *ul_clients;
-
- ul_clients = priv->ul_clients;
-
- /* check for an unused entry */
- for (id = 0; id < MAX_UDI_CLIENTS; id++) {
- if (ul_clients[id].udi_enabled == 0) {
- ul_clients[id].instance = priv->instance;
- ul_clients[id].udi_enabled = 1;
- ul_clients[id].configuration = configuration;
-
- /* Allocate memory for the reply signal.. */
- ul_clients[id].reply_signal = kmalloc(sizeof(CSR_SIGNAL), GFP_KERNEL);
- if (ul_clients[id].reply_signal == NULL) {
- unifi_error(priv, "Failed to allocate reply signal for client.\n");
- return NULL;
- }
- /* .. and the bulk data of the reply signal. */
- for (ref = 0; ref < UNIFI_MAX_DATA_REFERENCES; ref ++) {
- ul_clients[id].reply_bulkdata[ref] = kmalloc(sizeof(bulk_data_t), GFP_KERNEL);
- /* If allocation fails, free allocated memory. */
- if (ul_clients[id].reply_bulkdata[ref] == NULL) {
- for (; ref > 0; ref --) {
- kfree(ul_clients[id].reply_bulkdata[ref - 1]);
- }
- kfree(ul_clients[id].reply_signal);
- unifi_error(priv, "Failed to allocate bulk data buffers for client.\n");
- return NULL;
- }
- }
-
- /* Set the event callback. */
- ul_clients[id].event_hook = udi_event_clbk;
-
- unifi_trace(priv, UDBG2, "UDI %d (0x%x) registered. configuration = 0x%x\n",
- id, &ul_clients[id], configuration);
- return &ul_clients[id];
- }
- }
- return NULL;
-} /* ul_register_client() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * ul_deregister_client
- *
- * This function deregisters a blocking UDI client.
- *
- * Arguments:
- * client Pointer to the client we deregister.
- *
- * Returns:
- * 0 if a new clients is deregistered.
- * ---------------------------------------------------------------------------
- */
-int
-ul_deregister_client(ul_client_t *ul_client)
-{
- struct list_head *pos, *n;
- udi_log_t *logptr;
- unifi_priv_t *priv = uf_find_instance(ul_client->instance);
- int ref;
-
- ul_client->instance = -1;
- ul_client->event_hook = NULL;
- ul_client->udi_enabled = 0;
- unifi_trace(priv, UDBG5, "UDI (0x%x) deregistered.\n", ul_client);
-
- /* Free memory allocated for the reply signal and its bulk data. */
- kfree(ul_client->reply_signal);
- for (ref = 0; ref < UNIFI_MAX_DATA_REFERENCES; ref ++) {
- kfree(ul_client->reply_bulkdata[ref]);
- }
-
- if (ul_client->snap_filter.count) {
- ul_client->snap_filter.count = 0;
- kfree(ul_client->snap_filter.protocols);
- }
-
- /* Free anything pending on the udi_log list */
- down(&ul_client->udi_sem);
- list_for_each_safe(pos, n, &ul_client->udi_log)
- {
- logptr = list_entry(pos, udi_log_t, q);
- list_del(pos);
- kfree(logptr);
- }
- up(&ul_client->udi_sem);
-
- return 0;
-} /* ul_deregister_client() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * logging_handler
- *
- * This function is registered with the driver core.
- * It is called every time a UniFi HIP Signal is sent. It iterates over
- * the list of processes interested in receiving log events and
- * delivers the events to them.
- *
- * Arguments:
- * ospriv Pointer to driver's private data.
- * sigdata Pointer to the packed signal buffer.
- * signal_len Length of the packed signal.
- * bulkdata Pointer to the signal's bulk data.
- * dir Direction of the signal
- * 0 = from-host
- * 1 = to-host
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void
-logging_handler(void *ospriv,
- u8 *sigdata, u32 signal_len,
- const bulk_data_param_t *bulkdata,
- enum udi_log_direction direction)
-{
- unifi_priv_t *priv = (unifi_priv_t*)ospriv;
- ul_client_t *client;
- int dir;
-
- dir = (direction == UDI_LOG_FROM_HOST) ? UDI_FROM_HOST : UDI_TO_HOST;
-
- down(&priv->udi_logging_mutex);
- client = priv->logging_client;
- if (client != NULL) {
- client->event_hook(client, sigdata, signal_len,
- bulkdata, dir);
- }
- up(&priv->udi_logging_mutex);
-
-} /* logging_handler() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * ul_log_config_ind
- *
- * This function uses the client's register callback
- * to indicate configuration information e.g core errors.
- *
- * Arguments:
- * priv Pointer to driver's private data.
- * conf_param Pointer to the configuration data.
- * len Length of the configuration data.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void
-ul_log_config_ind(unifi_priv_t *priv, u8 *conf_param, int len)
-{
-#ifdef CSR_SUPPORT_SME
- if (priv->smepriv == NULL)
- {
- return;
- }
- if ((CONFIG_IND_ERROR == (*conf_param)) && (priv->wifi_on_state == wifi_on_in_progress)) {
- unifi_notice(priv, "ul_log_config_ind: wifi on in progress, suppress error\n");
- } else {
- /* wifi_off_ind (error or exit) */
- CsrWifiRouterCtrlWifiOffIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, (CsrWifiRouterCtrlControlIndication)(*conf_param));
- }
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
- unifi_debug_buf_dump();
-#endif
-#else
- bulk_data_param_t bulkdata;
-
- /*
- * If someone killed unifi_managed before the driver was unloaded
- * the g_drvpriv pointer is going to be NULL. In this case it is
- * safe to assume that there is no client to get the indication.
- */
- if (!priv) {
- unifi_notice(NULL, "uf_sme_event_ind: NULL priv\n");
- return;
- }
-
- /* Create a null bulkdata structure. */
- bulkdata.d[0].data_length = 0;
- bulkdata.d[1].data_length = 0;
-
- sme_native_log_event(priv->sme_cli, conf_param, sizeof(u8),
- &bulkdata, UDI_CONFIG_IND);
-
-#endif /* CSR_SUPPORT_SME */
-
-} /* ul_log_config_ind */
-
-
-/*
- * ---------------------------------------------------------------------------
- * free_bulkdata_buffers
- *
- * Free the bulkdata buffers e.g. after a failed unifi_send_signal().
- *
- * Arguments:
- * priv Pointer to device private struct
- * bulkdata Pointer to bulkdata parameter table
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static void
-free_bulkdata_buffers(unifi_priv_t *priv, bulk_data_param_t *bulkdata)
-{
- int i;
-
- if (bulkdata) {
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; ++i) {
- if (bulkdata->d[i].data_length != 0) {
- unifi_net_data_free(priv, (bulk_data_desc_t *)(&bulkdata->d[i]));
- /* data_length is now 0 */
- }
- }
- }
-
-} /* free_bulkdata_buffers */
-
-static int
-_align_bulk_data_buffers(unifi_priv_t *priv, u8 *signal,
- bulk_data_param_t *bulkdata)
-{
- unsigned int i;
-
- if ((bulkdata == NULL) || (CSR_WIFI_ALIGN_BYTES == 0)) {
- return 0;
- }
-
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++)
- {
- struct sk_buff *skb;
- /*
- * The following complex casting is in place in order to eliminate 64-bit compilation warning
- * "cast to/from pointer from/to integer of different size"
- */
- u32 align_offset = (u32)(long)(bulkdata->d[i].os_data_ptr) & (CSR_WIFI_ALIGN_BYTES-1);
- if (align_offset)
- {
- skb = (struct sk_buff*)bulkdata->d[i].os_net_buf_ptr;
- if (skb == NULL) {
- unifi_warning(priv,
- "_align_bulk_data_buffers: Align offset found (%d) but skb is NULL!\n",
- align_offset);
- return -EINVAL;
- }
- if (bulkdata->d[i].data_length == 0) {
- unifi_warning(priv,
- "_align_bulk_data_buffers: Align offset found (%d) but length is zero\n",
- align_offset);
- return CSR_RESULT_SUCCESS;
- }
- unifi_trace(priv, UDBG5,
- "Align f-h buffer (0x%p) by %d bytes (skb->data: 0x%p)\n",
- bulkdata->d[i].os_data_ptr, align_offset, skb->data);
-
-
- /* Check if there is enough headroom... */
- if (unlikely(skb_headroom(skb) < align_offset))
- {
- struct sk_buff *tmp = skb;
-
- unifi_trace(priv, UDBG5, "Headroom not enough - realloc it\n");
- skb = skb_realloc_headroom(skb, align_offset);
- if (skb == NULL) {
- unifi_error(priv,
- "_align_bulk_data_buffers: skb_realloc_headroom failed - signal is dropped\n");
- return -EFAULT;
- }
- /* Free the old bulk data only if allocation succeeds */
- kfree_skb(tmp);
- /* Bulkdata needs to point to the new skb */
- bulkdata->d[i].os_net_buf_ptr = (const unsigned char*)skb;
- bulkdata->d[i].os_data_ptr = (const void*)skb->data;
- }
- /* ... before pushing the data to the right alignment offset */
- skb_push(skb, align_offset);
-
- }
- /* The direction bit is zero for the from-host */
- signal[SIZEOF_SIGNAL_HEADER + (i * SIZEOF_DATAREF) + 1] = align_offset;
-
- }
- return 0;
-} /* _align_bulk_data_buffers() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * ul_send_signal_unpacked
- *
- * This function sends a host formatted signal to unifi.
- *
- * Arguments:
- * priv Pointer to driver's private data.
- * sigptr Pointer to the signal.
- * bulkdata Pointer to the signal's bulk data.
- *
- * Returns:
- * O on success, error code otherwise.
- *
- * Notes:
- * The signals have to be sent in the format described in the host interface
- * specification, i.e wire formatted. Certain clients use the host formatted
- * structures. The write_pack() transforms the host formatted signal
- * into the wired formatted signal. The code is in the core, since the signals
- * are defined therefore binded to the host interface specification.
- * ---------------------------------------------------------------------------
- */
-int
-ul_send_signal_unpacked(unifi_priv_t *priv, CSR_SIGNAL *sigptr,
- bulk_data_param_t *bulkdata)
-{
- u8 sigbuf[UNIFI_PACKED_SIGBUF_SIZE];
- u16 packed_siglen;
- CsrResult csrResult;
- unsigned long lock_flags;
- int r;
-
-
- csrResult = write_pack(sigptr, sigbuf, &packed_siglen);
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "Malformed HIP signal in ul_send_signal_unpacked()\n");
- return CsrHipResultToStatus(csrResult);
- }
- r = _align_bulk_data_buffers(priv, sigbuf, (bulk_data_param_t*)bulkdata);
- if (r) {
- return r;
- }
-
- spin_lock_irqsave(&priv->send_signal_lock, lock_flags);
- csrResult = unifi_send_signal(priv->card, sigbuf, packed_siglen, bulkdata);
- if (csrResult != CSR_RESULT_SUCCESS) {
- /* free_bulkdata_buffers(priv, (bulk_data_param_t *)bulkdata); */
- spin_unlock_irqrestore(&priv->send_signal_lock, lock_flags);
- return CsrHipResultToStatus(csrResult);
- }
- spin_unlock_irqrestore(&priv->send_signal_lock, lock_flags);
-
- return 0;
-} /* ul_send_signal_unpacked() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * reset_driver_status
- *
- * This function is called from ul_send_signal_raw() when it detects
- * that the SME has sent a MLME-RESET request.
- *
- * Arguments:
- * priv Pointer to device private struct
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-static void
-reset_driver_status(unifi_priv_t *priv)
-{
- priv->sta_wmm_capabilities = 0;
-#ifdef CSR_NATIVE_LINUX
-#ifdef CSR_SUPPORT_WEXT
- priv->wext_conf.flag_associated = 0;
- priv->wext_conf.block_controlled_port = CSR_WIFI_ROUTER_PORT_ACTION_8021X_PORT_OPEN;
- priv->wext_conf.bss_wmm_capabilities = 0;
- priv->wext_conf.disable_join_on_ssid_set = 0;
-#endif
-#endif
-} /* reset_driver_status() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * ul_send_signal_raw
- *
- * This function sends a wire formatted data signal to unifi.
- *
- * Arguments:
- * priv Pointer to driver's private data.
- * sigptr Pointer to the signal.
- * siglen Length of the signal.
- * bulkdata Pointer to the signal's bulk data.
- *
- * Returns:
- * O on success, error code otherwise.
- * ---------------------------------------------------------------------------
- */
-int
-ul_send_signal_raw(unifi_priv_t *priv, unsigned char *sigptr, int siglen,
- bulk_data_param_t *bulkdata)
-{
- CsrResult csrResult;
- unsigned long lock_flags;
- int r;
-
- /*
- * Make sure that the signal is updated with the bulk data
- * alignment for DMA.
- */
- r = _align_bulk_data_buffers(priv, (u8*)sigptr, bulkdata);
- if (r) {
- return r;
- }
-
- spin_lock_irqsave(&priv->send_signal_lock, lock_flags);
- csrResult = unifi_send_signal(priv->card, sigptr, siglen, bulkdata);
- if (csrResult != CSR_RESULT_SUCCESS) {
- free_bulkdata_buffers(priv, bulkdata);
- spin_unlock_irqrestore(&priv->send_signal_lock, lock_flags);
- return CsrHipResultToStatus(csrResult);
- }
- spin_unlock_irqrestore(&priv->send_signal_lock, lock_flags);
-
- /*
- * Since this is use by unicli, if we get an MLME reset request
- * we need to initialize a few status parameters
- * that the driver uses to make decisions.
- */
- if (GET_SIGNAL_ID(sigptr) == CSR_MLME_RESET_REQUEST_ID) {
- reset_driver_status(priv);
- }
-
- return 0;
-} /* ul_send_signal_raw() */
-
-
diff --git a/drivers/staging/csr/unifi_clients.h b/drivers/staging/csr/unifi_clients.h
deleted file mode 100644
index df853e160ea5..000000000000
--- a/drivers/staging/csr/unifi_clients.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- *****************************************************************************
- *
- * FILE : unifi_clients.h
- *
- * PURPOSE : Private header file for unifi clients.
- *
- * UDI = UniFi Debug Interface
- *
- * Copyright (C) 2005-2008 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- *****************************************************************************
- */
-#ifndef __LINUX_UNIFI_CLIENTS_H__
-#define __LINUX_UNIFI_CLIENTS_H__ 1
-
-#include <linux/kernel.h>
-
-#define MAX_UDI_CLIENTS 8
-
-/* The start of the range of process ids allocated for ul clients */
-#define UDI_SENDER_ID_BASE 0xC000
-#define UDI_SENDER_ID_SHIFT 8
-
-
-/* Structure to hold a UDI logged signal */
-typedef struct {
-
- /* List link structure */
- struct list_head q;
-
- /* The message that will be passed to the user app */
- udi_msg_t msg;
-
- /* Signal body and data follow */
-
-} udi_log_t;
-
-
-
-typedef struct ul_client ul_client_t;
-
-typedef void (*udi_event_t)(ul_client_t *client,
- const u8 *sigdata, int signal_len,
- const bulk_data_param_t *bulkdata,
- int dir);
-
-void logging_handler(void *ospriv,
- u8 *sigdata, u32 signal_len,
- const bulk_data_param_t *bulkdata,
- enum udi_log_direction direction);
-
-
-/*
- * Structure describing a bulk data slot.
- * The length field is used to indicate empty/occupied state.
- */
-typedef struct _bulk_data
-{
- unsigned char ptr[2000];
- unsigned int length;
-} bulk_data_t;
-
-
-struct ul_client {
- /* Index of this client in the ul_clients array. */
- int client_id;
-
- /* Index of UniFi device to which this client is attached. */
- int instance;
-
- /* Flag to say whether this client has been enabled. */
- int udi_enabled;
-
- /* Value to use in signal->SenderProcessId */
- int sender_id;
-
- /* Configuration flags, e.g blocking, logging, etc. */
- unsigned int configuration;
-
- udi_event_t event_hook;
-
- /* A list to hold signals received from UniFi for reading by read() */
- struct list_head udi_log;
-
- /* Semaphore to protect the udi_log list */
- struct semaphore udi_sem;
-
- /*
- * Linux waitqueue to support blocking read and poll.
- * Logging clients should wait on udi_log. while
- * blocking clients should wait on wake_up_wq.
- */
- wait_queue_head_t udi_wq;
- CSR_SIGNAL* reply_signal;
- bulk_data_t* reply_bulkdata[UNIFI_MAX_DATA_REFERENCES];
-
- u16 signal_filter[SIG_FILTER_SIZE];
-
-
- /* ------------------------------------------------------------------- */
- /* Code below here is used by the sme_native configuration only */
-
- /* Flag to wake up blocking clients waiting on udi_wq. */
- int wake_up_wq_id;
-
- /*
- * A 0x00 - 0x0F mask to apply in signal->SenderProcessId.
- * Every time we do a blocking mlme request we increase this value.
- * The mlme_wait_for_reply() will wait for this sequence number.
- * Only the MLME blocking functions update this field.
- */
- unsigned char seq_no;
-
- /*
- * A 0x00 - 0x0F counter, containing the sequence number of
- * the signal that this client has last received.
- * Only the MLME blocking functions update this field.
- */
- unsigned char wake_seq_no;
-
- unifiio_snap_filter_t snap_filter;
-}; /* struct ul_client */
-
-
-#endif /* __LINUX_UNIFI_CLIENTS_H__ */
diff --git a/drivers/staging/csr/unifi_config.h b/drivers/staging/csr/unifi_config.h
deleted file mode 100644
index fe119707844a..000000000000
--- a/drivers/staging/csr/unifi_config.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- *
- * FILE: unifi_config.h
- *
- * PURPOSE:
- * This header file provides parameters that configure the operation
- * of the driver.
- *
- * Copyright (C) 2006-2008 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-#ifndef __UNIFI_CONFIG_H__
-#define __UNIFI_CONFIG_H__ 1
-
-/*
- * Override for the SDIO function block size on this host. When byte mode CMD53s
- * are not used/supported by the SD host controller, transfers are padded up to
- * the next block boundary. The 512-byte default on UF6xxx wastes too much space
- * on the chip, so the block size is reduced to support this configuration.
- */
-#define CSR_WIFI_HIP_SDIO_BLOCK_SIZE 64
-
-/* Define the number of mini-coredump buffers to allocate at startup. These are
- * used to record chip status for the last n unexpected resets.
- */
-#define CSR_WIFI_HIP_NUM_COREDUMP_BUFFERS 5
-
-
-#endif /* __UNIFI_CONFIG_H__ */
diff --git a/drivers/staging/csr/unifi_dbg.c b/drivers/staging/csr/unifi_dbg.c
deleted file mode 100644
index 38d57085a26a..000000000000
--- a/drivers/staging/csr/unifi_dbg.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * ***************************************************************************
- * FILE: unifi_dbg.c
- *
- * PURPOSE:
- * Handle debug signals received from UniFi.
- *
- * Copyright (C) 2007-2008 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ***************************************************************************
- */
-#include "unifi_priv.h"
-
-/*
- * ---------------------------------------------------------------------------
- * debug_string_indication
- * debug_word16_indication
- *
- * Handlers for debug indications.
- *
- * Arguments:
- * priv Pointer to private context structure.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void
-debug_string_indication(unifi_priv_t *priv, const unsigned char *extra, unsigned int extralen)
-{
- const unsigned int maxlen = sizeof(priv->last_debug_string) - 1;
-
- if (extralen > maxlen) {
- extralen = maxlen;
- }
-
- strncpy(priv->last_debug_string, extra, extralen);
-
- /* Make sure the string is terminated */
- priv->last_debug_string[extralen] = '\0';
-
- unifi_info(priv, "unifi debug: %s\n", priv->last_debug_string);
-
-} /* debug_string_indication() */
-
-
-
-void
-debug_word16_indication(unifi_priv_t *priv, const CSR_SIGNAL *sigptr)
-{
- int i;
-
- if (priv == NULL) {
- unifi_info(priv, "Priv is NULL\n");
- return;
- }
-
- for (i = 0; i < 16; i++) {
- priv->last_debug_word16[i] =
- sigptr->u.DebugWord16Indication.DebugWords[i];
- }
-
- if (priv->last_debug_word16[0] == 0xFA11) {
- unsigned long ts;
- ts = (priv->last_debug_word16[6] << 16) | priv->last_debug_word16[5];
- unifi_info(priv, " %10lu: %s fault %04x, arg %04x (x%d)\n",
- ts,
- priv->last_debug_word16[3] == 0x8000 ? "MAC" :
- priv->last_debug_word16[3] == 0x4000 ? "PHY" :
- "???",
- priv->last_debug_word16[1],
- priv->last_debug_word16[2],
- priv->last_debug_word16[4]);
- }
- else if (priv->last_debug_word16[0] != 0xDBAC)
- /* suppress SDL Trace output (note: still available to unicli). */
- {
- unifi_info(priv, "unifi debug: %04X %04X %04X %04X %04X %04X %04X %04X\n",
- priv->last_debug_word16[0], priv->last_debug_word16[1],
- priv->last_debug_word16[2], priv->last_debug_word16[3],
- priv->last_debug_word16[4], priv->last_debug_word16[5],
- priv->last_debug_word16[6], priv->last_debug_word16[7]);
- unifi_info(priv, " %04X %04X %04X %04X %04X %04X %04X %04X\n",
- priv->last_debug_word16[8], priv->last_debug_word16[9],
- priv->last_debug_word16[10], priv->last_debug_word16[11],
- priv->last_debug_word16[12], priv->last_debug_word16[13],
- priv->last_debug_word16[14], priv->last_debug_word16[15]);
- }
-
-} /* debug_word16_indication() */
-
-
-void
-debug_generic_indication(unifi_priv_t *priv, const CSR_SIGNAL *sigptr)
-{
- unifi_info(priv, "debug: %04X %04X %04X %04X %04X %04X %04X %04X\n",
- sigptr->u.DebugGenericIndication.DebugWords[0],
- sigptr->u.DebugGenericIndication.DebugWords[1],
- sigptr->u.DebugGenericIndication.DebugWords[2],
- sigptr->u.DebugGenericIndication.DebugWords[3],
- sigptr->u.DebugGenericIndication.DebugWords[4],
- sigptr->u.DebugGenericIndication.DebugWords[5],
- sigptr->u.DebugGenericIndication.DebugWords[6],
- sigptr->u.DebugGenericIndication.DebugWords[7]);
-
-} /* debug_generic_indication() */
-
diff --git a/drivers/staging/csr/unifi_event.c b/drivers/staging/csr/unifi_event.c
deleted file mode 100644
index 71fdb2180e3d..000000000000
--- a/drivers/staging/csr/unifi_event.c
+++ /dev/null
@@ -1,692 +0,0 @@
-/*
- * ***************************************************************************
- * FILE: unifi_event.c
- *
- * PURPOSE:
- * Process the signals received by UniFi.
- * It is part of the porting exercise.
- *
- * Copyright (C) 2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ***************************************************************************
- */
-
-
-/*
- * Porting notes:
- * The implementation of unifi_receive_event() in Linux is fairly complicated.
- * The linux driver support multiple userspace applications and several
- * build configurations, so the received signals are processed by different
- * processes and multiple times.
- * In a simple implementation, this function needs to deliver:
- * - The MLME-UNITDATA.ind signals to the Rx data plane and to the Traffic
- * Analysis using unifi_ta_sample().
- * - The MLME-UNITDATA-STATUS.ind signals to the Tx data plane.
- * - All the other signals to the SME using unifi_sys_hip_ind().
- */
-
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_conversions.h"
-#include "unifi_priv.h"
-
-
-/*
- * ---------------------------------------------------------------------------
- * send_to_client
- *
- * Helper for unifi_receive_event.
- *
- * This function forwards a signal to one client.
- *
- * Arguments:
- * priv Pointer to driver's private data.
- * client Pointer to the client structure.
- * receiver_id The reciever id of the signal.
- * sigdata Pointer to the packed signal buffer.
- * siglen Length of the packed signal.
- * bulkdata Pointer to the signal's bulk data.
- *
- * Returns:
- * None.
- *
- * ---------------------------------------------------------------------------
- */
-static void send_to_client(unifi_priv_t *priv, ul_client_t *client,
- int receiver_id,
- unsigned char *sigdata, int siglen,
- const bulk_data_param_t *bulkdata)
-{
- if (client && client->event_hook) {
- /*unifi_trace(priv, UDBG3,
- "Receive: client %d, (s:0x%X, r:0x%X) - Signal 0x%.4X \n",
- client->client_id, client->sender_id, receiver_id,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN(sigdata));*/
-
- client->event_hook(client, sigdata, siglen, bulkdata, UDI_TO_HOST);
- }
-}
-
-/*
- * ---------------------------------------------------------------------------
- * process_pkt_data_ind
- *
- * Dispatcher for received signals.
- *
- * This function receives the 'to host' signals and forwards
- * them to the unifi linux clients.
- *
- * Arguments:
- * priv Context
- * sigdata Pointer to the packed signal buffer(Its in form of MA-PACKET.ind).
- * bulkdata Pointer to signal's bulkdata
- * freeBulkData Pointer to a flag which gets set if the bulkdata needs to
- * be freed after calling the logging handlers. If it is not
- * set the bulkdata must be freed by the MLME handler or
- * passed to the network stack.
- * Returns:
- * TRUE if the packet should be routed to the SME etc.
- * FALSE if the packet is for the driver or network stack
- * ---------------------------------------------------------------------------
- */
-static u8 check_routing_pkt_data_ind(unifi_priv_t *priv,
- u8 *sigdata,
- const bulk_data_param_t* bulkdata,
- u8 *freeBulkData,
- netInterface_priv_t *interfacePriv)
-{
- u16 frmCtrl, receptionStatus, frmCtrlSubType;
- u8 *macHdrLocation;
- u8 interfaceTag;
- u8 isDataFrame;
- u8 isProtocolVerInvalid = FALSE;
- u8 isDataFrameSubTypeNoData = FALSE;
-
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- static const u8 wapiProtocolIdSNAPHeader[] = {0x88, 0xb4};
- static const u8 wapiProtocolIdSNAPHeaderOffset = 6;
- u8 *destAddr;
- u8 *srcAddr;
- u8 isWapiUnicastPkt = FALSE;
-
-#ifdef CSR_WIFI_SECURITY_WAPI_QOSCTRL_MIC_WORKAROUND
- u16 qosControl;
-#endif
-
- u8 llcSnapHeaderOffset = 0;
-
- destAddr = (u8 *) bulkdata->d[0].os_data_ptr + MAC_HEADER_ADDR1_OFFSET;
- srcAddr = (u8 *) bulkdata->d[0].os_data_ptr + MAC_HEADER_ADDR2_OFFSET;
-
- /*Individual/Group bit - Bit 0 of first byte*/
- isWapiUnicastPkt = (!(destAddr[0] & 0x01)) ? TRUE : FALSE;
-#endif
-
-#define CSR_WIFI_MA_PKT_IND_RECEPTION_STATUS_OFFSET sizeof(CSR_SIGNAL_PRIMITIVE_HEADER) + 22
-
- *freeBulkData = FALSE;
-
- /* Fetch the MAC header location from MA_PKT_IND packet */
- macHdrLocation = (u8 *) bulkdata->d[0].os_data_ptr;
- /* Fetch the Frame Control value from MAC header */
- frmCtrl = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(macHdrLocation);
-
- /* Pull out interface tag from virtual interface identifier */
- interfaceTag = (CSR_GET_UINT16_FROM_LITTLE_ENDIAN(sigdata + 14)) & 0xff;
-
- /* check for MIC failure before processing the signal */
- receptionStatus = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(sigdata + CSR_WIFI_MA_PKT_IND_RECEPTION_STATUS_OFFSET);
-
- /* To discard any spurious MIC failures that could be reported by the firmware */
- isDataFrame = ((frmCtrl & IEEE80211_FC_TYPE_MASK) == (IEEE802_11_FC_TYPE_DATA & IEEE80211_FC_TYPE_MASK)) ? TRUE : FALSE;
- /* 0x00 is the only valid protocol version*/
- isProtocolVerInvalid = (frmCtrl & IEEE80211_FC_PROTO_VERSION_MASK) ? TRUE : FALSE;
- frmCtrlSubType = (frmCtrl & IEEE80211_FC_SUBTYPE_MASK) >> FRAME_CONTROL_SUBTYPE_FIELD_OFFSET;
- /*Exclude the no data & reserved sub-types from MIC failure processing*/
- isDataFrameSubTypeNoData = (((frmCtrlSubType>0x03)&&(frmCtrlSubType<0x08)) || (frmCtrlSubType>0x0B)) ? TRUE : FALSE;
- if ((receptionStatus == CSR_MICHAEL_MIC_ERROR) &&
- ((!isDataFrame) || isProtocolVerInvalid || (isDataFrame && isDataFrameSubTypeNoData))) {
- /* Currently MIC errors are discarded for frames other than data frames. This might need changing when we start
- * supporting 802.11w (Protected Management frames)
- */
- *freeBulkData = TRUE;
- unifi_trace(priv, UDBG4, "Discarding this frame and ignoring the MIC failure as this is a garbage/non-data/no data frame\n");
- return FALSE;
- }
-
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
-
- if (receptionStatus == CSR_MICHAEL_MIC_ERROR) {
-
- if (interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_STA) {
-
-#ifdef CSR_WIFI_SECURITY_WAPI_QOSCTRL_MIC_WORKAROUND
- if ((isDataFrame) &&
- ((IEEE802_11_FC_TYPE_QOS_DATA & IEEE80211_FC_SUBTYPE_MASK) == (frmCtrl & IEEE80211_FC_SUBTYPE_MASK)) &&
- (priv->isWapiConnection))
- {
- qosControl = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(macHdrLocation + (((frmCtrl & IEEE802_11_FC_TO_DS_MASK) && (frmCtrl & IEEE802_11_FC_FROM_DS_MASK)) ? 30 : 24) );
-
- unifi_trace(priv, UDBG4, "check_routing_pkt_data_ind() :: Value of the QoS control field - 0x%04x \n", qosControl);
-
- if (qosControl & IEEE802_11_QC_NON_TID_BITS_MASK)
- {
- unifi_trace(priv, UDBG4, "Ignore the MIC failure and pass the MPDU to the stack when any of bits [4-15] is set in the QoS control field\n");
-
- /*Exclude the MIC [16] and the PN [16] that are appended by the firmware*/
- ((bulk_data_param_t*)bulkdata)->d[0].data_length = bulkdata->d[0].data_length - 32;
-
- /*Clear the reception status of the signal (CSR_RX_SUCCESS)*/
- *(sigdata + CSR_WIFI_MA_PKT_IND_RECEPTION_STATUS_OFFSET) = 0x00;
- *(sigdata + CSR_WIFI_MA_PKT_IND_RECEPTION_STATUS_OFFSET+1) = 0x00;
-
- *freeBulkData = FALSE;
-
- return FALSE;
- }
- }
-#endif
- /* If this MIC ERROR reported by the firmware is either for
- * [1] a WAPI Multicast MPDU and the Multicast filter has NOT been set (It is set only when group key index (MSKID) = 1 in Group Rekeying) OR
- * [2] a WAPI Unicast MPDU and either the CONTROL PORT is open or the WAPI Unicast filter or filter(s) is NOT set
- * then report a MIC FAILURE indication to the SME.
- */
-#ifndef CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION
- if ((priv->wapi_multicast_filter == 0) || isWapiUnicastPkt) {
-#else
- /*When SW encryption is enabled and USKID=1 (wapi_unicast_filter = 1), we are expected
- *to receive MIC failure INDs for unicast MPDUs*/
- if ( ((priv->wapi_multicast_filter == 0) && !isWapiUnicastPkt) ||
- ((priv->wapi_unicast_filter == 0) && isWapiUnicastPkt) ) {
-#endif
- /*Discard the frame*/
- *freeBulkData = TRUE;
- unifi_trace(priv, UDBG4, "Discarding the contents of the frame with MIC failure \n");
-
- if (isWapiUnicastPkt &&
- ((uf_sme_port_state(priv, srcAddr, UF_CONTROLLED_PORT_Q, interfaceTag) != CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN)||
-#ifndef CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION
- (priv->wapi_unicast_filter) ||
-#endif
- (priv->wapi_unicast_queued_pkt_filter))) {
-
- /* Workaround to handle MIC failures reported by the firmware for encrypted packets from the AP
- * while we are in the process of re-association induced by unsupported WAPI Unicast key index
- * - Discard the packets with MIC failures "until" we have
- * a. negotiated a key,
- * b. opened the CONTROL PORT and
- * c. the AP has started using the new key
- */
- unifi_trace(priv, UDBG4, "Ignoring the MIC failure as either a. CONTROL PORT isn't OPEN or b. Unicast filter is set or c. WAPI AP using old key for buffered pkts\n");
-
- /*Ignore this MIC failure*/
- return FALSE;
-
- }/*WAPI re-key specific workaround*/
-
- unifi_trace(priv, UDBG6, "check_routing_pkt_data_ind - MIC FAILURE : interfaceTag %x Src Addr %x:%x:%x:%x:%x:%x\n",
- interfaceTag, srcAddr[0], srcAddr[1], srcAddr[2], srcAddr[3], srcAddr[4], srcAddr[5]);
- unifi_trace(priv, UDBG6, "check_routing_pkt_data_ind - MIC FAILURE : Dest Addr %x:%x:%x:%x:%x:%x\n",
- destAddr[0], destAddr[1], destAddr[2], destAddr[3], destAddr[4], destAddr[5]);
- unifi_trace(priv, UDBG6, "check_routing_pkt_data_ind - MIC FAILURE : Control Port State - 0x%.4X \n",
- uf_sme_port_state(priv, srcAddr, UF_CONTROLLED_PORT_Q, interfaceTag));
-
- unifi_error(priv, "MIC failure in %s\n", __FUNCTION__);
-
- /*Report the MIC failure to the SME*/
- return TRUE;
- }
- }/* STA mode */
- else {
- /* Its AP Mode . Just Return */
- *freeBulkData = TRUE;
- unifi_error(priv, "MIC failure in %s\n", __FUNCTION__);
- return TRUE;
- } /* AP mode */
- }/* MIC error */
-#else
- if (receptionStatus == CSR_MICHAEL_MIC_ERROR) {
- *freeBulkData = TRUE;
- unifi_error(priv, "MIC failure in %s\n", __FUNCTION__);
- return TRUE;
- }
-#endif /*CSR_WIFI_SECURITY_WAPI_ENABLE*/
-
- unifi_trace(priv, UDBG4, "frmCtrl = 0x%04x %s\n",
- frmCtrl,
- (((frmCtrl & 0x000c)>>FRAME_CONTROL_TYPE_FIELD_OFFSET) == IEEE802_11_FRAMETYPE_MANAGEMENT) ?
- "Mgt" : "Ctrl/Data");
-
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- /* To ignore MIC failures reported due to the WAPI AP using the old key for queued packets before
- * starting to use the new key negotiated as part of unicast re-keying
- */
- if ((interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_STA)&&
- isWapiUnicastPkt &&
- (receptionStatus == CSR_RX_SUCCESS) &&
- (priv->wapi_unicast_queued_pkt_filter==1)) {
-
- unifi_trace(priv, UDBG6, "check_routing_pkt_data_ind(): WAPI unicast pkt received when the (wapi_unicast_queued_pkt_filter) is set\n");
-
- if (isDataFrame) {
- switch(frmCtrl & IEEE80211_FC_SUBTYPE_MASK) {
- case IEEE802_11_FC_TYPE_QOS_DATA & IEEE80211_FC_SUBTYPE_MASK:
- llcSnapHeaderOffset = MAC_HEADER_SIZE + 2;
- break;
- case IEEE802_11_FC_TYPE_QOS_NULL & IEEE80211_FC_SUBTYPE_MASK:
- case IEEE802_11_FC_TYPE_NULL & IEEE80211_FC_SUBTYPE_MASK:
- break;
- default:
- llcSnapHeaderOffset = MAC_HEADER_SIZE;
- }
- }
-
- if (llcSnapHeaderOffset > 0) {
- /* QoS data or Data */
- unifi_trace(priv, UDBG6, "check_routing_pkt_data_ind(): SNAP header found & its offset %d\n", llcSnapHeaderOffset);
- if (memcmp((u8 *)(bulkdata->d[0].os_data_ptr+llcSnapHeaderOffset+wapiProtocolIdSNAPHeaderOffset),
- wapiProtocolIdSNAPHeader, sizeof(wapiProtocolIdSNAPHeader))) {
-
- unifi_trace(priv, UDBG6, "check_routing_pkt_data_ind(): This is a data & NOT a WAI protocol packet\n");
- /* On the first unicast data pkt that is decrypted successfully after re-keying, reset the filter */
- priv->wapi_unicast_queued_pkt_filter = 0;
- unifi_trace(priv, UDBG4, "check_routing_pkt_data_ind(): WAPI AP has started using the new unicast key, no more MIC failures expected (reset filter)\n");
- }
- else {
- unifi_trace(priv, UDBG6, "check_routing_pkt_data_ind(): WAPI - This is a WAI protocol packet\n");
- }
- }
- }
-#endif
-
-
- switch ((frmCtrl & 0x000c)>>FRAME_CONTROL_TYPE_FIELD_OFFSET) {
- case IEEE802_11_FRAMETYPE_MANAGEMENT:
- *freeBulkData = TRUE; /* Free (after SME handler copies it) */
-
- /* In P2P device mode, filter the legacy AP beacons here */
- if((interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2P)&&\
- ((CSR_WIFI_80211_GET_FRAME_SUBTYPE(macHdrLocation)) == CSR_WIFI_80211_FRAME_SUBTYPE_BEACON)){
-
- u8 *pSsid, *pSsidLen;
- static u8 P2PWildCardSsid[CSR_WIFI_P2P_WILDCARD_SSID_LENGTH] = {'D', 'I', 'R', 'E', 'C', 'T', '-'};
-
- pSsidLen = macHdrLocation + MAC_HEADER_SIZE + CSR_WIFI_BEACON_FIXED_LENGTH;
- pSsid = pSsidLen + 2;
-
- if(*(pSsidLen + 1) >= CSR_WIFI_P2P_WILDCARD_SSID_LENGTH){
- if(memcmp(pSsid, P2PWildCardSsid, CSR_WIFI_P2P_WILDCARD_SSID_LENGTH) == 0){
- unifi_trace(priv, UDBG6, "Received a P2P Beacon, pass it to SME\n");
- return TRUE;
- }
- }
- unifi_trace(priv, UDBG6, "Received a Legacy AP beacon in P2P mode, drop it\n");
- return FALSE;
- }
- return TRUE; /* Route to SME */
- case IEEE802_11_FRAMETYPE_DATA:
- case IEEE802_11_FRAMETYPE_CONTROL:
- *freeBulkData = FALSE; /* Network stack or MLME handler frees */
- return FALSE;
- default:
- unifi_error(priv, "Unhandled frame type %04x\n", frmCtrl);
- *freeBulkData = TRUE; /* Not interested, but must free it */
- return FALSE;
- }
-}
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_process_receive_event
- *
- * Dispatcher for received signals.
- *
- * This function receives the 'to host' signals and forwards
- * them to the unifi linux clients.
- *
- * Arguments:
- * ospriv Pointer to driver's private data.
- * sigdata Pointer to the packed signal buffer.
- * siglen Length of the packed signal.
- * bulkdata Pointer to the signal's bulk data.
- *
- * Returns:
- * None.
- *
- * Notes:
- * The signals are received in the format described in the host interface
- * specification, i.e wire formatted. Certain clients use the same format
- * to interpret them and other clients use the host formatted structures.
- * Each client has to call read_unpack_signal() to transform the wire
- * formatted signal into the host formatted signal, if necessary.
- * The code is in the core, since the signals are defined therefore
- * binded to the host interface specification.
- * ---------------------------------------------------------------------------
- */
-static void
-unifi_process_receive_event(void *ospriv,
- u8 *sigdata, u32 siglen,
- const bulk_data_param_t *bulkdata)
-{
- unifi_priv_t *priv = (unifi_priv_t*)ospriv;
- int i, receiver_id;
- int client_id;
- s16 signal_id;
- u8 pktIndToSme = FALSE, freeBulkData = FALSE;
-
- unifi_trace(priv, UDBG5, "unifi_process_receive_event: "
- "%04x %04x %04x %04x %04x %04x %04x %04x (%d)\n",
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*0) & 0xFFFF,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*1) & 0xFFFF,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*2) & 0xFFFF,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*3) & 0xFFFF,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*4) & 0xFFFF,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*5) & 0xFFFF,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*6) & 0xFFFF,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*7) & 0xFFFF,
- siglen);
-
- receiver_id = CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)) & 0xFF00;
- client_id = (receiver_id & 0x0F00) >> UDI_SENDER_ID_SHIFT;
- signal_id = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(sigdata);
-
-
-
- /* check for the type of frame received (checks for 802.11 management frames) */
- if (signal_id == CSR_MA_PACKET_INDICATION_ID)
- {
-#define CSR_MA_PACKET_INDICATION_INTERFACETAG_OFFSET 14
- u8 interfaceTag;
- netInterface_priv_t *interfacePriv;
-
- /* Pull out interface tag from virtual interface identifier */
- interfaceTag = (CSR_GET_UINT16_FROM_LITTLE_ENDIAN(sigdata + CSR_MA_PACKET_INDICATION_INTERFACETAG_OFFSET)) & 0xff;
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- /* Update activity for this station in case of IBSS */
-#ifdef CSR_SUPPORT_SME
- if (interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_IBSS)
- {
- u8 *saddr;
- /* Fetch the source address from mac header */
- saddr = (u8 *) bulkdata->d[0].os_data_ptr + MAC_HEADER_ADDR2_OFFSET;
- unifi_trace(priv, UDBG5,
- "Updating sta activity in IBSS interfaceTag %x Src Addr %x:%x:%x:%x:%x:%x\n",
- interfaceTag, saddr[0], saddr[1], saddr[2], saddr[3], saddr[4], saddr[5]);
-
- uf_update_sta_activity(priv, interfaceTag, saddr);
- }
-#endif
-
- pktIndToSme = check_routing_pkt_data_ind(priv, sigdata, bulkdata, &freeBulkData, interfacePriv);
-
- unifi_trace(priv, UDBG6, "RX: packet entry point to driver from HIP,pkt to SME ?(%s) \n", (pktIndToSme)? "YES":"NO");
-
- }
-
- if (pktIndToSme)
- {
- /* Management MA_PACKET_IND for SME */
- if(sigdata != NULL && bulkdata != NULL){
- send_to_client(priv, priv->sme_cli, receiver_id, sigdata, siglen, bulkdata);
- }
- else{
- unifi_error(priv, "unifi_receive_event2: sigdata or Bulkdata is NULL \n");
- }
-#ifdef CSR_NATIVE_LINUX
- send_to_client(priv, priv->wext_client,
- receiver_id,
- sigdata, siglen, bulkdata);
-#endif
- }
- else
- {
- /* Signals with ReceiverId==0 are also reported to SME / WEXT,
- * unless they are data/control MA_PACKET_INDs or VIF_AVAILABILITY_INDs
- */
- if (!receiver_id) {
- if(signal_id == CSR_MA_VIF_AVAILABILITY_INDICATION_ID) {
- uf_process_ma_vif_availibility_ind(priv, sigdata, siglen);
- }
- else if (signal_id != CSR_MA_PACKET_INDICATION_ID) {
- send_to_client(priv, priv->sme_cli, receiver_id, sigdata, siglen, bulkdata);
-#ifdef CSR_NATIVE_LINUX
- send_to_client(priv, priv->wext_client,
- receiver_id,
- sigdata, siglen, bulkdata);
-#endif
- }
- else
- {
-
-#if (defined(CSR_SUPPORT_SME) && defined(CSR_WIFI_SECURITY_WAPI_ENABLE))
- #define CSR_MA_PACKET_INDICATION_RECEPTION_STATUS_OFFSET sizeof(CSR_SIGNAL_PRIMITIVE_HEADER) + 22
- netInterface_priv_t *interfacePriv;
- u8 interfaceTag;
- u16 receptionStatus = CSR_RX_SUCCESS;
-
- /* Pull out interface tag from virtual interface identifier */
- interfaceTag = (CSR_GET_UINT16_FROM_LITTLE_ENDIAN(sigdata + CSR_MA_PACKET_INDICATION_INTERFACETAG_OFFSET)) & 0xff;
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- /* check for MIC failure */
- receptionStatus = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(sigdata + CSR_MA_PACKET_INDICATION_RECEPTION_STATUS_OFFSET);
-
- /* Send a WAPI MPDU to SME for re-check MIC if the respective filter has been set*/
- if ((!freeBulkData) &&
- (interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_STA) &&
- (receptionStatus == CSR_MICHAEL_MIC_ERROR) &&
- ((priv->wapi_multicast_filter == 1)
-#ifdef CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION
- || (priv->wapi_unicast_filter == 1)
-#endif
- ))
- {
- CSR_SIGNAL signal;
- u8 *destAddr;
- CsrResult res;
- u16 interfaceTag = 0;
- u8 isMcastPkt = TRUE;
-
- unifi_trace(priv, UDBG6, "Received a WAPI data packet when the Unicast/Multicast filter is set\n");
- res = read_unpack_signal(sigdata, &signal);
- if (res) {
- unifi_error(priv, "Received unknown or corrupted signal (0x%x).\n",
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN(sigdata));
- return;
- }
-
- /* Check if the type of MPDU and the respective filter status*/
- destAddr = (u8 *) bulkdata->d[0].os_data_ptr + MAC_HEADER_ADDR1_OFFSET;
- isMcastPkt = (destAddr[0] & 0x01) ? TRUE : FALSE;
- unifi_trace(priv, UDBG6,
- "1.MPDU type: (%s), 2.Multicast filter: (%s), 3. Unicast filter: (%s)\n",
- ((isMcastPkt) ? "Multiast":"Unicast"),
- ((priv->wapi_multicast_filter) ? "Enabled":"Disabled"),
- ((priv->wapi_unicast_filter) ? "Enabled":"Disabled"));
-
- if (((isMcastPkt) && (priv->wapi_multicast_filter == 1))
-#ifdef CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION
- || ((!isMcastPkt) && (priv->wapi_unicast_filter == 1))
-#endif
- )
- {
- unifi_trace(priv, UDBG4, "Sending the WAPI MPDU for MIC check\n");
- CsrWifiRouterCtrlWapiRxMicCheckIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, interfaceTag, siglen, sigdata, bulkdata->d[0].data_length, (u8*)bulkdata->d[0].os_data_ptr);
-
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++) {
- if (bulkdata->d[i].data_length != 0) {
- unifi_net_data_free(priv, (void *)&bulkdata->d[i]);
- }
- }
- return;
- }
- } /* CSR_MA_PACKET_INDICATION_ID */
-#endif /*CSR_SUPPORT_SME && CSR_WIFI_SECURITY_WAPI_ENABLE*/
- }
- }
-
- /* calls the registered clients handler callback func.
- * netdev_mlme_event_handler is one of the registered handler used to route
- * data packet to network stack or AMP/EAPOL related data to SME
- *
- * The freeBulkData check ensures that, it has received a management frame and
- * the frame needs to be freed here. So not to be passed to netdev handler
- */
- if(!freeBulkData){
- if ((client_id < MAX_UDI_CLIENTS) &&
- (&priv->ul_clients[client_id] != priv->logging_client)) {
- unifi_trace(priv, UDBG6, "Call the registered clients handler callback func\n");
- send_to_client(priv, &priv->ul_clients[client_id],
- receiver_id,
- sigdata, siglen, bulkdata);
- }
- }
- }
-
- /*
- * Free bulk data buffers here unless it is a CSR_MA_PACKET_INDICATION
- */
- switch (signal_id)
- {
-#ifdef UNIFI_SNIFF_ARPHRD
- case CSR_MA_SNIFFDATA_INDICATION_ID:
-#endif
- break;
-
- case CSR_MA_PACKET_INDICATION_ID:
- if (!freeBulkData)
- {
- break;
- }
- /* FALLS THROUGH... */
- default:
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++) {
- if (bulkdata->d[i].data_length != 0) {
- unifi_net_data_free(priv, (void *)&bulkdata->d[i]);
- }
- }
- }
-
-} /* unifi_process_receive_event() */
-
-
-#ifdef CSR_WIFI_RX_PATH_SPLIT
-static u8 signal_buffer_is_full(unifi_priv_t* priv)
-{
- return (((priv->rxSignalBuffer.writePointer + 1)% priv->rxSignalBuffer.size) == (priv->rxSignalBuffer.readPointer));
-}
-
-void unifi_rx_queue_flush(void *ospriv)
-{
- unifi_priv_t *priv = (unifi_priv_t*)ospriv;
-
- unifi_trace(priv, UDBG4, "rx_wq_handler: RdPtr = %d WritePtr = %d\n",
- priv->rxSignalBuffer.readPointer, priv->rxSignalBuffer.writePointer);
- if(priv != NULL) {
- u8 readPointer = priv->rxSignalBuffer.readPointer;
- while (readPointer != priv->rxSignalBuffer.writePointer)
- {
- rx_buff_struct_t *buf = &priv->rxSignalBuffer.rx_buff[readPointer];
- unifi_trace(priv, UDBG6, "rx_wq_handler: RdPtr = %d WritePtr = %d\n",
- readPointer, priv->rxSignalBuffer.writePointer);
- unifi_process_receive_event(priv, buf->bufptr, buf->sig_len, &buf->data_ptrs);
- readPointer ++;
- if(readPointer >= priv->rxSignalBuffer.size) {
- readPointer = 0;
- }
- }
- priv->rxSignalBuffer.readPointer = readPointer;
- }
-}
-
-void rx_wq_handler(struct work_struct *work)
-{
- unifi_priv_t *priv = container_of(work, unifi_priv_t, rx_work_struct);
- unifi_rx_queue_flush(priv);
-}
-#endif
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * unifi_receive_event
- *
- * Dispatcher for received signals.
- *
- * This function receives the 'to host' signals and forwards
- * them to the unifi linux clients.
- *
- * Arguments:
- * ospriv Pointer to driver's private data.
- * sigdata Pointer to the packed signal buffer.
- * siglen Length of the packed signal.
- * bulkdata Pointer to the signal's bulk data.
- *
- * Returns:
- * None.
- *
- * Notes:
- * The signals are received in the format described in the host interface
- * specification, i.e wire formatted. Certain clients use the same format
- * to interpret them and other clients use the host formatted structures.
- * Each client has to call read_unpack_signal() to transform the wire
- * formatted signal into the host formatted signal, if necessary.
- * The code is in the core, since the signals are defined therefore
- * binded to the host interface specification.
- * ---------------------------------------------------------------------------
- */
-void
-unifi_receive_event(void *ospriv,
- u8 *sigdata, u32 siglen,
- const bulk_data_param_t *bulkdata)
-{
-#ifdef CSR_WIFI_RX_PATH_SPLIT
- unifi_priv_t *priv = (unifi_priv_t*)ospriv;
- u8 writePointer;
- int i;
- rx_buff_struct_t * rx_buff;
-
- unifi_trace(priv, UDBG5, "unifi_receive_event: "
- "%04x %04x %04x %04x %04x %04x %04x %04x (%d)\n",
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*0) & 0xFFFF,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*1) & 0xFFFF,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*2) & 0xFFFF,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*3) & 0xFFFF,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*4) & 0xFFFF,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*5) & 0xFFFF,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*6) & 0xFFFF,
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN((sigdata) + sizeof(s16)*7) & 0xFFFF, siglen);
- if(signal_buffer_is_full(priv)) {
- unifi_error(priv, "TO HOST signal queue FULL dropping the PDU\n");
- for (i = 0; i < UNIFI_MAX_DATA_REFERENCES; i++) {
- if (bulkdata->d[i].data_length != 0) {
- unifi_net_data_free(priv, (void *)&bulkdata->d[i]);
- }
- }
- return;
- }
- writePointer = priv->rxSignalBuffer.writePointer;
- rx_buff = &priv->rxSignalBuffer.rx_buff[writePointer];
- memcpy(rx_buff->bufptr, sigdata, siglen);
- rx_buff->sig_len = siglen;
- rx_buff->data_ptrs = *bulkdata;
- writePointer++;
- if(writePointer >= priv->rxSignalBuffer.size) {
- writePointer =0;
- }
- unifi_trace(priv, UDBG4, "unifi_receive_event:writePtr = %d\n", priv->rxSignalBuffer.writePointer);
- priv->rxSignalBuffer.writePointer = writePointer;
-
-#ifndef CSR_WIFI_RX_PATH_SPLIT_DONT_USE_WQ
- queue_work(priv->rx_workqueue, &priv->rx_work_struct);
-#endif
-
-#else
- unifi_process_receive_event(ospriv, sigdata, siglen, bulkdata);
-#endif
-} /* unifi_receive_event() */
-
diff --git a/drivers/staging/csr/unifi_native.h b/drivers/staging/csr/unifi_native.h
deleted file mode 100644
index a73b38e5e480..000000000000
--- a/drivers/staging/csr/unifi_native.h
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- *****************************************************************************
- *
- * FILE : unifi_native.h
- *
- * PURPOSE : Private header file for unifi driver support to wireless extensions.
- *
- * UDI = UniFi Debug Interface
- *
- * Copyright (C) 2005-2008 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- *****************************************************************************
- */
-#ifndef __LINUX_UNIFI_NATIVE_H__
-#define __LINUX_UNIFI_NATIVE_H__ 1
-
-#include <linux/kernel.h>
-#include <linux/if_arp.h>
-
-
-/*
- * scan.c wext.c autojoin.c
- */
-/* Structure to hold results of a scan */
-typedef struct scan_info {
-
-/* CSR_MLME_SCAN_INDICATION msi; */
-
- unsigned char *info_elems;
- int info_elem_length;
-
-} scan_info_t;
-
-
-#define IE_VECTOR_MAXLEN 1024
-
-#ifdef CSR_SUPPORT_WEXT
-/*
- * Structre to hold the wireless network configuration info.
- */
-struct wext_config {
-
- /* Requested channel when setting up an adhoc network */
- int channel;
-
- /* wireless extns mode: IW_MODE_AUTO, ADHOC, INFRA, MASTER ... MONITOR */
- int mode;
-
- /* The capabilities of the currently joined network */
- int capability;
-
- /* The interval between beacons if we create an IBSS */
- int beacon_period;
-
- /*
- * Power-save parameters
- */
- /* The listen interval to ask for in Associate req. */
- int assoc_listen_interval;
- /* Power-mode to put UniFi into */
-
- unsigned char desired_ssid[UNIFI_MAX_SSID_LEN]; /* the last ESSID set by SIOCSIWESSID */
- int power_mode;
- /* Whether to wake for broadcast packets (using DTIM interval) */
- int wakeup_for_dtims;
-
- /* Currently selected WEP Key ID (0..3) */
- int wep_key_id;
-
- wep_key_t wep_keys[NUM_WEPKEYS];
-
-/* CSR_AUTHENTICATION_TYPE auth_type; */
- int privacy;
-
- u32 join_failure_timeout;
- u32 auth_failure_timeout;
- u32 assoc_failure_timeout;
-
- unsigned char generic_ie[IE_VECTOR_MAXLEN];
- int generic_ie_len;
-
- struct iw_statistics wireless_stats;
-
-
- /* the ESSID we are currently associated to */
- unsigned char current_ssid[UNIFI_MAX_SSID_LEN];
- /* the BSSID we are currently associated to */
- unsigned char current_bssid[6];
-
- /*
- * IW_AUTH_WPA_VERSION_DISABLED 0x00000001
- * IW_AUTH_WPA_VERSION_WPA 0x00000002
- * IW_AUTH_WPA_VERSION_WPA2 0x00000004
- */
- unsigned char wpa_version;
-
- /*
- * cipher selection:
- * IW_AUTH_CIPHER_NONE 0x00000001
- * IW_AUTH_CIPHER_WEP40 0x00000002
- * IW_AUTH_CIPHER_TKIP 0x00000004
- * IW_AUTH_CIPHER_CCMP 0x00000008
- * IW_AUTH_CIPHER_WEP104 0x00000010
- */
- unsigned char pairwise_cipher_used;
- unsigned char group_cipher_used;
-
- unsigned int frag_thresh;
- unsigned int rts_thresh;
-
- /* U-APSD value, send with Association Request to WMM Enabled APs */
- unsigned char wmm_bss_uapsd_mask;
- /* The WMM capabilities of the selected BSS */
- unsigned int bss_wmm_capabilities;
-
- /* Flag to prevent a join when the ssid is set */
- int disable_join_on_ssid_set;
-
- /* Scan info */
-#define UNIFI_MAX_SCANS 32
- scan_info_t scan_list[UNIFI_MAX_SCANS];
- int num_scan_info;
-
- /* Flag on whether non-802.1x packets are allowed out */
-/* CsrWifiRouterPortAction block_controlled_port;*/
-
- /* Flag on whether we have completed an authenticate/associate process */
- unsigned int flag_associated : 1;
-}; /* struct wext_config */
-
-#endif /* CSR_SUPPORT_WEXT */
-
-
-/*
- * wext.c
- */
-/*int mlme_set_protection(unifi_priv_t *priv, unsigned char *addr,
- CSR_PROTECT_TYPE prot, CSR_KEY_TYPE key_type);
-*/
-
-/*
- * scan.c
- */
-/*
-void unifi_scan_indication_handler(unifi_priv_t *priv,
- const CSR_MLME_SCAN_INDICATION *msg,
- const unsigned char *extra,
- unsigned int len);
-*/
-void unifi_clear_scan_table(unifi_priv_t *priv);
-scan_info_t *unifi_get_scan_report(unifi_priv_t *priv, int index);
-
-
-/*
- * Utility functions
- */
-const unsigned char *unifi_find_info_element(int id,
- const unsigned char *info,
- int len);
-int unifi_add_info_element(unsigned char *info,
- int ie_id,
- const unsigned char *ie_data,
- int ie_len);
-
-/*
- * autojoin.c
- */
-/* Higher level fns */
-int unifi_autojoin(unifi_priv_t *priv, const char *ssid);
-/*
-int unifi_do_scan(unifi_priv_t *priv, int scantype, CSR_BSS_TYPE bsstype,
- const char *ssid, int ssid_len);
-*/
-int unifi_set_powermode(unifi_priv_t *priv);
-int unifi_join_ap(unifi_priv_t *priv, scan_info_t *si);
-int unifi_join_bss(unifi_priv_t *priv, unsigned char *macaddr);
-int unifi_leave(unifi_priv_t *priv);
-unsigned int unifi_get_wmm_bss_capabilities(unifi_priv_t *priv,
- unsigned char *ie_vector,
- int ie_len, int *ap_capabilities);
-
-/*
- * Status and management.
- */
-int uf_init_wext_interface(unifi_priv_t *priv);
-void uf_deinit_wext_interface(unifi_priv_t *priv);
-
-/*
- * Function to reset UniFi's 802.11 state by sending MLME-RESET.req
- */
-int unifi_reset_state(unifi_priv_t *priv, unsigned char *macaddr, unsigned char set_default_mib);
-
-
-/*
- * mlme.c
- */
-/* Abort an MLME operation - useful in error recovery */
-int uf_abort_mlme(unifi_priv_t *priv);
-
-int unifi_mlme_blocking_request(unifi_priv_t *priv, ul_client_t *pcli,
- CSR_SIGNAL *sig, bulk_data_param_t *data_ptrs,
- int timeout);
-void unifi_mlme_copy_reply_and_wakeup_client(ul_client_t *pcli,
- CSR_SIGNAL *signal, int signal_len,
- const bulk_data_param_t *bulkdata);
-
-/*
- * Utility functions
- */
-const char *lookup_reason_code(int reason);
-const char *lookup_result_code(int result);
-
-
-/*
- * sme_native.c
- */
-int uf_sme_init(unifi_priv_t *priv);
-void uf_sme_deinit(unifi_priv_t *priv);
-int sme_sys_suspend(unifi_priv_t *priv);
-int sme_sys_resume(unifi_priv_t *priv);
-int sme_mgt_wifi_on(unifi_priv_t *priv);
-
-/* Callback for event logging to SME clients (unifi_manager) */
-void sme_native_log_event(ul_client_t *client,
- const u8 *sig_packed, int sig_len,
- const bulk_data_param_t *bulkdata,
- int dir);
-
-void sme_native_mlme_event_handler(ul_client_t *pcli,
- const u8 *sig_packed, int sig_len,
- const bulk_data_param_t *bulkdata,
- int dir);
-
-/* Task to query statistics from the MIB */
-#define UF_SME_STATS_WQ_TIMEOUT 2000 /* in msecs */
-void uf_sme_stats_wq(struct work_struct *work);
-
-void uf_native_process_udi_signal(ul_client_t *pcli,
- const u8 *packed_signal,
- int packed_signal_len,
- const bulk_data_param_t *bulkdata, int dir);
-#ifdef UNIFI_SNIFF_ARPHRD
-/*
- * monitor.c
- */
-int uf_start_sniff(unifi_priv_t *priv);
-/*
-void ma_sniffdata_ind(void *ospriv,
- const CSR_MA_SNIFFDATA_INDICATION *ind,
- const bulk_data_param_t *bulkdata);
-*/
-#endif /* ARPHRD_IEEE80211_PRISM */
-
-#endif /* __LINUX_UNIFI_NATIVE_H__ */
diff --git a/drivers/staging/csr/unifi_os.h b/drivers/staging/csr/unifi_os.h
deleted file mode 100644
index 56a26982070e..000000000000
--- a/drivers/staging/csr/unifi_os.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- *
- * FILE: os_linux/unifi_os.h
- *
- * PURPOSE:
- * This header file provides the OS-dependent facilities for a linux
- * environment.
- *
- * Copyright (C) 2005-2008 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-#ifndef __UNIFI_OS_LINUX_H__
-#define __UNIFI_OS_LINUX_H__ 1
-
-#include <linux/kernel.h>
-#include <linux/time.h>
-#include <linux/list.h>
-#include <linux/delay.h>
-#include <linux/string.h>
-
-/*
- * Needed for core/signals.c
- */
-#include <stddef.h>
-
-
-/* Define INLINE directive*/
-#define INLINE inline
-
-/* Malloc and free */
-CsrResult unifi_net_data_malloc(void *ospriv, bulk_data_desc_t *bulk_data_slot, unsigned int size);
-void unifi_net_data_free(void *ospriv, bulk_data_desc_t *bulk_data_slot);
-#define CSR_WIFI_ALIGN_BYTES 4
-CsrResult unifi_net_dma_align(void *ospriv, bulk_data_desc_t *bulk_data_slot);
-
-/*
- * Byte Order
- * Note that __le*_to_cpu and __cpu_to_le* return an unsigned value!
- */
-#ifdef __KERNEL__
-#define unifi2host_16(n) (__le16_to_cpu((n)))
-#define unifi2host_32(n) (__le32_to_cpu((n)))
-#define host2unifi_16(n) (__cpu_to_le16((n)))
-#define host2unifi_32(n) (__cpu_to_le32((n)))
-#endif
-
-/* Module parameters */
-extern int unifi_debug;
-
-/* debugging */
-#ifdef UNIFI_DEBUG
-/*
- * unifi_debug is a verbosity level for debug messages
- * UDBG0 msgs are always printed if UNIFI_DEBUG is defined
- * UDBG1 msgs are printed if UNIFI_DEBUG is defined and unifi_debug > 0
- * etc.
- */
-
-#define ASSERT(cond) \
- do { \
- if (!(cond)) { \
- printk("Assertion failed in %s at %s:%d: %s\n", \
- __FUNCTION__, __FILE__, __LINE__, #cond); \
- } \
- } while (0)
-
-
-void unifi_dump(void *ospriv, int lvl, const char *msg, void *mem, u16 len);
-void dump(void *mem, u16 len);
-void dump16(void *mem, u16 len);
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-void dump_str(void *mem, u16 len);
-#endif /* CSR_WIFI_HIP_DEBUG_OFFLINE */
-
-void unifi_error(void* ospriv, const char *fmt, ...);
-void unifi_warning(void* ospriv, const char *fmt, ...);
-void unifi_notice(void* ospriv, const char *fmt, ...);
-void unifi_info(void* ospriv, const char *fmt, ...);
-
-void unifi_trace(void* ospriv, int level, const char *fmt, ...);
-
-#else
-
-/* Stubs */
-
-#define ASSERT(cond)
-
-static inline void unifi_dump(void *ospriv, int lvl, const char *msg, void *mem, u16 len) {}
-static inline void dump(void *mem, u16 len) {}
-static inline void dump16(void *mem, u16 len) {}
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-static inline void dump_str(void *mem, u16 len) {}
-#endif /* CSR_WIFI_HIP_DEBUG_OFFLINE */
-
-void unifi_error_nop(void* ospriv, const char *fmt, ...);
-void unifi_trace_nop(void* ospriv, int level, const char *fmt, ...);
-#define unifi_error if(1);else unifi_error_nop
-#define unifi_warning if(1);else unifi_error_nop
-#define unifi_notice if(1);else unifi_error_nop
-#define unifi_info if(1);else unifi_error_nop
-#define unifi_trace if(1);else unifi_trace_nop
-
-#endif /* UNIFI_DEBUG */
-
-
-/* Different levels of diagnostic detail... */
-#define UDBG0 0 /* always prints in debug build */
-#define UDBG1 1
-#define UDBG2 2
-#define UDBG3 3
-#define UDBG4 4
-#define UDBG5 5
-#define UDBG6 6
-#define UDBG7 7
-
-
-#endif /* __UNIFI_OS_LINUX_H__ */
diff --git a/drivers/staging/csr/unifi_pdu_processing.c b/drivers/staging/csr/unifi_pdu_processing.c
deleted file mode 100644
index 04fe9e2acf0e..000000000000
--- a/drivers/staging/csr/unifi_pdu_processing.c
+++ /dev/null
@@ -1,3729 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: unifi_pdu_processing.c
- *
- * PURPOSE:
- * This file provides the PDU handling functionality before it gets sent to unfi and after
- * receiving a PDU from unifi
- *
- * Copyright (C) 2010 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-
-#include <linux/types.h>
-#include <linux/etherdevice.h>
-#include <linux/vmalloc.h>
-
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_conversions.h"
-#include "csr_time.h"
-#include "unifi_priv.h"
-#include <net/pkt_sched.h>
-
-#ifdef CSR_SUPPORT_SME
-static void _update_buffered_pkt_params_after_alignment(unifi_priv_t *priv, bulk_data_param_t *bulkdata,
- tx_buffered_packets_t* buffered_pkt)
-{
- struct sk_buff *skb ;
- u32 align_offset;
-
- if (priv == NULL || bulkdata == NULL || buffered_pkt == NULL){
- return;
- }
-
- skb = (struct sk_buff*)bulkdata->d[0].os_net_buf_ptr;
- align_offset = (u32)(long)(bulkdata->d[0].os_data_ptr) & (CSR_WIFI_ALIGN_BYTES-1);
- if(align_offset){
- skb_pull(skb, align_offset);
- }
-
- buffered_pkt->bulkdata.os_data_ptr = bulkdata->d[0].os_data_ptr;
- buffered_pkt->bulkdata.data_length = bulkdata->d[0].data_length;
- buffered_pkt->bulkdata.os_net_buf_ptr = bulkdata->d[0].os_net_buf_ptr;
- buffered_pkt->bulkdata.net_buf_length = bulkdata->d[0].net_buf_length;
-}
-#endif
-
-void
-unifi_frame_ma_packet_req(unifi_priv_t *priv, CSR_PRIORITY priority,
- CSR_RATE TransmitRate, CSR_CLIENT_TAG hostTag,
- u16 interfaceTag, CSR_TRANSMISSION_CONTROL transmissionControl,
- CSR_PROCESS_ID leSenderProcessId, u8 *peerMacAddress,
- CSR_SIGNAL *signal)
-{
-
- CSR_MA_PACKET_REQUEST *req = &signal->u.MaPacketRequest;
- netInterface_priv_t *interfacePriv;
- u8 ba_session_idx = 0;
- ba_session_tx_struct *ba_session = NULL;
- u8 *ba_addr = NULL;
-
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- unifi_trace(priv, UDBG5,
- "In unifi_frame_ma_packet_req, Frame for Peer: %pMF\n",
- peerMacAddress);
- signal->SignalPrimitiveHeader.SignalId = CSR_MA_PACKET_REQUEST_ID;
- signal->SignalPrimitiveHeader.ReceiverProcessId = 0;
- signal->SignalPrimitiveHeader.SenderProcessId = leSenderProcessId;
-
- /* Fill the MA-PACKET.req */
- req->Priority = priority;
- unifi_trace(priv, UDBG3, "Tx Frame with Priority: 0x%x\n", req->Priority);
-
- /* A value of 0 is used for auto selection of rates. But for P2P GO case
- * for action frames the rate is governed by SME. Hence instead of 0,
- * the rate is filled in with the value passed here
- */
- req->TransmitRate = TransmitRate;
-
- /* packets from netdev then no confirm required but packets from
- * Nme/Sme eapol data frames requires the confirmation
- */
- req->TransmissionControl = transmissionControl;
- req->VirtualInterfaceIdentifier =
- uf_get_vif_identifier(interfacePriv->interfaceMode, interfaceTag);
- memcpy(req->Ra.x, peerMacAddress, ETH_ALEN);
-
- if (hostTag == 0xffffffff) {
- req->HostTag = interfacePriv->tag++;
- req->HostTag |= 0x40000000;
- unifi_trace(priv, UDBG3, "new host tag assigned = 0x%x\n", req->HostTag);
- interfacePriv->tag &= 0x0fffffff;
- } else {
- req->HostTag = hostTag;
- unifi_trace(priv, UDBG3, "host tag got from SME = 0x%x\n", req->HostTag);
- }
- /* check if BA session exists for the peer MAC address on same tID */
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO){
- ba_addr = peerMacAddress;
- }else{
- ba_addr = interfacePriv->bssid.a;
- }
- for (ba_session_idx=0; ba_session_idx < MAX_SUPPORTED_BA_SESSIONS_TX; ba_session_idx++){
- ba_session = interfacePriv->ba_session_tx[ba_session_idx];
- if (ba_session){
- if ((!memcmp(ba_session->macAddress.a, ba_addr, ETH_ALEN)) && (ba_session->tID == priority)){
- req->TransmissionControl |= CSR_ALLOW_BA;
- break;
- }
- }
- }
-
- unifi_trace(priv, UDBG5, "leaving unifi_frame_ma_packet_req\n");
-}
-
-#ifdef CSR_SUPPORT_SME
-
-#define TRANSMISSION_CONTROL_TRIGGER_MASK 0x0001
-#define TRANSMISSION_CONTROL_EOSP_MASK 0x0002
-
-static
-int frame_and_send_queued_pdu(unifi_priv_t* priv, tx_buffered_packets_t* buffered_pkt,
- CsrWifiRouterCtrlStaInfo_t *staRecord, u8 moreData , u8 eosp)
-{
-
- CSR_SIGNAL signal;
- bulk_data_param_t bulkdata;
- int result;
- u8 toDs, fromDs, macHeaderLengthInBytes = MAC_HEADER_SIZE;
- u8 *qc;
- u16 *fc = (u16*)(buffered_pkt->bulkdata.os_data_ptr);
- unsigned long lock_flags;
- unifi_trace(priv, UDBG3, "frame_and_send_queued_pdu with moreData: %d , EOSP: %d\n", moreData, eosp);
- unifi_frame_ma_packet_req(priv, buffered_pkt->priority, buffered_pkt->rate, buffered_pkt->hostTag,
- buffered_pkt->interfaceTag, buffered_pkt->transmissionControl,
- buffered_pkt->leSenderProcessId, buffered_pkt->peerMacAddress.a, &signal);
- bulkdata.d[0].os_data_ptr = buffered_pkt->bulkdata.os_data_ptr;
- bulkdata.d[0].data_length = buffered_pkt->bulkdata.data_length;
- bulkdata.d[0].os_net_buf_ptr = buffered_pkt->bulkdata.os_net_buf_ptr;
- bulkdata.d[0].net_buf_length = buffered_pkt->bulkdata.net_buf_length;
- bulkdata.d[1].os_data_ptr = NULL;
- bulkdata.d[1].data_length = 0;
- bulkdata.d[1].os_net_buf_ptr =0;
- bulkdata.d[1].net_buf_length =0;
-
- if(moreData) {
- *fc |= cpu_to_le16(IEEE802_11_FC_MOREDATA_MASK);
- } else {
- *fc &= cpu_to_le16(~IEEE802_11_FC_MOREDATA_MASK);
- }
-
- if((staRecord != NULL)&& (staRecord->wmmOrQosEnabled == TRUE))
- {
- unifi_trace(priv, UDBG3, "frame_and_send_queued_pdu WMM Enabled: %d \n", staRecord->wmmOrQosEnabled);
-
- toDs = (*fc & cpu_to_le16(IEEE802_11_FC_TO_DS_MASK))?1 : 0;
- fromDs = (*fc & cpu_to_le16(IEEE802_11_FC_FROM_DS_MASK))? 1: 0;
-
- switch(le16_to_cpu(*fc) & IEEE80211_FC_SUBTYPE_MASK)
- {
- case IEEE802_11_FC_TYPE_QOS_DATA & IEEE80211_FC_SUBTYPE_MASK:
- case IEEE802_11_FC_TYPE_QOS_NULL & IEEE80211_FC_SUBTYPE_MASK:
- /* If both are set then the Address4 exists (only for AP) */
- if (fromDs && toDs) {
- /* 6 is the size of Address4 field */
- macHeaderLengthInBytes += (QOS_CONTROL_HEADER_SIZE + 6);
- } else {
- macHeaderLengthInBytes += QOS_CONTROL_HEADER_SIZE;
- }
-
- /* If order bit set then HT control field is the part of MAC header */
- if (*fc & cpu_to_le16(IEEE80211_FC_ORDER_MASK)) {
- macHeaderLengthInBytes += HT_CONTROL_HEADER_SIZE;
- qc = (u8*)(buffered_pkt->bulkdata.os_data_ptr + (macHeaderLengthInBytes-6));
- } else {
- qc = (u8*)(buffered_pkt->bulkdata.os_data_ptr + (macHeaderLengthInBytes-2));
- }
- *qc = eosp ? *qc | (1 << 4) : *qc & (~(1 << 4));
- break;
- default:
- if (fromDs && toDs)
- macHeaderLengthInBytes += 6;
- }
-
- }
- result = ul_send_signal_unpacked(priv, &signal, &bulkdata);
- if(result){
- _update_buffered_pkt_params_after_alignment(priv, &bulkdata, buffered_pkt);
- }
-
- /* Decrement the packet counts queued in driver */
- if (result != -ENOSPC) {
- /* protect entire counter updation by disabling preemption */
- if (!priv->noOfPktQueuedInDriver) {
- unifi_error(priv, "packets queued in driver 0 still decrementing\n");
- } else {
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- priv->noOfPktQueuedInDriver--;
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- }
- /* Sta Record is available for all unicast (except genericMgt Frames) & in other case its NULL */
- if (staRecord) {
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- if (!staRecord->noOfPktQueued) {
- unifi_error(priv, "packets queued in driver per station is 0 still decrementing\n");
- } else {
- staRecord->noOfPktQueued--;
- }
- /* if the STA alive probe frame has failed then reset the saved host tag */
- if (result){
- if (staRecord->nullDataHostTag == buffered_pkt->hostTag){
- staRecord->nullDataHostTag = INVALID_HOST_TAG;
- }
- }
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- }
-
- }
- return result;
-}
-#ifdef CSR_SUPPORT_SME
-static
-void set_eosp_transmit_ctrl(unifi_priv_t *priv, struct list_head *txList)
-{
- /* dequeue the tx data packets from the appropriate queue */
- tx_buffered_packets_t *tx_q_item = NULL;
- struct list_head *listHead;
- struct list_head *placeHolder;
- unsigned long lock_flags;
-
-
- unifi_trace(priv, UDBG5, "entering set_eosp_transmit_ctrl\n");
- /* check for list empty */
- if (list_empty(txList)) {
- unifi_warning(priv, "In set_eosp_transmit_ctrl, the list is empty\n");
- return;
- }
-
- /* return the last node , and modify it. */
-
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_for_each_prev_safe(listHead, placeHolder, txList) {
- tx_q_item = list_entry(listHead, tx_buffered_packets_t, q);
- tx_q_item->transmissionControl |= TRANSMISSION_CONTROL_EOSP_MASK;
- tx_q_item->transmissionControl = (tx_q_item->transmissionControl & ~(CSR_NO_CONFIRM_REQUIRED));
- unifi_trace(priv, UDBG1,
- "set_eosp_transmit_ctrl Transmission Control = 0x%x hostTag = 0x%x \n", tx_q_item->transmissionControl, tx_q_item->hostTag);
- unifi_trace(priv, UDBG3, "in set_eosp_transmit_ctrl no.of buffered frames %d\n", priv->noOfPktQueuedInDriver);
- break;
- }
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- unifi_trace(priv, UDBG1, "List Empty %d\n", list_empty(txList));
- unifi_trace(priv, UDBG5, "leaving set_eosp_transmit_ctrl\n");
- return;
-}
-
-static
-void send_vif_availibility_rsp(unifi_priv_t *priv, CSR_VIF_IDENTIFIER vif, CSR_RESULT_CODE resultCode)
-{
- CSR_SIGNAL signal;
- CSR_MA_VIF_AVAILABILITY_RESPONSE *rsp;
- bulk_data_param_t *bulkdata = NULL;
- int r;
-
- unifi_trace(priv, UDBG3, "send_vif_availibility_rsp : invoked with resultCode = %d \n", resultCode);
-
- memset(&signal, 0, sizeof(CSR_SIGNAL));
- rsp = &signal.u.MaVifAvailabilityResponse;
- rsp->VirtualInterfaceIdentifier = vif;
- rsp->ResultCode = resultCode;
- signal.SignalPrimitiveHeader.SignalId = CSR_MA_VIF_AVAILABILITY_RESPONSE_ID;
- signal.SignalPrimitiveHeader.ReceiverProcessId = 0;
- signal.SignalPrimitiveHeader.SenderProcessId = priv->netdev_client->sender_id;
-
- /* Send the signal to UniFi */
- r = ul_send_signal_unpacked(priv, &signal, bulkdata);
- if(r) {
- unifi_error(priv, "Availibility response sending failed %x status %d\n", vif, r);
- }
- else {
- unifi_trace(priv, UDBG3, "send_vif_availibility_rsp : status = %d \n", r);
- }
-}
-#endif
-
-static
-void verify_and_accomodate_tx_packet(unifi_priv_t *priv)
-{
- tx_buffered_packets_t *tx_q_item;
- unsigned long lock_flags;
- struct list_head *listHead, *list;
- struct list_head *placeHolder;
- u8 i, j, eospFramedeleted=0;
- u8 thresholdExcedeDueToBroadcast = TRUE;
- /* it will be made it interface Specific in the future when multi interfaces are supported ,
- right now interface 0 is considered */
- netInterface_priv_t *interfacePriv = priv->interfacePriv[0];
- CsrWifiRouterCtrlStaInfo_t *staInfo = NULL;
-
- unifi_trace(priv, UDBG3, "entering verify_and_accomodate_tx_packet\n");
-
- for(i = 0; i < UNIFI_MAX_CONNECTIONS; i++) {
- staInfo = interfacePriv->staInfo[i];
- if (staInfo && (staInfo->noOfPktQueued >= CSR_WIFI_DRIVER_MAX_PKT_QUEUING_THRESHOLD_PER_PEER)) {
- /* remove the first(oldest) packet from the all the access catogory, since data
- * packets for station record crossed the threshold limit (64 for AP supporting
- * 8 peers)
- */
- unifi_trace(priv, UDBG3, "number of station pkts queued= %d for sta id = %d\n", staInfo->noOfPktQueued, staInfo->aid);
- for(j = 0; j < MAX_ACCESS_CATOGORY; j++) {
- list = &staInfo->dataPdu[j];
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_for_each_safe(listHead, placeHolder, list) {
- tx_q_item = list_entry(listHead, tx_buffered_packets_t, q);
- list_del(listHead);
- thresholdExcedeDueToBroadcast = FALSE;
- unifi_net_data_free(priv, &tx_q_item->bulkdata);
- kfree(tx_q_item);
- tx_q_item = NULL;
- if (!priv->noOfPktQueuedInDriver) {
- unifi_error(priv, "packets queued in driver 0 still decrementing in %s\n", __FUNCTION__);
- } else {
- /* protection provided by spinlock */
- priv->noOfPktQueuedInDriver--;
-
- }
- /* Sta Record is available for all unicast (except genericMgt Frames) & in other case its NULL */
- if (!staInfo->noOfPktQueued) {
- unifi_error(priv, "packets queued in driver per station is 0 still decrementing in %s\n", __FUNCTION__);
- } else {
- spin_lock(&priv->staRecord_lock);
- staInfo->noOfPktQueued--;
- spin_unlock(&priv->staRecord_lock);
- }
- break;
- }
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- }
- }
- }
- if (thresholdExcedeDueToBroadcast && interfacePriv->noOfbroadcastPktQueued > CSR_WIFI_DRIVER_MINIMUM_BROADCAST_PKT_THRESHOLD ) {
- /* Remove the packets from genericMulticastOrBroadCastFrames queue
- * (the max packets in driver is reached due to broadcast/multicast frames)
- */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_for_each_safe(listHead, placeHolder, &interfacePriv->genericMulticastOrBroadCastFrames) {
- tx_q_item = list_entry(listHead, tx_buffered_packets_t, q);
- if(eospFramedeleted){
- tx_q_item->transmissionControl |= TRANSMISSION_CONTROL_EOSP_MASK;
- tx_q_item->transmissionControl = (tx_q_item->transmissionControl & ~(CSR_NO_CONFIRM_REQUIRED));
- unifi_trace(priv, UDBG1, "updating eosp for next packet hostTag:= 0x%x ", tx_q_item->hostTag);
- eospFramedeleted =0;
- break;
- }
-
- if(tx_q_item->transmissionControl & TRANSMISSION_CONTROL_EOSP_MASK ){
- eospFramedeleted = 1;
- }
- unifi_trace(priv, UDBG1, "freeing of multicast packets ToC = 0x%x hostTag = 0x%x \n", tx_q_item->transmissionControl, tx_q_item->hostTag);
- list_del(listHead);
- unifi_net_data_free(priv, &tx_q_item->bulkdata);
- kfree(tx_q_item);
- priv->noOfPktQueuedInDriver--;
- spin_lock(&priv->staRecord_lock);
- interfacePriv->noOfbroadcastPktQueued--;
- spin_unlock(&priv->staRecord_lock);
- if(!eospFramedeleted){
- break;
- }
- }
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- }
- unifi_trace(priv, UDBG3, "leaving verify_and_accomodate_tx_packet\n");
-}
-
-static
-CsrResult enque_tx_data_pdu(unifi_priv_t *priv, bulk_data_param_t *bulkdata,
- struct list_head *list, CSR_SIGNAL *signal,
- u8 requeueOnSamePos)
-{
-
- /* queue the tx data packets on to appropriate queue */
- CSR_MA_PACKET_REQUEST *req = &signal->u.MaPacketRequest;
- tx_buffered_packets_t *tx_q_item;
- unsigned long lock_flags;
-
- unifi_trace(priv, UDBG5, "entering enque_tx_data_pdu\n");
- if(!list) {
- unifi_error(priv, "List is not specified\n");
- return CSR_RESULT_FAILURE;
- }
-
- /* Removes aged packets & adds the incoming packet */
- if (priv->noOfPktQueuedInDriver >= CSR_WIFI_DRIVER_SUPPORT_FOR_MAX_PKT_QUEUEING) {
- unifi_trace(priv, UDBG3, "number of pkts queued= %d \n", priv->noOfPktQueuedInDriver);
- verify_and_accomodate_tx_packet(priv);
- }
-
-
-
- tx_q_item = kmalloc(sizeof(tx_buffered_packets_t), GFP_ATOMIC);
- if (tx_q_item == NULL) {
- unifi_error(priv,
- "Failed to allocate %d bytes for tx packet record\n",
- sizeof(tx_buffered_packets_t));
- return CSR_RESULT_FAILURE;
- }
-
- /* disable the preemption */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- INIT_LIST_HEAD(&tx_q_item->q);
- /* fill the tx_q structure members */
- tx_q_item->bulkdata.os_data_ptr = bulkdata->d[0].os_data_ptr;
- tx_q_item->bulkdata.data_length = bulkdata->d[0].data_length;
- tx_q_item->bulkdata.os_net_buf_ptr = bulkdata->d[0].os_net_buf_ptr;
- tx_q_item->bulkdata.net_buf_length = bulkdata->d[0].net_buf_length;
- tx_q_item->interfaceTag = req->VirtualInterfaceIdentifier & 0xff;
- tx_q_item->hostTag = req->HostTag;
- tx_q_item->leSenderProcessId = signal->SignalPrimitiveHeader.SenderProcessId;
- tx_q_item->transmissionControl = req->TransmissionControl;
- tx_q_item->priority = req->Priority;
- tx_q_item->rate = req->TransmitRate;
- memcpy(tx_q_item->peerMacAddress.a, req->Ra.x, ETH_ALEN);
-
-
-
- if (requeueOnSamePos) {
- list_add(&tx_q_item->q, list);
- } else {
- list_add_tail(&tx_q_item->q, list);
- }
-
- /* Count of packet queued in driver */
- priv->noOfPktQueuedInDriver++;
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- unifi_trace(priv, UDBG5, "leaving enque_tx_data_pdu\n");
- return CSR_RESULT_SUCCESS;
-}
-
-#ifdef CSR_WIFI_REQUEUE_PACKET_TO_HAL
-CsrResult unifi_reque_ma_packet_request (void *ospriv, u32 host_tag,
- u16 txStatus, bulk_data_desc_t *bulkDataDesc)
-{
- CsrResult status = CSR_RESULT_SUCCESS;
- unifi_priv_t *priv = (unifi_priv_t*)ospriv;
- netInterface_priv_t *interfacePriv;
- struct list_head *list = NULL;
- CsrWifiRouterCtrlStaInfo_t *staRecord = NULL;
- bulk_data_param_t bulkData;
- CSR_SIGNAL signal;
- CSR_PRIORITY priority = 0;
- u16 interfaceTag = 0;
- unifi_TrafficQueue priority_q;
- u16 frameControl = 0, frameType = 0;
- unsigned long lock_flags;
-
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- /* If the current mode is not AP or P2PGO then just return failure
- * to clear the hip slot
- */
- if(!((interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP) ||
- (interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO))) {
- return CSR_RESULT_FAILURE;
- }
-
- unifi_trace(priv, UDBG6, "unifi_reque_ma_packet_request: host_tag = 0x%x\n", host_tag);
-
- staRecord = CsrWifiRouterCtrlGetStationRecordFromPeerMacAddress(priv,
- (((u8 *) bulkDataDesc->os_data_ptr) + 4),
- interfaceTag);
- if (NULL == staRecord) {
- unifi_trace(priv, UDBG5, "unifi_reque_ma_packet_request: Invalid STA record \n");
- return CSR_RESULT_FAILURE;
- }
-
- /* Update TIM if MA-PACKET.cfm fails with status as Tx-retry-limit or No-BSS and then just return failure
- * to clear the hip slot associated with the Packet
- */
- if (CSR_TX_RETRY_LIMIT == txStatus || CSR_TX_NO_BSS == txStatus) {
- if (staRecord->timSet == CSR_WIFI_TIM_RESET || staRecord->timSet == CSR_WIFI_TIM_RESETTING)
- {
- unifi_trace(priv, UDBG2, "unifi_reque_ma_packet_request: CFM failed with Retry Limit or No BSS-->update TIM\n");
- if (!staRecord->timRequestPendingFlag) {
- update_tim(priv, staRecord->aid, 1, interfaceTag, staRecord->assignedHandle);
- }
- else {
- /* Cache the TimSet value so that it will processed immidiatly after
- * completing the current setTim Request
- */
- staRecord->updateTimReqQueued = 1;
- unifi_trace(priv, UDBG6, "unifi_reque_ma_packet_request: One more UpdateTim Request(:%d)Queued for AID %x\n",
- staRecord->updateTimReqQueued, staRecord->aid);
- }
- }
- return CSR_RESULT_FAILURE;
- }
- else if ((CSR_TX_LIFETIME == txStatus) || (CSR_TX_BLOCK_ACK_TIMEOUT == txStatus) ||
- (CSR_TX_FAIL_TRANSMISSION_VIF_INTERRUPTED == txStatus) ||
- (CSR_TX_REJECTED_PEER_STATION_SLEEPING == txStatus) ||
- (CSR_TX_REJECTED_DTIM_STARTED == txStatus)) {
- /* Extract the Frame control and the frame type */
- frameControl = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(bulkDataDesc->os_data_ptr);
- frameType = ((frameControl & IEEE80211_FC_TYPE_MASK) >> FRAME_CONTROL_TYPE_FIELD_OFFSET);
-
- /* Mgmt frames will not be re-queued for Tx
- * so just return failure to clear the hip slot
- */
- if (IEEE802_11_FRAMETYPE_MANAGEMENT == frameType) {
- return CSR_RESULT_FAILURE;
- }
- else if (IEEE802_11_FRAMETYPE_DATA == frameType) {
- /* QOS NULL and DATA NULL frames will not be re-queued for Tx
- * so just return failure to clear the hip slot
- */
- if ((((frameControl & IEEE80211_FC_SUBTYPE_MASK) >> FRAME_CONTROL_SUBTYPE_FIELD_OFFSET) == QOS_DATA_NULL) ||
- (((frameControl & IEEE80211_FC_SUBTYPE_MASK) >> FRAME_CONTROL_SUBTYPE_FIELD_OFFSET)== DATA_NULL )) {
- return CSR_RESULT_FAILURE;
- }
- }
-
- /* Extract the Packet priority */
- if (TRUE == staRecord->wmmOrQosEnabled) {
- u16 qosControl = 0;
- u8 dataFrameType = 0;
-
- dataFrameType =((frameControl & IEEE80211_FC_SUBTYPE_MASK) >> 4);
-
- if (dataFrameType == QOS_DATA) {
- /* QoS control field is offset from frame control by 2 (frame control)
- * + 2 (duration/ID) + 2 (sequence control) + 3*ETH_ALEN or 4*ETH_ALEN
- */
- if((frameControl & IEEE802_11_FC_TO_DS_MASK) && (frameControl & IEEE802_11_FC_FROM_DS_MASK)) {
- qosControl= CSR_GET_UINT16_FROM_LITTLE_ENDIAN(bulkDataDesc->os_data_ptr + 30);
- }
- else {
- qosControl = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(bulkDataDesc->os_data_ptr + 24);
- }
- }
-
- priority = (CSR_PRIORITY)(qosControl & IEEE802_11_QC_TID_MASK);
-
- if (priority < CSR_QOS_UP0 || priority > CSR_QOS_UP7) {
- unifi_trace(priv, UDBG5, "unifi_reque_ma_packet_request: Invalid priority:%x \n", priority);
- return CSR_RESULT_FAILURE;
- }
- }
- else {
- priority = CSR_CONTENTION;
- }
-
- /* Frame Bulk data to requeue it back to HAL Queues */
- bulkData.d[0].os_data_ptr = bulkDataDesc->os_data_ptr;
- bulkData.d[0].data_length = bulkDataDesc->data_length;
- bulkData.d[0].os_net_buf_ptr = bulkDataDesc->os_net_buf_ptr;
- bulkData.d[0].net_buf_length = bulkDataDesc->net_buf_length;
-
- bulkData.d[1].os_data_ptr = NULL;
- bulkData.d[1].os_net_buf_ptr = NULL;
- bulkData.d[1].data_length = bulkData.d[1].net_buf_length = 0;
-
- /* Initialize signal to zero */
- memset(&signal, 0, sizeof(CSR_SIGNAL));
-
- /* Frame MA Packet Req */
- unifi_frame_ma_packet_req(priv, priority, 0, host_tag,
- interfaceTag, CSR_NO_CONFIRM_REQUIRED,
- priv->netdev_client->sender_id,
- staRecord->peerMacAddress.a, &signal);
-
- /* Find the Q-Priority */
- priority_q = unifi_frame_priority_to_queue(priority);
- list = &staRecord->dataPdu[priority_q];
-
- /* Place the Packet on to HAL Queue */
- status = enque_tx_data_pdu(priv, &bulkData, list, &signal, TRUE);
-
- /* Update the Per-station queued packet counter */
- if (!status) {
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- staRecord->noOfPktQueued++;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- }
- }
- else {
- /* Packet will not be re-queued for any of the other MA Packet Tx failure
- * reasons so just return failure to clear the hip slot
- */
- return CSR_RESULT_FAILURE;
- }
-
- return status;
-}
-#endif
-
-static void is_all_ac_deliver_enabled_and_moredata(CsrWifiRouterCtrlStaInfo_t *staRecord, u8 *allDeliveryEnabled, u8 *dataAvailable)
-{
- u8 i;
- *allDeliveryEnabled = TRUE;
- for (i = 0 ;i < MAX_ACCESS_CATOGORY; i++) {
- if (!IS_DELIVERY_ENABLED(staRecord->powersaveMode[i])) {
- /* One is is not Delivery Enabled */
- *allDeliveryEnabled = FALSE;
- break;
- }
- }
- if (*allDeliveryEnabled) {
- *dataAvailable = (!list_empty(&staRecord->dataPdu[0]) || !list_empty(&staRecord->dataPdu[1])
- ||!list_empty(&staRecord->dataPdu[2]) ||!list_empty(&staRecord->dataPdu[3])
- ||!list_empty(&staRecord->mgtFrames));
- }
-}
-
-/*
- * ---------------------------------------------------------------------------
- * uf_handle_tim_cfm
- *
- *
- * This function updates tim status in host depending confirm status from firmware
- *
- * Arguments:
- * priv Pointer to device private context struct
- * cfm CSR_MLME_SET_TIM_CONFIRM
- * receiverProcessId SenderProcessID to fetch handle & timSet status
- *
- * ---------------------------------------------------------------------------
- */
-void uf_handle_tim_cfm(unifi_priv_t *priv, CSR_MLME_SET_TIM_CONFIRM *cfm, u16 receiverProcessId)
-{
- u8 handle = CSR_WIFI_GET_STATION_HANDLE_FROM_RECEIVER_ID(receiverProcessId);
- u8 timSetStatus = CSR_WIFI_GET_TIMSET_STATE_FROM_RECEIVER_ID(receiverProcessId);
- u16 interfaceTag = (cfm->VirtualInterfaceIdentifier & 0xff);
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- CsrWifiRouterCtrlStaInfo_t *staRecord = NULL;
- /* This variable holds what TIM value we wanted to set in firmware */
- u16 timSetValue = 0;
- /* Irrespective of interface the count maintained */
- static u8 retryCount = 0;
- unsigned long lock_flags;
- unifi_trace(priv, UDBG3, "entering %s, handle = %x, timSetStatus = %x\n", __FUNCTION__, handle, timSetStatus);
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_warning(priv, "bad interfaceTag = %x\n", interfaceTag);
- return;
- }
-
- if ((handle != CSR_WIFI_BROADCAST_OR_MULTICAST_HANDLE) && (handle >= UNIFI_MAX_CONNECTIONS)) {
- unifi_warning(priv, "bad station Handle = %x\n", handle);
- return;
- }
-
- if (handle != CSR_WIFI_BROADCAST_OR_MULTICAST_HANDLE) {
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- if ((staRecord = ((CsrWifiRouterCtrlStaInfo_t *) (interfacePriv->staInfo[handle]))) == NULL) {
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- unifi_warning(priv, "uf_handle_tim_cfm: station record is NULL handle = %x\n", handle);
- return;
- }
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- }
- switch(timSetStatus)
- {
- case CSR_WIFI_TIM_SETTING:
- timSetValue = CSR_WIFI_TIM_SET;
- break;
- case CSR_WIFI_TIM_RESETTING:
- timSetValue = CSR_WIFI_TIM_RESET;
- break;
- default:
- unifi_warning(priv, "timSet state is %x: Debug\n", timSetStatus);
- return;
- }
-
- /* check TIM confirm for success/failures */
- switch(cfm->ResultCode)
- {
- case CSR_RC_SUCCESS:
- if (handle != CSR_WIFI_BROADCAST_OR_MULTICAST_HANDLE) {
- /* Unicast frame & station record available */
- if (timSetStatus == staRecord->timSet) {
- staRecord->timSet = timSetValue;
- /* fh_cmd_q can also be full at some point of time!,
- * resetting count as queue is cleaned by firmware at this point
- */
- retryCount = 0;
- unifi_trace(priv, UDBG2, "tim (%s) successfully in firmware\n", (timSetValue)?"SET":"RESET");
- } else {
- unifi_trace(priv, UDBG3, "receiver processID = %x, success: request & confirm states are not matching in TIM cfm: Debug status = %x, staRecord->timSet = %x, handle = %x\n",
- receiverProcessId, timSetStatus, staRecord->timSet, handle);
- }
-
- /* Reset TIM pending flag to send next TIM request */
- staRecord->timRequestPendingFlag = FALSE;
-
- /* Make sure that one more UpdateTim request is queued, if Queued its value
- * should be CSR_WIFI_TIM_SET or CSR_WIFI_TIM_RESET
- */
- if (0xFF != staRecord->updateTimReqQueued)
- {
- /* Process the UpdateTim Request which is queued while previous UpdateTim was in progress */
- if (staRecord->timSet != staRecord->updateTimReqQueued)
- {
- unifi_trace(priv, UDBG2, "uf_handle_tim_cfm : Processing Queued UpdateTimReq \n");
-
- update_tim(priv, staRecord->aid, staRecord->updateTimReqQueued, interfaceTag, handle);
-
- staRecord->updateTimReqQueued = 0xFF;
- }
- }
- } else {
-
- interfacePriv->bcTimSet = timSetValue;
- /* fh_cmd_q can also be full at some point of time!,
- * resetting count as queue is cleaned by firmware at this point
- */
- retryCount = 0;
- unifi_trace(priv, UDBG3, "tim (%s) successfully for broadcast frame in firmware\n", (timSetValue)?"SET":"RESET");
-
- /* Reset DTIM pending flag to send next DTIM request */
- interfacePriv->bcTimSetReqPendingFlag = FALSE;
-
- /* Make sure that one more UpdateDTim request is queued, if Queued its value
- * should be CSR_WIFI_TIM_SET or CSR_WIFI_TIM_RESET
- */
- if (0xFF != interfacePriv->bcTimSetReqQueued)
- {
- /* Process the UpdateTim Request which is queued while previous UpdateTim was in progress */
- if (interfacePriv->bcTimSet != interfacePriv->bcTimSetReqQueued)
- {
- unifi_trace(priv, UDBG2, "uf_handle_tim_cfm : Processing Queued UpdateDTimReq \n");
-
- update_tim(priv, 0, interfacePriv->bcTimSetReqQueued, interfaceTag, 0xFFFFFFFF);
-
- interfacePriv->bcTimSetReqQueued = 0xFF;
- }
- }
-
- }
- break;
- case CSR_RC_INVALID_PARAMETERS:
- case CSR_RC_INSUFFICIENT_RESOURCE:
- /* check for max retry limit & send again
- * MAX_RETRY_LIMIT is not maintained for each set of transactions..Its generic
- * If failure crosses this Limit, we have to take a call to FIX
- */
- if (retryCount > UNIFI_MAX_RETRY_LIMIT) {
- u8 moreData = FALSE;
- retryCount = 0;
- /* Because of continuos traffic in fh_cmd_q the tim set request is failing (exceeding retry limit)
- * but if we didn't synchronize our timSet varible state with firmware then it can cause below issues
- * cond 1. We want to SET tim in firmware if its fails & max retry limit reached
- * -> If host set's the timSet to 1, we wont try to send(as max retry reached) update tim but
- * firmware is not updated with queue(TIM) status so it wont set TIM in beacon finally host start piling
- * up data & wont try to set tim in firmware (This can cause worser performance)
- * cond 2. We want to reset tim in firmware it fails & reaches max retry limit
- * -> If host sets the timSet to Zero, it wont try to set a TIM request unless we wont have any packets
- * to be queued, so beacon unnecessarily advertizes the TIM
- */
-
- if(staRecord) {
- if(!staRecord->wmmOrQosEnabled) {
- moreData = (!list_empty(&staRecord->dataPdu[UNIFI_TRAFFIC_Q_CONTENTION]) ||
- !list_empty(&staRecord->dataPdu[UNIFI_TRAFFIC_Q_VO]) ||
- !list_empty(&staRecord->mgtFrames));
- } else {
- /* Peer is QSTA */
- u8 allDeliveryEnabled = 0, dataAvailable = 0;
- /* Check if all AC's are Delivery Enabled */
- is_all_ac_deliver_enabled_and_moredata(staRecord, &allDeliveryEnabled, &dataAvailable);
- /*check for more data in non-delivery enabled queues*/
- moreData = (uf_is_more_data_for_non_delivery_ac(staRecord) || (allDeliveryEnabled && dataAvailable));
-
- }
- /* To avoid cond 1 & 2, check internal Queues status, if we have more Data then set RESET the timSet(0),
- * so we are trying to be in sync with firmware & next packets before queuing atleast try to
- * set TIM in firmware otherwise it SET timSet(1)
- */
- if (moreData) {
- staRecord->timSet = CSR_WIFI_TIM_RESET;
- } else {
- staRecord->timSet = CSR_WIFI_TIM_SET;
- }
- } else {
- /* Its a broadcast frames */
- moreData = (!list_empty(&interfacePriv->genericMulticastOrBroadCastMgtFrames) ||
- !list_empty(&interfacePriv->genericMulticastOrBroadCastFrames));
- if (moreData) {
- update_tim(priv, 0, CSR_WIFI_TIM_SET, interfaceTag, 0xFFFFFFFF);
- } else {
- update_tim(priv, 0, CSR_WIFI_TIM_RESET, interfaceTag, 0xFFFFFFFF);
- }
- }
-
- unifi_error(priv, "no of error's for TIM setting crossed the Limit: verify\n");
- return;
- }
- retryCount++;
-
- if (handle != CSR_WIFI_BROADCAST_OR_MULTICAST_HANDLE) {
- if (timSetStatus == staRecord->timSet) {
- unifi_warning(priv, "tim request failed, retry for AID = %x\n", staRecord->aid);
- update_tim(priv, staRecord->aid, timSetValue, interfaceTag, handle);
- } else {
- unifi_trace(priv, UDBG1, "failure: request & confirm states are not matching in TIM cfm: Debug status = %x, staRecord->timSet = %x\n",
- timSetStatus, staRecord->timSet);
- }
- } else {
- unifi_warning(priv, "tim request failed, retry for broadcast frames\n");
- update_tim(priv, 0, timSetValue, interfaceTag, 0xFFFFFFFF);
- }
- break;
- default:
- unifi_warning(priv, "tim update request failed resultcode = %x\n", cfm->ResultCode);
- }
-
- unifi_trace(priv, UDBG2, "leaving %s\n", __FUNCTION__);
-}
-
-/*
- * ---------------------------------------------------------------------------
- * update_tim
- *
- *
- * This function updates tim status in firmware for AID[1 to UNIFI_MAX_CONNECTIONS] or
- * AID[0] for broadcast/multicast packets.
- *
- * NOTE: The LSB (least significant BYTE) of senderId while sending this MLME premitive
- * has been modified(utilized) as below
- *
- * SenderID in signal's SignalPrimitiveHeader is 2 byte the lowe byte bitmap is below
- *
- * station handle(6 bits) timSet Status (2 bits)
- * --------------------- ----------------------
- * 0 0 0 0 0 0 | 0 0
- *
- * timSet Status can be one of below:
- *
- * CSR_WIFI_TIM_RESET
- * CSR_WIFI_TIM_RESETTING
- * CSR_WIFI_TIM_SET
- * CSR_WIFI_TIM_SETTING
- *
- * Arguments:
- * priv Pointer to device private context struct
- * aid can be 1 t0 UNIFI_MAX_CONNECTIONS & 0 means multicast/broadcast
- * setTim value SET(1) / RESET(0)
- * interfaceTag the interfaceID on which activity going on
- * handle from (0 <= handle < UNIFI_MAX_CONNECTIONS)
- *
- * ---------------------------------------------------------------------------
- */
-void update_tim(unifi_priv_t * priv, u16 aid, u8 setTim, u16 interfaceTag, u32 handle)
-{
- CSR_SIGNAL signal;
- s32 r;
- CSR_MLME_SET_TIM_REQUEST *req = &signal.u.MlmeSetTimRequest;
- bulk_data_param_t *bulkdata = NULL;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- u8 senderIdLsb = 0;
- CsrWifiRouterCtrlStaInfo_t *staRecord = NULL;
- u32 oldTimSetStatus = 0, timSetStatus = 0;
-
- unifi_trace(priv, UDBG5, "entering the update_tim routine\n");
-
-
- if (handle == 0xFFFFFFFF) {
- handle &= CSR_WIFI_BROADCAST_OR_MULTICAST_HANDLE;
- if (setTim == interfacePriv->bcTimSet)
- {
- unifi_trace(priv, UDBG3, "update_tim, Drop:Hdl=%x, timval=%d, globalTim=%d\n", handle, setTim, interfacePriv->bcTimSet);
- return;
- }
- } else if ((handle != 0xFFFFFFFF) && (handle >= UNIFI_MAX_CONNECTIONS)) {
- unifi_warning(priv, "bad station Handle = %x\n", handle);
- return;
- }
-
- if (setTim) {
- timSetStatus = CSR_WIFI_TIM_SETTING;
- } else {
- timSetStatus = CSR_WIFI_TIM_RESETTING;
- }
-
- if (handle != CSR_WIFI_BROADCAST_OR_MULTICAST_HANDLE) {
- if ((staRecord = ((CsrWifiRouterCtrlStaInfo_t *) (interfacePriv->staInfo[handle]))) == NULL) {
- unifi_warning(priv, "station record is NULL in update_tim: handle = %x :debug\n", handle);
- return;
- }
- /* In case of signal sending failed, revert back to old state */
- oldTimSetStatus = staRecord->timSet;
- staRecord->timSet = timSetStatus;
- }
-
- /* pack senderID LSB */
- senderIdLsb = CSR_WIFI_PACK_SENDER_ID_LSB_FOR_TIM_REQ(handle, timSetStatus);
-
- /* initialize signal to zero */
- memset(&signal, 0, sizeof(CSR_SIGNAL));
-
- /* Frame the MLME-SET-TIM request */
- signal.SignalPrimitiveHeader.SignalId = CSR_MLME_SET_TIM_REQUEST_ID;
- signal.SignalPrimitiveHeader.ReceiverProcessId = 0;
- CSR_COPY_UINT16_TO_LITTLE_ENDIAN(((priv->netdev_client->sender_id & 0xff00) | senderIdLsb),
- (u8*)&signal.SignalPrimitiveHeader.SenderProcessId);
-
- /* set The virtual interfaceIdentifier, aid, tim value */
- req->VirtualInterfaceIdentifier = uf_get_vif_identifier(interfacePriv->interfaceMode, interfaceTag);
- req->AssociationId = aid;
- req->TimValue = setTim;
-
-
- unifi_trace(priv, UDBG2, "update_tim:AID %x,senderIdLsb = 0x%x, handle = 0x%x, timSetStatus = %x, sender proceesID = %x \n",
- aid, senderIdLsb, handle, timSetStatus, signal.SignalPrimitiveHeader.SenderProcessId);
-
- /* Send the signal to UniFi */
- r = ul_send_signal_unpacked(priv, &signal, bulkdata);
- if (r) {
- /* No need to free bulk data, as TIM request doesn't carries any data */
- unifi_error(priv, "Error queueing CSR_MLME_SET_TIM_REQUEST signal\n");
- if (staRecord) {
- staRecord->timSet = oldTimSetStatus ;
- }
- else
- {
- /* MLME_SET_TIM.req sending failed here for AID0, so revert back our bcTimSet status */
- interfacePriv->bcTimSet = !setTim;
- }
- }
- else {
- /* Update tim request pending flag and ensure no more TIM set requests are send
- for the same station until TIM confirm is received */
- if (staRecord) {
- staRecord->timRequestPendingFlag = TRUE;
- }
- else
- {
- /* Update tim request (for AID 0) pending flag and ensure no more DTIM set requests are send
- * for the same station until TIM confirm is received
- */
- interfacePriv->bcTimSetReqPendingFlag = TRUE;
- }
- }
- unifi_trace(priv, UDBG5, "leaving the update_tim routine\n");
-}
-
-static
-void process_peer_active_transition(unifi_priv_t * priv,
- CsrWifiRouterCtrlStaInfo_t *staRecord,
- u16 interfaceTag)
-{
- int r, i;
- u8 spaceAvail[4] = {TRUE, TRUE, TRUE, TRUE};
- tx_buffered_packets_t * buffered_pkt = NULL;
- unsigned long lock_flags;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-
- unifi_trace(priv, UDBG5, "entering process_peer_active_transition\n");
-
- if(IS_DTIM_ACTIVE(interfacePriv->dtimActive, interfacePriv->multicastPduHostTag)) {
- /* giving more priority to multicast packets so delaying unicast packets*/
- unifi_trace(priv, UDBG2, "Multicast transmission is going on so resume unicast transmission after DTIM over\n");
-
- /* As station is active now, even though AP is not able to send frames to it
- * because of DTIM, it needs to reset the TIM here
- */
- if (!staRecord->timRequestPendingFlag){
- if((staRecord->timSet == CSR_WIFI_TIM_SET) || (staRecord->timSet == CSR_WIFI_TIM_SETTING)){
- update_tim(priv, staRecord->aid, 0, interfaceTag, staRecord->assignedHandle);
- }
- }
- else
- {
- /* Cache the TimSet value so that it will processed immidiatly after
- * completing the current setTim Request
- */
- staRecord->updateTimReqQueued = 0;
- unifi_trace(priv, UDBG6, "update_tim : One more UpdateTim Request (Tim value:%d) Queued for AID %x\n", staRecord->updateTimReqQueued,
- staRecord->aid);
- }
- return;
- }
- while((buffered_pkt=dequeue_tx_data_pdu(priv, &staRecord->mgtFrames))) {
- buffered_pkt->transmissionControl &=
- ~(TRANSMISSION_CONTROL_TRIGGER_MASK|TRANSMISSION_CONTROL_EOSP_MASK);
- if((r=frame_and_send_queued_pdu(priv, buffered_pkt, staRecord, 0, FALSE)) == -ENOSPC) {
- unifi_trace(priv, UDBG2, "p_p_a_t:(ENOSPC) Mgt Frame queueing \n");
- /* Enqueue at the head of the queue */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, &staRecord->mgtFrames);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- priv->pausedStaHandle[3]=(u8)(staRecord->assignedHandle);
- spaceAvail[3] = FALSE;
- break;
- } else {
- if(r){
- unifi_trace (priv, UDBG1, " HIP validation failure : PDU sending failed \n");
- /* the PDU failed where we can't do any thing so free the storage */
- unifi_net_data_free(priv, &buffered_pkt->bulkdata);
- }
- kfree(buffered_pkt);
- }
- }
- if (!staRecord->timRequestPendingFlag) {
- if (staRecord->txSuspend) {
- if(staRecord->timSet == CSR_WIFI_TIM_SET) {
- update_tim(priv, staRecord->aid, 0, interfaceTag, staRecord->assignedHandle);
- }
- return;
- }
- }
- else
- {
- /* Cache the TimSet value so that it will processed immidiatly after
- * completing the current setTim Request
- */
- staRecord->updateTimReqQueued = 0;
- unifi_trace(priv, UDBG6, "update_tim : One more UpdateTim Request (Tim value:%d) Queued for AID %x\n", staRecord->updateTimReqQueued,
- staRecord->aid);
- }
- for(i=3;i>=0;i--) {
- if(!spaceAvail[i])
- continue;
- unifi_trace(priv, UDBG6, "p_p_a_t:data pkt sending for AC %d \n", i);
- while((buffered_pkt=dequeue_tx_data_pdu(priv, &staRecord->dataPdu[i]))) {
- buffered_pkt->transmissionControl &=
- ~(TRANSMISSION_CONTROL_TRIGGER_MASK|TRANSMISSION_CONTROL_EOSP_MASK);
- if((r=frame_and_send_queued_pdu(priv, buffered_pkt, staRecord, 0, FALSE)) == -ENOSPC) {
- /* Clear the trigger bit transmission control*/
- /* Enqueue at the head of the queue */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, &staRecord->dataPdu[i]);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- priv->pausedStaHandle[i]=(u8)(staRecord->assignedHandle);
- break;
- } else {
- if(r){
- unifi_trace (priv, UDBG1, " HIP validation failure : PDU sending failed \n");
- /* the PDU failed where we can't do any thing so free the storage */
- unifi_net_data_free(priv, &buffered_pkt->bulkdata);
- }
- kfree(buffered_pkt);
- }
- }
- }
- if (!staRecord->timRequestPendingFlag){
- if((staRecord->timSet == CSR_WIFI_TIM_SET) || (staRecord->timSet == CSR_WIFI_TIM_SETTING)) {
- unifi_trace(priv, UDBG3, "p_p_a_t:resetting tim .....\n");
- update_tim(priv, staRecord->aid, 0, interfaceTag, staRecord->assignedHandle);
- }
- }
- else
- {
- /* Cache the TimSet value so that it will processed immidiatly after
- * completing the current setTim Request
- */
- staRecord->updateTimReqQueued = 0;
- unifi_trace(priv, UDBG6, "update_tim : One more UpdateTim Request (Tim value:%d) Queued for AID %x\n", staRecord->updateTimReqQueued,
- staRecord->aid);
- }
- unifi_trace(priv, UDBG5, "leaving process_peer_active_transition\n");
-}
-
-
-
-void uf_process_ma_pkt_cfm_for_ap(unifi_priv_t *priv, u16 interfaceTag, const CSR_MA_PACKET_CONFIRM *pkt_cfm)
-{
- netInterface_priv_t *interfacePriv;
- u8 i;
- CsrWifiRouterCtrlStaInfo_t *staRecord = NULL;
- interfacePriv = priv->interfacePriv[interfaceTag];
-
-
- if(pkt_cfm->HostTag == interfacePriv->multicastPduHostTag) {
- unifi_trace(priv, UDBG2, "CFM for marked Multicast Tag = %x\n", interfacePriv->multicastPduHostTag);
- interfacePriv->multicastPduHostTag = 0xffffffff;
- resume_suspended_uapsd(priv, interfaceTag);
- resume_unicast_buffered_frames(priv, interfaceTag);
- if(list_empty(&interfacePriv->genericMulticastOrBroadCastMgtFrames) &&
- list_empty(&interfacePriv->genericMulticastOrBroadCastFrames)) {
- unifi_trace(priv, UDBG1, "Resetting multicastTIM");
- if (!interfacePriv->bcTimSetReqPendingFlag)
- {
- update_tim(priv, 0, CSR_WIFI_TIM_RESET, interfaceTag, 0xFFFFFFFF);
- }
- else
- {
- /* Cache the DTimSet value so that it will processed immidiatly after
- * completing the current setDTim Request
- */
- interfacePriv->bcTimSetReqQueued = CSR_WIFI_TIM_RESET;
- unifi_trace(priv, UDBG2, "uf_process_ma_pkt_cfm_for_ap : One more UpdateDTim Request(%d) Queued \n",
- interfacePriv->bcTimSetReqQueued);
- }
-
- }
- return;
- }
-
- /* Check if it is a Confirm for null data frame used
- * for probing station activity
- */
- for(i =0; i < UNIFI_MAX_CONNECTIONS; i++) {
- staRecord = (CsrWifiRouterCtrlStaInfo_t *) (interfacePriv->staInfo[i]);
- if (staRecord && (staRecord->nullDataHostTag == pkt_cfm->HostTag)) {
-
- unifi_trace(priv, UDBG1, "CFM for Inactive probe Null frame (tag = %x, status = %d)\n",
- pkt_cfm->HostTag,
- pkt_cfm->TransmissionStatus
- );
- staRecord->nullDataHostTag = INVALID_HOST_TAG;
-
- if(pkt_cfm->TransmissionStatus == CSR_TX_RETRY_LIMIT){
- u32 now;
- u32 inactive_time;
-
- unifi_trace(priv, UDBG1, "Nulldata to probe STA ALIVE Failed with retry limit\n");
- /* Recheck if there is some activity after null data is sent.
- *
- * If still there is no activity then send a disconnected indication
- * to SME to delete the station record.
- */
- if (staRecord->activity_flag){
- return;
- }
- now = CsrTimeGet(NULL);
-
- if (staRecord->lastActivity > now)
- {
- /* simple timer wrap (for 1 wrap) */
- inactive_time = CsrTimeAdd((u32)CsrTimeSub(CSR_SCHED_TIME_MAX, staRecord->lastActivity),
- now);
- }
- else
- {
- inactive_time = (u32)CsrTimeSub(now, staRecord->lastActivity);
- }
-
- if (inactive_time >= STA_INACTIVE_TIMEOUT_VAL)
- {
- struct list_head send_cfm_list;
- u8 j;
-
- /* The SME/NME may be waiting for confirmation for requested frames to this station.
- * Though this is --VERY UNLIKELY-- in case of station in active mode. But still as a
- * a defensive check, it loops through buffered frames for this station and if confirmation
- * is requested, send auto confirmation with failure status. Also flush the frames so
- * that these are not processed again in PEER_DEL_REQ handler.
- */
- INIT_LIST_HEAD(&send_cfm_list);
-
- uf_prepare_send_cfm_list_for_queued_pkts(priv,
- &send_cfm_list,
- &(staRecord->mgtFrames));
-
- uf_flush_list(priv, &(staRecord->mgtFrames));
-
- for(j = 0; j < MAX_ACCESS_CATOGORY; j++){
- uf_prepare_send_cfm_list_for_queued_pkts(priv,
- &send_cfm_list,
- &(staRecord->dataPdu[j]));
-
- uf_flush_list(priv, &(staRecord->dataPdu[j]));
- }
-
- send_auto_ma_packet_confirm(priv, staRecord->interfacePriv, &send_cfm_list);
-
-
-
- unifi_warning(priv, "uf_process_ma_pkt_cfm_for_ap: Router Disconnected IND Peer (%x-%x-%x-%x-%x-%x)\n",
- staRecord->peerMacAddress.a[0],
- staRecord->peerMacAddress.a[1],
- staRecord->peerMacAddress.a[2],
- staRecord->peerMacAddress.a[3],
- staRecord->peerMacAddress.a[4],
- staRecord->peerMacAddress.a[5]);
-
- CsrWifiRouterCtrlConnectedIndSend(priv->CSR_WIFI_SME_IFACEQUEUE,
- 0,
- staRecord->interfacePriv->InterfaceTag,
- staRecord->peerMacAddress,
- CSR_WIFI_ROUTER_CTRL_PEER_DISCONNECTED);
- }
-
- }
- else if (pkt_cfm->TransmissionStatus == CSR_TX_SUCCESSFUL)
- {
- staRecord->activity_flag = TRUE;
- }
- }
- }
-}
-
-#endif
-u16 uf_get_vif_identifier (CsrWifiRouterCtrlMode mode, u16 tag)
-{
- switch(mode)
- {
- case CSR_WIFI_ROUTER_CTRL_MODE_STA:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI:
- return (0x02<<8|tag);
-
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- return (0x03<<8|tag);
-
- case CSR_WIFI_ROUTER_CTRL_MODE_IBSS:
- return (0x01<<8|tag);
-
- case CSR_WIFI_ROUTER_CTRL_MODE_MONITOR:
- return (0x04<<8|tag);
- case CSR_WIFI_ROUTER_CTRL_MODE_AMP:
- return (0x05<<8|tag);
- default:
- return tag;
- }
-}
-
-#ifdef CSR_SUPPORT_SME
-
-/*
- * ---------------------------------------------------------------------------
- * update_macheader
- *
- *
- * These functions updates mac header for intra BSS packet
- * routing.
- * NOTE: This function always has to be called in rx context which
- * is in bh thread context since GFP_KERNEL is used. In soft IRQ/ Interrupt
- * context shouldn't be used
- *
- * Arguments:
- * priv Pointer to device private context struct
- * skb Socket buffer containing data packet to transmit
- * newSkb Socket buffer containing data packet + Mac header if no sufficient headroom in skb
- * priority to append QOS control header in Mac header
- * bulkdata if newSkb allocated then bulkdata updated to send to unifi
- * interfaceTag the interfaceID on which activity going on
- * macHeaderLengthInBytes no. of bytes of mac header in received frame
- * qosDestination used to append Qos control field
- *
- * Returns:
- * Zero on success or -1 on error.
- * ---------------------------------------------------------------------------
- */
-
-static int update_macheader(unifi_priv_t *priv, struct sk_buff *skb,
- struct sk_buff *newSkb, CSR_PRIORITY *priority,
- bulk_data_param_t *bulkdata, u16 interfaceTag,
- u8 macHeaderLengthInBytes,
- u8 qosDestination)
-{
-
- u16 *fc = NULL;
- u8 direction = 0, toDs, fromDs;
- u8 *bufPtr = NULL;
- u8 sa[ETH_ALEN], da[ETH_ALEN];
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- int headroom;
- u8 macHeaderBuf[IEEE802_11_DATA_FRAME_MAC_HEADER_SIZE] = {0};
-
- unifi_trace(priv, UDBG5, "entering the update_macheader function\n");
-
- /* temporary buffer for the Mac header storage */
- memcpy(macHeaderBuf, skb->data, macHeaderLengthInBytes);
-
- /* remove the Macheader from the skb */
- skb_pull(skb, macHeaderLengthInBytes);
-
- /* get the skb headroom for skb_push check */
- headroom = skb_headroom(skb);
-
- /* pointer to frame control field */
- fc = (u16*) macHeaderBuf;
-
- toDs = (*fc & cpu_to_le16(IEEE802_11_FC_TO_DS_MASK))?1 : 0;
- fromDs = (*fc & cpu_to_le16(IEEE802_11_FC_FROM_DS_MASK))? 1: 0;
- unifi_trace(priv, UDBG5, "In update_macheader function, fromDs = %x, toDs = %x\n", fromDs, toDs);
- direction = ((fromDs | (toDs << 1)) & 0x3);
-
- /* Address1 or 3 from the macheader */
- memcpy(da, macHeaderBuf+4+toDs*12, ETH_ALEN);
- /* Address2, 3 or 4 from the mac header */
- memcpy(sa, macHeaderBuf+10+fromDs*(6+toDs*8), ETH_ALEN);
-
- unifi_trace(priv, UDBG3, "update_macheader:direction = %x\n", direction);
- /* update the toDs, fromDs & address fields in Mac header */
- switch(direction)
- {
- case 2:
- /* toDs = 1 & fromDs = 0 , toAp when frames received from peer
- * while sending this packet to Destination the Mac header changed
- * as fromDs = 1 & toDs = 0, fromAp
- */
- *fc &= cpu_to_le16(~IEEE802_11_FC_TO_DS_MASK);
- *fc |= cpu_to_le16(IEEE802_11_FC_FROM_DS_MASK);
- /* Address1: MAC address of the actual destination (4 = 2+2) */
- memcpy(macHeaderBuf + 4, da, ETH_ALEN);
- /* Address2: The MAC address of the AP (10 = 2+2+6) */
- memcpy(macHeaderBuf + 10, &interfacePriv->bssid, ETH_ALEN);
- /* Address3: MAC address of the actual source from mac header (16 = 2+2+6+6) */
- memcpy(macHeaderBuf + 16, sa, ETH_ALEN);
- break;
- case 3:
- unifi_trace(priv, UDBG3, "when both the toDs & fromDS set, NOT SUPPORTED\n");
- break;
- default:
- unifi_trace(priv, UDBG3, "problem in decoding packet in update_macheader \n");
- return -1;
- }
-
- /* frameType is Data always, Validation is done before calling this function */
-
- /* check for the souce station type */
- switch(le16_to_cpu(*fc) & IEEE80211_FC_SUBTYPE_MASK)
- {
- case IEEE802_11_FC_TYPE_QOS_DATA & IEEE80211_FC_SUBTYPE_MASK:
- /* No need to modify the qos control field */
- if (!qosDestination) {
-
- /* If source Sta is QOS enabled & if this bit set, then HTC is supported by
- * peer station & htc field present in macHeader
- */
- if (*fc & cpu_to_le16(IEEE80211_FC_ORDER_MASK)) {
- /* HT control field present in Mac header
- * 6 = sizeof(qosControl) + sizeof(htc)
- */
- macHeaderLengthInBytes -= 6;
- } else {
- macHeaderLengthInBytes -= 2;
- }
- /* Destination STA is non qos so change subtype to DATA */
- *fc &= cpu_to_le16(~IEEE80211_FC_SUBTYPE_MASK);
- *fc |= cpu_to_le16(IEEE802_11_FC_TYPE_DATA);
- /* remove the qos control field & HTC(if present). new macHeaderLengthInBytes is less than old
- * macHeaderLengthInBytes so no need to verify skb headroom
- */
- if (headroom < macHeaderLengthInBytes) {
- unifi_trace(priv, UDBG1, " sufficient headroom not there to push updated mac header \n");
- return -1;
- }
- bufPtr = (u8 *) skb_push(skb, macHeaderLengthInBytes);
-
- /* update bulk data os_data_ptr */
- bulkdata->d[0].os_data_ptr = skb->data;
- bulkdata->d[0].os_net_buf_ptr = (unsigned char*)skb;
- bulkdata->d[0].data_length = skb->len;
-
- } else {
- /* pointing to QOS control field */
- u8 qc;
- if (*fc & cpu_to_le16(IEEE80211_FC_ORDER_MASK)) {
- qc = *((u8*)(macHeaderBuf + (macHeaderLengthInBytes - 4 - 2)));
- } else {
- qc = *((u8*)(macHeaderBuf + (macHeaderLengthInBytes - 2)));
- }
-
- if ((qc & IEEE802_11_QC_TID_MASK) > 7) {
- *priority = 7;
- } else {
- *priority = qc & IEEE802_11_QC_TID_MASK;
- }
-
- unifi_trace(priv, UDBG1, "Incoming packet priority from QSTA is %x\n", *priority);
-
- if (headroom < macHeaderLengthInBytes) {
- unifi_trace(priv, UDBG3, " sufficient headroom not there to push updated mac header \n");
- return -1;
- }
- bufPtr = (u8 *) skb_push(skb, macHeaderLengthInBytes);
- }
- break;
- default:
- {
- bulk_data_param_t data_ptrs;
- CsrResult csrResult;
- unifi_trace(priv, UDBG5, "normal Data packet, NO QOS \n");
-
- if (qosDestination) {
- u8 qc = 0;
- unifi_trace(priv, UDBG3, "destination is QOS station \n");
-
- /* Set Ma-Packet.req UP to UP0 */
- *priority = CSR_QOS_UP0;
-
- /* prepare the qos control field */
- qc |= CSR_QOS_UP0;
- /* no Amsdu is in ap buffer so eosp is left 0 */
- if (da[0] & 0x1) {
- /* multicast/broadcast frames, no acknowledgement needed */
- qc |= 1 << 5;
- }
-
- /* update new Mac header Length with 2 = sizeof(qos control) */
- macHeaderLengthInBytes += 2;
-
- /* received DATA frame but destiantion is QOS station so update subtype to QOS*/
- *fc &= cpu_to_le16(~IEEE80211_FC_SUBTYPE_MASK);
- *fc |= cpu_to_le16(IEEE802_11_FC_TYPE_QOS_DATA);
-
- /* appendQosControlOffset = macHeaderLengthInBytes - 2, since source sta is not QOS */
- macHeaderBuf[macHeaderLengthInBytes - 2] = qc;
- /* txopLimit is 0 */
- macHeaderBuf[macHeaderLengthInBytes - 1] = 0;
- if (headroom < macHeaderLengthInBytes) {
- csrResult = unifi_net_data_malloc(priv, &data_ptrs.d[0], skb->len + macHeaderLengthInBytes);
-
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, " failed to allocate request_data. in update_macheader func\n");
- return -1;
- }
- newSkb = (struct sk_buff *)(data_ptrs.d[0].os_net_buf_ptr);
- newSkb->len = skb->len + macHeaderLengthInBytes;
-
- memcpy((void*)data_ptrs.d[0].os_data_ptr + macHeaderLengthInBytes,
- skb->data, skb->len);
-
- bulkdata->d[0].os_data_ptr = newSkb->data;
- bulkdata->d[0].os_net_buf_ptr = (unsigned char*)newSkb;
- bulkdata->d[0].data_length = newSkb->len;
-
- bufPtr = (u8*)data_ptrs.d[0].os_data_ptr;
-
- /* The old skb will not be used again */
- kfree_skb(skb);
- } else {
- /* skb headroom is sufficient to append Macheader */
- bufPtr = (u8*)skb_push(skb, macHeaderLengthInBytes);
- bulkdata->d[0].os_data_ptr = skb->data;
- bulkdata->d[0].os_net_buf_ptr = (unsigned char*)skb;
- bulkdata->d[0].data_length = skb->len;
- }
- } else {
- unifi_trace(priv, UDBG3, "destination is not a QSTA\n");
- if (headroom < macHeaderLengthInBytes) {
- csrResult = unifi_net_data_malloc(priv, &data_ptrs.d[0], skb->len + macHeaderLengthInBytes);
-
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, " failed to allocate request_data. in update_macheader func\n");
- return -1;
- }
- newSkb = (struct sk_buff *)(data_ptrs.d[0].os_net_buf_ptr);
- newSkb->len = skb->len + macHeaderLengthInBytes;
-
- memcpy((void*)data_ptrs.d[0].os_data_ptr + macHeaderLengthInBytes,
- skb->data, skb->len);
-
- bulkdata->d[0].os_data_ptr = newSkb->data;
- bulkdata->d[0].os_net_buf_ptr = (unsigned char*)newSkb;
- bulkdata->d[0].data_length = newSkb->len;
-
- bufPtr = (u8*)data_ptrs.d[0].os_data_ptr;
-
- /* The old skb will not be used again */
- kfree_skb(skb);
- } else {
- /* skb headroom is sufficient to append Macheader */
- bufPtr = (u8*)skb_push(skb, macHeaderLengthInBytes);
- bulkdata->d[0].os_data_ptr = skb->data;
- bulkdata->d[0].os_net_buf_ptr = (unsigned char*)skb;
- bulkdata->d[0].data_length = skb->len;
- }
- }
- }
- }
-
- /* prepare the complete skb, by pushing the MAC header to the beginning of the skb->data */
- unifi_trace(priv, UDBG5, "updated Mac Header: %d \n", macHeaderLengthInBytes);
- memcpy(bufPtr, macHeaderBuf, macHeaderLengthInBytes);
-
- unifi_trace(priv, UDBG5, "leaving the update_macheader function\n");
- return 0;
-}
-/*
- * ---------------------------------------------------------------------------
- * uf_ap_process_data_pdu
- *
- *
- * Takes care of intra BSS admission control & routing packets within BSS
- *
- * Arguments:
- * priv Pointer to device private context struct
- * skb Socket buffer containing data packet to transmit
- * ehdr ethernet header to fetch priority of packet
- * srcStaInfo source stations record for connection verification
- * packed_signal
- * signal_len
- * signal MA-PACKET.indication signal
- * bulkdata if newSkb allocated then bulkdata updated to send to unifi
- * macHeaderLengthInBytes no. of bytes of mac header in received frame
- *
- * Returns:
- * Zero on success(ap processing complete) or -1 if packet also have to be sent to NETDEV.
- * ---------------------------------------------------------------------------
- */
-int
-uf_ap_process_data_pdu(unifi_priv_t *priv, struct sk_buff *skb,
- struct ethhdr *ehdr, CsrWifiRouterCtrlStaInfo_t * srcStaInfo,
- const CSR_SIGNAL *signal,
- bulk_data_param_t *bulkdata,
- u8 macHeaderLengthInBytes)
-{
- const CSR_MA_PACKET_INDICATION *ind = &(signal->u.MaPacketIndication);
- u16 interfaceTag = (ind->VirtualInterfaceIdentifier & 0x00ff);
- struct sk_buff *newSkb = NULL;
- /* pointer to skb or private skb created using skb_copy() */
- struct sk_buff *skbPtr = skb;
- u8 sendToNetdev = FALSE;
- u8 qosDestination = FALSE;
- CSR_PRIORITY priority = CSR_CONTENTION;
- CsrWifiRouterCtrlStaInfo_t *dstStaInfo = NULL;
- netInterface_priv_t *interfacePriv;
-
- unifi_trace(priv, UDBG5, "entering uf_ap_process_data_pdu %d\n", macHeaderLengthInBytes);
- /* InterfaceTag validation from MA_PACKET.indication */
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_trace(priv, UDBG1, "Interface Tag is Invalid in uf_ap_process_data_pdu\n");
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return 0;
- }
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- if((interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) &&
- (interfacePriv->intraBssEnabled == FALSE)) {
- unifi_trace(priv, UDBG2, "uf_ap_process_data_pdu:P2P GO intrabssEnabled?= %d\n", interfacePriv->intraBssEnabled);
-
- /*In P2P GO case, if intraBSS distribution Disabled then don't do IntraBSS routing */
- /* If destination in our BSS then drop otherwise give packet to netdev */
- dstStaInfo = CsrWifiRouterCtrlGetStationRecordFromPeerMacAddress(priv, ehdr->h_dest, interfaceTag);
- if (dstStaInfo) {
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return 0;
- }
- /* May be associated P2PCLI trying to send the packets on backbone (Netdev) */
- return -1;
- }
-
- if(!memcmp(ehdr->h_dest, interfacePriv->bssid.a, ETH_ALEN)) {
- /* This packet will be given to the TCP/IP stack since this packet is for us(AP)
- * No routing needed */
- unifi_trace(priv, UDBG4, "destination address is csr_ap\n");
- return -1;
- }
-
- /* fetch the destination record from station record database */
- dstStaInfo = CsrWifiRouterCtrlGetStationRecordFromPeerMacAddress(priv, ehdr->h_dest, interfaceTag);
-
- /* AP mode processing, & if packet is unicast */
- if(!dstStaInfo) {
- if (!(ehdr->h_dest[0] & 0x1)) {
- /* destination not in station record & its a unicast packet, so pass the packet to network stack */
- unifi_trace(priv, UDBG3, "unicast frame & destination record not exist, send to netdev proto = %x\n", htons(skb->protocol));
- return -1;
- } else {
- /* packet is multicast/broadcast */
- /* copy the skb to skbPtr, send skb to netdev & skbPtr to multicast/broad cast list */
- unifi_trace(priv, UDBG5, "skb_copy, in uf_ap_process_data_pdu, protocol = %x\n", htons(skb->protocol));
- skbPtr = skb_copy(skb, GFP_KERNEL);
- if(skbPtr == NULL) {
- /* We don't have memory to don't send the frame in BSS*/
- unifi_notice(priv, "broacast/multicast frame can't be sent in BSS No memeory: proto = %x\n", htons(skb->protocol));
- return -1;
- }
- sendToNetdev = TRUE;
- }
- } else {
-
- /* validate the Peer & Destination Station record */
- if (uf_process_station_records_for_sending_data(priv, interfaceTag, srcStaInfo, dstStaInfo)) {
- unifi_notice(priv, "uf_ap_process_data_pdu: station record validation failed \n");
- interfacePriv->stats.rx_errors++;
- unifi_net_data_free(priv, &bulkdata->d[0]);
- return 0;
- }
- }
-
- /* BroadCast packet received and it's been sent as non QOS packets.
- * Since WMM spec not mandates broadcast/multicast to be sent as QOS data only,
- * if all Peers are QSTA
- */
- if(sendToNetdev) {
- /* BroadCast packet and it's been sent as non QOS packets */
- qosDestination = FALSE;
- } else if(dstStaInfo && (dstStaInfo->wmmOrQosEnabled == TRUE)) {
- qosDestination = TRUE;
- }
-
- unifi_trace(priv, UDBG3, "uf_ap_process_data_pdu QoS destination = %s\n", (qosDestination)? "TRUE": "FALSE");
-
- /* packet is allowed to send to unifi, update the Mac header */
- if (update_macheader(priv, skbPtr, newSkb, &priority, bulkdata, interfaceTag, macHeaderLengthInBytes, qosDestination)) {
- interfacePriv->stats.rx_errors++;
- unifi_notice(priv, "(Packet Drop) failed to update the Mac header in uf_ap_process_data_pdu\n");
- if (sendToNetdev) {
- /* Free's the skb_copy(skbPtr) data since packet processing failed */
- bulkdata->d[0].os_data_ptr = skbPtr->data;
- bulkdata->d[0].os_net_buf_ptr = (unsigned char*)skbPtr;
- bulkdata->d[0].data_length = skbPtr->len;
- unifi_net_data_free(priv, &bulkdata->d[0]);
- }
- return -1;
- }
-
- unifi_trace(priv, UDBG3, "Mac Header updated...calling uf_process_ma_packet_req \n");
-
- /* Packet is ready to send to unifi ,transmissionControl = 0x0004, confirmation is not needed for data packets */
- if (uf_process_ma_packet_req(priv, ehdr->h_dest, 0xffffffff, interfaceTag, CSR_NO_CONFIRM_REQUIRED, (CSR_RATE)0, priority, priv->netdev_client->sender_id, bulkdata)) {
- if (sendToNetdev) {
- unifi_trace(priv, UDBG1, "In uf_ap_process_data_pdu, (Packet Drop) uf_process_ma_packet_req failed. freeing skb_copy data (original data sent to Netdev)\n");
- /* Free's the skb_copy(skbPtr) data since packet processing failed */
- bulkdata->d[0].os_data_ptr = skbPtr->data;
- bulkdata->d[0].os_net_buf_ptr = (unsigned char*)skbPtr;
- bulkdata->d[0].data_length = skbPtr->len;
- unifi_net_data_free(priv, &bulkdata->d[0]);
- } else {
- /* This free's the skb data */
- unifi_trace(priv, UDBG1, "In uf_ap_process_data_pdu, (Packet Drop). Unicast data so freeing original skb \n");
- unifi_net_data_free(priv, &bulkdata->d[0]);
- }
- }
- unifi_trace(priv, UDBG5, "leaving uf_ap_process_data_pdu\n");
-
- if (sendToNetdev) {
- /* The packet is multicast/broadcast, so after AP processing packet has to
- * be sent to netdev, if peer port state is open
- */
- unifi_trace(priv, UDBG4, "Packet will be routed to NetDev\n");
- return -1;
- }
- /* Ap handled the packet & its a unicast packet, no need to send to netdev */
- return 0;
-}
-
-#endif
-
-CsrResult uf_process_ma_packet_req(unifi_priv_t *priv,
- u8 *peerMacAddress,
- CSR_CLIENT_TAG hostTag,
- u16 interfaceTag,
- CSR_TRANSMISSION_CONTROL transmissionControl,
- CSR_RATE TransmitRate,
- CSR_PRIORITY priority,
- CSR_PROCESS_ID leSenderProcessId,
- bulk_data_param_t *bulkdata)
-{
- CsrResult status = CSR_RESULT_SUCCESS;
- CSR_SIGNAL signal;
- int result;
-#ifdef CSR_SUPPORT_SME
- CsrWifiRouterCtrlStaInfo_t *staRecord = NULL;
- const u8 *macHdrLocation = bulkdata->d[0].os_data_ptr;
- CsrWifiPacketType pktType;
- int frameType = 0;
- u8 queuePacketDozing = FALSE;
- u32 priority_q;
- u16 frmCtrl;
- struct list_head * list = NULL; /* List to which buffered PDUs are to be enqueued*/
- u8 setBcTim=FALSE;
- netInterface_priv_t *interfacePriv;
- u8 requeueOnSamePos = FALSE;
- u32 handle = 0xFFFFFFFF;
- unsigned long lock_flags;
-
- unifi_trace(priv, UDBG5,
- "entering uf_process_ma_packet_req, peer: %pMF\n",
- peerMacAddress);
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "interfaceTag >= CSR_WIFI_NUM_INTERFACES, interfacetag = %d\n", interfaceTag);
- return CSR_RESULT_FAILURE;
- }
- interfacePriv = priv->interfacePriv[interfaceTag];
-
-
- /* fetch the station record for corresponding peer mac address */
- if ((staRecord = CsrWifiRouterCtrlGetStationRecordFromPeerMacAddress(priv, peerMacAddress, interfaceTag))) {
- handle = staRecord->assignedHandle;
- }
-
- /* Frame ma-packet.req, this is saved/transmitted depend on queue state */
- unifi_frame_ma_packet_req(priv, priority, TransmitRate, hostTag,
- interfaceTag, transmissionControl, leSenderProcessId,
- peerMacAddress, &signal);
-
- /* Since it's common path between STA & AP mode, in case of STA packet
- * need not to be queued but in AP case we have to queue PDU's in
- * different scenarios
- */
- switch(interfacePriv->interfaceMode)
- {
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- /* For this mode processing done below */
- break;
- default:
- /* In case of STA/IBSS/P2PCLI/AMP, no checks needed send the packet down & return */
- unifi_trace(priv, UDBG5, "In %s, interface mode is %x \n", __FUNCTION__, interfacePriv->interfaceMode);
- if (interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_NONE) {
- unifi_warning(priv, "In %s, interface mode NONE \n", __FUNCTION__);
- }
- if ((result = ul_send_signal_unpacked(priv, &signal, bulkdata))) {
- status = CSR_RESULT_FAILURE;
- }
- return status;
- }
-
- /* -----Only AP/P2pGO mode handling falls below----- */
-
- /* convert priority to queue */
- priority_q = unifi_frame_priority_to_queue((CSR_PRIORITY) priority);
-
- /* check the powersave status of the peer */
- if (staRecord && (staRecord->currentPeerState ==
- CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_POWER_SAVE)) {
- /* Peer is dozing & packet have to be delivered, so buffer the packet &
- * update the TIM
- */
- queuePacketDozing = TRUE;
- }
-
- /* find the type of frame unicast or mulicast/broadcast */
- if (*peerMacAddress & 0x1) {
- /* Multicast/broadCast data are always triggered by vif_availability.ind
- * at the DTIM
- */
- pktType = CSR_WIFI_MULTICAST_PDU;
- } else {
- pktType = CSR_WIFI_UNICAST_PDU;
- }
-
- /* Fetch the frame control field from mac header & check for frame type */
- frmCtrl = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(macHdrLocation);
-
- /* Processing done according to Frame/Packet type */
- frameType = ((frmCtrl & 0x000c) >> FRAME_CONTROL_TYPE_FIELD_OFFSET);
- switch(frameType)
- {
- case IEEE802_11_FRAMETYPE_MANAGEMENT:
-
- switch(pktType)
- {
- case CSR_WIFI_UNICAST_PDU:
- unifi_trace(priv, UDBG5, "management unicast PDU in uf_process_ma_packet_req \n");
- /* push the packet in to the queue with appropriate mgt list */
- if (!staRecord) {
- /* push the packet to the unifi if list is empty (if packet lost how to re-enque) */
- if (list_empty(&interfacePriv->genericMgtFrames)) {
-#ifdef CSR_SUPPORT_SME
- if(!(IS_DTIM_ACTIVE(interfacePriv->dtimActive, interfacePriv->multicastPduHostTag))) {
-#endif
-
- unifi_trace(priv, UDBG3, "genericMgtFrames list is empty uf_process_ma_packet_req \n");
- result = ul_send_signal_unpacked(priv, &signal, bulkdata);
- /* reque only on ENOSPC */
- if(result == -ENOSPC) {
- /* requeue the failed packet to genericMgtFrame with same position */
- unifi_trace(priv, UDBG1, "(ENOSPC) Sending genericMgtFrames Failed so buffering\n");
- list = &interfacePriv->genericMgtFrames;
- requeueOnSamePos = TRUE;
- }
-#ifdef CSR_SUPPORT_SME
- }else{
- list = &interfacePriv->genericMgtFrames;
- unifi_trace(priv, UDBG3, "genericMgtFrames queue empty and dtim started\n hosttag is 0x%x,\n", signal.u.MaPacketRequest.HostTag);
- update_eosp_to_head_of_broadcast_list_head(priv, interfaceTag);
- }
-#endif
- } else {
- /* Queue the packet to genericMgtFrame of unifi_priv_t data structure */
- list = &interfacePriv->genericMgtFrames;
- unifi_trace(priv, UDBG2, "genericMgtFrames queue not empty\n");
- }
- } else {
- /* check peer power state */
- if (queuePacketDozing || !list_empty(&staRecord->mgtFrames) || IS_DTIM_ACTIVE(interfacePriv->dtimActive, interfacePriv->multicastPduHostTag)) {
- /* peer is in dozing mode, so queue packet in mgt frame list of station record */
- /*if multicast traffic is going on, buffer the unicast packets*/
- list = &staRecord->mgtFrames;
-
- unifi_trace(priv, UDBG1, "staRecord->MgtFrames list empty? = %s, handle = %d, queuePacketDozing = %d\n",
- (list_empty(&staRecord->mgtFrames))? "YES": "NO", staRecord->assignedHandle, queuePacketDozing);
- if(IS_DTIM_ACTIVE(interfacePriv->dtimActive, interfacePriv->multicastPduHostTag)){
- update_eosp_to_head_of_broadcast_list_head(priv, interfaceTag);
- }
-
- } else {
- unifi_trace(priv, UDBG5, "staRecord->mgtFrames list is empty uf_process_ma_packet_req \n");
- result = ul_send_signal_unpacked(priv, &signal, bulkdata);
- if(result == -ENOSPC) {
- /* requeue the failed packet to staRecord->mgtFrames with same position */
- list = &staRecord->mgtFrames;
- requeueOnSamePos = TRUE;
- unifi_trace(priv, UDBG1, "(ENOSPC) Sending MgtFrames Failed handle = %d so buffering\n", staRecord->assignedHandle);
- priv->pausedStaHandle[0]=(u8)(staRecord->assignedHandle);
- } else if (result) {
- status = CSR_RESULT_FAILURE;
- }
- }
- }
- break;
- case CSR_WIFI_MULTICAST_PDU:
- unifi_trace(priv, UDBG5, "management multicast/broadcast PDU in uf_process_ma_packet_req 'QUEUE it' \n");
- /* Queue the packet to genericMulticastOrBroadCastMgtFrames of unifi_priv_t data structure
- * will be sent when we receive VIF AVAILABILITY from firmware as part of DTIM
- */
-
- list = &interfacePriv->genericMulticastOrBroadCastMgtFrames;
- if((interfacePriv->interfaceMode != CSR_WIFI_ROUTER_CTRL_MODE_IBSS) &&
- (list_empty(&interfacePriv->genericMulticastOrBroadCastMgtFrames))) {
- setBcTim=TRUE;
- }
- break;
- default:
- unifi_error(priv, "condition never meets: packet type unrecognized\n");
- }
- break;
- case IEEE802_11_FRAMETYPE_DATA:
- switch(pktType)
- {
- case CSR_WIFI_UNICAST_PDU:
- unifi_trace(priv, UDBG5, "data unicast PDU in uf_process_ma_packet_req \n");
- /* check peer power state, list status & peer port status */
- if(!staRecord) {
- unifi_error(priv, "In %s unicast but staRecord = NULL\n", __FUNCTION__);
- return CSR_RESULT_FAILURE;
- } else if (queuePacketDozing || isRouterBufferEnabled(priv, priority_q)|| !list_empty(&staRecord->dataPdu[priority_q]) || IS_DTIM_ACTIVE(interfacePriv->dtimActive, interfacePriv->multicastPduHostTag)) {
- /* peer is in dozing mode, so queue packet in mgt frame list of station record */
- /* if multicast traffic is going on, buffet the unicast packets */
- unifi_trace(priv, UDBG2, "Enqueued to staRecord->dataPdu[%d] queuePacketDozing=%d,\
- Buffering enabled = %d \n", priority_q, queuePacketDozing, isRouterBufferEnabled(priv, priority_q));
- list = &staRecord->dataPdu[priority_q];
- } else {
- unifi_trace(priv, UDBG5, "staRecord->dataPdu[%d] list is empty uf_process_ma_packet_req \n", priority_q);
- /* Pdu allowed to send to unifi */
- result = ul_send_signal_unpacked(priv, &signal, bulkdata);
- if(result == -ENOSPC) {
- /* requeue the failed packet to staRecord->dataPdu[priority_q] with same position */
- unifi_trace(priv, UDBG1, "(ENOSPC) Sending Unicast DataPDU to queue %d Failed so buffering\n", priority_q);
- requeueOnSamePos = TRUE;
- list = &staRecord->dataPdu[priority_q];
- priv->pausedStaHandle[priority_q]=(u8)(staRecord->assignedHandle);
- if(!isRouterBufferEnabled(priv, priority_q)) {
- unifi_error(priv, "Buffering Not enabled for queue %d \n", priority_q);
- }
- } else if (result) {
- status = CSR_RESULT_FAILURE;
- }
- }
- break;
- case CSR_WIFI_MULTICAST_PDU:
- unifi_trace(priv, UDBG5, "data multicast/broadcast PDU in uf_process_ma_packet_req \n");
- /* Queue the packet to genericMulticastOrBroadCastFrames list of unifi_priv_t data structure
- * will be sent when we receive VIF AVAILABILITY from firmware as part of DTIM
- */
- list = &interfacePriv->genericMulticastOrBroadCastFrames;
- if(list_empty(&interfacePriv->genericMulticastOrBroadCastFrames)) {
- setBcTim = TRUE;
- }
- break;
- default:
- unifi_error(priv, "condition never meets: packet type un recognized\n");
- }
- break;
- default:
- unifi_error(priv, "unrecognized frame type\n");
- }
- if(list) {
- status = enque_tx_data_pdu(priv, bulkdata, list, &signal, requeueOnSamePos);
- /* Record no. of packet queued for each peer */
- if (staRecord && (pktType == CSR_WIFI_UNICAST_PDU) && (!status)) {
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- staRecord->noOfPktQueued++;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- }
- else if ((pktType == CSR_WIFI_MULTICAST_PDU) && (!status))
- {
- /* If broadcast Tim is set && queuing is successful, then only update TIM */
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- interfacePriv->noOfbroadcastPktQueued++;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- }
- }
- /* If broadcast Tim is set && queuing is successful, then only update TIM */
- if(setBcTim && !status) {
- unifi_trace(priv, UDBG3, "tim set due to broadcast pkt\n");
- if (!interfacePriv->bcTimSetReqPendingFlag)
- {
- update_tim(priv, 0, CSR_WIFI_TIM_SET, interfaceTag, handle);
- }
- else
- {
- /* Cache the TimSet value so that it will processed immidiatly after
- * completing the current setTim Request
- */
- interfacePriv->bcTimSetReqQueued = CSR_WIFI_TIM_SET;
- unifi_trace(priv, UDBG2, "uf_process_ma_packet_req : One more UpdateDTim Request(:%d) Queued \n",
- interfacePriv->bcTimSetReqQueued);
- }
- } else if(staRecord && staRecord->currentPeerState ==
- CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_POWER_SAVE) {
- if(staRecord->timSet == CSR_WIFI_TIM_RESET || staRecord->timSet == CSR_WIFI_TIM_RESETTING) {
- if(!staRecord->wmmOrQosEnabled) {
- if(!list_empty(&staRecord->mgtFrames) ||
- !list_empty(&staRecord->dataPdu[3]) ||
- !list_empty(&staRecord->dataPdu[UNIFI_TRAFFIC_Q_CONTENTION])) {
- unifi_trace(priv, UDBG3, "tim set due to unicast pkt & peer in powersave\n");
- if (!staRecord->timRequestPendingFlag){
- update_tim(priv, staRecord->aid, 1, interfaceTag, handle);
- }
- else
- {
- /* Cache the TimSet value so that it will processed immidiatly after
- * completing the current setTim Request
- */
- staRecord->updateTimReqQueued = 1;
- unifi_trace(priv, UDBG6, "update_tim : One more UpdateTim Request (Tim value:%d) Queued for AID %x\n", staRecord->updateTimReqQueued,
- staRecord->aid);
- }
- }
- } else {
- /* Check for non delivery enable(i.e trigger enable), all delivery enable & legacy AC for TIM update in firmware */
- u8 allDeliveryEnabled = 0, dataAvailable = 0;
- /* Check if all AC's are Delivery Enabled */
- is_all_ac_deliver_enabled_and_moredata(staRecord, &allDeliveryEnabled, &dataAvailable);
- if (uf_is_more_data_for_non_delivery_ac(staRecord) || (allDeliveryEnabled && dataAvailable)
- || (!list_empty(&staRecord->mgtFrames))) {
- if (!staRecord->timRequestPendingFlag) {
- update_tim(priv, staRecord->aid, 1, interfaceTag, handle);
- }
- else
- {
- /* Cache the TimSet value so that it will processed immidiatly after
- * completing the current setTim Request
- */
- staRecord->updateTimReqQueued = 1;
- unifi_trace(priv, UDBG6, "update_tim : One more UpdateTim Request (Tim value:%d) Queued for AID %x\n", staRecord->updateTimReqQueued,
- staRecord->aid);
- }
- }
- }
- }
- }
-
- if((list) && (pktType == CSR_WIFI_UNICAST_PDU && !queuePacketDozing) && !(isRouterBufferEnabled(priv, priority_q)) && !(IS_DTIM_ACTIVE(interfacePriv->dtimActive, interfacePriv->multicastPduHostTag))) {
- unifi_trace(priv, UDBG2, "buffering cleared for queue = %d So resending buffered frames\n", priority_q);
- uf_send_buffered_frames(priv, priority_q);
- }
- unifi_trace(priv, UDBG5, "leaving uf_process_ma_packet_req \n");
- return status;
-#else
-#ifdef CSR_NATIVE_LINUX
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "interfaceTag >= CSR_WIFI_NUM_INTERFACES, interfacetag = %d\n", interfaceTag);
- return CSR_RESULT_FAILURE;
- }
- /* Frame ma-packet.req, this is saved/transmitted depend on queue state */
- unifi_frame_ma_packet_req(priv, priority, TransmitRate, hostTag, interfaceTag,
- transmissionControl, leSenderProcessId,
- peerMacAddress, &signal);
- result = ul_send_signal_unpacked(priv, &signal, bulkdata);
- if (result) {
- return CSR_RESULT_FAILURE;
- }
-#endif
- return status;
-#endif
-}
-
-#ifdef CSR_SUPPORT_SME
-s8 uf_get_protection_bit_from_interfacemode(unifi_priv_t *priv, u16 interfaceTag, const u8 *daddr)
-{
- s8 protection = 0;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-
- switch(interfacePriv->interfaceMode)
- {
- case CSR_WIFI_ROUTER_CTRL_MODE_STA:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PCLI:
- case CSR_WIFI_ROUTER_CTRL_MODE_AMP:
- case CSR_WIFI_ROUTER_CTRL_MODE_IBSS:
- protection = interfacePriv->protect;
- break;
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- {
- CsrWifiRouterCtrlStaInfo_t *dstStaInfo = NULL;
- if (daddr[0] & 0x1) {
- unifi_trace(priv, UDBG3, "broadcast/multicast packet in send_ma_pkt_request\n");
- /* In this mode, the protect member of priv structure has an information of how
- * AP/P2PGO has started, & the member updated in set mode request for AP/P2PGO
- */
- protection = interfacePriv->protect;
- } else {
- /* fetch the destination record from station record database */
- dstStaInfo = CsrWifiRouterCtrlGetStationRecordFromPeerMacAddress(priv, daddr, interfaceTag);
- if (!dstStaInfo) {
- unifi_trace(priv, UDBG3, "peer not found in station record in send_ma_pkt_request\n");
- return -1;
- }
- protection = dstStaInfo->protection;
- }
- }
- break;
- default:
- unifi_trace(priv, UDBG2, "mode unknown in send_ma_pkt_request\n");
- }
- return protection;
-}
-#endif
-#ifdef CSR_SUPPORT_SME
-u8 send_multicast_frames(unifi_priv_t *priv, u16 interfaceTag)
-{
- int r;
- tx_buffered_packets_t * buffered_pkt = NULL;
- u8 moreData = FALSE;
- u8 pduSent =0;
- unsigned long lock_flags;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- u32 hostTag = 0xffffffff;
-
- if(!isRouterBufferEnabled(priv, UNIFI_TRAFFIC_Q_VO)) {
- while((interfacePriv->dtimActive)&& (buffered_pkt=dequeue_tx_data_pdu(priv, &interfacePriv->genericMulticastOrBroadCastMgtFrames))) {
- buffered_pkt->transmissionControl |= (TRANSMISSION_CONTROL_TRIGGER_MASK);
- moreData = (buffered_pkt->transmissionControl & TRANSMISSION_CONTROL_EOSP_MASK)?FALSE:TRUE;
-
-
- unifi_trace(priv, UDBG2, "DTIM Occurred for interface:sending Mgt packet %d\n", interfaceTag);
-
- if((r=frame_and_send_queued_pdu(priv, buffered_pkt, NULL, moreData, FALSE)) == -ENOSPC) {
- unifi_trace(priv, UDBG1, "frame_and_send_queued_pdu failed with ENOSPC for host tag = %x\n", buffered_pkt->hostTag);
- /* Enqueue at the head of the queue */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, &interfacePriv->genericMulticastOrBroadCastMgtFrames);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- break;
- } else {
- unifi_trace(priv, UDBG1, "send_multicast_frames: Send genericMulticastOrBroadCastMgtFrames (%x, %x)\n",
- buffered_pkt->hostTag,
- r);
- if(r) {
- unifi_net_data_free(priv, &buffered_pkt->bulkdata);
- }
- if(!moreData) {
-
- interfacePriv->dtimActive = FALSE;
- if(!r) {
- hostTag = buffered_pkt->hostTag;
- pduSent++;
- } else {
- send_vif_availibility_rsp(priv, uf_get_vif_identifier(interfacePriv->interfaceMode, interfaceTag), CSR_RC_UNSPECIFIED_FAILURE);
- }
- }
- /* Buffered frame sent successfully */
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- interfacePriv->noOfbroadcastPktQueued--;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- kfree(buffered_pkt);
- }
-
- }
- }
- if(!isRouterBufferEnabled(priv, UNIFI_TRAFFIC_Q_CONTENTION)) {
- while((interfacePriv->dtimActive)&& (buffered_pkt=dequeue_tx_data_pdu(priv, &interfacePriv->genericMulticastOrBroadCastFrames))) {
- buffered_pkt->transmissionControl |= TRANSMISSION_CONTROL_TRIGGER_MASK;
- moreData = (buffered_pkt->transmissionControl & TRANSMISSION_CONTROL_EOSP_MASK)?FALSE:TRUE;
-
-
- if((r=frame_and_send_queued_pdu(priv, buffered_pkt, NULL, moreData, FALSE)) == -ENOSPC) {
- /* Clear the trigger bit transmission control*/
- buffered_pkt->transmissionControl &= ~(TRANSMISSION_CONTROL_TRIGGER_MASK);
- /* Enqueue at the head of the queue */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, &interfacePriv->genericMulticastOrBroadCastFrames);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- break;
- } else {
- if(r) {
- unifi_trace(priv, UDBG1, "send_multicast_frames: Send genericMulticastOrBroadCastFrame failed (%x, %x)\n",
- buffered_pkt->hostTag,
- r);
- unifi_net_data_free(priv, &buffered_pkt->bulkdata);
- }
- if(!moreData) {
- interfacePriv->dtimActive = FALSE;
- if(!r) {
- pduSent ++;
- hostTag = buffered_pkt->hostTag;
- } else {
- send_vif_availibility_rsp(priv, uf_get_vif_identifier(interfacePriv->interfaceMode, interfaceTag), CSR_RC_UNSPECIFIED_FAILURE);
- }
- }
- /* Buffered frame sent successfully */
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- interfacePriv->noOfbroadcastPktQueued--;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- kfree(buffered_pkt);
- }
- }
- }
- if((interfacePriv->dtimActive == FALSE)) {
- /* Record the host Tag*/
- unifi_trace(priv, UDBG2, "send_multicast_frames: Recorded hostTag of EOSP packet: = 0x%x\n", hostTag);
- interfacePriv->multicastPduHostTag = hostTag;
- }
- return pduSent;
-}
-#endif
-void uf_process_ma_vif_availibility_ind(unifi_priv_t *priv, u8 *sigdata,
- u32 siglen)
-{
-#ifdef CSR_SUPPORT_SME
- CSR_SIGNAL signal;
- CSR_MA_VIF_AVAILABILITY_INDICATION *ind;
- int r;
- u16 interfaceTag;
- u8 pduSent =0;
- CSR_RESULT_CODE resultCode = CSR_RC_SUCCESS;
- netInterface_priv_t *interfacePriv;
-
- unifi_trace(priv, UDBG3,
- "uf_process_ma_vif_availibility_ind: Process signal 0x%.4X\n",
- *((u16*)sigdata));
-
- r = read_unpack_signal(sigdata, &signal);
- if (r) {
- unifi_error(priv,
- "uf_process_ma_vif_availibility_ind: Received unknown signal 0x%.4X.\n",
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN(sigdata));
- return;
- }
- ind = &signal.u.MaVifAvailabilityIndication;
- interfaceTag=ind->VirtualInterfaceIdentifier & 0xff;
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "in vif_availability_ind interfaceTag is wrong\n");
- return;
- }
-
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- if(ind->Multicast) {
- if(list_empty(&interfacePriv->genericMulticastOrBroadCastFrames) &&
- list_empty(&interfacePriv->genericMulticastOrBroadCastMgtFrames)) {
- /* This condition can occur because of a potential race where the
- TIM is not yet reset as host is waiting for confirm but it is sent
- by firmware and DTIM occurs*/
- unifi_notice(priv, "ma_vif_availibility_ind recevied for multicast but queues are empty%d\n", interfaceTag);
- send_vif_availibility_rsp(priv, ind->VirtualInterfaceIdentifier, CSR_RC_NO_BUFFERED_BROADCAST_MULTICAST_FRAMES);
- interfacePriv->dtimActive = FALSE;
- if(interfacePriv->multicastPduHostTag == 0xffffffff) {
- unifi_notice(priv, "ma_vif_availibility_ind recevied for multicast but queues are empty%d\n", interfaceTag);
- /* This may be an extra request in very rare race conditions but it is fine as it would atleast remove the potential lock up */
- if (!interfacePriv->bcTimSetReqPendingFlag)
- {
- update_tim(priv, 0, CSR_WIFI_TIM_RESET, interfaceTag, 0xFFFFFFFF);
- }
- else
- {
- /* Cache the TimSet value so that it will processed immidiatly after
- * completing the current setTim Request
- */
- interfacePriv->bcTimSetReqQueued = CSR_WIFI_TIM_RESET;
- unifi_trace(priv, UDBG2, "uf_process_ma_vif_availibility_ind : One more UpdateDTim Request(%d) Queued \n",
- interfacePriv->bcTimSetReqQueued);
- }
- }
- return;
- }
- if(interfacePriv->dtimActive) {
- unifi_trace(priv, UDBG2, "DTIM Occurred for already active DTIM interface %d\n", interfaceTag);
- return;
- } else {
- unifi_trace(priv, UDBG2, "DTIM Occurred for interface %d\n", interfaceTag);
- if(list_empty(&interfacePriv->genericMulticastOrBroadCastFrames)) {
- set_eosp_transmit_ctrl(priv, &interfacePriv->genericMulticastOrBroadCastMgtFrames);
- } else {
- set_eosp_transmit_ctrl(priv, &interfacePriv->genericMulticastOrBroadCastFrames);
- }
- }
- interfacePriv->dtimActive = TRUE;
- pduSent = send_multicast_frames(priv, interfaceTag);
- }
- else {
- unifi_error(priv, "Interface switching is not supported %d\n", interfaceTag);
- resultCode = CSR_RC_NOT_SUPPORTED;
- send_vif_availibility_rsp(priv, ind->VirtualInterfaceIdentifier, CSR_RC_NOT_SUPPORTED);
- }
-#endif
-}
-#ifdef CSR_SUPPORT_SME
-
-#define GET_ACTIVE_INTERFACE_TAG(priv) 0
-
-static u8 uf_is_more_data_for_delivery_ac(unifi_priv_t *priv, CsrWifiRouterCtrlStaInfo_t *staRecord)
-{
- s8 i;
-
- for(i=UNIFI_TRAFFIC_Q_VO; i >= UNIFI_TRAFFIC_Q_BK; i--)
- {
- if(((staRecord->powersaveMode[i]==CSR_WIFI_AC_DELIVERY_ONLY_ENABLE)
- ||(staRecord->powersaveMode[i]==CSR_WIFI_AC_TRIGGER_AND_DELIVERY_ENABLED))
- &&(!list_empty(&staRecord->dataPdu[i]))) {
- unifi_trace(priv, UDBG2, "uf_is_more_data_for_delivery_ac: Data Available AC = %d\n", i);
- return TRUE;
- }
- }
-
- unifi_trace(priv, UDBG2, "uf_is_more_data_for_delivery_ac: Data NOT Available \n");
- return FALSE;
-}
-
-static u8 uf_is_more_data_for_usp_delivery(unifi_priv_t *priv, CsrWifiRouterCtrlStaInfo_t *staRecord, unifi_TrafficQueue queue)
-{
- s8 i;
-
- for(i = queue; i >= UNIFI_TRAFFIC_Q_BK; i--)
- {
- if(((staRecord->powersaveMode[i]==CSR_WIFI_AC_DELIVERY_ONLY_ENABLE)
- ||(staRecord->powersaveMode[i]==CSR_WIFI_AC_TRIGGER_AND_DELIVERY_ENABLED))
- &&(!list_empty(&staRecord->dataPdu[i]))) {
- unifi_trace(priv, UDBG2, "uf_is_more_data_for_usp_delivery: Data Available AC = %d\n", i);
- return TRUE;
- }
- }
-
- unifi_trace(priv, UDBG2, "uf_is_more_data_for_usp_delivery: Data NOT Available \n");
- return FALSE;
-}
-
-/*
- * ---------------------------------------------------------------------------
- * uf_send_buffered_data_from_delivery_ac
- *
- * This function takes care of
- * -> Parsing the delivery enabled queue & sending frame down to HIP
- * -> Setting EOSP=1 when USP to be terminated
- * -> Depending on MAX SP length services the USP
- *
- * NOTE:This function always called from uf_handle_uspframes_delivery(), Dont
- * call this function from any other location in code
- *
- * Arguments:
- * priv Pointer to device private context struct
- * vif interface specific HIP vif instance
- * staInfo peer for which UAPSD to be scheduled
- * queue AC from which Data to be sent in USP
- * txList access category for processing list
- * ---------------------------------------------------------------------------
- */
-void uf_send_buffered_data_from_delivery_ac(unifi_priv_t *priv,
- CsrWifiRouterCtrlStaInfo_t * staInfo,
- u8 queue,
- struct list_head *txList)
-{
-
- u16 interfaceTag = GET_ACTIVE_INTERFACE_TAG(priv);
- tx_buffered_packets_t * buffered_pkt = NULL;
- unsigned long lock_flags;
- u8 eosp=FALSE;
- s8 r =0;
- u8 moreData = FALSE;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-
- unifi_trace(priv, UDBG2, "++uf_send_buffered_data_from_delivery_ac, active=%x\n", staInfo->uapsdActive);
-
- if (queue > UNIFI_TRAFFIC_Q_VO)
- {
- return;
- }
- while((buffered_pkt=dequeue_tx_data_pdu(priv, txList))) {
- if((IS_DTIM_ACTIVE(interfacePriv->dtimActive, interfacePriv->multicastPduHostTag))) {
- unifi_trace(priv, UDBG2, "uf_send_buffered_data_from_delivery_ac: DTIM Active, suspend UAPSD, staId: 0x%x\n",
- staInfo->aid);
-
- /* Once resume called, the U-APSD delivery operation will resume */
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- staInfo->uspSuspend = TRUE;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- /* re-queueing the packet as DTIM started */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, txList);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- break;
- }
-
- buffered_pkt->transmissionControl &=
- ~(TRANSMISSION_CONTROL_TRIGGER_MASK | TRANSMISSION_CONTROL_EOSP_MASK);
-
-
- if((staInfo->wmmOrQosEnabled == TRUE)&&(staInfo->uapsdActive == TRUE)) {
-
- buffered_pkt->transmissionControl = TRANSMISSION_CONTROL_TRIGGER_MASK;
-
- /* Check All delivery enables Ac for more data, because caller of this
- * function not aware about last packet
- * (First check in moreData fetching helps in draining out Mgt frames Q)
- */
- moreData = (!list_empty(txList) || uf_is_more_data_for_usp_delivery(priv, staInfo, queue));
-
- if(staInfo->noOfSpFramesSent == (staInfo->maxSpLength - 1)) {
- moreData = FALSE;
- }
-
- if(moreData == FALSE) {
- eosp = TRUE;
- buffered_pkt->transmissionControl =
- (TRANSMISSION_CONTROL_TRIGGER_MASK | TRANSMISSION_CONTROL_EOSP_MASK);
- }
- } else {
- /* Non QoS and non U-APSD */
- unifi_warning(priv, "uf_send_buffered_data_from_delivery_ac: non U-APSD !!! \n");
- }
-
- unifi_trace(priv, UDBG2, "uf_send_buffered_data_from_delivery_ac : MoreData:%d, EOSP:%d\n", moreData, eosp);
-
- if((r=frame_and_send_queued_pdu(priv, buffered_pkt, staInfo, moreData, eosp)) == -ENOSPC) {
-
- unifi_trace(priv, UDBG2, "uf_send_buffered_data_from_delivery_ac: UASPD suspended, ENOSPC in hipQ=%x\n", queue);
-
- /* Once resume called, the U-APSD delivery operation will resume */
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- staInfo->uspSuspend = TRUE;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
-
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, txList);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- priv->pausedStaHandle[queue]=(u8)(staInfo->assignedHandle);
- break;
- } else {
- if(r){
- /* the PDU failed where we can't do any thing so free the storage */
- unifi_net_data_free(priv, &buffered_pkt->bulkdata);
- }
- kfree(buffered_pkt);
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- staInfo->noOfSpFramesSent++;
- if((!moreData) || (staInfo->noOfSpFramesSent == staInfo->maxSpLength)) {
- unifi_trace(priv, UDBG2, "uf_send_buffered_data_from_delivery_ac: Terminating USP\n");
- staInfo->uapsdActive = FALSE;
- staInfo->uspSuspend = FALSE;
- staInfo->noOfSpFramesSent = 0;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- break;
- }
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- }
- }
- unifi_trace(priv, UDBG2, "--uf_send_buffered_data_from_delivery_ac, active=%x\n", staInfo->uapsdActive);
-}
-
-void uf_send_buffered_data_from_ac(unifi_priv_t *priv,
- CsrWifiRouterCtrlStaInfo_t * staInfo,
- u8 queue,
- struct list_head *txList)
-{
- tx_buffered_packets_t * buffered_pkt = NULL;
- unsigned long lock_flags;
- u8 eosp=FALSE;
- u8 moreData = FALSE;
- s8 r =0;
-
- unifi_trace(priv, UDBG2, "uf_send_buffered_data_from_ac :\n");
-
- while(!isRouterBufferEnabled(priv, queue) &&
- ((buffered_pkt=dequeue_tx_data_pdu(priv, txList))!=NULL)){
-
- buffered_pkt->transmissionControl &=
- ~(TRANSMISSION_CONTROL_TRIGGER_MASK|TRANSMISSION_CONTROL_EOSP_MASK);
-
- unifi_trace(priv, UDBG3, "uf_send_buffered_data_from_ac : MoreData:%d, EOSP:%d\n", moreData, eosp);
-
- if((r=frame_and_send_queued_pdu(priv, buffered_pkt, staInfo, moreData, eosp)) == -ENOSPC) {
- /* Enqueue at the head of the queue */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, txList);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- if(staInfo != NULL){
- priv->pausedStaHandle[queue]=(u8)(staInfo->assignedHandle);
- }
- unifi_trace(priv, UDBG3, " uf_send_buffered_data_from_ac: PDU sending failed .. no space for queue %d \n", queue);
- } else {
- if(r){
- /* the PDU failed where we can't do any thing so free the storage */
- unifi_net_data_free(priv, &buffered_pkt->bulkdata);
- }
- kfree(buffered_pkt);
- }
- }
-
-}
-
-void uf_send_buffered_frames(unifi_priv_t *priv, unifi_TrafficQueue q)
-{
- u16 interfaceTag = GET_ACTIVE_INTERFACE_TAG(priv);
- u32 startIndex=0, endIndex=0;
- CsrWifiRouterCtrlStaInfo_t * staInfo = NULL;
- u8 queue;
- u8 moreData = FALSE;
-
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-
- if(!((interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP) ||
- (interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO)))
- return;
-
- queue = (q<=3)?q:0;
-
- if(interfacePriv->dtimActive) {
- /* this function updates dtimActive*/
- send_multicast_frames(priv, interfaceTag);
- if(!interfacePriv->dtimActive) {
- moreData = (!list_empty(&interfacePriv->genericMulticastOrBroadCastMgtFrames) ||
- !list_empty(&interfacePriv->genericMulticastOrBroadCastFrames));
- if(!moreData) {
- if (!interfacePriv->bcTimSetReqPendingFlag)
- {
- update_tim(priv, 0, CSR_WIFI_TIM_RESET, interfaceTag, 0XFFFFFFFF);
- }
- else
- {
- /* Cache the TimSet value so that it will processed immidiatly after
- * completing the current setTim Request
- */
- interfacePriv->bcTimSetReqQueued = CSR_WIFI_TIM_RESET;
- unifi_trace(priv, UDBG2, "uf_send_buffered_frames : One more UpdateDTim Request(%d) Queued \n",
- interfacePriv->bcTimSetReqQueued);
- }
- }
- } else {
- moreData = (!list_empty(&interfacePriv->genericMulticastOrBroadCastMgtFrames) ||
- !list_empty(&interfacePriv->genericMulticastOrBroadCastFrames));
- if(!moreData) {
- /* This should never happen but if it happens, we need a way out */
- unifi_error(priv, "ERROR: No More Data but DTIM is active sending Response\n");
- send_vif_availibility_rsp(priv, uf_get_vif_identifier(interfacePriv->interfaceMode, interfaceTag), CSR_RC_NO_BUFFERED_BROADCAST_MULTICAST_FRAMES);
- interfacePriv->dtimActive = FALSE;
- }
- }
- return;
- }
- if(priv->pausedStaHandle[queue] > 7) {
- priv->pausedStaHandle[queue] = 0;
- }
-
- if(queue == UNIFI_TRAFFIC_Q_VO) {
-
-
- unifi_trace(priv, UDBG2, "uf_send_buffered_frames : trying mgt from queue=%d\n", queue);
- for(startIndex= 0; startIndex < UNIFI_MAX_CONNECTIONS;startIndex++) {
- staInfo = CsrWifiRouterCtrlGetStationRecordFromHandle(priv, startIndex, interfaceTag);
- if(!staInfo ) {
- continue;
- } else if((staInfo->currentPeerState == CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_POWER_SAVE)
- &&(staInfo->uapsdActive == FALSE) ) {
- continue;
- }
-
- if((staInfo != NULL)&&(staInfo->currentPeerState == CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_ACTIVE)
- &&(staInfo->uapsdActive == FALSE)){
- /*Non-UAPSD case push the management frames out*/
- if(!list_empty(&staInfo->mgtFrames)){
- uf_send_buffered_data_from_ac(priv, staInfo, UNIFI_TRAFFIC_Q_VO, &staInfo->mgtFrames);
- }
- }
-
- if(isRouterBufferEnabled(priv, queue)) {
- unifi_notice(priv, "uf_send_buffered_frames : No space Left for queue = %d\n", queue);
- break;
- }
- }
- /*push generic management frames out*/
- if(!list_empty(&interfacePriv->genericMgtFrames)) {
- unifi_trace(priv, UDBG2, "uf_send_buffered_frames : trying generic mgt from queue=%d\n", queue);
- uf_send_buffered_data_from_ac(priv, staInfo, UNIFI_TRAFFIC_Q_VO, &interfacePriv->genericMgtFrames);
- }
- }
-
-
- unifi_trace(priv, UDBG2, "uf_send_buffered_frames : Resume called for Queue=%d\n", queue);
- unifi_trace(priv, UDBG2, "uf_send_buffered_frames : start=%d end=%d\n", startIndex, endIndex);
-
- startIndex = priv->pausedStaHandle[queue];
- endIndex = (startIndex + UNIFI_MAX_CONNECTIONS -1) % UNIFI_MAX_CONNECTIONS;
-
- while(startIndex != endIndex) {
- staInfo = CsrWifiRouterCtrlGetStationRecordFromHandle(priv, startIndex, interfaceTag);
- if(!staInfo) {
- startIndex ++;
- if(startIndex >= UNIFI_MAX_CONNECTIONS) {
- startIndex = 0;
- }
- continue;
- } else if((staInfo->currentPeerState == CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_POWER_SAVE)
- &&(staInfo->uapsdActive == FALSE)) {
- startIndex ++;
- if(startIndex >= UNIFI_MAX_CONNECTIONS) {
- startIndex = 0;
- }
- continue;
- }
- /* Peer is active or U-APSD is active so send PDUs to the peer */
- unifi_trace(priv, UDBG2, "uf_send_buffered_frames : trying data from queue=%d\n", queue);
-
-
- if((staInfo != NULL)&&(staInfo->currentPeerState == CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_ACTIVE)
- &&(staInfo->uapsdActive == FALSE)) {
- if(!list_empty(&staInfo->dataPdu[queue])) {
-
- /*Non-UAPSD case push the AC frames out*/
- uf_send_buffered_data_from_ac(priv, staInfo, queue, (&staInfo->dataPdu[queue]));
- }
- }
- startIndex ++;
- if(startIndex >= UNIFI_MAX_CONNECTIONS) {
- startIndex = 0;
- }
- }
- if(isRouterBufferEnabled(priv, queue)) {
- priv->pausedStaHandle[queue] = endIndex;
- } else {
- priv->pausedStaHandle[queue] = 0;
- }
-
- /* U-APSD might have stopped because of ENOSPC in lib_hip (pause activity).
- * So restart it if U-APSD was active with any of the station
- */
- unifi_trace(priv, UDBG4, "csrWifiHipSendBufferedFrames: UAPSD Resume Q=%x\n", queue);
- resume_suspended_uapsd(priv, interfaceTag);
-}
-
-
-u8 uf_is_more_data_for_non_delivery_ac(CsrWifiRouterCtrlStaInfo_t *staRecord)
-{
- u8 i;
-
- for(i=0;i<=3;i++)
- {
- if(((staRecord->powersaveMode[i]==CSR_WIFI_AC_TRIGGER_ONLY_ENABLED)
- ||(staRecord->powersaveMode[i]==CSR_WIFI_AC_LEGACY_POWER_SAVE))
- &&(!list_empty(&staRecord->dataPdu[i]))){
-
- return TRUE;
- }
- }
-
- if(((staRecord->powersaveMode[UNIFI_TRAFFIC_Q_VO]==CSR_WIFI_AC_TRIGGER_ONLY_ENABLED)
- ||(staRecord->powersaveMode[UNIFI_TRAFFIC_Q_VO]==CSR_WIFI_AC_LEGACY_POWER_SAVE))
- &&(!list_empty(&staRecord->mgtFrames))){
-
- return TRUE;
- }
-
-
-
- return FALSE;
-}
-
-
-int uf_process_station_records_for_sending_data(unifi_priv_t *priv, u16 interfaceTag,
- CsrWifiRouterCtrlStaInfo_t *srcStaInfo,
- CsrWifiRouterCtrlStaInfo_t *dstStaInfo)
-{
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-
- unifi_trace(priv, UDBG5, "entering uf_process_station_records_for_sending_data\n");
-
- if (srcStaInfo->currentPeerState == CSR_WIFI_ROUTER_CTRL_PEER_DISCONNECTED) {
- unifi_error(priv, "Peer State not connected AID = %x, handle = %x, control port state = %x\n",
- srcStaInfo->aid, srcStaInfo->assignedHandle, srcStaInfo->peerControlledPort->port_action);
- return -1;
- }
- switch (interfacePriv->interfaceMode)
- {
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- unifi_trace(priv, UDBG5, "mode is AP/P2PGO\n");
- break;
- default:
- unifi_warning(priv, "mode is nor AP neither P2PGO, packet cant be xmit\n");
- return -1;
- }
-
- switch(dstStaInfo->peerControlledPort->port_action)
- {
- case CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD:
- case CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_BLOCK:
- unifi_trace(priv, UDBG5, "destination port is closed/blocked, discarding the packet\n");
- return -1;
- default:
- unifi_trace(priv, UDBG5, "destination port state is open\n");
- }
-
- /* port state is open, destination station record is valid, Power save state is
- * validated in uf_process_ma_packet_req function
- */
- unifi_trace(priv, UDBG5, "leaving uf_process_station_records_for_sending_data\n");
- return 0;
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_handle_uspframes_delivery
- *
- * This function takes care of handling USP session for peer, when
- * -> trigger frame from peer
- * -> suspended USP to be processed (resumed)
- *
- * NOTE: uf_send_buffered_data_from_delivery_ac() always called from this function, Dont
- * make a direct call to uf_send_buffered_data_from_delivery_ac() from any other part of
- * code
- *
- * Arguments:
- * priv Pointer to device private context struct
- * staInfo peer for which UAPSD to be scheduled
- * interfaceTag virtual interface tag
- * ---------------------------------------------------------------------------
- */
-static void uf_handle_uspframes_delivery(unifi_priv_t * priv, CsrWifiRouterCtrlStaInfo_t *staInfo, u16 interfaceTag)
-{
-
- s8 i;
- u8 allDeliveryEnabled = 0, dataAvailable = 0;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- unsigned long lock_flags;
-
- unifi_trace(priv, UDBG2, " ++ uf_handle_uspframes_delivery, uapsd active=%x, suspended?=%x\n",
- staInfo->uapsdActive, staInfo->uspSuspend);
-
- /* Check for Buffered frames according to priority order & deliver it
- * 1. AC_VO delivery enable & Mgt frames available
- * 2. Process remaining Ac's from order AC_VO to AC_BK
- */
-
- /* USP initiated by WMMPS enabled peer & SET the status flag to TRUE */
- if (!staInfo->uspSuspend && staInfo->uapsdActive)
- {
- unifi_notice(priv, "uf_handle_uspframes_delivery: U-APSD already active! STA=%x:%x:%x:%x:%x:%x\n",
- staInfo->peerMacAddress.a[0], staInfo->peerMacAddress.a[1],
- staInfo->peerMacAddress.a[2], staInfo->peerMacAddress.a[3],
- staInfo->peerMacAddress.a[4], staInfo->peerMacAddress.a[5]);
- return;
- }
-
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- staInfo->uapsdActive = TRUE;
- staInfo->uspSuspend = FALSE;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
-
- if(((staInfo->powersaveMode[UNIFI_TRAFFIC_Q_VO]==CSR_WIFI_AC_TRIGGER_AND_DELIVERY_ENABLED)||
- (staInfo->powersaveMode[UNIFI_TRAFFIC_Q_VO]==CSR_WIFI_AC_DELIVERY_ONLY_ENABLE))
- && (!list_empty(&staInfo->mgtFrames))) {
-
- /* Management queue has data && UNIFI_TRAFFIC_Q_VO is delivery enable */
- unifi_trace(priv, UDBG4, "uf_handle_uspframes_delivery: Sending buffered management frames\n");
- uf_send_buffered_data_from_delivery_ac(priv, staInfo, UNIFI_TRAFFIC_Q_VO, &staInfo->mgtFrames);
- }
-
- if (!uf_is_more_data_for_delivery_ac(priv, staInfo)) {
- /* All delivery enable AC's are empty, so QNULL to be sent to terminate the USP
- * NOTE: If we have sent Mgt frame also, we must send QNULL followed to terminate USP
- */
- if (!staInfo->uspSuspend) {
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- staInfo->uapsdActive = FALSE;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
-
- unifi_trace(priv, UDBG2, "uf_handle_uspframes_delivery: sending QNull for trigger\n");
- uf_send_qos_null(priv, interfaceTag, staInfo->peerMacAddress.a, (CSR_PRIORITY) staInfo->triggerFramePriority, staInfo);
- staInfo->triggerFramePriority = CSR_QOS_UP0;
- } else {
- unifi_trace(priv, UDBG2, "uf_handle_uspframes_delivery: MgtQ xfer suspended\n");
- }
- } else {
- for(i = UNIFI_TRAFFIC_Q_VO; i >= UNIFI_TRAFFIC_Q_BK; i--) {
- if(((staInfo->powersaveMode[i]==CSR_WIFI_AC_DELIVERY_ONLY_ENABLE)
- ||(staInfo->powersaveMode[i]==CSR_WIFI_AC_TRIGGER_AND_DELIVERY_ENABLED))
- && (!list_empty(&staInfo->dataPdu[i]))) {
- /* Deliver Data according to AC priority (from VO to BK) as part of USP */
- unifi_trace(priv, UDBG4, "uf_handle_uspframes_delivery: Buffered data frames from Queue (%d) for USP\n", i);
- uf_send_buffered_data_from_delivery_ac(priv, staInfo, i, &staInfo->dataPdu[i]);
- }
-
- if ((!staInfo->uapsdActive) ||
- (staInfo->uspSuspend && IS_DTIM_ACTIVE(interfacePriv->dtimActive, interfacePriv->multicastPduHostTag))) {
- /* If DTIM active found on one AC, No need to parse the remaining AC's
- * as USP suspended. Break out of loop
- */
- unifi_trace(priv, UDBG2, "uf_handle_uspframes_delivery: suspend=%x, DTIM=%x, USP terminated=%s\n",
- staInfo->uspSuspend, IS_DTIM_ACTIVE(interfacePriv->dtimActive, interfacePriv->multicastPduHostTag),
- staInfo->uapsdActive?"NO":"YES");
- break;
- }
- }
- }
-
- /* Depending on the USP status, update the TIM accordingly for delivery enabled AC only
- * (since we are not manipulating any Non-delivery list(AC))
- */
- is_all_ac_deliver_enabled_and_moredata(staInfo, &allDeliveryEnabled, &dataAvailable);
- if ((allDeliveryEnabled && !dataAvailable)) {
- if ((staInfo->timSet != CSR_WIFI_TIM_RESET) && (staInfo->timSet != CSR_WIFI_TIM_RESETTING)) {
- staInfo->updateTimReqQueued = (u8) CSR_WIFI_TIM_RESET;
- unifi_trace(priv, UDBG4, " --uf_handle_uspframes_delivery, UAPSD timset\n");
- if (!staInfo->timRequestPendingFlag) {
- update_tim(priv, staInfo->aid, 0, interfaceTag, staInfo->assignedHandle);
- }
- }
- }
- unifi_trace(priv, UDBG2, " --uf_handle_uspframes_delivery, uapsd active=%x, suspend?=%x\n",
- staInfo->uapsdActive, staInfo->uspSuspend);
-}
-
-void uf_process_wmm_deliver_ac_uapsd(unifi_priv_t * priv,
- CsrWifiRouterCtrlStaInfo_t * srcStaInfo,
- u16 qosControl,
- u16 interfaceTag)
-{
- CSR_PRIORITY priority;
- unifi_TrafficQueue priority_q;
- unsigned long lock_flags;
-
- unifi_trace(priv, UDBG2, "++uf_process_wmm_deliver_ac_uapsd: uapsdactive?=%x\n", srcStaInfo->uapsdActive);
- /* If recceived Frames trigger Frame and Devlivery enabled AC has data
- * then transmit from High priorty delivery enabled AC
- */
- priority = (CSR_PRIORITY)(qosControl & IEEE802_11_QC_TID_MASK);
- priority_q = unifi_frame_priority_to_queue((CSR_PRIORITY) priority);
-
- if((srcStaInfo->powersaveMode[priority_q]==CSR_WIFI_AC_TRIGGER_ONLY_ENABLED)
- ||(srcStaInfo->powersaveMode[priority_q]==CSR_WIFI_AC_TRIGGER_AND_DELIVERY_ENABLED)) {
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- srcStaInfo->triggerFramePriority = priority;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- unifi_trace(priv, UDBG2, "uf_process_wmm_deliver_ac_uapsd: trigger frame, Begin U-APSD, triggerQ=%x\n", priority_q);
- uf_handle_uspframes_delivery(priv, srcStaInfo, interfaceTag);
- }
- unifi_trace(priv, UDBG2, "--uf_process_wmm_deliver_ac_uapsd: uapsdactive?=%x\n", srcStaInfo->uapsdActive);
-}
-
-
-void uf_send_qos_null(unifi_priv_t * priv, u16 interfaceTag, const u8 *da, CSR_PRIORITY priority, CsrWifiRouterCtrlStaInfo_t * srcStaInfo)
-{
- bulk_data_param_t bulkdata;
- CsrResult csrResult;
- struct sk_buff *skb, *newSkb = NULL;
- CsrWifiMacAddress peerAddress;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- CSR_TRANSMISSION_CONTROL transmissionControl = (TRANSMISSION_CONTROL_EOSP_MASK | TRANSMISSION_CONTROL_TRIGGER_MASK);
- int r;
- CSR_SIGNAL signal;
- u32 priority_q;
- CSR_RATE transmitRate = 0;
-
-
- /* Send a Null Frame to Peer,
- * 32= size of mac header */
- csrResult = unifi_net_data_malloc(priv, &bulkdata.d[0], MAC_HEADER_SIZE + QOS_CONTROL_HEADER_SIZE);
-
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, " failed to allocate request_data. in uf_send_qos_null func\n");
- return ;
- }
- skb = (struct sk_buff *)(bulkdata.d[0].os_net_buf_ptr);
- skb->len = 0;
- bulkdata.d[0].os_data_ptr = skb->data;
- bulkdata.d[0].os_net_buf_ptr = (unsigned char*)skb;
- bulkdata.d[0].net_buf_length = bulkdata.d[0].data_length = skb->len;
- bulkdata.d[1].os_data_ptr = NULL;
- bulkdata.d[1].os_net_buf_ptr = NULL;
- bulkdata.d[1].net_buf_length = bulkdata.d[1].data_length = 0;
-
- /* For null frames protection bit should not be set in MAC header, so passing value 0 below for protection field */
-
- if (prepare_and_add_macheader(priv, skb, newSkb, priority, &bulkdata, interfaceTag, da, interfacePriv->bssid.a, 0)) {
- unifi_error(priv, "failed to create MAC header\n");
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return;
- }
- memcpy(peerAddress.a, ((u8 *) bulkdata.d[0].os_data_ptr) + 4, ETH_ALEN);
- /* convert priority to queue */
- priority_q = unifi_frame_priority_to_queue((CSR_PRIORITY) priority);
-
- /* Frame ma-packet.req, this is saved/transmitted depend on queue state
- * send the null frame at data rate of 1 Mb/s for AP or 6 Mb/s for P2PGO
- */
- switch (interfacePriv->interfaceMode)
- {
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- transmitRate = 2;
- break;
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- transmitRate = 12;
- break;
- default:
- transmitRate = 0;
- }
- unifi_frame_ma_packet_req(priv, priority, transmitRate, 0xffffffff, interfaceTag,
- transmissionControl, priv->netdev_client->sender_id,
- peerAddress.a, &signal);
-
- r = ul_send_signal_unpacked(priv, &signal, &bulkdata);
- if(r) {
- unifi_error(priv, "failed to send QOS data null packet result: %d\n", r);
- unifi_net_data_free(priv, &bulkdata.d[0]);
- }
-
- return;
-
-}
-void uf_send_nulldata(unifi_priv_t * priv, u16 interfaceTag, const u8 *da, CSR_PRIORITY priority, CsrWifiRouterCtrlStaInfo_t * srcStaInfo)
-{
- bulk_data_param_t bulkdata;
- CsrResult csrResult;
- struct sk_buff *skb, *newSkb = NULL;
- CsrWifiMacAddress peerAddress;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- CSR_TRANSMISSION_CONTROL transmissionControl = 0;
- int r;
- CSR_SIGNAL signal;
- u32 priority_q;
- CSR_RATE transmitRate = 0;
- CSR_MA_PACKET_REQUEST *req = &signal.u.MaPacketRequest;
- unsigned long lock_flags;
-
- /* Send a Null Frame to Peer, size = 24 for MAC header */
- csrResult = unifi_net_data_malloc(priv, &bulkdata.d[0], MAC_HEADER_SIZE);
-
- if (csrResult != CSR_RESULT_SUCCESS) {
- unifi_error(priv, "uf_send_nulldata: Failed to allocate memory for NULL frame\n");
- return ;
- }
- skb = (struct sk_buff *)(bulkdata.d[0].os_net_buf_ptr);
- skb->len = 0;
- bulkdata.d[0].os_data_ptr = skb->data;
- bulkdata.d[0].os_net_buf_ptr = (unsigned char*)skb;
- bulkdata.d[0].net_buf_length = bulkdata.d[0].data_length = skb->len;
- bulkdata.d[1].os_data_ptr = NULL;
- bulkdata.d[1].os_net_buf_ptr = NULL;
- bulkdata.d[1].net_buf_length = bulkdata.d[1].data_length = 0;
-
- /* For null frames protection bit should not be set in MAC header, so passing value 0 below for protection field */
- if (prepare_and_add_macheader(priv, skb, newSkb, priority, &bulkdata, interfaceTag, da, interfacePriv->bssid.a, 0)) {
- unifi_error(priv, "uf_send_nulldata: Failed to create MAC header\n");
- unifi_net_data_free(priv, &bulkdata.d[0]);
- return;
- }
- memcpy(peerAddress.a, ((u8 *) bulkdata.d[0].os_data_ptr) + 4, ETH_ALEN);
- /* convert priority to queue */
- priority_q = unifi_frame_priority_to_queue((CSR_PRIORITY) priority);
- transmissionControl &= ~(CSR_NO_CONFIRM_REQUIRED);
-
- /* Frame ma-packet.req, this is saved/transmitted depend on queue state
- * send the null frame at data rate of 1 Mb/s for AP or 6 Mb/s for P2PGO
- */
- switch (interfacePriv->interfaceMode)
- {
- case CSR_WIFI_ROUTER_CTRL_MODE_AP:
- transmitRate = 2;
- break;
- case CSR_WIFI_ROUTER_CTRL_MODE_P2PGO:
- transmitRate = 12;
- break;
- default:
- transmitRate = 0;
- }
- unifi_frame_ma_packet_req(priv, priority, transmitRate, INVALID_HOST_TAG, interfaceTag,
- transmissionControl, priv->netdev_client->sender_id,
- peerAddress.a, &signal);
-
- /* Save host tag to check the status on reception of MA packet confirm */
- srcStaInfo->nullDataHostTag = req->HostTag;
- unifi_trace(priv, UDBG1, "uf_send_nulldata: STA AID = %d hostTag = %x\n", srcStaInfo->aid, req->HostTag);
-
- r = ul_send_signal_unpacked(priv, &signal, &bulkdata);
-
- if(r == -ENOSPC) {
- unifi_trace(priv, UDBG1, "uf_send_nulldata: ENOSPC Requeue the Null frame\n");
- enque_tx_data_pdu(priv, &bulkdata, &srcStaInfo->dataPdu[priority_q], &signal, 1);
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- srcStaInfo->noOfPktQueued++;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
-
-
- }
- if(r && r != -ENOSPC){
- unifi_error(priv, "uf_send_nulldata: Failed to send Null frame Error = %d\n", r);
- unifi_net_data_free(priv, &bulkdata.d[0]);
- srcStaInfo->nullDataHostTag = INVALID_HOST_TAG;
- }
-
- return;
-}
-
-u8 uf_check_broadcast_bssid(unifi_priv_t *priv, const bulk_data_param_t *bulkdata)
-{
- u8 *bssid = NULL;
- static const CsrWifiMacAddress broadcast_address = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}};
- u8 toDs, fromDs;
-
- toDs = (((bulkdata->d[0].os_data_ptr)[1]) & 0x01) ? 1 : 0;
- fromDs =(((bulkdata->d[0].os_data_ptr)[1]) & 0x02) ? 1 : 0;
-
- if (toDs && fromDs)
- {
- unifi_trace(priv, UDBG6, "Address 4 present, Don't try to find BSSID\n");
- bssid = NULL;
- }
- else if((toDs == 0) && (fromDs ==0))
- {
- /* BSSID is Address 3 */
- bssid = (u8 *) (bulkdata->d[0].os_data_ptr + 4 + (2 * ETH_ALEN));
- }
- else if(toDs)
- {
- /* BSSID is Address 1 */
- bssid = (u8 *) (bulkdata->d[0].os_data_ptr + 4);
- }
- else if(fromDs)
- {
- /* BSSID is Address 2 */
- bssid = (u8 *) (bulkdata->d[0].os_data_ptr + 4 + ETH_ALEN);
- }
-
- if (memcmp(broadcast_address.a, bssid, ETH_ALEN)== 0)
- {
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-}
-
-
-u8 uf_process_pm_bit_for_peer(unifi_priv_t * priv, CsrWifiRouterCtrlStaInfo_t * srcStaInfo,
- u8 pmBit, u16 interfaceTag)
-{
- u8 moreData = FALSE;
- u8 powerSaveChanged = FALSE;
- unsigned long lock_flags;
-
- unifi_trace(priv, UDBG3, "entering uf_process_pm_bit_for_peer\n");
- if (pmBit) {
- priv->allPeerDozing |= (0x01 << (srcStaInfo->assignedHandle));
- } else {
- priv->allPeerDozing &= ~(0x01 << (srcStaInfo->assignedHandle));
- }
- if(pmBit) {
- if(srcStaInfo->currentPeerState == CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_ACTIVE) {
-
- /* disable the preemption */
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- srcStaInfo->currentPeerState =CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_POWER_SAVE;
- powerSaveChanged = TRUE;
- /* enable the preemption */
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- } else {
- return powerSaveChanged;
- }
- } else {
- if(srcStaInfo->currentPeerState == CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_POWER_SAVE) {
- /* disable the preemption */
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- srcStaInfo->currentPeerState = CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_ACTIVE;
- powerSaveChanged = TRUE;
- /* enable the preemption */
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- }else {
- return powerSaveChanged;
- }
- }
-
-
- if(srcStaInfo->currentPeerState == CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_ACTIVE) {
- unifi_trace(priv, UDBG3, "Peer with AID = %d is active now\n", srcStaInfo->aid);
- process_peer_active_transition(priv, srcStaInfo, interfaceTag);
- } else {
- unifi_trace(priv, UDBG3, "Peer with AID = %d is in PS Now\n", srcStaInfo->aid);
- /* Set TIM if needed */
- if(!srcStaInfo->wmmOrQosEnabled) {
- moreData = (!list_empty(&srcStaInfo->mgtFrames) ||
- !list_empty(&srcStaInfo->dataPdu[UNIFI_TRAFFIC_Q_VO])||
- !list_empty(&srcStaInfo->dataPdu[UNIFI_TRAFFIC_Q_CONTENTION]));
- if(moreData && (srcStaInfo->timSet == CSR_WIFI_TIM_RESET)) {
- unifi_trace(priv, UDBG3, "This condition should not occur\n");
- if (!srcStaInfo->timRequestPendingFlag){
- update_tim(priv, srcStaInfo->aid, 1, interfaceTag, srcStaInfo->assignedHandle);
- }
- else
- {
- /* Cache the TimSet value so that it will processed immidiatly after
- * completing the current setTim Request
- */
- srcStaInfo->updateTimReqQueued = 1;
- unifi_trace(priv, UDBG6, "update_tim : One more UpdateTim Request (Tim value:%d) Queued for AID %x\n", srcStaInfo->updateTimReqQueued,
- srcStaInfo->aid);
- }
-
- }
- } else {
- u8 allDeliveryEnabled = 0, dataAvailable = 0;
- unifi_trace(priv, UDBG5, "Qos in AP Mode\n");
- /* Check if all AC's are Delivery Enabled */
- is_all_ac_deliver_enabled_and_moredata(srcStaInfo, &allDeliveryEnabled, &dataAvailable);
- /*check for more data in non-delivery enabled queues*/
- moreData = (uf_is_more_data_for_non_delivery_ac(srcStaInfo) || (allDeliveryEnabled && dataAvailable));
-
- if(moreData && (srcStaInfo->timSet == CSR_WIFI_TIM_RESET)) {
- if (!srcStaInfo->timRequestPendingFlag){
- update_tim(priv, srcStaInfo->aid, 1, interfaceTag, srcStaInfo->assignedHandle);
- }
- else
- {
- /* Cache the TimSet value so that it will processed immidiatly after
- * completing the current setTim Request
- */
- srcStaInfo->updateTimReqQueued = 1;
- unifi_trace(priv, UDBG6, "update_tim : One more UpdateTim Request (Tim value:%d) Queued for AID %x\n", srcStaInfo->updateTimReqQueued,
- srcStaInfo->aid);
- }
- }
- }
- }
- unifi_trace(priv, UDBG3, "leaving uf_process_pm_bit_for_peer\n");
- return powerSaveChanged;
-}
-
-
-
-void uf_process_ps_poll(unifi_priv_t *priv, u8* sa, u8* da, u8 pmBit, u16 interfaceTag)
-{
- CsrWifiRouterCtrlStaInfo_t *staRecord =
- CsrWifiRouterCtrlGetStationRecordFromPeerMacAddress(priv, sa, interfaceTag);
- tx_buffered_packets_t * buffered_pkt = NULL;
- CsrWifiMacAddress peerMacAddress;
- unsigned long lock_flags;
- s8 r =0;
- u8 moreData = FALSE;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-
- unifi_trace(priv, UDBG3, "entering uf_process_ps_poll\n");
- if(!staRecord) {
- memcpy(peerMacAddress.a, sa, ETH_ALEN);
- unifi_trace(priv, UDBG3, "In uf_process_ps_poll, sta record not found:unexpected frame addr = %x:%x:%x:%x:%x:%x\n",
- sa[0], sa[1], sa[2], sa[3], sa[4], sa[5]);
- CsrWifiRouterCtrlUnexpectedFrameIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, interfaceTag, peerMacAddress);
- return;
- }
-
- uf_process_pm_bit_for_peer(priv, staRecord, pmBit, interfaceTag);
-
- /* Update station last activity time */
- staRecord->activity_flag = TRUE;
-
- /* This should not change the PM bit as PS-POLL has PM bit always set */
- if(!pmBit) {
- unifi_notice (priv, " PM bit reset in PS-POLL\n");
- return;
- }
-
- if(IS_DTIM_ACTIVE(interfacePriv->dtimActive, interfacePriv->multicastPduHostTag)) {
- /* giving more priority to multicast packets so dropping ps-poll*/
- unifi_notice (priv, " multicast transmission is going on so don't take action on PS-POLL\n");
- return;
- }
-
- if(!staRecord->wmmOrQosEnabled) {
- if((buffered_pkt=dequeue_tx_data_pdu(priv, &staRecord->mgtFrames))) {
- buffered_pkt->transmissionControl |= TRANSMISSION_CONTROL_TRIGGER_MASK;
- moreData = (!list_empty(&staRecord->dataPdu[UNIFI_TRAFFIC_Q_CONTENTION]) ||
- !list_empty(&staRecord->dataPdu[UNIFI_TRAFFIC_Q_VO]) ||
- !list_empty(&staRecord->mgtFrames));
-
- buffered_pkt->transmissionControl |= (TRANSMISSION_CONTROL_TRIGGER_MASK | TRANSMISSION_CONTROL_EOSP_MASK);
- if((r=frame_and_send_queued_pdu(priv, buffered_pkt, staRecord, moreData, FALSE)) == -ENOSPC) {
- /* Clear the trigger bit transmission control*/
- buffered_pkt->transmissionControl &= ~(TRANSMISSION_CONTROL_TRIGGER_MASK | TRANSMISSION_CONTROL_EOSP_MASK);
- /* Enqueue at the head of the queue */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, &staRecord->mgtFrames);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- unifi_trace(priv, UDBG1, "(ENOSPC) PS-POLL received : PDU sending failed \n");
- priv->pausedStaHandle[3]=(u8)(staRecord->assignedHandle);
- } else {
- if(r){
- unifi_trace (priv, UDBG1, " HIP validation failure : PDU sending failed \n");
- /* the PDU failed where we can't do any thing so free the storage */
- unifi_net_data_free(priv, &buffered_pkt->bulkdata);
- }
- kfree(buffered_pkt);
- }
- } else if((buffered_pkt=dequeue_tx_data_pdu(priv, &staRecord->dataPdu[UNIFI_TRAFFIC_Q_VO]))) {
- buffered_pkt->transmissionControl |= TRANSMISSION_CONTROL_TRIGGER_MASK;
- moreData = (!list_empty(&staRecord->dataPdu[UNIFI_TRAFFIC_Q_CONTENTION]) ||
- !list_empty(&staRecord->dataPdu[UNIFI_TRAFFIC_Q_VO]));
-
- buffered_pkt->transmissionControl |= (TRANSMISSION_CONTROL_TRIGGER_MASK | TRANSMISSION_CONTROL_EOSP_MASK);
- if((r=frame_and_send_queued_pdu(priv, buffered_pkt, staRecord, moreData, FALSE)) == -ENOSPC) {
- /* Clear the trigger bit transmission control*/
- buffered_pkt->transmissionControl &= ~(TRANSMISSION_CONTROL_TRIGGER_MASK | TRANSMISSION_CONTROL_EOSP_MASK);
- /* Enqueue at the head of the queue */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, &staRecord->dataPdu[UNIFI_TRAFFIC_Q_VO]);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- priv->pausedStaHandle[3]=(u8)(staRecord->assignedHandle);
- unifi_trace(priv, UDBG1, "(ENOSPC) PS-POLL received : PDU sending failed \n");
- } else {
- if(r){
- unifi_trace (priv, UDBG1, " HIP validation failure : PDU sending failed \n");
- /* the PDU failed where we can't do any thing so free the storage */
- unifi_net_data_free(priv, &buffered_pkt->bulkdata);
- }
- kfree(buffered_pkt);
- }
- } else if((buffered_pkt=dequeue_tx_data_pdu(priv, &staRecord->dataPdu[UNIFI_TRAFFIC_Q_CONTENTION]))) {
- buffered_pkt->transmissionControl |= TRANSMISSION_CONTROL_TRIGGER_MASK;
- moreData = !list_empty(&staRecord->dataPdu[UNIFI_TRAFFIC_Q_CONTENTION]);
-
- buffered_pkt->transmissionControl |= (TRANSMISSION_CONTROL_TRIGGER_MASK | TRANSMISSION_CONTROL_EOSP_MASK);
- if((r=frame_and_send_queued_pdu(priv, buffered_pkt, staRecord, moreData, FALSE)) == -ENOSPC) {
- /* Clear the trigger bit transmission control*/
- buffered_pkt->transmissionControl &= ~(TRANSMISSION_CONTROL_TRIGGER_MASK | TRANSMISSION_CONTROL_EOSP_MASK);
- /* Enqueue at the head of the queue */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, &staRecord->dataPdu[UNIFI_TRAFFIC_Q_CONTENTION]);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- priv->pausedStaHandle[0]=(u8)(staRecord->assignedHandle);
- unifi_trace(priv, UDBG1, "(ENOSPC) PS-POLL received : PDU sending failed \n");
- } else {
- if(r){
- unifi_trace (priv, UDBG1, " HIP validation failure : PDU sending failed \n");
- /* the PDU failed where we can't do any thing so free the storage */
- unifi_net_data_free(priv, &buffered_pkt->bulkdata);
- }
- kfree(buffered_pkt);
- }
- } else {
- /* Actually since we have sent an ACK, there
- * there is no need to send a NULL frame*/
- }
- moreData = (!list_empty(&staRecord->dataPdu[UNIFI_TRAFFIC_Q_VO]) ||
- !list_empty(&staRecord->dataPdu[UNIFI_TRAFFIC_Q_CONTENTION]) ||
- !list_empty(&staRecord->mgtFrames));
- if(!moreData && (staRecord->timSet == CSR_WIFI_TIM_SET)) {
- unifi_trace(priv, UDBG3, "more data = NULL, set tim to 0 in uf_process_ps_poll\n");
- if (!staRecord->timRequestPendingFlag){
- update_tim(priv, staRecord->aid, 0, interfaceTag, staRecord->assignedHandle);
- }
- else
- {
- /* Cache the TimSet value so that it will processed immidiatly after
- * completing the current setTim Request
- */
- staRecord->updateTimReqQueued = 0;
- unifi_trace(priv, UDBG6, "update_tim : One more UpdateTim Request (Tim value:%d) Queued for AID %x\n", staRecord->updateTimReqQueued,
- staRecord->aid);
- }
- }
- } else {
-
- u8 allDeliveryEnabled = 0, dataAvailable = 0;
- unifi_trace(priv, UDBG3, "Qos Support station.Processing PS-Poll\n");
-
- /*Send Data From Management Frames*/
- /* Priority orders for delivering the buffered packets are
- * 1. Deliver the Management frames if there
- * 2. Other access category frames which are non deliver enable including UNIFI_TRAFFIC_Q_VO
- * priority is from VO->BK
- */
-
- /* Check if all AC's are Delivery Enabled */
- is_all_ac_deliver_enabled_and_moredata(staRecord, &allDeliveryEnabled, &dataAvailable);
-
- if (allDeliveryEnabled) {
- unifi_trace(priv, UDBG3, "uf_process_ps_poll: All ACs are delivery enable so Sending QOS Null in response of Ps-poll\n");
- uf_send_qos_null(priv, interfaceTag, sa, CSR_QOS_UP0, staRecord);
- return;
- }
-
- if (!list_empty(&staRecord->mgtFrames)) {
- if ((buffered_pkt=dequeue_tx_data_pdu(priv, &staRecord->mgtFrames))) {
- /* We dont have packets in non delivery enabled UNIFI_TRAFFIC_Q_VO, So we are looking in management
- * queue of the station record
- */
- moreData = uf_is_more_data_for_non_delivery_ac(staRecord);
- buffered_pkt->transmissionControl |= (TRANSMISSION_CONTROL_TRIGGER_MASK | TRANSMISSION_CONTROL_EOSP_MASK);
-
- /* Last parameter is EOSP & its false always for PS-POLL processing */
- if((r=frame_and_send_queued_pdu(priv, buffered_pkt, staRecord, moreData, FALSE)) == -ENOSPC) {
- /* Clear the trigger bit transmission control*/
- buffered_pkt->transmissionControl &= ~(TRANSMISSION_CONTROL_TRIGGER_MASK | TRANSMISSION_CONTROL_EOSP_MASK);
- /* Enqueue at the head of the queue */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, &staRecord->mgtFrames);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- priv->pausedStaHandle[0]=(u8)(staRecord->assignedHandle);
- unifi_trace(priv, UDBG1, "(ENOSPC) PS-POLL received : PDU sending failed \n");
- } else {
- if(r){
- unifi_trace (priv, UDBG1, " HIP validation failure : PDU sending failed \n");
- /* the PDU failed where we can't do any thing so free the storage */
- unifi_net_data_free(priv, &buffered_pkt->bulkdata);
- }
- kfree(buffered_pkt);
- }
- } else {
- unifi_error(priv, "uf_process_ps_poll: Mgt frame list empty!! \n");
- }
-
- } else {
- s8 i;
- /* We dont have buffered packet in mangement frame queue (1 failed), So proceed with condition 2
- * UNIFI_TRAFFIC_Q_VO -> VI -> BE -> BK
- */
- for(i= 3; i>=0; i--) {
- if (!IS_DELIVERY_ENABLED(staRecord->powersaveMode[i])) {
- /* Send One packet, if queue is NULL then continue */
- if((buffered_pkt=dequeue_tx_data_pdu(priv, &staRecord->dataPdu[i]))) {
- moreData = uf_is_more_data_for_non_delivery_ac(staRecord);
-
- buffered_pkt->transmissionControl |= (TRANSMISSION_CONTROL_TRIGGER_MASK | TRANSMISSION_CONTROL_EOSP_MASK);
-
- /* Last parameter is EOSP & its false always for PS-POLL processing */
- if((r=frame_and_send_queued_pdu(priv, buffered_pkt, staRecord, moreData, FALSE)) == -ENOSPC) {
- /* Clear the trigger bit transmission control*/
- buffered_pkt->transmissionControl &= ~(TRANSMISSION_CONTROL_TRIGGER_MASK | TRANSMISSION_CONTROL_EOSP_MASK);
- /* Enqueue at the head of the queue */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, &staRecord->dataPdu[i]);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- priv->pausedStaHandle[0]=(u8)(staRecord->assignedHandle);
- unifi_trace(priv, UDBG1, "(ENOSPC) PS-POLL received : PDU sending failed \n");
- } else {
- if(r) {
- unifi_trace (priv, UDBG1, " HIP validation failure : PDU sending failed \n");
- /* the PDU failed where we can't do any thing so free the storage */
- unifi_net_data_free(priv, &buffered_pkt->bulkdata);
- }
- kfree(buffered_pkt);
- }
- break;
- }
- }
- }
- }
- /* Check if all AC's are Delivery Enabled */
- is_all_ac_deliver_enabled_and_moredata(staRecord, &allDeliveryEnabled, &dataAvailable);
- /*check for more data in non-delivery enabled queues*/
- moreData = (uf_is_more_data_for_non_delivery_ac(staRecord) || (allDeliveryEnabled && dataAvailable));
- if(!moreData && (staRecord->timSet == CSR_WIFI_TIM_SET)) {
- unifi_trace(priv, UDBG3, "more data = NULL, set tim to 0 in uf_process_ps_poll\n");
- if (!staRecord->timRequestPendingFlag){
- update_tim(priv, staRecord->aid, 0, interfaceTag, staRecord->assignedHandle);
- }
- else
- {
- /* Cache the TimSet value so that it will processed immidiatly after
- * completing the current setTim Request
- */
- staRecord->updateTimReqQueued = 0;
- unifi_trace(priv, UDBG6, "update_tim : One more UpdateTim Request (Tim value:%d) Queued for AID %x\n", staRecord->updateTimReqQueued,
- staRecord->aid);
- }
-
- }
- }
-
- unifi_trace(priv, UDBG3, "leaving uf_process_ps_poll\n");
-}
-
-
-
-void add_to_send_cfm_list(unifi_priv_t * priv,
- tx_buffered_packets_t *tx_q_item,
- struct list_head *frames_need_cfm_list)
-{
- tx_buffered_packets_t *send_cfm_list_item = NULL;
-
- send_cfm_list_item = kmalloc(sizeof(tx_buffered_packets_t), GFP_ATOMIC);
-
- if(send_cfm_list_item == NULL){
- unifi_warning(priv, "%s: Failed to allocate memory for new list item \n");
- return;
- }
-
- INIT_LIST_HEAD(&send_cfm_list_item->q);
-
- send_cfm_list_item->hostTag = tx_q_item->hostTag;
- send_cfm_list_item->interfaceTag = tx_q_item->interfaceTag;
- send_cfm_list_item->transmissionControl = tx_q_item->transmissionControl;
- send_cfm_list_item->leSenderProcessId = tx_q_item->leSenderProcessId;
- send_cfm_list_item->rate = tx_q_item->rate;
- memcpy(send_cfm_list_item->peerMacAddress.a, tx_q_item->peerMacAddress.a, ETH_ALEN);
- send_cfm_list_item->priority = tx_q_item->priority;
-
- list_add_tail(&send_cfm_list_item->q, frames_need_cfm_list);
-}
-
-void uf_prepare_send_cfm_list_for_queued_pkts(unifi_priv_t * priv,
- struct list_head *frames_need_cfm_list,
- struct list_head * list)
-{
- tx_buffered_packets_t *tx_q_item = NULL;
- struct list_head *listHead;
- struct list_head *placeHolder;
- unsigned long lock_flags;
-
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
-
- /* Search through the list and if confirmation required for any frames,
- add it to the send_cfm list */
- list_for_each_safe(listHead, placeHolder, list) {
- tx_q_item = list_entry(listHead, tx_buffered_packets_t, q);
-
- if(!tx_q_item) {
- unifi_error(priv, "Entry should exist, otherwise it is a (BUG)\n");
- continue;
- }
-
- /* check if confirmation is requested and if the sender ID
- is not netdevice client then save the entry in the list for need cfms */
- if (!(tx_q_item->transmissionControl & CSR_NO_CONFIRM_REQUIRED) &&
- (tx_q_item->leSenderProcessId != priv->netdev_client->sender_id)){
- unifi_trace(priv, UDBG1, "%s: SenderProcessID=%x host tag=%x transmission control=%x\n",
- __FUNCTION__,
- tx_q_item->leSenderProcessId,
- tx_q_item->hostTag,
- tx_q_item->transmissionControl);
-
- add_to_send_cfm_list(priv, tx_q_item, frames_need_cfm_list);
- }
- }
-
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
-
-}
-
-
-
-void uf_flush_list(unifi_priv_t * priv, struct list_head * list)
-{
- tx_buffered_packets_t *tx_q_item;
- struct list_head *listHead;
- struct list_head *placeHolder;
- unsigned long lock_flags;
-
- unifi_trace(priv, UDBG5, "entering the uf_flush_list \n");
-
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- /* go through list, delete & free memory */
- list_for_each_safe(listHead, placeHolder, list) {
- tx_q_item = list_entry(listHead, tx_buffered_packets_t, q);
-
- if(!tx_q_item) {
- unifi_error(priv, "entry should exists, otherwise crashes (bug)\n");
- }
- unifi_trace(priv, UDBG5,
- "proccess_tx: in uf_flush_list peerMacAddress=%02X%02X%02X%02X%02X%02X senderProcessId=%x\n",
- tx_q_item->peerMacAddress.a[0], tx_q_item->peerMacAddress.a[1],
- tx_q_item->peerMacAddress.a[2], tx_q_item->peerMacAddress.a[3],
- tx_q_item->peerMacAddress.a[4], tx_q_item->peerMacAddress.a[5],
- tx_q_item->leSenderProcessId);
-
- list_del(listHead);
- /* free the allocated memory */
- unifi_net_data_free(priv, &tx_q_item->bulkdata);
- kfree(tx_q_item);
- tx_q_item = NULL;
- if (!priv->noOfPktQueuedInDriver) {
- unifi_error(priv, "packets queued in driver 0 still decrementing in %s\n", __FUNCTION__);
- } else {
- priv->noOfPktQueuedInDriver--;
- }
- }
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
-}
-
-tx_buffered_packets_t *dequeue_tx_data_pdu(unifi_priv_t *priv, struct list_head *txList)
-{
- /* dequeue the tx data packets from the appropriate queue */
- tx_buffered_packets_t *tx_q_item = NULL;
- struct list_head *listHead;
- struct list_head *placeHolder;
- unsigned long lock_flags;
-
- unifi_trace(priv, UDBG5, "entering dequeue_tx_data_pdu\n");
- /* check for list empty */
- if (list_empty(txList)) {
- unifi_trace(priv, UDBG5, "In dequeue_tx_data_pdu, the list is empty\n");
- return NULL;
- }
-
- /* Verification, if packet count is negetive */
- if (priv->noOfPktQueuedInDriver == 0xFFFF) {
- unifi_warning(priv, "no packet available in queue: debug");
- return NULL;
- }
-
- /* return first node after header, & delete from the list && atleast one item exist */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_for_each_safe(listHead, placeHolder, txList) {
- tx_q_item = list_entry(listHead, tx_buffered_packets_t, q);
- list_del(listHead);
- break;
- }
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
-
- if (tx_q_item) {
- unifi_trace(priv, UDBG5,
- "proccess_tx: In dequeue_tx_data_pdu peerMacAddress=%02X%02X%02X%02X%02X%02X senderProcessId=%x\n",
- tx_q_item->peerMacAddress.a[0], tx_q_item->peerMacAddress.a[1],
- tx_q_item->peerMacAddress.a[2], tx_q_item->peerMacAddress.a[3],
- tx_q_item->peerMacAddress.a[4], tx_q_item->peerMacAddress.a[5],
- tx_q_item->leSenderProcessId);
- }
-
- unifi_trace(priv, UDBG5, "leaving dequeue_tx_data_pdu\n");
- return tx_q_item;
-}
-/* generic function to get the station record handler */
-CsrWifiRouterCtrlStaInfo_t *CsrWifiRouterCtrlGetStationRecordFromPeerMacAddress(unifi_priv_t *priv,
- const u8 *peerMacAddress,
- u16 interfaceTag)
-{
- u8 i;
- netInterface_priv_t *interfacePriv;
- unsigned long lock_flags;
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "interfaceTag is not proper, interfaceTag = %d\n", interfaceTag);
- return NULL;
- }
-
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- /* disable the preemption until station record is fetched */
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
-
- for (i = 0; i < UNIFI_MAX_CONNECTIONS; i++) {
- if (interfacePriv->staInfo[i]!= NULL) {
- if (!memcmp(((CsrWifiRouterCtrlStaInfo_t *) (interfacePriv->staInfo[i]))->peerMacAddress.a, peerMacAddress, ETH_ALEN)) {
- /* enable the preemption as station record is fetched */
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- unifi_trace(priv, UDBG5, "peer entry found in station record\n");
- return ((CsrWifiRouterCtrlStaInfo_t *) (interfacePriv->staInfo[i]));
- }
- }
- }
- /* enable the preemption as station record is fetched */
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- unifi_trace(priv, UDBG5, "peer entry not found in station record\n");
- return NULL;
-}
-/* generic function to get the station record handler from the handle */
-CsrWifiRouterCtrlStaInfo_t * CsrWifiRouterCtrlGetStationRecordFromHandle(unifi_priv_t *priv,
- u32 handle,
- u16 interfaceTag)
-{
- netInterface_priv_t *interfacePriv;
-
- if ((handle >= UNIFI_MAX_CONNECTIONS) || (interfaceTag >= CSR_WIFI_NUM_INTERFACES)) {
- unifi_error(priv, "handle/interfaceTag is not proper, handle = %d, interfaceTag = %d\n", handle, interfaceTag);
- return NULL;
- }
- interfacePriv = priv->interfacePriv[interfaceTag];
- return ((CsrWifiRouterCtrlStaInfo_t *) (interfacePriv->staInfo[handle]));
-}
-
-/* Function to do inactivity */
-void uf_check_inactivity(unifi_priv_t *priv, u16 interfaceTag, u32 currentTime)
-{
- u32 i;
- CsrWifiRouterCtrlStaInfo_t *staInfo;
- u32 elapsedTime; /* Time in microseconds */
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- CsrWifiMacAddress peerMacAddress;
- unsigned long lock_flags;
-
- if (interfacePriv == NULL) {
- unifi_trace(priv, UDBG3, "uf_check_inactivity: Interface priv is NULL \n");
- return;
- }
-
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- /* Go through the list of stations to check for inactivity */
- for(i = 0; i < UNIFI_MAX_CONNECTIONS; i++) {
- staInfo = CsrWifiRouterCtrlGetStationRecordFromHandle(priv, i, interfaceTag);
- if(!staInfo ) {
- continue;
- }
-
- unifi_trace(priv, UDBG3, "Running Inactivity handler Time %xus station's last activity %xus\n",
- currentTime, staInfo->lastActivity);
-
-
- elapsedTime = (currentTime >= staInfo->lastActivity)?
- (currentTime - staInfo->lastActivity):
- (~((u32)0) - staInfo->lastActivity + currentTime);
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
-
- if (elapsedTime > MAX_INACTIVITY_INTERVAL) {
- memcpy((u8*)&peerMacAddress, (u8*)&staInfo->peerMacAddress, sizeof(CsrWifiMacAddress));
-
- /* Indicate inactivity for the station */
- unifi_trace(priv, UDBG3, "Station %x:%x:%x:%x:%x:%x inactive since %xus\n sending Inactive Ind\n",
- peerMacAddress.a[0], peerMacAddress.a[1],
- peerMacAddress.a[2], peerMacAddress.a[3],
- peerMacAddress.a[4], peerMacAddress.a[5],
- elapsedTime);
-
- CsrWifiRouterCtrlStaInactiveIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, interfaceTag, peerMacAddress);
- }
- }
-
- interfacePriv->last_inactivity_check = currentTime;
-}
-
-/* Function to update activity of a station */
-void uf_update_sta_activity(unifi_priv_t *priv, u16 interfaceTag, const u8 *peerMacAddress)
-{
- u32 elapsedTime, currentTime; /* Time in microseconds */
- u32 timeHi; /* Not used - Time in microseconds */
- CsrWifiRouterCtrlStaInfo_t *staInfo;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- unsigned long lock_flags;
-
- if (interfacePriv == NULL) {
- unifi_trace(priv, UDBG3, "uf_check_inactivity: Interface priv is NULL \n");
- return;
- }
-
- currentTime = CsrTimeGet(&timeHi);
-
-
- staInfo = CsrWifiRouterCtrlGetStationRecordFromPeerMacAddress(priv, peerMacAddress, interfaceTag);
-
- if (staInfo == NULL) {
- unifi_trace(priv, UDBG4, "Sta does not exist yet");
- return;
- }
-
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- /* Update activity */
- staInfo->lastActivity = currentTime;
-
- /* See if inactivity handler needs to be run
- * Here it is theoretically possible that the counter may have wrapped around. But
- * since we just want to know when to run the inactivity handler it does not really matter.
- * Especially since this is data path it makes sense in keeping it simple and avoiding
- * 64 bit handling */
- elapsedTime = (currentTime >= interfacePriv->last_inactivity_check)?
- (currentTime - interfacePriv->last_inactivity_check):
- (~((u32)0) - interfacePriv->last_inactivity_check + currentTime);
-
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
-
- /* Check if it is time to run the inactivity handler */
- if (elapsedTime > INACTIVITY_CHECK_INTERVAL) {
- uf_check_inactivity(priv, interfaceTag, currentTime);
- }
-}
-void resume_unicast_buffered_frames(unifi_priv_t *priv, u16 interfaceTag)
-{
-
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- u8 i;
- int j;
- tx_buffered_packets_t * buffered_pkt = NULL;
- u8 hipslotFree[4] = {TRUE, TRUE, TRUE, TRUE};
- int r;
- unsigned long lock_flags;
-
- while(!isRouterBufferEnabled(priv, 3) &&
- ((buffered_pkt=dequeue_tx_data_pdu(priv, &interfacePriv->genericMgtFrames))!=NULL)) {
- buffered_pkt->transmissionControl &=
- ~(TRANSMISSION_CONTROL_TRIGGER_MASK|TRANSMISSION_CONTROL_EOSP_MASK);
- if((r=frame_and_send_queued_pdu(priv, buffered_pkt, NULL, 0, FALSE)) == -ENOSPC) {
- /* Enqueue at the head of the queue */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, &interfacePriv->genericMgtFrames);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- hipslotFree[3]=FALSE;
- break;
- }else {
- if(r){
- unifi_trace (priv, UDBG1, " HIP validation failure : PDU sending failed \n");
- /* the PDU failed where we can't do any thing so free the storage */
- unifi_net_data_free(priv, &buffered_pkt->bulkdata);
- }
- kfree(buffered_pkt);
- }
- }
- for(i = 0; i < UNIFI_MAX_CONNECTIONS; i++) {
- CsrWifiRouterCtrlStaInfo_t *staInfo = interfacePriv->staInfo[i];
- if(!hipslotFree[0] && !hipslotFree[1] && !hipslotFree[2] && !hipslotFree[3]) {
- unifi_trace(priv, UDBG3, "(ENOSPC) in resume_unicast_buffered_frames:: hip slots are full \n");
- break;
- }
- if (staInfo && (staInfo->currentPeerState == CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_ACTIVE)) {
- while((( TRUE == hipslotFree[3] ) && (buffered_pkt=dequeue_tx_data_pdu(priv, &staInfo->mgtFrames)))) {
- buffered_pkt->transmissionControl &=
- ~(TRANSMISSION_CONTROL_TRIGGER_MASK|TRANSMISSION_CONTROL_EOSP_MASK);
- if((r=frame_and_send_queued_pdu(priv, buffered_pkt, staInfo, 0, FALSE)) == -ENOSPC) {
- unifi_trace(priv, UDBG3, "(ENOSPC) in resume_unicast_buffered_frames:: hip slots are full for voice queue\n");
- /* Enqueue at the head of the queue */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, &staInfo->mgtFrames);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- priv->pausedStaHandle[3]=(u8)(staInfo->assignedHandle);
- hipslotFree[3] = FALSE;
- break;
- } else {
- if(r){
- unifi_trace (priv, UDBG1, " HIP validation failure : PDU sending failed \n");
- /* the PDU failed where we can't do any thing so free the storage */
- unifi_net_data_free(priv, &buffered_pkt->bulkdata);
- }
- kfree(buffered_pkt);
- }
- }
-
- for(j=3;j>=0;j--) {
- if(!hipslotFree[j])
- continue;
-
- while((buffered_pkt=dequeue_tx_data_pdu(priv, &staInfo->dataPdu[j]))) {
- buffered_pkt->transmissionControl &=
- ~(TRANSMISSION_CONTROL_TRIGGER_MASK|TRANSMISSION_CONTROL_EOSP_MASK);
- if((r=frame_and_send_queued_pdu(priv, buffered_pkt, staInfo, 0, FALSE)) == -ENOSPC) {
- /* Enqueue at the head of the queue */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_add(&buffered_pkt->q, &staInfo->dataPdu[j]);
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- priv->pausedStaHandle[j]=(u8)(staInfo->assignedHandle);
- hipslotFree[j]=FALSE;
- break;
- } else {
- if(r){
- unifi_trace (priv, UDBG1, " HIP validation failure : PDU sending failed \n");
- /* the PDU failed where we can't do any thing so free the storage */
- unifi_net_data_free(priv, &buffered_pkt->bulkdata);
- }
- kfree(buffered_pkt);
- }
- }
- }
- }
- }
-}
-void update_eosp_to_head_of_broadcast_list_head(unifi_priv_t *priv, u16 interfaceTag)
-{
-
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
- unsigned long lock_flags;
- struct list_head *listHead;
- struct list_head *placeHolder;
- tx_buffered_packets_t *tx_q_item;
-
- if (interfacePriv->noOfbroadcastPktQueued) {
-
- /* Update the EOSP to the HEAD of b/c list
- * because we have received any mgmt packet so it should not hold for long time
- * peer may time out.
- */
- spin_lock_irqsave(&priv->tx_q_lock, lock_flags);
- list_for_each_safe(listHead, placeHolder, &interfacePriv->genericMulticastOrBroadCastFrames) {
- tx_q_item = list_entry(listHead, tx_buffered_packets_t, q);
- tx_q_item->transmissionControl |= TRANSMISSION_CONTROL_EOSP_MASK;
- tx_q_item->transmissionControl = (tx_q_item->transmissionControl & ~(CSR_NO_CONFIRM_REQUIRED));
- unifi_trace(priv, UDBG1, "updating eosp for list Head hostTag:= 0x%x ", tx_q_item->hostTag);
- break;
- }
- spin_unlock_irqrestore(&priv->tx_q_lock, lock_flags);
- }
-}
-
-/*
- * ---------------------------------------------------------------------------
- * resume_suspended_uapsd
- *
- * This function takes care processing packets of Unscheduled Service Period,
- * which been suspended earlier due to DTIM/HIP ENOSPC scenarios
- *
- * Arguments:
- * priv Pointer to device private context struct
- * interfaceTag For which resume should happen
- * ---------------------------------------------------------------------------
- */
-void resume_suspended_uapsd(unifi_priv_t* priv, u16 interfaceTag)
-{
-
- u8 startIndex;
- CsrWifiRouterCtrlStaInfo_t * staInfo = NULL;
- unsigned long lock_flags;
-
- unifi_trace(priv, UDBG2, "++resume_suspended_uapsd: \n");
- for(startIndex= 0; startIndex < UNIFI_MAX_CONNECTIONS;startIndex++) {
- staInfo = CsrWifiRouterCtrlGetStationRecordFromHandle(priv, startIndex, interfaceTag);
-
- if(!staInfo || !staInfo->wmmOrQosEnabled) {
- continue;
- } else if((staInfo->currentPeerState == CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_POWER_SAVE)
- &&staInfo->uapsdActive && staInfo->uspSuspend) {
- /* U-APSD Still active & previously suspended either ENOSPC of FH queues OR
- * due to DTIM activity
- */
- uf_handle_uspframes_delivery(priv, staInfo, interfaceTag);
- } else {
- unifi_trace(priv, UDBG2, "resume_suspended_uapsd: PS state=%x, uapsdActive?=%x, suspend?=%x\n",
- staInfo->currentPeerState, staInfo->uapsdActive, staInfo->uspSuspend);
- if (staInfo->currentPeerState == CSR_WIFI_ROUTER_CTRL_PEER_CONNECTED_ACTIVE)
- {
- spin_lock_irqsave(&priv->staRecord_lock, lock_flags);
- staInfo->uapsdActive = FALSE;
- staInfo->uspSuspend = FALSE;
- spin_unlock_irqrestore(&priv->staRecord_lock, lock_flags);
- }
- }
- }
- unifi_trace(priv, UDBG2, "--resume_suspended_uapsd:\n");
-}
-
-#endif
diff --git a/drivers/staging/csr/unifi_priv.h b/drivers/staging/csr/unifi_priv.h
deleted file mode 100644
index 37302f3c2f6c..000000000000
--- a/drivers/staging/csr/unifi_priv.h
+++ /dev/null
@@ -1,1136 +0,0 @@
-/*
- *****************************************************************************
- *
- * FILE : unifi_priv.h
- *
- * PURPOSE : Private header file for unifi driver.
- *
- * UDI = UniFi Debug Interface
- *
- * Copyright (C) 2005-2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- *****************************************************************************
- */
-#ifndef __LINUX_UNIFI_PRIV_H__
-#define __LINUX_UNIFI_PRIV_H__ 1
-
-#include <linux/module.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-#include <linux/kernel.h>
-#include <linux/wait.h>
-#include <linux/sched.h>
-#include <linux/delay.h>
-#include <linux/netdevice.h>
-#include <linux/wireless.h>
-#include <linux/cdev.h>
-#include <linux/kthread.h>
-#include <linux/freezer.h>
-
-#ifdef CSR_WIFI_SUPPORT_MMC_DRIVER
-#include <linux/mmc/core.h>
-#include <linux/mmc/card.h>
-#include <linux/mmc/host.h>
-#include <linux/mmc/sdio_func.h>
-#include <linux/mmc/sdio_ids.h>
-#include <linux/mmc/sdio.h>
-#endif /* CSR_WIFI_SUPPORT_MMC_DRIVER */
-
-#include <linux/fs.h>
-
-#ifdef ANDROID_BUILD
-#include <linux/wakelock.h>
-#endif
-
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_unifi_udi.h"
-#include "csr_wifi_router_lib.h"
-#include "unifiio.h"
-#ifndef CSR_WIFI_HIP_TA_DISABLE
-#include "csr_wifi_vif_utils.h"
-#endif
-
-/* Define the unifi_priv_t before include the unifi_native.h */
-struct unifi_priv;
-typedef struct unifi_priv unifi_priv_t;
-#ifdef CSR_SUPPORT_WEXT_AP
-struct CsrWifiSmeApConfig;
-typedef struct CsrWifiSmeApConfig CsrWifiSmeApConfig_t;
-#endif
-#ifdef CSR_SUPPORT_WEXT
-#include "unifi_wext.h"
-#endif
-
-#ifdef ANDROID_BUILD
-extern struct wake_lock unifi_sdio_wake_lock;
-#endif
-
-#include "unifi_clients.h"
-
-#ifdef CSR_NATIVE_LINUX
-#include "sme_native/unifi_native.h"
-#else
-#include "unifi_sme.h"
-#endif
-
-/* The device major number to use when registering the udi driver */
-#define UNIFI_NAME "unifi"
-/*
- * MAX_UNIFI_DEVS defines the maximum number of UniFi devices that can be present.
- * This number should be set to the number of SDIO slots supported by the SDIO
- * host controller on the platform.
- * Note: If MAX_UNIFI_DEVS value changes, fw_init[] needs to be corrected in drv.c
- */
-#define MAX_UNIFI_DEVS 2
-
-/* 802.11 Mac header offsets */
-#define MAC_HEADER_SIZE 24
-#define QOS_CONTROL_HEADER_SIZE 2
-#define HT_CONTROL_HEADER_SIZE 4
-#define QOS_DATA 0x8
-#define QOS_DATA_NULL 0xc
-#define DATA_NULL 0x04
-#define FRAME_CONTROL_ORDER_BIT 0x8000
-#define FRAME_CONTROL_TYPE_FIELD_OFFSET 2
-#define FRAME_CONTROL_SUBTYPE_FIELD_OFFSET 4
-#define IEEE802_11_FRAMETYPE_DATA 0x02
-#define IEEE802_11_FRAMETYPE_CONTROL 0x01
-#define IEEE802_11_FRAMETYPE_MANAGEMENT 0x00
-#define IEEE802_11_FRAMETYPE_RESERVED 0x03
-
-/* octet offset from start of mac header for certain fields */
-#define IEEE802_11_ADDR3_OFFSET 16
-#define IEEE802_11_SEQUENCE_CONTROL_OFFSET 22
-#define IEEE802_11_MAX_DATA_LEN 2304
-
-/* frame control (FC) masks, for frame control as 16 bit integer */
-#define IEEE802_11_FC_TO_DS_MASK 0x100
-#define IEEE802_11_FC_FROM_DS_MASK 0x200
-#define IEEE802_11_FC_MOREDATA_MASK 0x2000
-#define IEEE802_11_FC_PROTECTED_MASK 0x4000
-#define IEEE80211_FC_ORDER_MASK 0x8000
-#define IEEE80211_FC_SUBTYPE_MASK 0x00f0
-#define IEEE80211_FC_TYPE_MASK 0x000c
-#define IEEE80211_FC_PROTO_VERSION_MASK 0x0003
-
-/* selected type and subtype combinations as in 7.1.3.1 table 1
- For frame control as 16 bit integer, or for ls octet
-*/
-#define IEEE802_11_FC_TYPE_DATA 0x08
-#define IEEE802_11_FC_TYPE_NULL 0x48
-#define IEEE802_11_FC_TYPE_QOS_NULL 0xc8
-#define IEEE802_11_FC_TYPE_QOS_DATA 0x88
-
-#define IEEE802_11_FC_TYPE_DATA_SUBTYPE_RESERVED 0x0D
-
-/* qos control (QC) masks for qos control as 16 bit integer, or for ls octet */
-#define IEEE802_11_QC_TID_MASK 0x0f
-#define IEEE802_11_QC_A_MSDU_PRESENT 0x80
-
-#if (defined(CSR_WIFI_SECURITY_WAPI_ENABLE) && defined(CSR_WIFI_SECURITY_WAPI_QOSCTRL_MIC_WORKAROUND))
-#define IEEE802_11_QC_NON_TID_BITS_MASK 0xFFF0
-#endif
-
-#define CSR_WIFI_EAPOL_M4_HOST_TAG 0x50000000
-#define IEEE802_11_DATA_FRAME_MAC_HEADER_SIZE 36
-#define MAX_ACCESS_CATOGORY 4
-
-/* Time in us to check for inactivity of stations 5 mins */
-#define INACTIVITY_CHECK_INTERVAL 300000000
-/* Time in us before a station is flagged as inactive */
-#define MAX_INACTIVITY_INTERVAL 300000000
-
-
-/* Define for maximum BA session */
-#define MAX_SUPPORTED_BA_SESSIONS_TX 1
-#define MAX_SUPPORTED_BA_SESSIONS_RX 4
-
-#define MAX_BA_WIND_SIZE 64
-#define MAC_HEADER_ADDR1_OFFSET 4
-#define MAC_HEADER_ADDR2_OFFSET 10
-
-/* Define for age (in us) value for frames in MPDU reorder buffer */
-#define CSR_WIFI_BA_MPDU_FRAME_AGE_TIMEOUT 30000 /* 30 milli seconds */
-
-/* This macro used in prepare_and_add_macheader*/
-#define ADDRESS_ONE_OFFSET 20
-
-/* Defines for STA inactivity detection */
-#define STA_INACTIVE_DETECTION_TRIGGER_THRESHOLD 1 /* in number of stations */
-#define STA_INACTIVE_DETECTION_TIMER_INTERVAL 30 /* in seconds */
-#define STA_INACTIVE_TIMEOUT_VAL 120*1000*1000 /* 120 seconds */
-
-/* Test for modes requiring AP firmware patch */
-#define CSR_WIFI_HIP_IS_AP_FW(mode) ((((mode) == CSR_WIFI_ROUTER_CTRL_MODE_AP) || \
- ((mode) == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO)) ? TRUE : FALSE)
-
-/* Defines used in beacon filtering in case of P2P */
-#define CSR_WIFI_P2P_WILDCARD_SSID_LENGTH 0x7
-#define CSR_WIFI_80211_FRAME_SUBTYPE_BEACON 0x8
-#define CSR_WIFI_BEACON_FIXED_LENGTH 12
-#define CSR_WIFI_FRAME_SUBTYPE_BIT_OFFSET 4
-#define CSR_WIFI_80211_FRAME_SUBTYPE_BIT_MASK ((u8)(0xF << CSR_WIFI_FRAME_SUBTYPE_BIT_OFFSET))
-
-#define CSR_WIFI_80211_GET_FRAME_SUBTYPE(frameBuffer) \
- ((u8)(((u8 *)frameBuffer)[0] & CSR_WIFI_80211_FRAME_SUBTYPE_BIT_MASK) >> CSR_WIFI_FRAME_SUBTYPE_BIT_OFFSET)
-
-/* For M4 request received via netdev*/
-
-typedef u8 CsrWifiPacketType;
-#define CSR_WIFI_UNICAST_PDU ((CsrWifiPacketType) 0x00)
-#define CSR_WIFI_MULTICAST_PDU ((CsrWifiPacketType) 0x1)
-#define CSR_WIFI_BROADCAST_PDU ((CsrWifiPacketType) 0x2)
-
-#define PRIO_TO_NICE(prio) ((prio) - MAX_RT_PRIO - 20)
-
-/* Module parameter variables */
-extern int buswidth;
-extern int sdio_clock;
-extern int use_5g;
-extern int disable_hw_reset;
-extern int disable_power_control;
-extern int enable_wol;
-extern int sme_debug;
-extern int fw_init[MAX_UNIFI_DEVS];
-extern int tl_80211d;
-extern int sdio_byte_mode;
-extern int sdio_block_size;
-extern int coredump_max;
-extern int run_bh_once;
-extern int bh_priority;
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-extern int log_hip_signals;
-#endif
-
-struct dlpriv {
- const unsigned char *dl_data;
- int dl_len;
- void *fw_desc;
-};
-
-
-struct uf_thread {
-
- struct task_struct *thread_task;
-
- /* wait_queue for waking the unifi_thread kernel thread */
- wait_queue_head_t wakeup_q;
- unsigned int wakeup_flag;
-
- /*
- * Use it to block the I/O thread when
- * an error occurs or UniFi is reinitialised.
- */
- int block_thread;
-
- char name[16];
- int prio;
-};
-
-/*
- * Link list to hold the received packets for the period the port
- * remains closed.
- */
-typedef struct rx_buffered_packets {
- /* List link structure */
- struct list_head q;
- /* Packet to indicate when the port reopens */
- struct sk_buff *skb;
- /* Bulkdata to free in case the port closes and need to discard the packet */
- bulk_data_param_t bulkdata;
- /* The source address of the packet */
- CsrWifiMacAddress sa;
- /* The destination address of the packet */
- CsrWifiMacAddress da;
- /* Corresponding signal */
- CSR_SIGNAL signal;
-} rx_buffered_packets_t;
-
-
-typedef u8 CsrWifiAcPowersaveMode;
-#define CSR_WIFI_AC_TRIGGER_ONLY_ENABLED 0x00
-#define CSR_WIFI_AC_DELIVERY_ONLY_ENABLE 0X01
-#define CSR_WIFI_AC_TRIGGER_AND_DELIVERY_ENABLED 0X03
-#define CSR_WIFI_AC_LEGACY_POWER_SAVE 0X02
-
-
-#define IS_DELIVERY_ENABLED(mode) (mode & CSR_WIFI_AC_DELIVERY_ONLY_ENABLE)? 1: 0
-#define IS_DELIVERY_AND_TRIGGER_ENABLED(mode) ((mode & CSR_WIFI_AC_DELIVERY_ONLY_ENABLE)||(mode & CSR_WIFI_AC_TRIGGER_AND_DELIVERY_ENABLED))? 1: 0
-#define IS_DTIM_ACTIVE(flag, hostTag) ((flag == TRUE || hostTag != INVALID_HOST_TAG))
-#define INVALID_HOST_TAG 0xFFFFFFFF
-#define UNIFI_TRAFFIC_Q_CONTENTION UNIFI_TRAFFIC_Q_BE
-
-
-
-
-/* Queue to be used for contention priority */
-
-/*
- * Link list to hold the tx packets for the period the peer
- * powersave/free slots in unifi
- */
-typedef struct tx_buffered_packets {
- /* List link structure */
- struct list_head q;
- u16 interfaceTag;
- CSR_CLIENT_TAG hostTag;
- CSR_PROCESS_ID leSenderProcessId;
- CSR_TRANSMISSION_CONTROL transmissionControl;
- CSR_RATE rate;
- /* Bulkdata to free in case the port closes and need to discard the packet */
- bulk_data_desc_t bulkdata;
- /* The source address of the packet */
- CsrWifiMacAddress peerMacAddress;
- CSR_PRIORITY priority;
-} tx_buffered_packets_t;
-
-/* station record has this data structure */
-typedef struct CsrWifiRouterCtrlStaInfo_t {
-
- /* Sme sends these parameters */
- CsrWifiMacAddress peerMacAddress;
- u32 assignedHandle;
- u8 wmmOrQosEnabled;
- CsrWifiAcPowersaveMode powersaveMode[MAX_ACCESS_CATOGORY];
- u16 maxSpLength;
- u8 uapsdActive;
- u16 noOfSpFramesSent;
-
- /* Router/Driver database */
-#ifdef CSR_SUPPORT_SME
- unifi_port_cfg_t *peerControlledPort;
- unifi_port_cfg_t *peerUnControlledPort;
-
- /* Inactivity feature parameters */
- struct netInterface_priv *interfacePriv;
- struct work_struct send_disconnected_ind_task;
- u8 activity_flag;
- u16 listenIntervalInTus;
- CSR_CLIENT_TAG nullDataHostTag;
-
- /* Activity timestamps for the station */
- u32 lastActivity;
-
- /* during m/c transmission sp suspended */
- u8 uspSuspend;
- CSR_PRIORITY triggerFramePriority;
-#endif
- CsrWifiRouterCtrlPeerStatus currentPeerState;
- struct list_head dataPdu[MAX_ACCESS_CATOGORY];
- struct list_head mgtFrames;
- u8 spStatus;
- u8 prevFrmType;
- u8 prevFrmAccessCatogory;
- u8 protection;
- u16 aid;
- u8 txSuspend;
- u8 timSet;
- /* Dont change the value of below macro for SET & RESET */
-#define CSR_WIFI_TIM_RESET 0
-#define CSR_WIFI_TIM_SET 1
-#define CSR_WIFI_TIM_RESETTING 2
-#define CSR_WIFI_TIM_SETTING 3
-
- u8 timRequestPendingFlag;
- u8 updateTimReqQueued;
- u16 noOfPktQueued;
-}CsrWifiRouterCtrlStaInfo_t;
-
-#ifdef CSR_SUPPORT_WEXT_AP
-struct CsrWifiSmeApConfig {
- CsrWifiSsid ssid;
- u16 channel;
- CsrWifiNmeApCredentials credentials;
- u8 max_connections;
- u8 if_index;
-};
-#endif
-
-#ifdef CSR_WIFI_RX_PATH_SPLIT
-/* This is a test code and may be removed later*/
-#define CSR_WIFI_RX_SIGNAL_BUFFER_SIZE (60+1)
-
-typedef struct
-{
- u8 *bufptr; /* Signal Primitive */
- bulk_data_param_t data_ptrs; /* Bulk Data pointers */
- u16 sig_len;
-}rx_buff_struct_t;
-
-typedef struct
-{
- u8 writePointer; /**< write pointer */
- u8 readPointer; /**< read pointer */
- u8 size; /**< size of circular buffer */
- rx_buff_struct_t rx_buff[CSR_WIFI_RX_SIGNAL_BUFFER_SIZE]; /**< Element of ciruclar buffer */
-} rxCircularBuffer_t;
-
-void rx_wq_handler(struct work_struct *work);
-#endif
-
-struct unifi_priv {
-
- card_t *card;
- CsrSdioFunction *sdio;
-
- /* Index into Unifi_instances[] for this device. */
- int instance;
- /* Reference count for this instance */
- int ref_count;
-
- /* Firmware images */
- struct dlpriv fw_sta;
- struct dlpriv fw_conv; /* used for conversion of production test image */
-
- /* Char device related structures */
- struct cdev unifi_cdev;
- struct cdev unifiudi_cdev;
- struct device *unifi_device;
-
- /* Which wireless interface to use (1 - 2.4GHz, 2 - 5GHz) */
- CSR_IFINTERFACE if_index;
-
- /* For multiple interface support */
- struct net_device *netdev[CSR_WIFI_NUM_INTERFACES];
- struct netInterface_priv *interfacePriv[CSR_WIFI_NUM_INTERFACES];
-
- u8 totalInterfaceCount;
-
- int prev_queue;
-
- /* Name of node under /proc */
- char proc_entry_name[64];
-
- /*
- * Flags:
- * drop_unencrypted
- * - Not used?
- * netdev_registered
- * - whether the netdev has been registered.
- */
- unsigned int drop_unencrypted : 1;
-
- /* Our list of unifi linux clients. */
- ul_client_t ul_clients[MAX_UDI_CLIENTS];
-
- /* Mutex to protect using the logging hook after UDI client is gone */
- struct semaphore udi_logging_mutex;
- /* Pointer to the ul_clients[] array */
- ul_client_t *logging_client;
-
- /* A ul_client_t* used to send the netdev related MIB requests. */
- ul_client_t *netdev_client;
-
- /* The SME ul_client_t pointer. */
- ul_client_t *sme_cli;
-
- /* The AMP ul_client_t pointer. */
- ul_client_t *amp_client;
-
- /*
- * Semaphore for locking the top-half to one user process.
- * This is necessary to prevent multiple processes calling driver
- * operations. This can happen because the network driver entry points
- * can be called from multiple processes.
- */
-#ifdef USE_DRIVER_LOCK
- struct semaphore lock;
-#endif /* USE_DRIVER_LOCK */
-
- /* Flag to say that an operation was aborted */
- int io_aborted;
-
- struct uf_thread bh_thread;
-
-#define UNIFI_INIT_NONE 0x00
-#define UNIFI_INIT_IN_PROGRESS 0x01
-#define UNIFI_INIT_FW_DOWNLOADED 0x02
-#define UNIFI_INIT_COMPLETED 0x04
- unsigned char init_progress;
-
- int sme_is_present;
-
- /* The WMM features that UniFi uses in the current BSS */
- unsigned int sta_wmm_capabilities;
-
- /* Debug only */
- char last_debug_string[256];
- unsigned short last_debug_word16[16];
-
-#ifdef CSR_SUPPORT_SME
- /* lock to protect the tx queues list */
- spinlock_t tx_q_lock;
- u8 allPeerDozing;
- u8 pausedStaHandle[MAX_ACCESS_CATOGORY];
- /* Max packet the driver can queue, irrespective of interface number */
- u16 noOfPktQueuedInDriver;
-#define CSR_WIFI_DRIVER_SUPPORT_FOR_MAX_PKT_QUEUEING 512
-#define CSR_WIFI_DRIVER_MAX_PKT_QUEUING_THRESHOLD_PER_PEER 64
-#define CSR_WIFI_DRIVER_MINIMUM_BROADCAST_PKT_THRESHOLD 3
-
- u8 routerBufferEnable[MAX_ACCESS_CATOGORY];
- /* lock to protect stainfo members and priv members*/
- spinlock_t staRecord_lock;
-#endif
-#ifdef CSR_NATIVE_LINUX
-#ifdef CSR_SUPPORT_WEXT
- /* wireless config */
- struct wext_config wext_conf;
-#endif
-
- /* Mutex to protect the MLME blocking requests */
- struct semaphore mlme_blocking_mutex;
-
- /* The ul_client that provides the blocking API for WEXT calls */
- ul_client_t *wext_client;
-
-#endif /* CSR_NATIVE_LINUX */
-
-#ifdef CSR_SUPPORT_SME
- wait_queue_head_t sme_request_wq;
- /* Semaphore to protect the SME blocking requests */
- struct semaphore sme_sem;
- /* Structure to hold the SME blocking requests data*/
- sme_reply_t sme_reply;
-
- /* Structure to hold a traffic protocol indication */
- struct ta_ind {
- struct work_struct task;
- CsrWifiRouterCtrlTrafficPacketType packet_type;
- CsrWifiRouterCtrlProtocolDirection direction;
- CsrWifiMacAddress src_addr;
- int in_use;
- } ta_ind_work;
-
- struct ta_sample_ind {
- struct work_struct task;
- CsrWifiRouterCtrlTrafficStats stats;
- int in_use;
- } ta_sample_ind_work;
-
- __be32 sta_ip_address;
- CsrWifiRouterCtrlSmeVersions sme_versions;
-
- /*
- * Flag to reflect state of unifi_sys_wifi_on_*() progress.
- * This indicates whether we are in an "wifi on" state when we are
- * allowed to indication errors with unifi_mgt_wifi_off_ind()
- */
- enum {
- wifi_on_unspecified = -1,
- wifi_on_in_progress = 0,
- wifi_on_done = 1,
- } wifi_on_state;
-
- /* Userspace TaskId for the SME Set when a wifi on req is received */
- CsrSchedQid CSR_WIFI_SME_IFACEQUEUE;
-
- struct work_struct multicast_list_task;
- /*
- * The SME installs filters to ask for specific MA-UNITDATA.req
- * to be passed to different SME components.
- */
-#define MAX_MA_UNIDATA_IND_FILTERS 8
- sme_ma_unidata_ind_filter_t sme_unidata_ind_filters[MAX_MA_UNIDATA_IND_FILTERS];
-
-/* UNIFI_CFG related parameters */
- uf_cfg_bcast_packet_filter_t packet_filters;
- unsigned char *filter_tclas_ies;
- /* The structure that holds all the connection configuration. */
- CsrWifiSmeConnectionConfig connection_config;
-#ifdef CSR_SUPPORT_WEXT
-
- int ignore_bssid_join;
- struct iw_statistics wext_wireless_stats;
-
- /* The MIB and MAC address files contents, read from userspace */
- CsrWifiSmeDataBlock mib_data;
- CsrWifiMacAddress sta_mac_address;
-
- int wep_tx_key_index;
- wep_key_t wep_keys[NUM_WEPKEYS];
-
-
-#ifdef CSR_SUPPORT_WEXT_AP
- CsrWifiSmeApMacConfig ap_mac_config;
- CsrWifiNmeApConfig group_sec_config;
- CsrWifiSmeApConfig_t ap_config;
-#endif
- struct work_struct sme_config_task;
-
-#endif /* CSR_SUPPORT_WEXT */
-
-#endif /* CSR_SUPPORT_SME */
-
-#ifdef CSR_SME_USERSPACE
- void *smepriv;
-#endif /* CSR_SME_USERSPACE */
-
- card_info_t card_info;
-
- /* Mutex to protect unifi_send_signal() */
- spinlock_t send_signal_lock;
-
-
- /*
- * The workqueue to offload the TA run
- * and the multicast addresses list set
- */
- struct workqueue_struct *unifi_workqueue;
-
- unsigned char *mib_cfm_buffer;
- unsigned int mib_cfm_buffer_length;
-
- int ptest_mode; /* Set when in production test mode */
- int coredump_mode; /* Set when SME has requested a coredump */
- u8 wol_suspend; /* Set when suspending with UniFi powered */
-
-#define UF_UNCONTROLLED_PORT_Q 0
-#define UF_CONTROLLED_PORT_Q 1
-
- /* Semaphore to protect the rx queues list */
- struct semaphore rx_q_sem;
-
- /* Spinlock to protect M4 data */
- spinlock_t m4_lock;
- /* Mutex to protect BA RX data */
- struct semaphore ba_mutex;
-
-#if (defined(CSR_WIFI_SECURITY_WAPI_ENABLE) && defined(CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION))
- /* Spinlock to protect the WAPI data */
- spinlock_t wapi_lock;
-#endif
-
- /* Array to indicate if a particular Tx queue is paused, this may not be
- * required in a multiqueue implementation since we can directly stop kernel
- * queues */
- u8 tx_q_paused_flag[UNIFI_TRAFFIC_Q_MAX];
-
-#ifdef CSR_WIFI_RX_PATH_SPLIT
- struct workqueue_struct *rx_workqueue;
- struct work_struct rx_work_struct;
- rxCircularBuffer_t rxSignalBuffer;
-
-#endif
-
- u32 rxTcpThroughput;
- u32 txTcpThroughput;
- u32 rxUdpThroughput;
- u32 txUdpThroughput;
-
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- /*Set if multicast KeyID = 1*/
- u8 wapi_multicast_filter;
- /*Set if unicast KeyID = 1*/
- u8 wapi_unicast_filter;
- u8 wapi_unicast_queued_pkt_filter;
-#ifdef CSR_WIFI_SECURITY_WAPI_QOSCTRL_MIC_WORKAROUND
- u8 isWapiConnection;
-#endif
-#endif
-
-#ifdef CSR_WIFI_SPLIT_PATCH
- CsrWifiRouterCtrlModeSetReq pending_mode_set;
-#endif
-
- u8 cmanrTestMode;
- CSR_RATE cmanrTestModeTransmitRate;
-
-};
-
-typedef struct {
- u16 queue_length[4];
- u8 os_queue_paused;
-} unifi_OsQosInfo;
-
-
-typedef struct {
- u8 active;
- bulk_data_param_t bulkdata;
- CSR_SIGNAL signal;
- u16 sn;
- u32 recv_time;
-} frame_desc_struct;
-
-typedef struct {
- frame_desc_struct *buffer;
- u16 wind_size;
- u16 occupied_slots;
- struct timer_list timer;
- u16 timeout;
- u16 expected_sn;
- u16 start_sn;
- u8 trigger_ba_after_ssn;
- struct netInterface_priv *interfacePriv;
- u16 tID;
- CsrWifiMacAddress macAddress;
- struct work_struct send_ba_err_task;
-} ba_session_rx_struct;
-
-
-typedef struct {
- struct netInterface_priv *interfacePriv;
- u16 tID;
- CsrWifiMacAddress macAddress;
-} ba_session_tx_struct;
-
-typedef struct netInterface_priv
-{
- u16 InterfaceTag;
- struct unifi_priv *privPtr;
- ba_session_tx_struct *ba_session_tx[MAX_SUPPORTED_BA_SESSIONS_TX];
- ba_session_rx_struct *ba_session_rx[MAX_SUPPORTED_BA_SESSIONS_RX];
- frame_desc_struct ba_complete[MAX_BA_WIND_SIZE];
- u8 ba_complete_index;
- u8 queueEnabled[UNIFI_NO_OF_TX_QS];
- struct work_struct send_m4_ready_task;
-#ifdef CSR_WIFI_SECURITY_WAPI_ENABLE
- struct work_struct send_pkt_to_encrypt;
-#endif
- struct net_device_stats stats;
- u8 interfaceMode;
- u8 protect;
- CsrWifiMacAddress bssid;
- /*
- * Flag to reflect state of CONNECTED indication signal.
- * This indicates whether we are "joined" an Access Point (i.e. have
- * nominated an AP and are receiving beacons) but give no indication
- * of whether we are authenticated and/or associated.
- */
- enum {
- UnifiConnectedUnknown = -1,
- UnifiNotConnected = 0,
- UnifiConnected = 1,
- } connected;
-#ifdef CSR_SUPPORT_WEXT
- /* Tracks when we are waiting for a netdevice state change callback */
- u8 wait_netdev_change;
- /* True if we have successfully registered for netdev callbacks */
- u8 netdev_callback_registered;
-#endif /* CSR_SUPPORT_WEXT */
- unsigned int netdev_registered;
-#define UNIFI_MAX_MULTICAST_ADDRESSES 10
- /* The multicast addresses list that the thread needs to set. */
- u8 mc_list[UNIFI_MAX_MULTICAST_ADDRESSES*ETH_ALEN];
- /* The multicast addresses count that the thread needs to set. */
- int mc_list_count;
- u32 tag;
-#ifdef CSR_SUPPORT_SME
- /* (un)controlled port configuration */
- unifi_port_config_t controlled_data_port;
- unifi_port_config_t uncontrolled_data_port;
-
- /* station record maintenance related data structures */
- u8 num_stations_joined;
- CsrWifiRouterCtrlStaInfo_t *(staInfo)[UNIFI_MAX_CONNECTIONS];
- struct list_head genericMgtFrames;
- struct list_head genericMulticastOrBroadCastFrames;
- struct list_head genericMulticastOrBroadCastMgtFrames;
-
- /* Timer for detecting station inactivity */
- struct timer_list sta_activity_check_timer;
- u8 sta_activity_check_enabled;
-
- /* Timestamp when the last inactivity check was done */
- u32 last_inactivity_check;
-
- /*number of multicast or borad cast packets queued*/
- u16 noOfbroadcastPktQueued;
-#endif
- /* A list to hold the buffered uncontrolled port packets */
- struct list_head rx_uncontrolled_list;
- /* A list to hold the buffered controlled port packets */
- struct list_head rx_controlled_list;
- /* Buffered M4 signal to take care of WPA race condition */
- CSR_SIGNAL m4_signal;
- bulk_data_desc_t m4_bulk_data;
-
-#if (defined(CSR_WIFI_SECURITY_WAPI_ENABLE) && defined(CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION))
- /* Buffered WAPI Unicast MA Packet Request for encryption in Sme */
- CSR_SIGNAL wapi_unicast_ma_pkt_sig;
- bulk_data_desc_t wapi_unicast_bulk_data;
-#endif
-
- /* This should be removed and m4_hostTag should be used for checking*/
- u8 m4_sent;
- CSR_CLIENT_TAG m4_hostTag;
- u8 dtimActive;
- u8 intraBssEnabled;
- u32 multicastPduHostTag; /* Used to set the tim after getting
- a confirm for it */
- u8 bcTimSet;
- u8 bcTimSetReqPendingFlag;
- u8 bcTimSetReqQueued;
-} netInterface_priv_t;
-
-#ifdef CSR_SUPPORT_SME
-#define routerStartBuffering(priv, queue) priv->routerBufferEnable[(queue)] = TRUE;
-#define routerStopBuffering(priv, queue) priv->routerBufferEnable[(queue)] = FALSE;
-#define isRouterBufferEnabled(priv, queue) priv->routerBufferEnable[(queue)]
-#endif
-
-#ifdef USE_DRIVER_LOCK
-#define LOCK_DRIVER(_p) down_interruptible(&(_p)->lock)
-#define UNLOCK_DRIVER(_p) up(&(_p)->lock)
-#else
-#define LOCK_DRIVER(_p) (void)(_p); /* as nothing */
-#define UNLOCK_DRIVER(_p) (void)(_p); /* as nothing */
-#endif /* USE_DRIVER_LOCK */
-
-s32 CsrHipResultToStatus(CsrResult csrResult);
-
-
-/*
- * SDIO related functions and callbacks
- */
-int uf_sdio_load(void);
-void uf_sdio_unload(void);
-unifi_priv_t *uf_find_instance(int inst);
-int uf_find_priv(unifi_priv_t *priv);
-int uf_find_netdev_priv(netInterface_priv_t *priv);
-unifi_priv_t *uf_get_instance(int inst);
-void uf_put_instance(int inst);
-int csr_sdio_linux_install_irq(CsrSdioFunction *sdio);
-int csr_sdio_linux_remove_irq(CsrSdioFunction *sdio);
-
-void uf_add_os_device(int bus_id, struct device *os_device);
-void uf_remove_os_device(int bus_id);
-
-
-
-/*
- * Claim/release SDIO
- *
- * For multifunction cards, we cannot grub the SDIO lock around the unifi_bh()
- * as this prevents other functions using SDIO.
- * Since some of CSR SDIO API is used regardless of trying to lock unifi_bh()
- * we have followed this scheme:
- * 1. If a function needs protection only when CSR_WIFI_SINGLE_FUNCTION is defined
- * then we call CsrSdioClaim/CsrSdioRelease().
- * 2. If a function needs protection only when CSR_WIFI_SINGLE_FUNCTION is not defined
- * then we call _sdio_claim_host/_sdio_claim_host(). Use of this should be restricted
- * to the SDIO glue layer only (e.g. sdio_mmc.c).
- * 3. If a function needs protection, regardless of the CSR_WIFI_SINGLE_FUNCTION
- * then we call directly the sdio_claim_host/sdio_release_host().
- * Use of this must be restricted to the SDIO glue layer only (e.g. sdio_mmc.c).
- *
- * Note: The _func and function pointers are _not_ the same.
- * The former is the (struct sdio_func*) context, which restricts the use to the SDIO glue layer.
- * The latter is the (CsrSdioFunction*) context, which allows calls from all layers.
- */
-
-#ifdef CSR_WIFI_SUPPORT_MMC_DRIVER
-
-#ifdef CSR_WIFI_SINGLE_FUNCTION
-#define CsrSdioClaim(function) sdio_claim_host((function)->priv);
-#define CsrSdioRelease(function) sdio_release_host((function)->priv);
-
-#define _sdio_claim_host(_func)
-#define _sdio_release_host(_func)
-
-#else
-#define CsrSdioClaim(function)
-#define CsrSdioRelease(function)
-
-#define _sdio_claim_host(_func) sdio_claim_host(_func)
-#define _sdio_release_host(_func) sdio_release_host(_func)
-
-#endif /* CSR_WIFI_SINGLE_FUNCTION */
-
-#else
-#define _sdio_claim_host(_func)
-#define _sdio_release_host(_func)
-
-#define CsrSdioClaim(function)
-#define CsrSdioRelease(function)
-
-#endif /* CSR_WIFI_SUPPORT_MMC_DRIVER */
-
-
-/*
- * Functions to allocate and free an ethernet device.
- */
-unifi_priv_t *uf_alloc_netdevice(CsrSdioFunction *sdio_dev, int bus_id);
-int uf_free_netdevice(unifi_priv_t *priv);
-
-/* Allocating function for other interfaces */
-u8 uf_alloc_netdevice_for_other_interfaces(unifi_priv_t *priv, u16 interfaceTag);
-
-/*
- * Firmware download related functions.
- */
-int uf_run_unifihelper(unifi_priv_t *priv);
-int uf_request_firmware_files(unifi_priv_t *priv, int is_fw);
-int uf_release_firmware_files(unifi_priv_t *priv);
-int uf_release_firmware(unifi_priv_t *priv, struct dlpriv *to_free);
-
-/*
- * Functions to create and delete the device nodes.
- */
-int uf_create_device_nodes(unifi_priv_t *priv, int bus_id);
-void uf_destroy_device_nodes(unifi_priv_t *priv);
-
-/*
- * Upper Edge Initialisation functions
- */
-int uf_init_bh(unifi_priv_t *priv);
-int uf_init_hw(unifi_priv_t *priv);
-
-/* Thread related helper functions */
-int uf_start_thread(unifi_priv_t *priv, struct uf_thread *thread, int (*func)(void *));
-void uf_stop_thread(unifi_priv_t *priv, struct uf_thread *thread);
-void uf_wait_for_thread_to_stop(unifi_priv_t *priv, struct uf_thread *thread);
-
-
-/*
- * Unifi Linux functions
- */
-void ul_init_clients(unifi_priv_t *priv);
-
-/* Configuration flags */
-#define CLI_USING_WIRE_FORMAT 0x0002
-#define CLI_SME_USERSPACE 0x0020
-ul_client_t *ul_register_client(unifi_priv_t *priv,
- unsigned int configuration,
- udi_event_t udi_event_clbk);
-int ul_deregister_client(ul_client_t *pcli);
-
-int ul_send_signal_unpacked(unifi_priv_t *priv,
- CSR_SIGNAL *sigptr,
- bulk_data_param_t *bulkdata);
-int ul_send_signal_raw(unifi_priv_t *priv,
- unsigned char *sigptr, int siglen,
- bulk_data_param_t *bulkdata);
-
-void ul_log_config_ind(unifi_priv_t *priv, u8 *conf_param, int len);
-
-
-/*
- * Data plane operations
- */
-/*
- * data_tx.c
- */
-int uf_verify_m4(unifi_priv_t *priv, const unsigned char *packet,
- unsigned int length);
-
-#ifdef CSR_SUPPORT_SME
-u8 uf_check_broadcast_bssid(unifi_priv_t *priv, const bulk_data_param_t *bulkdata);
-u8 uf_process_pm_bit_for_peer(unifi_priv_t * priv, CsrWifiRouterCtrlStaInfo_t * srcStaInfo, u8 pmBit, u16 interfaceTag);
-void uf_process_ps_poll(unifi_priv_t *priv, u8* sa, u8* da, u8 pmBit, u16 interfaceTag);
-int uf_ap_process_data_pdu(unifi_priv_t *priv, struct sk_buff *skb,
- struct ethhdr *ehdr, CsrWifiRouterCtrlStaInfo_t * srcStaInfo,
- const CSR_SIGNAL *signal,
- bulk_data_param_t *bulkdata,
- u8 macHeaderLengthInBytes);
-u8 uf_is_more_data_for_non_delivery_ac(CsrWifiRouterCtrlStaInfo_t *staRecord);
-void uf_process_wmm_deliver_ac_uapsd ( unifi_priv_t * priv,
- CsrWifiRouterCtrlStaInfo_t * srcStaInfo,
- u16 qosControl,
- u16 interfaceTag);
-
-void uf_send_buffered_data_from_ac(unifi_priv_t *priv, CsrWifiRouterCtrlStaInfo_t * staInfo, u8 queue, struct list_head *txList);
-void uf_send_buffered_data_from_delivery_ac(unifi_priv_t *priv, CsrWifiRouterCtrlStaInfo_t * staInfo, u8 queue, struct list_head *txList);
-
-void uf_continue_uapsd(unifi_priv_t *priv, CsrWifiRouterCtrlStaInfo_t * staInfo);
-void uf_send_qos_null(unifi_priv_t * priv, u16 interfaceTag, const u8 *da, CSR_PRIORITY priority, CsrWifiRouterCtrlStaInfo_t * srcStaInfo);
-void uf_send_nulldata(unifi_priv_t * priv, u16 interfaceTag, const u8 *da, CSR_PRIORITY priority, CsrWifiRouterCtrlStaInfo_t * srcStaInfo);
-
-
-
-#endif
-CsrResult uf_process_ma_packet_req(unifi_priv_t *priv, u8 *peerMacAddress, CSR_CLIENT_TAG hostTag, u16 interfaceTag, CSR_TRANSMISSION_CONTROL transmissionControl, CSR_RATE TransmitRate, CSR_PRIORITY priority, CSR_PROCESS_ID senderId, bulk_data_param_t *bulkdata);
-void uf_process_ma_vif_availibility_ind(unifi_priv_t *priv, u8 *sigdata, u32 siglen);
-#ifdef CSR_SUPPORT_SME
-void uf_send_buffered_frames(unifi_priv_t *priv, unifi_TrafficQueue queue);
-int uf_process_station_records_for_sending_data(unifi_priv_t *priv, u16 interfaceTag,
- CsrWifiRouterCtrlStaInfo_t *srcStaInfo,
- CsrWifiRouterCtrlStaInfo_t *dstStaInfo);
-void uf_prepare_send_cfm_list_for_queued_pkts(unifi_priv_t * priv,
- struct list_head *frames_need_cfm_list,
- struct list_head * list);
-void send_auto_ma_packet_confirm(unifi_priv_t *priv,
- netInterface_priv_t *interfacePriv,
- struct list_head *buffered_frames_list);
-void uf_flush_list(unifi_priv_t * priv, struct list_head * list);
-tx_buffered_packets_t *dequeue_tx_data_pdu(unifi_priv_t *priv, struct list_head *txList);
-void resume_unicast_buffered_frames(unifi_priv_t *priv, u16 interfaceTag);
-void update_eosp_to_head_of_broadcast_list_head(unifi_priv_t *priv, u16 interfaceTag);
-void resume_suspended_uapsd(unifi_priv_t* priv, u16 interfaceTag);
-#endif
-/*
- * netdev.c
- */
-
-#ifndef P80211_OUI_LEN
-#define P80211_OUI_LEN 3
-#endif
-typedef struct {
- u8 dsap; /* always 0xAA */
- u8 ssap; /* always 0xAA */
- u8 ctrl; /* always 0x03 */
- u8 oui[P80211_OUI_LEN]; /* organizational universal id */
- u16 protocol;
-} __attribute__ ((packed)) llc_snap_hdr_t;
-int skb_add_llc_snap(struct net_device *dev, struct sk_buff *skb, int proto);
-int skb_80211_to_ether(unifi_priv_t *priv, struct sk_buff *skb,
- const unsigned char *daddr, const unsigned char *saddr,
- const CSR_SIGNAL *signal,
- bulk_data_param_t *bulkdata);
-
-const char *result_code_str(int result);
-
-
-/* prepares & appends the Mac header for the payload */
-int prepare_and_add_macheader(unifi_priv_t *priv,
- struct sk_buff *skb,
- struct sk_buff *newSkb,
- CSR_PRIORITY priority,
- bulk_data_param_t *bulkdata,
- u16 interfaceTag,
- const u8 *daddr,
- const u8 *saddr,
- u8 protection);
-CSR_PRIORITY
-get_packet_priority(unifi_priv_t *priv, struct sk_buff *skb, const struct ethhdr *ehdr, netInterface_priv_t *interfacePriv);
-
-void
-unifi_frame_ma_packet_req(unifi_priv_t *priv, CSR_PRIORITY priority,
- CSR_RATE TransmitRate, CSR_CLIENT_TAG hostTag,
- u16 interfaceTag, CSR_TRANSMISSION_CONTROL transmissionControl,
- CSR_PROCESS_ID leSenderProcessId, u8 *peerMacAddress,
- CSR_SIGNAL *signal);
-
-
-/* Pack the LSB to include station handle & status of tim set */
-#define CSR_WIFI_PACK_SENDER_ID_LSB_FOR_TIM_REQ(handle, timState) ((handle << 2) | timState)
-/* get the station record handle from the sender ID */
-#define CSR_WIFI_GET_STATION_HANDLE_FROM_RECEIVER_ID(receiverProcessId) (u8) ((receiverProcessId & 0xff) >> 2)
-/* get the timSet status from the sender ID */
-#define CSR_WIFI_GET_TIMSET_STATE_FROM_RECEIVER_ID(receiverProcessId) (u8) (receiverProcessId & 0x03)
-
-/* handle is 6 bits to accomodate in senderId LSB (only 64 station can be associated) */
-#define CSR_WIFI_BROADCAST_OR_MULTICAST_HANDLE 0x3F
-
-void update_tim(unifi_priv_t * priv, u16 aid, u8 setTim, u16 interfaceTag, u32 handle);
-void uf_handle_tim_cfm(unifi_priv_t *priv, CSR_MLME_SET_TIM_CONFIRM *cfm, u16 senderProcessId);
-
-/* Clear the Peer station Record, in case of wifioff/unexpected card removal */
-void CsrWifiRouterCtrlInterfaceReset(unifi_priv_t *priv, u16 interfaceTag);
-
-void scroll_ba_window(unifi_priv_t *priv,
- netInterface_priv_t *interfacePriv,
- ba_session_rx_struct *ba_session,
- u16 sn);
-
-u8 blockack_session_stop(unifi_priv_t *priv,
- u16 interfaceTag,
- CsrWifiRouterCtrlBlockAckRole role,
- u16 tID,
- CsrWifiMacAddress macAddress);
-#ifdef CSR_SUPPORT_SME
-/* Fetch the protection information from interface Mode */
-s8 uf_get_protection_bit_from_interfacemode(unifi_priv_t *priv, u16 interfaceTag, const u8 *daddr);
-#endif
-
-/* Fetch the station record handler from data base for matching Mac address */
-#ifdef CSR_SUPPORT_SME
-CsrWifiRouterCtrlStaInfo_t *CsrWifiRouterCtrlGetStationRecordFromPeerMacAddress(unifi_priv_t *priv,
- const u8 *peerMacAddress,
- u16 interfaceTag);
-
-/* Fetch the station record handler from data base for matching handle */
-CsrWifiRouterCtrlStaInfo_t * CsrWifiRouterCtrlGetStationRecordFromHandle(unifi_priv_t *priv,
- u32 handle,
- u16 interfaceTag);
-
-void uf_update_sta_activity(unifi_priv_t *priv, u16 interfaceTag, const u8 *peerMacAddress);
-void uf_process_ma_pkt_cfm_for_ap(unifi_priv_t *priv, u16 interfaceTag, const CSR_MA_PACKET_CONFIRM *pkt_cfm);
-#endif
-
-void uf_resume_data_plane(unifi_priv_t *priv, int queue,
- CsrWifiMacAddress peer_address,
- u16 interfaceTag);
-void uf_free_pending_rx_packets(unifi_priv_t *priv, int queue,
- CsrWifiMacAddress peer_address, u16 interfaceTag);
-
-int uf_register_netdev(unifi_priv_t *priv, int numOfInterface);
-void uf_unregister_netdev(unifi_priv_t *priv);
-
-void uf_net_get_name(struct net_device *dev, char *name, int len);
-
-void uf_send_queue_info(unifi_priv_t *priv);
-u16 uf_get_vif_identifier(CsrWifiRouterCtrlMode mode, u16 tag);
-
-void uf_process_rx_pending_queue(unifi_priv_t *priv, int queue,
- CsrWifiMacAddress source_address,
- int indicate, u16 interfaceTag);
-
-#ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-int uf_register_hip_offline_debug(unifi_priv_t *priv);
-int uf_unregister_hip_offline_debug(unifi_priv_t *priv);
-#endif
-
-/*
- * inet.c
- */
-void uf_register_inet_notifier(void);
-void uf_unregister_inet_notifier(void);
-
-
-/*
- * Suspend / Resume handlers
- */
-void unifi_resume(void *ospriv);
-void unifi_suspend(void *ospriv);
-
-
-#define QOS_CAPABILITY_WMM_ENABLED 0x0001
-#define QOS_CAPABILITY_WMM_UAPSD 0x0002
-#define QOS_CAPABILITY_ACM_BE_ENABLED 0x0010
-#define QOS_CAPABILITY_ACM_BK_ENABLED 0x0020
-#define QOS_CAPABILITY_ACM_VI_ENABLED 0x0040
-#define QOS_CAPABILITY_ACM_VO_ENABLED 0x0080
-#define QOS_CAPABILITY_TS_BE_ENABLED 0x0100
-#define QOS_CAPABILITY_TS_BK_ENABLED 0x0200
-#define QOS_CAPABILITY_TS_VI_ENABLED 0x0400
-#define QOS_CAPABILITY_TS_VO_ENABLED 0x0800
-
-
-/* EAPOL PDUS */
-#ifndef ETH_P_PAE
-#define ETH_P_PAE 0x888e
-#endif
-#ifndef ETH_P_WAI
-#define ETH_P_WAI 0x88b4
-#endif
-/*
- * unifi_dbg.c
- */
-void debug_string_indication(unifi_priv_t *priv,
- const unsigned char *extra,
- unsigned int extralen);
-void debug_word16_indication(unifi_priv_t *priv, const CSR_SIGNAL *sigptr);
-void debug_generic_indication(unifi_priv_t *priv, const CSR_SIGNAL *sigptr);
-
-
-/*
- * putest.c
- */
-int unifi_putest_start(unifi_priv_t *priv, unsigned char *arg);
-int unifi_putest_cmd52_block_read(unifi_priv_t *priv, unsigned char *arg);
-int unifi_putest_stop(unifi_priv_t *priv, unsigned char *arg);
-int unifi_putest_set_sdio_clock(unifi_priv_t *priv, unsigned char *arg);
-int unifi_putest_cmd52_read(unifi_priv_t *priv, unsigned char *arg);
-int unifi_putest_coredump_prepare(unifi_priv_t *priv, unsigned char *arg);
-int unifi_putest_cmd52_write(unifi_priv_t *priv, unsigned char *arg);
-int unifi_putest_gp_read16(unifi_priv_t *priv, unsigned char *arg);
-int unifi_putest_gp_write16(unifi_priv_t *priv, unsigned char *arg);
-
-int unifi_putest_dl_fw(unifi_priv_t *priv, unsigned char *arg);
-int unifi_putest_dl_fw_buff(unifi_priv_t *priv, unsigned char *arg);
-
-#endif /* __LINUX_UNIFI_PRIV_H__ */
diff --git a/drivers/staging/csr/unifi_sme.c b/drivers/staging/csr/unifi_sme.c
deleted file mode 100644
index 50908822b3c8..000000000000
--- a/drivers/staging/csr/unifi_sme.c
+++ /dev/null
@@ -1,1225 +0,0 @@
-/*
- * ***************************************************************************
- * FILE: unifi_sme.c
- *
- * PURPOSE: SME related functions.
- *
- * Copyright (C) 2007-2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ***************************************************************************
- */
-
-#include "unifi_priv.h"
-#include "csr_wifi_hip_unifi.h"
-#include "csr_wifi_hip_conversions.h"
-#include <linux/sched/rt.h>
-
-
-
- int
-convert_sme_error(CsrResult error)
-{
- switch (error) {
- case CSR_RESULT_SUCCESS:
- return 0;
- case CSR_RESULT_FAILURE:
- case CSR_WIFI_RESULT_NOT_FOUND:
- case CSR_WIFI_RESULT_TIMED_OUT:
- case CSR_WIFI_RESULT_CANCELLED:
- case CSR_WIFI_RESULT_UNAVAILABLE:
- return -EIO;
- case CSR_WIFI_RESULT_NO_ROOM:
- return -EBUSY;
- case CSR_WIFI_RESULT_INVALID_PARAMETER:
- return -EINVAL;
- case CSR_WIFI_RESULT_UNSUPPORTED:
- return -EOPNOTSUPP;
- default:
- return -EIO;
- }
-}
-
-
-/*
- * ---------------------------------------------------------------------------
- * sme_log_event
- *
- * Callback function to be registered as the SME event callback.
- * Copies the signal content into a new udi_log_t struct and adds
- * it to the read queue for the SME client.
- *
- * Arguments:
- * arg This is the value given to unifi_add_udi_hook, in
- * this case a pointer to the client instance.
- * signal Pointer to the received signal.
- * signal_len Size of the signal structure in bytes.
- * bulkdata Pointers to any associated bulk data.
- * dir Direction of the signal. Zero means from host,
- * non-zero means to host.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
- void
-sme_log_event(ul_client_t *pcli,
- const u8 *signal, int signal_len,
- const bulk_data_param_t *bulkdata,
- int dir)
-{
- unifi_priv_t *priv;
- CSR_SIGNAL unpacked_signal;
- CsrWifiSmeDataBlock mlmeCommand;
- CsrWifiSmeDataBlock dataref1;
- CsrWifiSmeDataBlock dataref2;
- CsrResult result = CSR_RESULT_SUCCESS;
- int r;
-
- /* Just a sanity check */
- if ((signal == NULL) || (signal_len <= 0)) {
- return;
- }
-
- priv = uf_find_instance(pcli->instance);
- if (!priv) {
- unifi_error(priv, "sme_log_event: invalid priv\n");
- return;
- }
-
- if (priv->smepriv == NULL) {
- unifi_error(priv, "sme_log_event: invalid smepriv\n");
- return;
- }
-
- unifi_trace(priv, UDBG3,
- "sme_log_event: Process signal 0x%.4X\n",
- CSR_GET_UINT16_FROM_LITTLE_ENDIAN(signal));
-
-
- /* If the signal is known, then do any filtering required, otherwise it pass it to the SME. */
- r = read_unpack_signal(signal, &unpacked_signal);
- if (r == CSR_RESULT_SUCCESS) {
- if ((unpacked_signal.SignalPrimitiveHeader.SignalId == CSR_DEBUG_STRING_INDICATION_ID) ||
- (unpacked_signal.SignalPrimitiveHeader.SignalId == CSR_DEBUG_WORD16_INDICATION_ID))
- {
- return;
- }
- if (unpacked_signal.SignalPrimitiveHeader.SignalId == CSR_MA_PACKET_INDICATION_ID)
- {
- u16 frmCtrl;
- u8 unicastPdu = TRUE;
- u8 *macHdrLocation;
- u8 *raddr = NULL, *taddr = NULL;
- CsrWifiMacAddress peerMacAddress;
- /* Check if we need to send CsrWifiRouterCtrlMicFailureInd*/
- CSR_MA_PACKET_INDICATION *ind = &unpacked_signal.u.MaPacketIndication;
-
- macHdrLocation = (u8 *) bulkdata->d[0].os_data_ptr;
- /* Fetch the frame control value from mac header */
- frmCtrl = CSR_GET_UINT16_FROM_LITTLE_ENDIAN(macHdrLocation);
-
- /* Point to the addresses */
- raddr = macHdrLocation + MAC_HEADER_ADDR1_OFFSET;
- taddr = macHdrLocation + MAC_HEADER_ADDR2_OFFSET;
-
- memcpy(peerMacAddress.a, taddr, ETH_ALEN);
-
- if(ind->ReceptionStatus == CSR_MICHAEL_MIC_ERROR)
- {
- if (*raddr & 0x1)
- unicastPdu = FALSE;
-
- CsrWifiRouterCtrlMicFailureIndSend (priv->CSR_WIFI_SME_IFACEQUEUE, 0,
- (ind->VirtualInterfaceIdentifier & 0xff), peerMacAddress,
- unicastPdu);
- return;
- }
- else
- {
- if(ind->ReceptionStatus == CSR_RX_SUCCESS)
- {
- u8 pmBit = (frmCtrl & 0x1000)?0x01:0x00;
- u16 interfaceTag = (ind->VirtualInterfaceIdentifier & 0xff);
- CsrWifiRouterCtrlStaInfo_t *srcStaInfo = CsrWifiRouterCtrlGetStationRecordFromPeerMacAddress(priv, taddr, interfaceTag);
- if((srcStaInfo != NULL) && (uf_check_broadcast_bssid(priv, bulkdata)== FALSE))
- {
- uf_process_pm_bit_for_peer(priv, srcStaInfo, pmBit, interfaceTag);
-
- /* Update station last activity flag */
- srcStaInfo->activity_flag = TRUE;
- }
- }
- }
- }
-
- if (unpacked_signal.SignalPrimitiveHeader.SignalId == CSR_MA_PACKET_CONFIRM_ID)
- {
- CSR_MA_PACKET_CONFIRM *cfm = &unpacked_signal.u.MaPacketConfirm;
- u16 interfaceTag = (cfm->VirtualInterfaceIdentifier & 0xff);
- netInterface_priv_t *interfacePriv;
- CSR_MA_PACKET_REQUEST *req;
- CsrWifiMacAddress peerMacAddress;
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES)
- {
- unifi_error(priv, "Bad MA_PACKET_CONFIRM interfaceTag %d\n", interfaceTag);
- return;
- }
-
- unifi_trace(priv, UDBG1, "MA-PACKET Confirm (%x, %x)\n", cfm->HostTag, cfm->TransmissionStatus);
-
- interfacePriv = priv->interfacePriv[interfaceTag];
-#ifdef CSR_SUPPORT_SME
- if(interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_AP ||
- interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_P2PGO) {
-
- if(cfm->HostTag == interfacePriv->multicastPduHostTag){
- uf_process_ma_pkt_cfm_for_ap(priv, interfaceTag, cfm);
- }
- }
-#endif
-
- req = &interfacePriv->m4_signal.u.MaPacketRequest;
-
- if(cfm->HostTag & 0x80000000)
- {
- if (cfm->TransmissionStatus != CSR_TX_SUCCESSFUL)
- {
- result = CSR_RESULT_FAILURE;
- }
-#ifdef CSR_SUPPORT_SME
- memcpy(peerMacAddress.a, req->Ra.x, ETH_ALEN);
- /* Check if this is a confirm for EAPOL M4 frame and we need to send transmistted ind*/
- if (interfacePriv->m4_sent && (cfm->HostTag == interfacePriv->m4_hostTag))
- {
- unifi_trace(priv, UDBG1, "%s: Sending M4 Transmit CFM\n", __FUNCTION__);
- CsrWifiRouterCtrlM4TransmittedIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0,
- interfaceTag,
- peerMacAddress,
- result);
- interfacePriv->m4_sent = FALSE;
- interfacePriv->m4_hostTag = 0xffffffff;
- }
-#endif
- /* If EAPOL was requested via router APIs then send cfm else ignore*/
- if((cfm->HostTag & 0x80000000) != CSR_WIFI_EAPOL_M4_HOST_TAG) {
- CsrWifiRouterMaPacketCfmSend((u16)signal[2],
- cfm->VirtualInterfaceIdentifier,
- result,
- (cfm->HostTag & 0x3fffffff), cfm->Rate);
- } else {
- unifi_trace(priv, UDBG1, "%s: M4 received from netdevice\n", __FUNCTION__);
- }
- return;
- }
- }
- }
-
- mlmeCommand.length = signal_len;
- mlmeCommand.data = (u8*)signal;
-
- dataref1.length = bulkdata->d[0].data_length;
- if (dataref1.length > 0) {
- dataref1.data = (u8 *) bulkdata->d[0].os_data_ptr;
- } else
- {
- dataref1.data = NULL;
- }
-
- dataref2.length = bulkdata->d[1].data_length;
- if (dataref2.length > 0) {
- dataref2.data = (u8 *) bulkdata->d[1].os_data_ptr;
- } else
- {
- dataref2.data = NULL;
- }
-
- CsrWifiRouterCtrlHipIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, mlmeCommand.length, mlmeCommand.data,
- dataref1.length, dataref1.data,
- dataref2.length, dataref2.data);
-
-} /* sme_log_event() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_sme_port_state
- *
- * Return the state of the controlled port.
- *
- * Arguments:
- * priv Pointer to device private context struct
- * address Pointer to the destination for tx or sender for rx address
- * queue Controlled or uncontrolled queue
- *
- * Returns:
- * An unifi_ControlledPortAction value.
- * ---------------------------------------------------------------------------
- */
-CsrWifiRouterCtrlPortAction
-uf_sme_port_state(unifi_priv_t *priv, unsigned char *address, int queue, u16 interfaceTag)
-{
- int i;
- unifi_port_config_t *port;
- netInterface_priv_t *interfacePriv;
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "uf_sme_port_state: bad interfaceTag\n");
- return CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD;
- }
-
- interfacePriv = priv->interfacePriv[interfaceTag];
-
- if (queue == UF_CONTROLLED_PORT_Q) {
- port = &interfacePriv->controlled_data_port;
- } else {
- port = &interfacePriv->uncontrolled_data_port;
- }
-
- if (!port->entries_in_use) {
- unifi_trace(priv, UDBG5, "No port configurations, return Discard.\n");
- return CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_CLOSED_DISCARD;
- }
-
- /* If the port configuration is common for all destinations, return it. */
- if (port->overide_action == UF_DATA_PORT_OVERIDE) {
- unifi_trace(priv, UDBG5, "Single port configuration (%d).\n",
- port->port_cfg[0].port_action);
- return port->port_cfg[0].port_action;
- }
-
- unifi_trace(priv, UDBG5, "Multiple (%d) port configurations.\n", port->entries_in_use);
-
- /* If multiple configurations exist.. */
- for (i = 0; i < UNIFI_MAX_CONNECTIONS; i++) {
- /* .. go through the list and match the destination address. */
- if (port->port_cfg[i].in_use &&
- memcmp(address, port->port_cfg[i].mac_address.a, ETH_ALEN) == 0) {
- /* Return the desired action. */
- return port->port_cfg[i].port_action;
- }
- }
-
- /* Could not find any information, return Open. */
- unifi_trace(priv, UDBG5, "port configuration not found, return Open.\n");
- return CSR_WIFI_ROUTER_CTRL_PORT_ACTION_8021X_PORT_OPEN;
-} /* uf_sme_port_state() */
-
-/*
- * ---------------------------------------------------------------------------
- * uf_sme_port_config_handle
- *
- * Return the port config handle of the controlled/uncontrolled port.
- *
- * Arguments:
- * priv Pointer to device private context struct
- * address Pointer to the destination for tx or sender for rx address
- * queue Controlled or uncontrolled queue
- *
- * Returns:
- * An unifi_port_cfg_t* .
- * ---------------------------------------------------------------------------
- */
-unifi_port_cfg_t*
-uf_sme_port_config_handle(unifi_priv_t *priv, unsigned char *address, int queue, u16 interfaceTag)
-{
- int i;
- unifi_port_config_t *port;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "uf_sme_port_config_handle: bad interfaceTag\n");
- return NULL;
- }
-
- if (queue == UF_CONTROLLED_PORT_Q) {
- port = &interfacePriv->controlled_data_port;
- } else {
- port = &interfacePriv->uncontrolled_data_port;
- }
-
- if (!port->entries_in_use) {
- unifi_trace(priv, UDBG5, "No port configurations, return Discard.\n");
- return NULL;
- }
-
- /* If the port configuration is common for all destinations, return it. */
- if (port->overide_action == UF_DATA_PORT_OVERIDE) {
- unifi_trace(priv, UDBG5, "Single port configuration (%d).\n",
- port->port_cfg[0].port_action);
- if (address) {
- unifi_trace(priv, UDBG5, "addr[0] = %x, addr[1] = %x, addr[2] = %x, addr[3] = %x\n", address[0], address[1], address[2], address[3]);
- }
- return &port->port_cfg[0];
- }
-
- unifi_trace(priv, UDBG5, "Multiple port configurations.\n");
-
- /* If multiple configurations exist.. */
- for (i = 0; i < UNIFI_MAX_CONNECTIONS; i++) {
- /* .. go through the list and match the destination address. */
- if (port->port_cfg[i].in_use &&
- memcmp(address, port->port_cfg[i].mac_address.a, ETH_ALEN) == 0) {
- /* Return the desired action. */
- return &port->port_cfg[i];
- }
- }
-
- /* Could not find any information, return Open. */
- unifi_trace(priv, UDBG5, "port configuration not found, returning NULL (debug).\n");
- return NULL;
-} /* uf_sme_port_config_handle */
-
-void
-uf_multicast_list_wq(struct work_struct *work)
-{
- unifi_priv_t *priv = container_of(work, unifi_priv_t,
- multicast_list_task);
- int i;
- u16 interfaceTag = 0;
- CsrWifiMacAddress* multicast_address_list = NULL;
- int mc_count;
- u8 *mc_list;
- netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "uf_multicast_list_wq: bad interfaceTag\n");
- return;
- }
-
- unifi_trace(priv, UDBG5,
- "uf_multicast_list_wq: list count = %d\n",
- interfacePriv->mc_list_count);
-
- /* Flush the current list */
- CsrWifiRouterCtrlMulticastAddressIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, interfaceTag, CSR_WIFI_SME_LIST_ACTION_FLUSH, 0, NULL);
-
- mc_count = interfacePriv->mc_list_count;
- mc_list = interfacePriv->mc_list;
- /*
- * Allocate a new list, need to free it later
- * in unifi_mgt_multicast_address_cfm().
- */
- multicast_address_list = kmalloc(mc_count * sizeof(CsrWifiMacAddress), GFP_KERNEL);
-
- if (multicast_address_list == NULL) {
- return;
- }
-
- for (i = 0; i < mc_count; i++) {
- memcpy(multicast_address_list[i].a, mc_list, ETH_ALEN);
- mc_list += ETH_ALEN;
- }
-
- if (priv->smepriv == NULL) {
- kfree(multicast_address_list);
- return;
- }
-
- CsrWifiRouterCtrlMulticastAddressIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0,
- interfaceTag,
- CSR_WIFI_SME_LIST_ACTION_ADD,
- mc_count, multicast_address_list);
-
- /* The SME will take a copy of the addreses*/
- kfree(multicast_address_list);
-}
-
-
-int unifi_cfg_power(unifi_priv_t *priv, unsigned char *arg)
-{
- unifi_cfg_power_t cfg_power;
- int rc;
- int wol;
-
- if (get_user(cfg_power, (unifi_cfg_power_t*)(((unifi_cfg_command_t*)arg) + 1))) {
- unifi_error(priv, "UNIFI_CFG: Failed to get the argument\n");
- return -EFAULT;
- }
-
- switch (cfg_power) {
- case UNIFI_CFG_POWER_OFF:
- priv->wol_suspend = (enable_wol == UNIFI_WOL_OFF) ? FALSE : TRUE;
- rc = sme_sys_suspend(priv);
- if (rc) {
- return rc;
- }
- break;
- case UNIFI_CFG_POWER_ON:
- wol = priv->wol_suspend;
- rc = sme_sys_resume(priv);
- if (rc) {
- return rc;
- }
- if (wol) {
- /* Kick the BH to ensure pending transfers are handled when
- * a suspend happened with card powered.
- */
- unifi_send_signal(priv->card, NULL, 0, NULL);
- }
- break;
- default:
- unifi_error(priv, "WIFI POWER: Unknown value.\n");
- return -EINVAL;
- }
-
- return 0;
-}
-
-
-int unifi_cfg_power_save(unifi_priv_t *priv, unsigned char *arg)
-{
- unifi_cfg_powersave_t cfg_power_save;
- CsrWifiSmePowerConfig powerConfig;
- int rc;
-
- if (get_user(cfg_power_save, (unifi_cfg_powersave_t*)(((unifi_cfg_command_t*)arg) + 1))) {
- unifi_error(priv, "UNIFI_CFG: Failed to get the argument\n");
- return -EFAULT;
- }
-
- /* Get the coex info from the SME */
- rc = sme_mgt_power_config_get(priv, &powerConfig);
- if (rc) {
- unifi_error(priv, "UNIFI_CFG: Get unifi_PowerConfigValue failed.\n");
- return rc;
- }
-
- switch (cfg_power_save) {
- case UNIFI_CFG_POWERSAVE_NONE:
- powerConfig.powerSaveLevel = CSR_WIFI_SME_POWER_SAVE_LEVEL_LOW;
- break;
- case UNIFI_CFG_POWERSAVE_FAST:
- powerConfig.powerSaveLevel = CSR_WIFI_SME_POWER_SAVE_LEVEL_MED;
- break;
- case UNIFI_CFG_POWERSAVE_FULL:
- powerConfig.powerSaveLevel = CSR_WIFI_SME_POWER_SAVE_LEVEL_HIGH;
- break;
- case UNIFI_CFG_POWERSAVE_AUTO:
- powerConfig.powerSaveLevel = CSR_WIFI_SME_POWER_SAVE_LEVEL_AUTO;
- break;
- default:
- unifi_error(priv, "POWERSAVE: Unknown value.\n");
- return -EINVAL;
- }
-
- rc = sme_mgt_power_config_set(priv, &powerConfig);
-
- if (rc) {
- unifi_error(priv, "UNIFI_CFG: Set unifi_PowerConfigValue failed.\n");
- }
-
- return rc;
-}
-
-
-int unifi_cfg_power_supply(unifi_priv_t *priv, unsigned char *arg)
-{
- unifi_cfg_powersupply_t cfg_power_supply;
- CsrWifiSmeHostConfig hostConfig;
- int rc;
-
- if (get_user(cfg_power_supply, (unifi_cfg_powersupply_t*)(((unifi_cfg_command_t*)arg) + 1))) {
- unifi_error(priv, "UNIFI_CFG: Failed to get the argument\n");
- return -EFAULT;
- }
-
- /* Get the coex info from the SME */
- rc = sme_mgt_host_config_get(priv, &hostConfig);
- if (rc) {
- unifi_error(priv, "UNIFI_CFG: Get unifi_HostConfigValue failed.\n");
- return rc;
- }
-
- switch (cfg_power_supply) {
- case UNIFI_CFG_POWERSUPPLY_MAINS:
- hostConfig.powerMode = CSR_WIFI_SME_HOST_POWER_MODE_ACTIVE;
- break;
- case UNIFI_CFG_POWERSUPPLY_BATTERIES:
- hostConfig.powerMode = CSR_WIFI_SME_HOST_POWER_MODE_POWER_SAVE;
- break;
- default:
- unifi_error(priv, "POWERSUPPLY: Unknown value.\n");
- return -EINVAL;
- }
-
- rc = sme_mgt_host_config_set(priv, &hostConfig);
- if (rc) {
- unifi_error(priv, "UNIFI_CFG: Set unifi_HostConfigValue failed.\n");
- }
-
- return rc;
-}
-
-
-int unifi_cfg_packet_filters(unifi_priv_t *priv, unsigned char *arg)
-{
- unsigned char *tclas_buffer;
- unsigned int tclas_buffer_length;
- tclas_t *dhcp_tclas;
- int rc;
-
- /* Free any TCLASs previously allocated */
- if (priv->packet_filters.tclas_ies_length) {
- kfree(priv->filter_tclas_ies);
- priv->filter_tclas_ies = NULL;
- }
-
- tclas_buffer = ((unsigned char*)arg) + sizeof(unifi_cfg_command_t) + sizeof(unsigned int);
- if (copy_from_user(&priv->packet_filters, (void*)tclas_buffer,
- sizeof(uf_cfg_bcast_packet_filter_t))) {
- unifi_error(priv, "UNIFI_CFG: Failed to get the filter struct\n");
- return -EFAULT;
- }
-
- tclas_buffer_length = priv->packet_filters.tclas_ies_length;
-
- /* Allocate TCLASs if necessary */
- if (priv->packet_filters.dhcp_filter) {
- priv->packet_filters.tclas_ies_length += sizeof(tclas_t);
- }
- if (priv->packet_filters.tclas_ies_length > 0) {
- priv->filter_tclas_ies = kmalloc(priv->packet_filters.tclas_ies_length, GFP_KERNEL);
- if (priv->filter_tclas_ies == NULL) {
- return -ENOMEM;
- }
- if (tclas_buffer_length) {
- tclas_buffer += sizeof(uf_cfg_bcast_packet_filter_t) - sizeof(unsigned char*);
- if (copy_from_user(priv->filter_tclas_ies,
- tclas_buffer,
- tclas_buffer_length)) {
- unifi_error(priv, "UNIFI_CFG: Failed to get the TCLAS buffer\n");
- return -EFAULT;
- }
- }
- }
-
- if(priv->packet_filters.dhcp_filter)
- {
- /* Append the DHCP tclas IE */
- dhcp_tclas = (tclas_t*)(priv->filter_tclas_ies + tclas_buffer_length);
- memset(dhcp_tclas, 0, sizeof(tclas_t));
- dhcp_tclas->element_id = 14;
- dhcp_tclas->length = sizeof(tcpip_clsfr_t) + 1;
- dhcp_tclas->user_priority = 0;
- dhcp_tclas->tcp_ip_cls_fr.cls_fr_type = 1;
- dhcp_tclas->tcp_ip_cls_fr.version = 4;
- ((u8*)(&dhcp_tclas->tcp_ip_cls_fr.source_port))[0] = 0x00;
- ((u8*)(&dhcp_tclas->tcp_ip_cls_fr.source_port))[1] = 0x44;
- ((u8*)(&dhcp_tclas->tcp_ip_cls_fr.dest_port))[0] = 0x00;
- ((u8*)(&dhcp_tclas->tcp_ip_cls_fr.dest_port))[1] = 0x43;
- dhcp_tclas->tcp_ip_cls_fr.protocol = 0x11;
- dhcp_tclas->tcp_ip_cls_fr.cls_fr_mask = 0x58; //bits: 3,4,6
- }
-
- rc = sme_mgt_packet_filter_set(priv);
-
- return rc;
-}
-
-
-int unifi_cfg_wmm_qos_info(unifi_priv_t *priv, unsigned char *arg)
-{
- u8 wmm_qos_info;
- int rc = 0;
-
- if (get_user(wmm_qos_info, (u8*)(((unifi_cfg_command_t*)arg) + 1))) {
- unifi_error(priv, "UNIFI_CFG: Failed to get the argument\n");
- return -EFAULT;
- }
-
- /* Store the value in the connection info */
- priv->connection_config.wmmQosInfo = wmm_qos_info;
-
- return rc;
-}
-
-
-int unifi_cfg_wmm_addts(unifi_priv_t *priv, unsigned char *arg)
-{
- u32 addts_tid;
- u8 addts_ie_length;
- u8 *addts_ie;
- u8 *addts_params;
- CsrWifiSmeDataBlock tspec;
- CsrWifiSmeDataBlock tclas;
- int rc;
-
- addts_params = (u8*)(((unifi_cfg_command_t*)arg) + 1);
- if (get_user(addts_tid, (u32*)addts_params)) {
- unifi_error(priv, "unifi_cfg_wmm_addts: Failed to get the argument\n");
- return -EFAULT;
- }
-
- addts_params += sizeof(u32);
- if (get_user(addts_ie_length, (u8*)addts_params)) {
- unifi_error(priv, "unifi_cfg_wmm_addts: Failed to get the argument\n");
- return -EFAULT;
- }
-
- unifi_trace(priv, UDBG4, "addts: tid = 0x%x ie_length = %d\n",
- addts_tid, addts_ie_length);
-
- addts_ie = kmalloc(addts_ie_length, GFP_KERNEL);
- if (addts_ie == NULL) {
- unifi_error(priv,
- "unifi_cfg_wmm_addts: Failed to malloc %d bytes for addts_ie buffer\n",
- addts_ie_length);
- return -ENOMEM;
- }
-
- addts_params += sizeof(u8);
- rc = copy_from_user(addts_ie, addts_params, addts_ie_length);
- if (rc) {
- unifi_error(priv, "unifi_cfg_wmm_addts: Failed to get the addts buffer\n");
- kfree(addts_ie);
- return -EFAULT;
- }
-
- tspec.data = addts_ie;
- tspec.length = addts_ie_length;
- tclas.data = NULL;
- tclas.length = 0;
-
- rc = sme_mgt_tspec(priv, CSR_WIFI_SME_LIST_ACTION_ADD, addts_tid,
- &tspec, &tclas);
-
- kfree(addts_ie);
- return rc;
-}
-
-
-int unifi_cfg_wmm_delts(unifi_priv_t *priv, unsigned char *arg)
-{
- u32 delts_tid;
- u8 *delts_params;
- CsrWifiSmeDataBlock tspec;
- CsrWifiSmeDataBlock tclas;
- int rc;
-
- delts_params = (u8*)(((unifi_cfg_command_t*)arg) + 1);
- if (get_user(delts_tid, (u32*)delts_params)) {
- unifi_error(priv, "unifi_cfg_wmm_delts: Failed to get the argument\n");
- return -EFAULT;
- }
-
- unifi_trace(priv, UDBG4, "delts: tid = 0x%x\n", delts_tid);
-
- tspec.data = tclas.data = NULL;
- tspec.length = tclas.length = 0;
-
- rc = sme_mgt_tspec(priv, CSR_WIFI_SME_LIST_ACTION_REMOVE, delts_tid,
- &tspec, &tclas);
-
- return rc;
-}
-
-int unifi_cfg_strict_draft_n(unifi_priv_t *priv, unsigned char *arg)
-{
- u8 strict_draft_n;
- u8 *strict_draft_n_params;
- int rc;
-
- CsrWifiSmeStaConfig staConfig;
- CsrWifiSmeDeviceConfig deviceConfig;
-
- strict_draft_n_params = (u8*)(((unifi_cfg_command_t*)arg) + 1);
- if (get_user(strict_draft_n, (u8*)strict_draft_n_params)) {
- unifi_error(priv, "unifi_cfg_strict_draft_n: Failed to get the argument\n");
- return -EFAULT;
- }
-
- unifi_trace(priv, UDBG4, "strict_draft_n: = %s\n", ((strict_draft_n) ? "yes":"no"));
-
- rc = sme_mgt_sme_config_get(priv, &staConfig, &deviceConfig);
-
- if (rc) {
- unifi_warning(priv, "unifi_cfg_strict_draft_n: Get unifi_SMEConfigValue failed.\n");
- return -EFAULT;
- }
-
- deviceConfig.enableStrictDraftN = strict_draft_n;
-
- rc = sme_mgt_sme_config_set(priv, &staConfig, &deviceConfig);
- if (rc) {
- unifi_warning(priv, "unifi_cfg_strict_draft_n: Set unifi_SMEConfigValue failed.\n");
- rc = -EFAULT;
- }
-
- return rc;
-}
-
-
-int unifi_cfg_enable_okc(unifi_priv_t *priv, unsigned char *arg)
-{
- u8 enable_okc;
- u8 *enable_okc_params;
- int rc;
-
- CsrWifiSmeStaConfig staConfig;
- CsrWifiSmeDeviceConfig deviceConfig;
-
- enable_okc_params = (u8*)(((unifi_cfg_command_t*)arg) + 1);
- if (get_user(enable_okc, (u8*)enable_okc_params)) {
- unifi_error(priv, "unifi_cfg_enable_okc: Failed to get the argument\n");
- return -EFAULT;
- }
-
- unifi_trace(priv, UDBG4, "enable_okc: = %s\n", ((enable_okc) ? "yes":"no"));
-
- rc = sme_mgt_sme_config_get(priv, &staConfig, &deviceConfig);
- if (rc) {
- unifi_warning(priv, "unifi_cfg_enable_okc: Get unifi_SMEConfigValue failed.\n");
- return -EFAULT;
- }
-
- staConfig.enableOpportunisticKeyCaching = enable_okc;
-
- rc = sme_mgt_sme_config_set(priv, &staConfig, &deviceConfig);
- if (rc) {
- unifi_warning(priv, "unifi_cfg_enable_okc: Set unifi_SMEConfigValue failed.\n");
- rc = -EFAULT;
- }
-
- return rc;
-}
-
-
-int unifi_cfg_get_info(unifi_priv_t *priv, unsigned char *arg)
-{
- unifi_cfg_get_t get_cmd;
- char inst_name[IFNAMSIZ];
- int rc;
-
- if (get_user(get_cmd, (unifi_cfg_get_t*)(((unifi_cfg_command_t*)arg) + 1))) {
- unifi_error(priv, "UNIFI_CFG: Failed to get the argument\n");
- return -EFAULT;
- }
-
- switch (get_cmd) {
- case UNIFI_CFG_GET_COEX:
- {
- CsrWifiSmeCoexInfo coexInfo;
- /* Get the coex info from the SME */
- rc = sme_mgt_coex_info_get(priv, &coexInfo);
- if (rc) {
- unifi_error(priv, "UNIFI_CFG: Get unifi_CoexInfoValue failed.\n");
- return rc;
- }
-
- /* Copy the info to the out buffer */
- if (copy_to_user((void*)arg,
- &coexInfo,
- sizeof(CsrWifiSmeCoexInfo))) {
- unifi_error(priv, "UNIFI_CFG: Failed to copy the coex info\n");
- return -EFAULT;
- }
- break;
- }
- case UNIFI_CFG_GET_POWER_MODE:
- {
- CsrWifiSmePowerConfig powerConfig;
- rc = sme_mgt_power_config_get(priv, &powerConfig);
- if (rc) {
- unifi_error(priv, "UNIFI_CFG: Get unifi_PowerConfigValue failed.\n");
- return rc;
- }
-
- /* Copy the info to the out buffer */
- if (copy_to_user((void*)arg,
- &powerConfig.powerSaveLevel,
- sizeof(CsrWifiSmePowerSaveLevel))) {
- unifi_error(priv, "UNIFI_CFG: Failed to copy the power save info\n");
- return -EFAULT;
- }
- break;
- }
- case UNIFI_CFG_GET_POWER_SUPPLY:
- {
- CsrWifiSmeHostConfig hostConfig;
- rc = sme_mgt_host_config_get(priv, &hostConfig);
- if (rc) {
- unifi_error(priv, "UNIFI_CFG: Get unifi_HostConfigValue failed.\n");
- return rc;
- }
-
- /* Copy the info to the out buffer */
- if (copy_to_user((void*)arg,
- &hostConfig.powerMode,
- sizeof(CsrWifiSmeHostPowerMode))) {
- unifi_error(priv, "UNIFI_CFG: Failed to copy the host power mode\n");
- return -EFAULT;
- }
- break;
- }
- case UNIFI_CFG_GET_VERSIONS:
- break;
- case UNIFI_CFG_GET_INSTANCE:
- {
- u16 InterfaceId=0;
- uf_net_get_name(priv->netdev[InterfaceId], &inst_name[0], sizeof(inst_name));
-
- /* Copy the info to the out buffer */
- if (copy_to_user((void*)arg,
- &inst_name[0],
- sizeof(inst_name))) {
- unifi_error(priv, "UNIFI_CFG: Failed to copy the instance name\n");
- return -EFAULT;
- }
- }
- break;
-
- case UNIFI_CFG_GET_AP_CONFIG:
- {
-#ifdef CSR_SUPPORT_WEXT_AP
- uf_cfg_ap_config_t cfg_ap_config;
-
- memset(&cfg_ap_config, 0, sizeof(cfg_ap_config));
- cfg_ap_config.channel = priv->ap_config.channel;
- cfg_ap_config.beaconInterval = priv->ap_mac_config.beaconInterval;
- cfg_ap_config.wmmEnabled = priv->ap_mac_config.wmmEnabled;
- cfg_ap_config.dtimPeriod = priv->ap_mac_config.dtimPeriod;
- cfg_ap_config.phySupportedBitmap = priv->ap_mac_config.phySupportedBitmap;
- if (copy_to_user((void*)arg,
- &cfg_ap_config,
- sizeof(uf_cfg_ap_config_t))) {
- unifi_error(priv, "UNIFI_CFG: Failed to copy the AP configuration\n");
- return -EFAULT;
- }
-#else
- return -EPERM;
-#endif
- }
- break;
-
-
- default:
- unifi_error(priv, "unifi_cfg_get_info: Unknown value.\n");
- return -EINVAL;
- }
-
- return 0;
-}
-#ifdef CSR_SUPPORT_WEXT_AP
-int
- uf_configure_supported_rates(u8 * supportedRates, u8 phySupportedBitmap)
-{
- int i=0;
- u8 b=FALSE, g = FALSE, n = FALSE;
- b = phySupportedBitmap & CSR_WIFI_SME_AP_PHY_SUPPORT_B;
- n = phySupportedBitmap & CSR_WIFI_SME_AP_PHY_SUPPORT_N;
- g = phySupportedBitmap & CSR_WIFI_SME_AP_PHY_SUPPORT_G;
- if(b || g) {
- supportedRates[i++]=0x82;
- supportedRates[i++]=0x84;
- supportedRates[i++]=0x8b;
- supportedRates[i++]=0x96;
- } else if(n) {
- /* For some strange reasons WiFi stack needs both b and g rates*/
- supportedRates[i++]=0x02;
- supportedRates[i++]=0x04;
- supportedRates[i++]=0x0b;
- supportedRates[i++]=0x16;
- supportedRates[i++]=0x0c;
- supportedRates[i++]=0x12;
- supportedRates[i++]=0x18;
- supportedRates[i++]=0x24;
- supportedRates[i++]=0x30;
- supportedRates[i++]=0x48;
- supportedRates[i++]=0x60;
- supportedRates[i++]=0x6c;
- }
- if(g) {
- if(!b) {
- supportedRates[i++]=0x8c;
- supportedRates[i++]=0x98;
- supportedRates[i++]=0xb0;
- } else {
- supportedRates[i++]=0x0c;
- supportedRates[i++]=0x18;
- supportedRates[i++]=0x30;
- }
- supportedRates[i++]=0x48;
- supportedRates[i++]=0x12;
- supportedRates[i++]=0x24;
- supportedRates[i++]=0x60;
- supportedRates[i++]=0x6c;
- }
- return i;
-}
-int unifi_cfg_set_ap_config(unifi_priv_t * priv, unsigned char* arg)
-{
- uf_cfg_ap_config_t cfg_ap_config;
- char *buffer;
-
- buffer = ((unsigned char*)arg) + sizeof(unifi_cfg_command_t) + sizeof(unsigned int);
- if (copy_from_user(&cfg_ap_config, (void*)buffer,
- sizeof(uf_cfg_ap_config_t))) {
- unifi_error(priv, "UNIFI_CFG: Failed to get the ap config struct\n");
- return -EFAULT;
- }
- priv->ap_config.channel = cfg_ap_config.channel;
- priv->ap_mac_config.dtimPeriod = cfg_ap_config.dtimPeriod;
- priv->ap_mac_config.beaconInterval = cfg_ap_config.beaconInterval;
- priv->group_sec_config.apGroupkeyTimeout = cfg_ap_config.groupkeyTimeout;
- priv->group_sec_config.apStrictGtkRekey = cfg_ap_config.strictGtkRekeyEnabled;
- priv->group_sec_config.apGmkTimeout = cfg_ap_config.gmkTimeout;
- priv->group_sec_config.apResponseTimeout = cfg_ap_config.responseTimeout;
- priv->group_sec_config.apRetransLimit = cfg_ap_config.retransLimit;
-
- priv->ap_mac_config.shortSlotTimeEnabled = cfg_ap_config.shortSlotTimeEnabled;
- priv->ap_mac_config.ctsProtectionType=cfg_ap_config.ctsProtectionType;
-
- priv->ap_mac_config.wmmEnabled = cfg_ap_config.wmmEnabled;
-
- priv->ap_mac_config.apHtParams.rxStbc=cfg_ap_config.rxStbc;
- priv->ap_mac_config.apHtParams.rifsModeAllowed=cfg_ap_config.rifsModeAllowed;
-
- priv->ap_mac_config.phySupportedBitmap = cfg_ap_config.phySupportedBitmap;
- priv->ap_mac_config.maxListenInterval=cfg_ap_config.maxListenInterval;
-
- priv->ap_mac_config.supportedRatesCount= uf_configure_supported_rates(priv->ap_mac_config.supportedRates, priv->ap_mac_config.phySupportedBitmap);
-
- return 0;
-}
-
-#endif
-#ifdef CSR_SUPPORT_WEXT
-
- void
-uf_sme_config_wq(struct work_struct *work)
-{
- CsrWifiSmeStaConfig staConfig;
- CsrWifiSmeDeviceConfig deviceConfig;
- unifi_priv_t *priv = container_of(work, unifi_priv_t, sme_config_task);
-
- /* Register to receive indications from the SME */
- CsrWifiSmeEventMaskSetReqSend(0,
- CSR_WIFI_SME_INDICATIONS_WIFIOFF | CSR_WIFI_SME_INDICATIONS_CONNECTIONQUALITY |
- CSR_WIFI_SME_INDICATIONS_MEDIASTATUS | CSR_WIFI_SME_INDICATIONS_MICFAILURE);
-
- if (sme_mgt_sme_config_get(priv, &staConfig, &deviceConfig)) {
- unifi_warning(priv, "uf_sme_config_wq: Get unifi_SMEConfigValue failed.\n");
- return;
- }
-
- if (priv->if_index == CSR_INDEX_5G) {
- staConfig.ifIndex = CSR_WIFI_SME_RADIO_IF_GHZ_5_0;
- } else {
- staConfig.ifIndex = CSR_WIFI_SME_RADIO_IF_GHZ_2_4;
- }
-
- deviceConfig.trustLevel = (CsrWifiSme80211dTrustLevel)tl_80211d;
- if (sme_mgt_sme_config_set(priv, &staConfig, &deviceConfig)) {
- unifi_warning(priv,
- "SME config for 802.11d Trust Level and Radio Band failed.\n");
- return;
- }
-
-} /* uf_sme_config_wq() */
-
-#endif /* CSR_SUPPORT_WEXT */
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_ta_ind_wq
- *
- * Deferred work queue function to send Traffic Analysis protocols
- * indications to the SME.
- * These are done in a deferred work queue for two reasons:
- * - the CsrWifiRouterCtrl...Send() functions are not safe for atomic context
- * - we want to load the main driver data path as lightly as possible
- *
- * The TA classifications already come from a workqueue.
- *
- * Arguments:
- * work Pointer to work queue item.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
- void
-uf_ta_ind_wq(struct work_struct *work)
-{
- struct ta_ind *ind = container_of(work, struct ta_ind, task);
- unifi_priv_t *priv = container_of(ind, unifi_priv_t, ta_ind_work);
- u16 interfaceTag = 0;
-
-
- CsrWifiRouterCtrlTrafficProtocolIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0,
- interfaceTag,
- ind->packet_type,
- ind->direction,
- ind->src_addr);
- ind->in_use = 0;
-
-} /* uf_ta_ind_wq() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_ta_sample_ind_wq
- *
- * Deferred work queue function to send Traffic Analysis sample
- * indications to the SME.
- * These are done in a deferred work queue for two reasons:
- * - the CsrWifiRouterCtrl...Send() functions are not safe for atomic context
- * - we want to load the main driver data path as lightly as possible
- *
- * The TA classifications already come from a workqueue.
- *
- * Arguments:
- * work Pointer to work queue item.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
- void
-uf_ta_sample_ind_wq(struct work_struct *work)
-{
- struct ta_sample_ind *ind = container_of(work, struct ta_sample_ind, task);
- unifi_priv_t *priv = container_of(ind, unifi_priv_t, ta_sample_ind_work);
- u16 interfaceTag = 0;
-
- unifi_trace(priv, UDBG5, "rxtcp %d txtcp %d rxudp %d txudp %d prio %d\n",
- priv->rxTcpThroughput,
- priv->txTcpThroughput,
- priv->rxUdpThroughput,
- priv->txUdpThroughput,
- priv->bh_thread.prio);
-
- if(priv->rxTcpThroughput > 1000)
- {
- if (bh_priority == -1 && priv->bh_thread.prio != 1)
- {
- struct sched_param param;
- priv->bh_thread.prio = 1;
- unifi_trace(priv, UDBG1, "%s new thread (RT) priority = %d\n",
- priv->bh_thread.name, priv->bh_thread.prio);
- param.sched_priority = priv->bh_thread.prio;
- sched_setscheduler(priv->bh_thread.thread_task, SCHED_FIFO, &param);
- }
- } else
- {
- if (bh_priority == -1 && priv->bh_thread.prio != DEFAULT_PRIO)
- {
- struct sched_param param;
- param.sched_priority = 0;
- sched_setscheduler(priv->bh_thread.thread_task, SCHED_NORMAL, &param);
- priv->bh_thread.prio = DEFAULT_PRIO;
- unifi_trace(priv, UDBG1, "%s new thread priority = %d\n",
- priv->bh_thread.name, priv->bh_thread.prio);
- set_user_nice(priv->bh_thread.thread_task, PRIO_TO_NICE(priv->bh_thread.prio));
- }
- }
-
- CsrWifiRouterCtrlTrafficSampleIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, interfaceTag, ind->stats);
-
- ind->in_use = 0;
-
-} /* uf_ta_sample_ind_wq() */
-
-
-/*
- * ---------------------------------------------------------------------------
- * uf_send_m4_ready_wq
- *
- * Deferred work queue function to send M4 ReadyToSend inds to the SME.
- * These are done in a deferred work queue for two reasons:
- * - the CsrWifiRouterCtrl...Send() functions are not safe for atomic context
- * - we want to load the main driver data path as lightly as possible
- *
- * Arguments:
- * work Pointer to work queue item.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void
-uf_send_m4_ready_wq(struct work_struct *work)
-{
- netInterface_priv_t *InterfacePriv = container_of(work, netInterface_priv_t, send_m4_ready_task);
- u16 iface = InterfacePriv->InterfaceTag;
- unifi_priv_t *priv = InterfacePriv->privPtr;
- CSR_MA_PACKET_REQUEST *req = &InterfacePriv->m4_signal.u.MaPacketRequest;
- CsrWifiMacAddress peer;
- unsigned long flags;
-
- /* The peer address was stored in the signal */
- spin_lock_irqsave(&priv->m4_lock, flags);
- memcpy(peer.a, req->Ra.x, sizeof(peer.a));
- spin_unlock_irqrestore(&priv->m4_lock, flags);
-
- /* Send a signal to SME */
- CsrWifiRouterCtrlM4ReadyToSendIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, iface, peer);
-
- unifi_trace(priv, UDBG1, "M4ReadyToSendInd sent for peer %pMF\n",
- peer.a);
-
-} /* uf_send_m4_ready_wq() */
-
-#if (defined(CSR_WIFI_SECURITY_WAPI_ENABLE) && defined(CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION))
-/*
- * ---------------------------------------------------------------------------
- * uf_send_pkt_to_encrypt
- *
- * Deferred work queue function to send the WAPI data pkts to SME when unicast KeyId = 1
- * These are done in a deferred work queue for two reasons:
- * - the CsrWifiRouterCtrl...Send() functions are not safe for atomic context
- * - we want to load the main driver data path as lightly as possible
- *
- * Arguments:
- * work Pointer to work queue item.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-void uf_send_pkt_to_encrypt(struct work_struct *work)
-{
- netInterface_priv_t *interfacePriv = container_of(work, netInterface_priv_t, send_pkt_to_encrypt);
- u16 interfaceTag = interfacePriv->InterfaceTag;
- unifi_priv_t *priv = interfacePriv->privPtr;
-
- u32 pktBulkDataLength;
- u8 *pktBulkData;
- unsigned long flags;
-
- if (interfacePriv->interfaceMode == CSR_WIFI_ROUTER_CTRL_MODE_STA) {
-
- pktBulkDataLength = interfacePriv->wapi_unicast_bulk_data.data_length;
-
- if (pktBulkDataLength > 0) {
- pktBulkData = kmalloc(pktBulkDataLength, GFP_KERNEL);
- } else {
- unifi_error(priv, "uf_send_pkt_to_encrypt() : invalid buffer\n");
- return;
- }
-
- spin_lock_irqsave(&priv->wapi_lock, flags);
- /* Copy over the MA PKT REQ bulk data */
- memcpy(pktBulkData, (u8*)interfacePriv->wapi_unicast_bulk_data.os_data_ptr, pktBulkDataLength);
- /* Free any bulk data buffers allocated for the WAPI Data pkt */
- unifi_net_data_free(priv, &interfacePriv->wapi_unicast_bulk_data);
- interfacePriv->wapi_unicast_bulk_data.net_buf_length = 0;
- interfacePriv->wapi_unicast_bulk_data.data_length = 0;
- interfacePriv->wapi_unicast_bulk_data.os_data_ptr = interfacePriv->wapi_unicast_bulk_data.os_net_buf_ptr = NULL;
- spin_unlock_irqrestore(&priv->wapi_lock, flags);
-
- CsrWifiRouterCtrlWapiUnicastTxEncryptIndSend(priv->CSR_WIFI_SME_IFACEQUEUE, 0, interfaceTag, pktBulkDataLength, pktBulkData);
- unifi_trace(priv, UDBG1, "WapiUnicastTxEncryptInd sent to SME\n");
-
- kfree(pktBulkData); /* Would have been copied over by the SME Handler */
-
- } else {
- unifi_warning(priv, "uf_send_pkt_to_encrypt() is NOT applicable for interface mode - %d\n", interfacePriv->interfaceMode);
- }
-}/* uf_send_pkt_to_encrypt() */
-#endif
diff --git a/drivers/staging/csr/unifi_sme.h b/drivers/staging/csr/unifi_sme.h
deleted file mode 100644
index aff9aa178124..000000000000
--- a/drivers/staging/csr/unifi_sme.h
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * ***************************************************************************
- * FILE: unifi_sme.h
- *
- * PURPOSE: SME related definitions.
- *
- * Copyright (C) 2007-2011 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ***************************************************************************
- */
-#ifndef __LINUX_UNIFI_SME_H__
-#define __LINUX_UNIFI_SME_H__ 1
-
-#include <linux/kernel.h>
-
-#ifdef CSR_SME_USERSPACE
-#include "sme_userspace.h"
-#endif
-
-#include "csr_wifi_sme_lib.h"
-
-typedef int unifi_data_port_action;
-
-typedef struct unifi_port_cfg
-{
- /* TRUE if this port entry is allocated */
- u8 in_use;
- CsrWifiRouterCtrlPortAction port_action;
- CsrWifiMacAddress mac_address;
-} unifi_port_cfg_t;
-
-#define UNIFI_MAX_CONNECTIONS 8
-#define UNIFI_MAX_RETRY_LIMIT 5
-#define UF_DATA_PORT_NOT_OVERIDE 0
-#define UF_DATA_PORT_OVERIDE 1
-
-typedef struct unifi_port_config
-{
- int entries_in_use;
- int overide_action;
- unifi_port_cfg_t port_cfg[UNIFI_MAX_CONNECTIONS];
-} unifi_port_config_t;
-
-
-enum sme_request_status {
- SME_REQUEST_EMPTY,
- SME_REQUEST_PENDING,
- SME_REQUEST_RECEIVED,
- SME_REQUEST_TIMEDOUT,
- SME_REQUEST_CANCELLED,
-};
-
-/* Structure to hold a UDI logged signal */
-typedef struct {
-
- /* The current status of the request */
- enum sme_request_status request_status;
-
- /* The status the SME has passed to us */
- CsrResult reply_status;
-
- /* SME's reply to a get request */
- CsrWifiSmeVersions versions;
- CsrWifiSmePowerConfig powerConfig;
- CsrWifiSmeHostConfig hostConfig;
- CsrWifiSmeStaConfig staConfig;
- CsrWifiSmeDeviceConfig deviceConfig;
- CsrWifiSmeCoexInfo coexInfo;
- CsrWifiSmeCoexConfig coexConfig;
- CsrWifiSmeMibConfig mibConfig;
- CsrWifiSmeConnectionInfo connectionInfo;
- CsrWifiSmeConnectionConfig connectionConfig;
- CsrWifiSmeConnectionStats connectionStats;
-
-
- /* SME's reply to a scan request */
- u16 reply_scan_results_count;
- CsrWifiSmeScanResult* reply_scan_results;
-
-} sme_reply_t;
-
-
-typedef struct {
- u16 appHandle;
- CsrWifiRouterEncapsulation encapsulation;
- u16 protocol;
- u8 oui[3];
- u8 in_use;
-} sme_ma_unidata_ind_filter_t;
-
-
-CsrWifiRouterCtrlPortAction uf_sme_port_state(unifi_priv_t *priv,
- unsigned char *address,
- int queue,
- u16 interfaceTag);
-unifi_port_cfg_t *uf_sme_port_config_handle(unifi_priv_t *priv,
- unsigned char *address,
- int queue,
- u16 interfaceTag);
-
-
-
-/* Callback for event logging to SME clients */
-void sme_log_event(ul_client_t *client, const u8 *signal, int signal_len,
- const bulk_data_param_t *bulkdata, int dir);
-
-/* The workqueue task to the set the multicast addresses list */
-void uf_multicast_list_wq(struct work_struct *work);
-
-/* The workqueue task to execute the TA module */
-void uf_ta_wq(struct work_struct *work);
-
-
-/*
- * SME blocking helper functions
- */
-#ifdef UNIFI_DEBUG
-# define sme_complete_request(priv, status) uf_sme_complete_request(priv, status, __func__)
-#else
-# define sme_complete_request(priv, status) uf_sme_complete_request(priv, status, NULL)
-#endif
-
-void uf_sme_complete_request(unifi_priv_t *priv, CsrResult reply_status, const char *func);
-void uf_sme_cancel_request(unifi_priv_t *priv, CsrResult reply_status);
-
-
-/*
- * Blocking functions using the SME SYS API.
- */
-int sme_sys_suspend(unifi_priv_t *priv);
-int sme_sys_resume(unifi_priv_t *priv);
-
-
-/*
- * Traffic Analysis workqueue jobs
- */
-void uf_ta_ind_wq(struct work_struct *work);
-void uf_ta_sample_ind_wq(struct work_struct *work);
-
-/*
- * SME config workqueue job
- */
-void uf_sme_config_wq(struct work_struct *work);
-
-/*
- * To send M4 read to send IND
- */
-void uf_send_m4_ready_wq(struct work_struct *work);
-
-#if (defined(CSR_WIFI_SECURITY_WAPI_ENABLE) && defined(CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION))
-/*
- * To send data pkt to Sme for encryption
- */
-void uf_send_pkt_to_encrypt(struct work_struct *work);
-#endif
-
-int sme_mgt_power_config_set(unifi_priv_t *priv, CsrWifiSmePowerConfig *powerConfig);
-int sme_mgt_power_config_get(unifi_priv_t *priv, CsrWifiSmePowerConfig *powerConfig);
-int sme_mgt_host_config_set(unifi_priv_t *priv, CsrWifiSmeHostConfig *hostConfig);
-int sme_mgt_host_config_get(unifi_priv_t *priv, CsrWifiSmeHostConfig *hostConfig);
-int sme_mgt_sme_config_set(unifi_priv_t *priv, CsrWifiSmeStaConfig *staConfig, CsrWifiSmeDeviceConfig *deviceConfig);
-int sme_mgt_sme_config_get(unifi_priv_t *priv, CsrWifiSmeStaConfig *staConfig, CsrWifiSmeDeviceConfig *deviceConfig);
-int sme_mgt_coex_info_get(unifi_priv_t *priv, CsrWifiSmeCoexInfo *coexInfo);
-int sme_mgt_packet_filter_set(unifi_priv_t *priv);
-int sme_mgt_tspec(unifi_priv_t *priv, CsrWifiSmeListAction action,
- u32 tid, CsrWifiSmeDataBlock *tspec, CsrWifiSmeDataBlock *tclas);
-
-#ifdef CSR_SUPPORT_WEXT
-/*
- * Blocking functions using the SME MGT API.
- */
-int sme_mgt_wifi_on(unifi_priv_t *priv);
-int sme_mgt_wifi_off(unifi_priv_t *priv);
-/*int sme_mgt_set_value_async(unifi_priv_t *priv, unifi_AppValue *app_value);
-int sme_mgt_get_value_async(unifi_priv_t *priv, unifi_AppValue *app_value);
-int sme_mgt_get_value(unifi_priv_t *priv, unifi_AppValue *app_value);
-int sme_mgt_set_value(unifi_priv_t *priv, unifi_AppValue *app_value);
-*/
-int sme_mgt_coex_config_set(unifi_priv_t *priv, CsrWifiSmeCoexConfig *coexConfig);
-int sme_mgt_coex_config_get(unifi_priv_t *priv, CsrWifiSmeCoexConfig *coexConfig);
-int sme_mgt_mib_config_set(unifi_priv_t *priv, CsrWifiSmeMibConfig *mibConfig);
-int sme_mgt_mib_config_get(unifi_priv_t *priv, CsrWifiSmeMibConfig *mibConfig);
-
-int sme_mgt_connection_info_set(unifi_priv_t *priv, CsrWifiSmeConnectionInfo *connectionInfo);
-int sme_mgt_connection_info_get(unifi_priv_t *priv, CsrWifiSmeConnectionInfo *connectionInfo);
-int sme_mgt_connection_config_set(unifi_priv_t *priv, CsrWifiSmeConnectionConfig *connectionConfig);
-int sme_mgt_connection_config_get(unifi_priv_t *priv, CsrWifiSmeConnectionConfig *connectionConfig);
-int sme_mgt_connection_stats_get(unifi_priv_t *priv, CsrWifiSmeConnectionStats *connectionStats);
-
-int sme_mgt_versions_get(unifi_priv_t *priv, CsrWifiSmeVersions *versions);
-
-
-int sme_mgt_scan_full(unifi_priv_t *priv, CsrWifiSsid *specific_ssid,
- int num_channels, unsigned char *channel_list);
-int sme_mgt_scan_results_get_async(unifi_priv_t *priv,
- struct iw_request_info *info,
- char *scan_results,
- long scan_results_len);
-int sme_mgt_disconnect(unifi_priv_t *priv);
-int sme_mgt_connect(unifi_priv_t *priv);
-int sme_mgt_key(unifi_priv_t *priv, CsrWifiSmeKey *sme_key,
- CsrWifiSmeListAction action);
-int sme_mgt_pmkid(unifi_priv_t *priv, CsrWifiSmeListAction action,
- CsrWifiSmePmkidList *pmkid_list);
-int sme_mgt_mib_get(unifi_priv_t *priv,
- unsigned char *varbind, int *length);
-int sme_mgt_mib_set(unifi_priv_t *priv,
- unsigned char *varbind, int length);
-#ifdef CSR_SUPPORT_WEXT_AP
-int sme_ap_start(unifi_priv_t *priv, u16 interface_tag, CsrWifiSmeApConfig_t *ap_config);
-int sme_ap_stop(unifi_priv_t *priv, u16 interface_tag);
-int sme_ap_config(unifi_priv_t *priv, CsrWifiSmeApMacConfig *ap_mac_config, CsrWifiNmeApConfig *group_security_config);
-int uf_configure_supported_rates(u8 * supportedRates, u8 phySupportedBitmap);
-#endif
-int unifi_translate_scan(struct net_device *dev,
- struct iw_request_info *info,
- char *current_ev, char *end_buf,
- CsrWifiSmeScanResult *scan_data,
- int scan_index);
-
-#endif /* CSR_SUPPORT_WEXT */
-
-int unifi_cfg_power(unifi_priv_t *priv, unsigned char *arg);
-int unifi_cfg_power_save(unifi_priv_t *priv, unsigned char *arg);
-int unifi_cfg_power_supply(unifi_priv_t *priv, unsigned char *arg);
-int unifi_cfg_packet_filters(unifi_priv_t *priv, unsigned char *arg);
-int unifi_cfg_wmm_qos_info(unifi_priv_t *priv, unsigned char *arg);
-int unifi_cfg_wmm_addts(unifi_priv_t *priv, unsigned char *arg);
-int unifi_cfg_wmm_delts(unifi_priv_t *priv, unsigned char *arg);
-int unifi_cfg_get_info(unifi_priv_t *priv, unsigned char *arg);
-int unifi_cfg_strict_draft_n(unifi_priv_t *priv, unsigned char *arg);
-int unifi_cfg_enable_okc(unifi_priv_t *priv, unsigned char *arg);
-#ifdef CSR_SUPPORT_WEXT_AP
-int unifi_cfg_set_ap_config(unifi_priv_t * priv, unsigned char* arg);
-#endif
-
-
-
-int convert_sme_error(CsrResult error);
-
-
-#endif /* __LINUX_UNIFI_SME_H__ */
diff --git a/drivers/staging/csr/unifi_wext.h b/drivers/staging/csr/unifi_wext.h
deleted file mode 100644
index beba089e2e35..000000000000
--- a/drivers/staging/csr/unifi_wext.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- *****************************************************************************
- *
- * FILE : unifi_wext.h
- *
- * PURPOSE : Private header file for unifi driver support to wireless extensions.
- *
- * Copyright (C) 2005-2008 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
-*****************************************************************************
- */
-#ifndef __LINUX_UNIFI_WEXT_H__
-#define __LINUX_UNIFI_WEXT_H__ 1
-
-#include <linux/kernel.h>
-#include <net/iw_handler.h>
-#include "csr_wifi_sme_prim.h"
-
-/*
- * wext.c
- */
-/* A few details needed for WEP (Wireless Equivalent Privacy) */
-#define UNIFI_MAX_KEY_SIZE 16
-#define NUM_WEPKEYS 4
-#define SMALL_KEY_SIZE 5
-#define LARGE_KEY_SIZE 13
-typedef struct wep_key_t {
- int len;
- unsigned char key[UNIFI_MAX_KEY_SIZE]; /* 40-bit and 104-bit keys */
-} wep_key_t;
-
-#define UNIFI_SCAN_ACTIVE 0
-#define UNIFI_SCAN_PASSIVE 1
-#define UNIFI_MAX_SSID_LEN 32
-
-#define MAX_WPA_IE_LEN 64
-#define MAX_RSN_IE_LEN 255
-
-/*
- * Function to register in the netdev to report wireless stats.
- */
-struct iw_statistics *unifi_get_wireless_stats(struct net_device *dev);
-
-void uf_sme_wext_set_defaults(unifi_priv_t *priv);
-
-
-/*
- * wext_events.c
- */
-/* Functions to generate Wireless Extension events */
-void wext_send_scan_results_event(unifi_priv_t *priv);
-void wext_send_assoc_event(unifi_priv_t *priv, unsigned char *bssid,
- unsigned char *req_ie, int req_ie_len,
- unsigned char *resp_ie, int resp_ie_len,
- unsigned char *scan_ie, unsigned int scan_ie_len);
-void wext_send_disassoc_event(unifi_priv_t *priv);
-void wext_send_michaelmicfailure_event(unifi_priv_t *priv,
- u16 count, CsrWifiMacAddress address,
- CsrWifiSmeKeyType keyType, u16 interfaceTag);
-void wext_send_pmkid_candidate_event(unifi_priv_t *priv, CsrWifiMacAddress bssid, u8 preauth_allowed, u16 interfaceTag);
-void wext_send_started_event(unifi_priv_t *priv);
-
-
-static inline int
-uf_iwe_stream_add_point(struct iw_request_info *info, char *start, char *stop,
- struct iw_event *piwe, char *extra)
-{
- char *new_start;
-
- new_start = iwe_stream_add_point(info, start, stop, piwe, extra);
- if (unlikely(new_start == start))
- return -E2BIG;
-
- return (new_start - start);
-}
-
-
-static inline int
-uf_iwe_stream_add_event(struct iw_request_info *info, char *start, char *stop,
- struct iw_event *piwe, int len)
-{
- char *new_start;
-
- new_start = iwe_stream_add_event(info, start, stop, piwe, len);
- if (unlikely(new_start == start))
- return -E2BIG;
-
- return (new_start - start);
-}
-
-static inline int
-uf_iwe_stream_add_value(struct iw_request_info *info, char *stream, char *start,
- char *stop, struct iw_event *piwe, int len)
-{
- char *new_start;
-
- new_start = iwe_stream_add_value(info, stream, start, stop, piwe, len);
- if (unlikely(new_start == start))
- return -E2BIG;
-
- return (new_start - start);
-}
-
-
-#endif /* __LINUX_UNIFI_WEXT_H__ */
diff --git a/drivers/staging/csr/unifiio.h b/drivers/staging/csr/unifiio.h
deleted file mode 100644
index b9de0cb94e9a..000000000000
--- a/drivers/staging/csr/unifiio.h
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- *
- * FILE: unifiio.h
- *
- * Public definitions for the UniFi linux driver.
- * This is mostly ioctl command values and structs.
- *
- * Include <sys/ioctl.h> or similar before this file
- *
- * Copyright (C) 2005-2009 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-#ifndef __UNIFIIO_H__
-#define __UNIFIIO_H__
-
-#include <linux/types.h>
-
-#define UNIFI_GET_UDI_ENABLE _IOR('u', 1, int)
-#define UNIFI_SET_UDI_ENABLE _IOW('u', 2, int)
-/* Values for UDI_ENABLE */
-#define UDI_ENABLE_DATA 0x1
-#define UDI_ENABLE_CONTROL 0x2
-
-/* MIB set/get. Arg is a pointer to a varbind */
-#define UNIFI_GET_MIB _IOWR('u', 3, unsigned char *)
-#define UNIFI_SET_MIB _IOW ('u', 4, unsigned char *)
-#define MAX_VARBIND_LENGTH 127
-
-/* Private IOCTLs */
-#define SIOCIWS80211POWERSAVEPRIV SIOCIWFIRSTPRIV
-#define SIOCIWG80211POWERSAVEPRIV SIOCIWFIRSTPRIV + 1
-#define SIOCIWS80211RELOADDEFAULTSPRIV SIOCIWFIRSTPRIV + 2
-#define SIOCIWSCONFWAPIPRIV SIOCIWFIRSTPRIV + 4
-#define SIOCIWSWAPIKEYPRIV SIOCIWFIRSTPRIV + 6
-#define SIOCIWSSMEDEBUGPRIV SIOCIWFIRSTPRIV + 8
-#define SIOCIWSAPCFGPRIV SIOCIWFIRSTPRIV + 10
-#define SIOCIWSAPSTARTPRIV SIOCIWFIRSTPRIV + 12
-#define SIOCIWSAPSTOPPRIV SIOCIWFIRSTPRIV + 14
-#define SIOCIWSFWRELOADPRIV SIOCIWFIRSTPRIV + 16
-#define SIOCIWSSTACKSTART SIOCIWFIRSTPRIV + 18
-#define SIOCIWSSTACKSTOP SIOCIWFIRSTPRIV + 20
-
-
-
-#define IWPRIV_POWER_SAVE_MAX_STRING 32
-#define IWPRIV_SME_DEBUG_MAX_STRING 32
-#define IWPRIV_SME_MAX_STRING 120
-
-
-/* Private configuration commands */
-#define UNIFI_CFG _IOWR('u', 5, unsigned char *)
-/*
- * <------------------ Read/Write Buffer -------------------->
- * _____________________________________________________________
- * | Cmd | Arg | ... Buffer (opt) ... |
- * -------------------------------------------------------------
- * <-- uint --><-- uint --><----- unsigned char buffer ------>
- *
- * Cmd: A unifi_cfg_command_t command.
- * Arg: Out:Length if Cmd==UNIFI_CFG_GET
- * In:PowerOnOff if Cmd==UNIFI_CFG_POWER
- * In:PowerMode if Cmd==UNIFI_CFG_POWERSAVE
- * In:Length if Cmd==UNIFI_CFG_FILTER
- * In:WMM Qos Info if Cmd==UNIFI_CFG_WMM_QOS_INFO
- * Buffer: Out:Data if Cmd==UNIFI_CFG_GET
- * NULL if Cmd==UNIFI_CFG_POWER
- * NULL if Cmd==UNIFI_CFG_POWERSAVE
- * In:Filters if Cmd==UNIFI_CFG_FILTER
- *
- * where Filters is a uf_cfg_bcast_packet_filter_t structure
- * followed by 0 - n tclas_t structures. The length of the tclas_t
- * structures is obtained by uf_cfg_bcast_packet_filter_t::tclas_ies_length.
- */
-
-
-#define UNIFI_PUTEST _IOWR('u', 6, unsigned char *)
-/*
- * <------------------ Read/Write Buffer -------------------->
- * _____________________________________________________________
- * | Cmd | Arg | ... Buffer (opt) ... |
- * -------------------------------------------------------------
- * <-- uint --><-- uint --><----- unsigned char buffer ------>
- *
- * Cmd: A unifi_putest_command_t command.
- * Arg: N/A if Cmd==UNIFI_PUTEST_START
- * N/A if Cmd==UNIFI_PUTEST_STOP
- * In:int (Clock Speed) if Cmd==UNIFI_PUTEST_SET_SDIO_CLOCK
- * In/Out:sizeof(unifi_putest_cmd52) if Cmd==UNIFI_PUTEST_CMD52_READ
- * In:sizeof(unifi_putest_cmd52) if Cmd==UNIFI_PUTEST_CMD52_WRITE
- * In:uint (f/w file name length) if Cmd==UNIFI_PUTEST_DL_FW
- * Buffer: NULL if Cmd==UNIFI_PUTEST_START
- * NULL if Cmd==UNIFI_PUTEST_STOP
- * NULL if Cmd==UNIFI_PUTEST_SET_SDIO_CLOCK
- * In/Out:unifi_putest_cmd52 if Cmd==UNIFI_PUTEST_CMD52_READ
- * In:unifi_putest_cmd52 if Cmd==UNIFI_PUTEST_CMD52_WRITE
- * In:f/w file name if Cmd==UNIFI_PUTEST_DL_FW
- */
-
-#define UNIFI_BUILD_TYPE _IOWR('u', 7, unsigned char)
-#define UNIFI_BUILD_NME 1
-#define UNIFI_BUILD_WEXT 2
-#define UNIFI_BUILD_AP 3
-
-/* debugging */
-#define UNIFI_KICK _IO ('u', 0x10)
-#define UNIFI_SET_DEBUG _IO ('u', 0x11)
-#define UNIFI_SET_TRACE _IO ('u', 0x12)
-
-#define UNIFI_GET_INIT_STATUS _IOR ('u', 0x15, int)
-#define UNIFI_SET_UDI_LOG_MASK _IOR('u', 0x18, unifiio_filter_t)
-#define UNIFI_SET_UDI_SNAP_MASK _IOW('u', 0x1a, unifiio_snap_filter_t)
-#define UNIFI_SET_AMP_ENABLE _IOWR('u', 0x1b, int)
-
-#define UNIFI_INIT_HW _IOR ('u', 0x13, unsigned char)
-#define UNIFI_INIT_NETDEV _IOW ('u', 0x14, unsigned char[6])
-#define UNIFI_SME_PRESENT _IOW ('u', 0x19, int)
-
-#define UNIFI_CFG_PERIOD_TRAFFIC _IOW ('u', 0x21, unsigned char *)
-#define UNIFI_CFG_UAPSD_TRAFFIC _IOW ('u', 0x22, unsigned char)
-
-#define UNIFI_COREDUMP_GET_REG _IOWR('u', 0x23, unifiio_coredump_req_t)
-
-
-/*
- * Following reset, f/w may only be downloaded using CMD52.
- * This is slow, so there is a facility to download a secondary
- * loader first which supports CMD53.
- * If loader_len is > 0, then loader_data is assumed to point to
- * a suitable secondary loader that can be used to download the
- * main image.
- *
- * The driver will run the host protocol initialisation sequence
- * after downloading the image.
- *
- * If both lengths are zero, then the f/w is assumed to have been
- * booted from Flash and the host protocol initialisation sequence
- * is run.
- */
-typedef struct {
-
- /* Number of bytes in the image */
- int img_len;
-
- /* Pointer to image data. */
- unsigned char *img_data;
-
-
- /* Number of bytes in the loader image */
- int loader_len;
-
- /* Pointer to loader image data. */
- unsigned char *loader_data;
-
-} unifiio_img_t;
-
-
-/* Structure of data read from the unifi device. */
-typedef struct
-{
- /* Length (in bytes) of entire structure including appended bulk data */
- int length;
-
- /* System time (in milliseconds) that signal was transferred */
- int timestamp;
-
- /* Direction in which signal was transferred. */
- int direction;
-#define UDI_FROM_HOST 0
-#define UDI_TO_HOST 1
-#define UDI_CONFIG_IND 2
-
- /* The length of the signal (in bytes) not including bulk data */
- int signal_length;
-
- /* Signal body follows, then any bulk data */
-
-} udi_msg_t;
-
-
-typedef enum
-{
- UfSigFil_AllOn = 0, /* Log all signal IDs */
- UfSigFil_AllOff = 1, /* Don't log any signal IDs */
- UfSigFil_SelectOn = 2, /* Log these signal IDs */
- UfSigFil_SelectOff = 3 /* Don't log these signal IDs */
-} uf_sigfilter_action_t;
-
-typedef struct {
-
- /* Number of 16-bit ints in the sig_ids array */
- int num_sig_ids;
- /* The action to perform */
- uf_sigfilter_action_t action;
- /* List of signal IDs to pass or block */
- unsigned short *sig_ids;
-
-} unifiio_filter_t;
-
-
-typedef struct {
- /* Number of 16-bit ints in the protocols array */
- u16 count;
- /* List of protocol ids to pass */
- u16 *protocols;
-} unifiio_snap_filter_t;
-
-
-
-typedef u8 unifi_putest_command_t;
-
-#define UNIFI_PUTEST_START 0
-#define UNIFI_PUTEST_STOP 1
-#define UNIFI_PUTEST_SET_SDIO_CLOCK 2
-#define UNIFI_PUTEST_CMD52_READ 3
-#define UNIFI_PUTEST_CMD52_WRITE 4
-#define UNIFI_PUTEST_DL_FW 5
-#define UNIFI_PUTEST_DL_FW_BUFF 6
-#define UNIFI_PUTEST_CMD52_BLOCK_READ 7
-#define UNIFI_PUTEST_COREDUMP_PREPARE 8
-#define UNIFI_PUTEST_GP_READ16 9
-#define UNIFI_PUTEST_GP_WRITE16 10
-
-
-struct unifi_putest_cmd52 {
- int funcnum;
- unsigned long addr;
- unsigned char data;
-};
-
-
-struct unifi_putest_block_cmd52_r {
- int funcnum;
- unsigned long addr;
- unsigned int length;
- unsigned char *data;
-};
-
-struct unifi_putest_gp_rw16 {
- unsigned long addr; /* generic address */
- unsigned short data;
-};
-
-typedef enum unifi_cfg_command {
- UNIFI_CFG_GET,
- UNIFI_CFG_POWER,
- UNIFI_CFG_POWERSAVE,
- UNIFI_CFG_FILTER,
- UNIFI_CFG_POWERSUPPLY,
- UNIFI_CFG_WMM_QOSINFO,
- UNIFI_CFG_WMM_ADDTS,
- UNIFI_CFG_WMM_DELTS,
- UNIFI_CFG_STRICT_DRAFT_N,
- UNIFI_CFG_ENABLE_OKC,
- UNIFI_CFG_SET_AP_CONFIG,
- UNIFI_CFG_CORE_DUMP /* request to take a fw core dump */
-} unifi_cfg_command_t;
-
-typedef enum unifi_cfg_power {
- UNIFI_CFG_POWER_UNSPECIFIED,
- UNIFI_CFG_POWER_OFF,
- UNIFI_CFG_POWER_ON
-} unifi_cfg_power_t;
-
-typedef enum unifi_cfg_powersupply {
- UNIFI_CFG_POWERSUPPLY_UNSPECIFIED,
- UNIFI_CFG_POWERSUPPLY_MAINS,
- UNIFI_CFG_POWERSUPPLY_BATTERIES
-} unifi_cfg_powersupply_t;
-
-typedef enum unifi_cfg_powersave {
- UNIFI_CFG_POWERSAVE_UNSPECIFIED,
- UNIFI_CFG_POWERSAVE_NONE,
- UNIFI_CFG_POWERSAVE_FAST,
- UNIFI_CFG_POWERSAVE_FULL,
- UNIFI_CFG_POWERSAVE_AUTO
-} unifi_cfg_powersave_t;
-
-typedef enum unifi_cfg_get {
- UNIFI_CFG_GET_COEX,
- UNIFI_CFG_GET_POWER_MODE,
- UNIFI_CFG_GET_VERSIONS,
- UNIFI_CFG_GET_POWER_SUPPLY,
- UNIFI_CFG_GET_INSTANCE,
- UNIFI_CFG_GET_AP_CONFIG
-} unifi_cfg_get_t;
-
-#define UNIFI_CFG_FILTER_NONE 0x0000
-#define UNIFI_CFG_FILTER_DHCP 0x0001
-#define UNIFI_CFG_FILTER_ARP 0x0002
-#define UNIFI_CFG_FILTER_NBNS 0x0004
-#define UNIFI_CFG_FILTER_NBDS 0x0008
-#define UNIFI_CFG_FILTER_CUPS 0x0010
-#define UNIFI_CFG_FILTER_ALL 0xFFFF
-
-
-typedef struct uf_cfg_bcast_packet_filter
-{
- unsigned long filter_mode; //as defined by HIP protocol
- unsigned char arp_filter;
- unsigned char dhcp_filter;
- unsigned long tclas_ies_length; // length of tclas_ies in bytes
- unsigned char tclas_ies[1]; // variable length depending on above field
-} uf_cfg_bcast_packet_filter_t;
-
-typedef struct uf_cfg_ap_config
-{
- u8 phySupportedBitmap;
- u8 channel;
- u16 beaconInterval;
- u8 dtimPeriod;
- u8 wmmEnabled;
- u8 shortSlotTimeEnabled;
- u16 groupkeyTimeout;
- u8 strictGtkRekeyEnabled;
- u16 gmkTimeout;
- u16 responseTimeout;
- u8 retransLimit;
- u8 rxStbc;
- u8 rifsModeAllowed;
- u8 dualCtsProtection;
- u8 ctsProtectionType;
- u16 maxListenInterval;
-}uf_cfg_ap_config_t;
-
-typedef struct tcpic_clsfr
-{
- __u8 cls_fr_type;
- __u8 cls_fr_mask;
- __u8 version;
- __u8 source_ip_addr[4];
- __u8 dest_ip_addr[4];
- __u16 source_port;
- __u16 dest_port;
- __u8 dscp;
- __u8 protocol;
- __u8 reserved;
-} __attribute__ ((packed)) tcpip_clsfr_t;
-
-typedef struct tclas {
- __u8 element_id;
- __u8 length;
- __u8 user_priority;
- tcpip_clsfr_t tcp_ip_cls_fr;
-} __attribute__ ((packed)) tclas_t;
-
-
-#define CONFIG_IND_ERROR 0x01
-#define CONFIG_IND_EXIT 0x02
-#define CONFIG_SME_NOT_PRESENT 0x10
-#define CONFIG_SME_PRESENT 0x20
-
-/* WAPI Key */
-typedef struct
-{
- u8 unicastKey;
- /* If non zero, then unicast key otherwise group key */
- u8 keyIndex;
- u8 keyRsc[16];
- u8 authenticator;
- /* If non zero, then authenticator otherwise supplicant */
- u8 address[6];
- u8 key[32];
-} unifiio_wapi_key_t;
-
-/* Values describing XAP memory regions captured by the mini-coredump system */
-typedef enum unifiio_coredump_space {
- UNIFIIO_COREDUMP_MAC_REG,
- UNIFIIO_COREDUMP_PHY_REG,
- UNIFIIO_COREDUMP_SH_DMEM,
- UNIFIIO_COREDUMP_MAC_DMEM,
- UNIFIIO_COREDUMP_PHY_DMEM,
- UNIFIIO_COREDUMP_TRIGGER_MAGIC = 0xFEED
-} unifiio_coredump_space_t;
-
-/* Userspace tool uses this structure to retrieve a register value from a
- * mini-coredump buffer previously saved by the HIP
- */
-typedef struct unifiio_coredump_req {
- /* From user */
- int index; /* 0=newest, -1=oldest */
- unsigned int offset; /* register offset in space */
- unifiio_coredump_space_t space; /* memory space */
- /* Filled by driver */
- unsigned int drv_build; /* driver build id */
- unsigned int chip_ver; /* chip version */
- unsigned int fw_ver; /* firmware version */
- int requestor; /* requestor: 0=auto dump, 1=manual */
- unsigned int timestamp; /* time of capture by driver */
- unsigned int serial; /* capture serial number */
- int value; /* 16 bit register value, -ve for error */
-} unifiio_coredump_req_t; /* Core-dumped register value request */
-
-#endif /* __UNIFIIO_H__ */
diff --git a/drivers/staging/csr/wext_events.c b/drivers/staging/csr/wext_events.c
deleted file mode 100644
index 9860ea30da25..000000000000
--- a/drivers/staging/csr/wext_events.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * FILE: wext_events.c
- *
- * PURPOSE:
- * Code to generate iwevents.
- *
- * Copyright (C) 2006-2008 by Cambridge Silicon Radio Ltd.
- *
- * Refer to LICENSE.txt included with this source code for details on
- * the license terms.
- *
- * ---------------------------------------------------------------------------
- */
-#include <linux/types.h>
-#include <linux/etherdevice.h>
-#include <linux/if_arp.h>
-#include "csr_wifi_hip_unifi.h"
-#include "unifi_priv.h"
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * wext_send_assoc_event
- *
- * Send wireless-extension events up to userland to announce
- * successful association with an AP.
- *
- * Arguments:
- * priv Pointer to driver context.
- * bssid MAC address of AP we associated with
- * req_ie, req_ie_len IEs in the original request
- * resp_ie, resp_ie_len IEs in the response
- *
- * Returns:
- * None.
- *
- * Notes:
- * This is sent on first successful association, and again if we
- * roam to another AP.
- * ---------------------------------------------------------------------------
- */
-void
-wext_send_assoc_event(unifi_priv_t *priv, unsigned char *bssid,
- unsigned char *req_ie, int req_ie_len,
- unsigned char *resp_ie, int resp_ie_len,
- unsigned char *scan_ie, unsigned int scan_ie_len)
-{
-#if WIRELESS_EXT > 17
- union iwreq_data wrqu;
-
- if (req_ie_len == 0) req_ie = NULL;
- wrqu.data.length = req_ie_len;
- wrqu.data.flags = 0;
- wireless_send_event(priv->netdev[CSR_WIFI_INTERFACE_IN_USE], IWEVASSOCREQIE, &wrqu, req_ie);
-
- if (resp_ie_len == 0) resp_ie = NULL;
- wrqu.data.length = resp_ie_len;
- wrqu.data.flags = 0;
- wireless_send_event(priv->netdev[CSR_WIFI_INTERFACE_IN_USE], IWEVASSOCRESPIE, &wrqu, resp_ie);
-
- if (scan_ie_len > 0) {
- wrqu.data.length = scan_ie_len;
- wrqu.data.flags = 0;
- wireless_send_event(priv->netdev[CSR_WIFI_INTERFACE_IN_USE], IWEVGENIE, &wrqu, scan_ie);
- }
-
- memcpy(&wrqu.ap_addr.sa_data, bssid, ETH_ALEN);
- wireless_send_event(priv->netdev[CSR_WIFI_INTERFACE_IN_USE], SIOCGIWAP, &wrqu, NULL);
-#endif
-} /* wext_send_assoc_event() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * wext_send_disassoc_event
- *
- * Send a wireless-extension event up to userland to announce
- * that we disassociated from an AP.
- *
- * Arguments:
- * priv Pointer to driver context.
- *
- * Returns:
- * None.
- *
- * Notes:
- * The semantics of wpa_supplicant (the userland SME application) are
- * that a SIOCGIWAP event with MAC address of all zero means
- * disassociate.
- * ---------------------------------------------------------------------------
- */
-void
-wext_send_disassoc_event(unifi_priv_t *priv)
-{
-#if WIRELESS_EXT > 17
- union iwreq_data wrqu;
-
- memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN);
- wireless_send_event(priv->netdev[CSR_WIFI_INTERFACE_IN_USE], SIOCGIWAP, &wrqu, NULL);
-#endif
-} /* wext_send_disassoc_event() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * wext_send_scan_results_event
- *
- * Send wireless-extension events up to userland to announce
- * completion of a scan.
- *
- * Arguments:
- * priv Pointer to driver context.
- *
- * Returns:
- * None.
- *
- * Notes:
- * This doesn't actually report the results, they are retrieved
- * using the SIOCGIWSCAN ioctl command.
- * ---------------------------------------------------------------------------
- */
-void
-wext_send_scan_results_event(unifi_priv_t *priv)
-{
-#if WIRELESS_EXT > 17
- union iwreq_data wrqu;
-
- wrqu.data.length = 0;
- wrqu.data.flags = 0;
- wireless_send_event(priv->netdev[CSR_WIFI_INTERFACE_IN_USE], SIOCGIWSCAN, &wrqu, NULL);
-
-#endif
-} /* wext_send_scan_results_event() */
-
-
-
-/*
- * ---------------------------------------------------------------------------
- * wext_send_michaelmicfailure_event
- *
- * Send wireless-extension events up to userland to announce
- * completion of a scan.
- *
- * Arguments:
- * priv Pointer to driver context.
- * count, macaddr, key_type, key_idx, tsc
- * Parameters from report from UniFi.
- *
- * Returns:
- * None.
- * ---------------------------------------------------------------------------
- */
-#if WIRELESS_EXT >= 18
-static inline void
-_send_michaelmicfailure_event(struct net_device *dev,
- int count, const unsigned char *macaddr,
- int key_type, int key_idx,
- unsigned char *tsc)
-{
- union iwreq_data wrqu;
- struct iw_michaelmicfailure mmf;
-
- memset(&mmf, 0, sizeof(mmf));
-
- mmf.flags = key_idx & IW_MICFAILURE_KEY_ID;
- if (key_type == CSR_GROUP) {
- mmf.flags |= IW_MICFAILURE_GROUP;
- } else {
- mmf.flags |= IW_MICFAILURE_PAIRWISE;
- }
- mmf.flags |= ((count << 5) & IW_MICFAILURE_COUNT);
-
- mmf.src_addr.sa_family = ARPHRD_ETHER;
- memcpy(mmf.src_addr.sa_data, macaddr, ETH_ALEN);
-
- memcpy(mmf.tsc, tsc, IW_ENCODE_SEQ_MAX_SIZE);
-
- memset(&wrqu, 0, sizeof(wrqu));
- wrqu.data.length = sizeof(mmf);
-
- wireless_send_event(dev, IWEVMICHAELMICFAILURE, &wrqu, (char *)&mmf);
-}
-#elif WIRELESS_EXT >= 15
-static inline void
-_send_michaelmicfailure_event(struct net_device *dev,
- int count, const unsigned char *macaddr,
- int key_type, int key_idx,
- unsigned char *tsc)
-{
- union iwreq_data wrqu;
- char buf[128];
-
- sprintf(buf,
- "MLME-MICHAELMICFAILURE.indication(keyid=%d %scast addr=%pM)",
- key_idx, (key_type == CSR_GROUP) ? "broad" : "uni", macaddr);
- memset(&wrqu, 0, sizeof(wrqu));
- wrqu.data.length = strlen(buf);
- wireless_send_event(dev, IWEVCUSTOM, &wrqu, buf);
-}
-#else /* WIRELESS_EXT >= 15 */
-static inline void
-_send_michaelmicfailure_event(struct net_device *dev,
- int count, const unsigned char *macaddr,
- int key_type, int key_idx,
- unsigned char *tsc)
-{
- /* Not supported before WEXT 15 */
-}
-#endif /* WIRELESS_EXT >= 15 */
-
-
-void
-wext_send_michaelmicfailure_event(unifi_priv_t *priv,
- u16 count,
- CsrWifiMacAddress address,
- CsrWifiSmeKeyType keyType,
- u16 interfaceTag)
-{
- unsigned char tsc[8] = {0};
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "wext_send_michaelmicfailure_event bad interfaceTag\n");
- return;
- }
-
- _send_michaelmicfailure_event(priv->netdev[interfaceTag],
- count,
- address.a,
- keyType,
- 0,
- tsc);
-} /* wext_send_michaelmicfailure_event() */
-
-void
-wext_send_pmkid_candidate_event(unifi_priv_t *priv, CsrWifiMacAddress bssid, u8 preauth_allowed, u16 interfaceTag)
-{
-#if WIRELESS_EXT > 17
- union iwreq_data wrqu;
- struct iw_pmkid_cand pmkid_cand;
-
- if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
- unifi_error(priv, "wext_send_pmkid_candidate_event bad interfaceTag\n");
- return;
- }
-
- memset(&pmkid_cand, 0, sizeof(pmkid_cand));
-
- if (preauth_allowed) {
- pmkid_cand.flags |= IW_PMKID_CAND_PREAUTH;
- }
- pmkid_cand.bssid.sa_family = ARPHRD_ETHER;
- memcpy(pmkid_cand.bssid.sa_data, bssid.a, ETH_ALEN);
- /* Used as priority, smaller the number higher the priority, not really used in our case */
- pmkid_cand.index = 1;
-
- memset(&wrqu, 0, sizeof(wrqu));
- wrqu.data.length = sizeof(pmkid_cand);
-
- wireless_send_event(priv->netdev[interfaceTag], IWEVPMKIDCAND, &wrqu, (char *)&pmkid_cand);
-#endif
-} /* wext_send_pmkid_candidate_event() */
-
-/*
- * Send a custom WEXT event to say we have completed initialisation
- * and are now ready for WEXT ioctls. Used by Android wpa_supplicant.
- */
-void
-wext_send_started_event(unifi_priv_t *priv)
-{
-#if WIRELESS_EXT > 17
- union iwreq_data wrqu;
- char data[] = "STARTED";
-
- wrqu.data.length = sizeof(data);
- wrqu.data.flags = 0;
- wireless_send_event(priv->netdev[CSR_WIFI_INTERFACE_IN_USE], IWEVCUSTOM, &wrqu, data);
-#endif
-} /* wext_send_started_event() */
-
diff --git a/drivers/staging/frontier/alphatrack.c b/drivers/staging/frontier/alphatrack.c
index 5590ebf1da15..817f837b240d 100644
--- a/drivers/staging/frontier/alphatrack.c
+++ b/drivers/staging/frontier/alphatrack.c
@@ -827,11 +827,11 @@ static void usb_alphatrack_disconnect(struct usb_interface *intf)
mutex_unlock(&dev->mtx);
usb_alphatrack_delete(dev);
} else {
+ atomic_set(&dev->writes_pending, 0);
dev->intf = NULL;
mutex_unlock(&dev->mtx);
}
- atomic_set(&dev->writes_pending, 0);
mutex_unlock(&disconnect_mutex);
dev_info(&intf->dev, "Alphatrack Surface #%d now disconnected\n",
diff --git a/drivers/staging/gdm72xx/gdm_qos.c b/drivers/staging/gdm72xx/gdm_qos.c
index b795353e8348..cc3692439a5c 100644
--- a/drivers/staging/gdm72xx/gdm_qos.c
+++ b/drivers/staging/gdm72xx/gdm_qos.c
@@ -250,8 +250,8 @@ static void send_qos_list(struct nic *nic, struct list_head *head)
list_for_each_entry_safe(entry, n, head, list) {
list_del(&entry->list);
- free_qos_entry(entry);
gdm_wimax_send_tx(entry->skb, entry->dev);
+ free_qos_entry(entry);
}
}
diff --git a/drivers/staging/iio/accel/lis3l02dq_core.c b/drivers/staging/iio/accel/lis3l02dq_core.c
index 1bfe5d81792b..8ed75a94f465 100644
--- a/drivers/staging/iio/accel/lis3l02dq_core.c
+++ b/drivers/staging/iio/accel/lis3l02dq_core.c
@@ -257,6 +257,8 @@ static int lis3l02dq_read_raw(struct iio_dev *indio_dev,
ret = lis3l02dq_read_reg_s16(indio_dev, reg, val);
}
mutex_unlock(&indio_dev->mlock);
+ if (ret < 0)
+ goto error_ret;
return IIO_VAL_INT;
case IIO_CHAN_INFO_SCALE:
*val = 0;
diff --git a/drivers/staging/iio/adc/ad7291.c b/drivers/staging/iio/adc/ad7291.c
index 3fc79e582750..a2e61c2fc8d1 100644
--- a/drivers/staging/iio/adc/ad7291.c
+++ b/drivers/staging/iio/adc/ad7291.c
@@ -517,6 +517,7 @@ static const struct iio_info ad7291_info = {
.read_event_value = &ad7291_read_event_value,
.write_event_value = &ad7291_write_event_value,
.event_attrs = &ad7291_event_attribute_group,
+ .driver_module = THIS_MODULE,
};
static int ad7291_probe(struct i2c_client *client,
diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c
index d92c97a59d61..9f52a2857929 100644
--- a/drivers/staging/iio/adc/mxs-lradc.c
+++ b/drivers/staging/iio/adc/mxs-lradc.c
@@ -234,7 +234,6 @@ static int mxs_lradc_read_raw(struct iio_dev *iio_dev,
{
struct mxs_lradc *lradc = iio_priv(iio_dev);
int ret;
- unsigned long mask;
if (m != IIO_CHAN_INFO_RAW)
return -EINVAL;
@@ -243,12 +242,6 @@ static int mxs_lradc_read_raw(struct iio_dev *iio_dev,
if (chan->channel > LRADC_MAX_TOTAL_CHANS)
return -EINVAL;
- /* Validate the channel if it doesn't intersect with reserved chans. */
- bitmap_set(&mask, chan->channel, 1);
- ret = iio_validate_scan_mask_onehot(iio_dev, &mask);
- if (ret)
- return -EINVAL;
-
/*
* See if there is no buffered operation in progess. If there is, simply
* bail out. This can be improved to support both buffered and raw IO at
@@ -661,12 +654,13 @@ static int mxs_lradc_trigger_init(struct iio_dev *iio)
{
int ret;
struct iio_trigger *trig;
+ struct mxs_lradc *lradc = iio_priv(iio);
trig = iio_trigger_alloc("%s-dev%i", iio->name, iio->id);
if (trig == NULL)
return -ENOMEM;
- trig->dev.parent = iio->dev.parent;
+ trig->dev.parent = lradc->dev;
iio_trigger_set_drvdata(trig, iio);
trig->ops = &mxs_lradc_trigger_ops;
@@ -676,15 +670,17 @@ static int mxs_lradc_trigger_init(struct iio_dev *iio)
return ret;
}
- iio->trig = trig;
+ lradc->trig = trig;
return 0;
}
static void mxs_lradc_trigger_remove(struct iio_dev *iio)
{
- iio_trigger_unregister(iio->trig);
- iio_trigger_free(iio->trig);
+ struct mxs_lradc *lradc = iio_priv(iio);
+
+ iio_trigger_unregister(lradc->trig);
+ iio_trigger_free(lradc->trig);
}
static int mxs_lradc_buffer_preenable(struct iio_dev *iio)
diff --git a/drivers/staging/imx-drm/Kconfig b/drivers/staging/imx-drm/Kconfig
index 22339059837f..bd0f2fd01db4 100644
--- a/drivers/staging/imx-drm/Kconfig
+++ b/drivers/staging/imx-drm/Kconfig
@@ -33,7 +33,6 @@ config DRM_IMX_TVE
config DRM_IMX_LDB
tristate "Support for LVDS displays"
depends on DRM_IMX
- select OF_VIDEOMODE
help
Choose this to enable the internal LVDS Display Bridge (LDB)
found on i.MX53 and i.MX6 processors.
diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
index 4795f1284906..0dd08ef51398 100644
--- a/drivers/staging/line6/pcm.c
+++ b/drivers/staging/line6/pcm.c
@@ -392,8 +392,11 @@ static int snd_line6_pcm_free(struct snd_device *device)
*/
static void pcm_disconnect_substream(struct snd_pcm_substream *substream)
{
- if (substream->runtime && snd_pcm_running(substream))
+ if (substream->runtime && snd_pcm_running(substream)) {
+ snd_pcm_stream_lock_irq(substream);
snd_pcm_stop(substream, SNDRV_PCM_STATE_DISCONNECTED);
+ snd_pcm_stream_unlock_irq(substream);
+ }
}
/*
diff --git a/drivers/staging/tidspbridge/pmgr/dbll.c b/drivers/staging/tidspbridge/pmgr/dbll.c
index c191ae203565..41e88abe47af 100644
--- a/drivers/staging/tidspbridge/pmgr/dbll.c
+++ b/drivers/staging/tidspbridge/pmgr/dbll.c
@@ -1120,8 +1120,11 @@ static int dbll_rmm_alloc(struct dynamic_loader_allocate *this,
or DYN_EXTERNAL, then mem granularity information is present
within the section name - only process if there are at least three
tokens within the section name (just a minor optimization) */
- if (count >= 3)
- strict_strtol(sz_last_token, 10, (long *)&req);
+ if (count >= 3) {
+ status = kstrtos32(sz_last_token, 10, &req);
+ if (status)
+ goto func_cont;
+ }
if ((req == 0) || (req == 1)) {
if (strcmp(sz_sec_last_token, "DYN_DARAM") == 0) {
diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
index 82c7202fd5cc..e77fb6ea40c9 100644
--- a/drivers/staging/zram/zram_drv.c
+++ b/drivers/staging/zram/zram_drv.c
@@ -527,8 +527,11 @@ static void zram_reset_device(struct zram *zram)
size_t index;
struct zram_meta *meta;
- if (!zram->init_done)
+ down_write(&zram->init_lock);
+ if (!zram->init_done) {
+ up_write(&zram->init_lock);
return;
+ }
meta = zram->meta;
zram->init_done = 0;
@@ -549,6 +552,7 @@ static void zram_reset_device(struct zram *zram)
zram->disksize = 0;
set_capacity(zram->disk, 0);
+ up_write(&zram->init_lock);
}
static void zram_init_device(struct zram *zram, struct zram_meta *meta)
diff --git a/drivers/thermal/x86_pkg_temp_thermal.c b/drivers/thermal/x86_pkg_temp_thermal.c
index 5de56f671a9d..f36950e4134f 100644
--- a/drivers/thermal/x86_pkg_temp_thermal.c
+++ b/drivers/thermal/x86_pkg_temp_thermal.c
@@ -54,6 +54,8 @@ MODULE_PARM_DESC(notify_delay_ms,
* is some wrong values returned by cpuid for number of thresholds.
*/
#define MAX_NUMBER_OF_TRIPS 2
+/* Limit number of package temp zones */
+#define MAX_PKG_TEMP_ZONE_IDS 256
struct phy_dev_entry {
struct list_head list;
@@ -394,12 +396,16 @@ static int pkg_temp_thermal_device_add(unsigned int cpu)
char buffer[30];
int thres_count;
u32 eax, ebx, ecx, edx;
+ u8 *temp;
cpuid(6, &eax, &ebx, &ecx, &edx);
thres_count = ebx & 0x07;
if (!thres_count)
return -ENODEV;
+ if (topology_physical_package_id(cpu) > MAX_PKG_TEMP_ZONE_IDS)
+ return -ENODEV;
+
thres_count = clamp_val(thres_count, 0, MAX_NUMBER_OF_TRIPS);
err = get_tj_max(cpu, &tj_max);
@@ -417,13 +423,14 @@ static int pkg_temp_thermal_device_add(unsigned int cpu)
spin_lock(&pkg_work_lock);
if (topology_physical_package_id(cpu) > max_phy_id)
max_phy_id = topology_physical_package_id(cpu);
- pkg_work_scheduled = krealloc(pkg_work_scheduled,
- (max_phy_id+1) * sizeof(u8), GFP_ATOMIC);
- if (!pkg_work_scheduled) {
+ temp = krealloc(pkg_work_scheduled,
+ (max_phy_id+1) * sizeof(u8), GFP_ATOMIC);
+ if (!temp) {
spin_unlock(&pkg_work_lock);
err = -ENOMEM;
goto err_ret_free;
}
+ pkg_work_scheduled = temp;
pkg_work_scheduled[topology_physical_package_id(cpu)] = 0;
spin_unlock(&pkg_work_lock);
@@ -511,7 +518,7 @@ static int get_core_online(unsigned int cpu)
/* Check if there is already an instance for this package */
if (!phdev) {
- if (!cpu_has(c, X86_FEATURE_DTHERM) &&
+ if (!cpu_has(c, X86_FEATURE_DTHERM) ||
!cpu_has(c, X86_FEATURE_PTS))
return -ENODEV;
if (pkg_temp_thermal_device_add(cpu))
@@ -562,7 +569,7 @@ static struct notifier_block pkg_temp_thermal_notifier __refdata = {
};
static const struct x86_cpu_id __initconst pkg_temp_thermal_ids[] = {
- { X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_DTHERM },
+ { X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_PTS },
{}
};
MODULE_DEVICE_TABLE(x86cpu, pkg_temp_thermal_ids);
@@ -592,7 +599,6 @@ static int __init pkg_temp_thermal_init(void)
return 0;
err_ret:
- get_online_cpus();
for_each_online_cpu(i)
put_core_offline(i);
put_online_cpus();
diff --git a/drivers/tty/serial/8250/8250_early.c b/drivers/tty/serial/8250/8250_early.c
index 721904f8efa9..946ddd2b3a54 100644
--- a/drivers/tty/serial/8250/8250_early.c
+++ b/drivers/tty/serial/8250/8250_early.c
@@ -193,7 +193,8 @@ static int __init parse_options(struct early_serial8250_device *device,
if (options) {
options++;
device->baud = simple_strtoul(options, NULL, 0);
- length = min(strcspn(options, " "), sizeof(device->options));
+ length = min(strcspn(options, " ") + 1,
+ sizeof(device->options));
strlcpy(device->options, options, length);
} else {
device->baud = probe_baud(port);
diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
index 5e3d68917ffe..1456673bcca0 100644
--- a/drivers/tty/serial/Kconfig
+++ b/drivers/tty/serial/Kconfig
@@ -277,7 +277,7 @@ config SERIAL_TEGRA
select SERIAL_CORE
help
Support for the on-chip UARTs on the NVIDIA Tegra series SOCs
- providing /dev/ttyHS0, 1, 2, 3 and 4 (note, some machines may not
+ providing /dev/ttyTHS0, 1, 2, 3 and 4 (note, some machines may not
provide all of these ports, depending on how the serial port
are enabled). This driver uses the APB DMA to achieve higher baudrate
and better performance.
diff --git a/drivers/tty/synclinkmp.c b/drivers/tty/synclinkmp.c
index ff171384ea52..dc6e96996ead 100644
--- a/drivers/tty/synclinkmp.c
+++ b/drivers/tty/synclinkmp.c
@@ -3478,7 +3478,7 @@ static int alloc_buf_list(SLMP_INFO *info)
for ( i = 0; i < info->rx_buf_count; i++ ) {
/* calculate and store physical address of this buffer entry */
info->rx_buf_list_ex[i].phys_entry =
- info->buffer_list_phys + (i * sizeof(SCABUFSIZE));
+ info->buffer_list_phys + (i * SCABUFSIZE);
/* calculate and store physical address of */
/* next entry in cirular list of entries */
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 4191db32f12c..4a8a1d68002c 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -668,6 +668,15 @@ resubmit:
static inline int
hub_clear_tt_buffer (struct usb_device *hdev, u16 devinfo, u16 tt)
{
+ /* Need to clear both directions for control ep */
+ if (((devinfo >> 11) & USB_ENDPOINT_XFERTYPE_MASK) ==
+ USB_ENDPOINT_XFER_CONTROL) {
+ int status = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
+ HUB_CLEAR_TT_BUFFER, USB_RT_PORT,
+ devinfo ^ 0x8000, tt, NULL, 0, 1000);
+ if (status)
+ return status;
+ }
return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
HUB_CLEAR_TT_BUFFER, USB_RT_PORT, devinfo,
tt, NULL, 0, 1000);
@@ -2848,6 +2857,15 @@ static int usb_disable_function_remotewakeup(struct usb_device *udev)
USB_CTRL_SET_TIMEOUT);
}
+/* Count of wakeup-enabled devices at or below udev */
+static unsigned wakeup_enabled_descendants(struct usb_device *udev)
+{
+ struct usb_hub *hub = usb_hub_to_struct_hub(udev);
+
+ return udev->do_remote_wakeup +
+ (hub ? hub->wakeup_enabled_descendants : 0);
+}
+
/*
* usb_port_suspend - suspend a usb device's upstream port
* @udev: device that's no longer in active use, not a root hub
@@ -2888,8 +2906,8 @@ static int usb_disable_function_remotewakeup(struct usb_device *udev)
* Linux (2.6) currently has NO mechanisms to initiate that: no khubd
* timer, no SRP, no requests through sysfs.
*
- * If Runtime PM isn't enabled or used, non-SuperSpeed devices really get
- * suspended only when their bus goes into global suspend (i.e., the root
+ * If Runtime PM isn't enabled or used, non-SuperSpeed devices may not get
+ * suspended until their bus goes into global suspend (i.e., the root
* hub is suspended). Nevertheless, we change @udev->state to
* USB_STATE_SUSPENDED as this is the device's "logical" state. The actual
* upstream port setting is stored in @udev->port_is_suspended.
@@ -2960,15 +2978,21 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
/* see 7.1.7.6 */
if (hub_is_superspeed(hub->hdev))
status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U3);
- else if (PMSG_IS_AUTO(msg))
- status = set_port_feature(hub->hdev, port1,
- USB_PORT_FEAT_SUSPEND);
+
/*
* For system suspend, we do not need to enable the suspend feature
* on individual USB-2 ports. The devices will automatically go
* into suspend a few ms after the root hub stops sending packets.
* The USB 2.0 spec calls this "global suspend".
+ *
+ * However, many USB hubs have a bug: They don't relay wakeup requests
+ * from a downstream port if the port's suspend feature isn't on.
+ * Therefore we will turn on the suspend feature if udev or any of its
+ * descendants is enabled for remote wakeup.
*/
+ else if (PMSG_IS_AUTO(msg) || wakeup_enabled_descendants(udev) > 0)
+ status = set_port_feature(hub->hdev, port1,
+ USB_PORT_FEAT_SUSPEND);
else {
really_suspend = false;
status = 0;
@@ -3003,15 +3027,16 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
if (!PMSG_IS_AUTO(msg))
status = 0;
} else {
- /* device has up to 10 msec to fully suspend */
dev_dbg(&udev->dev, "usb %ssuspend, wakeup %d\n",
(PMSG_IS_AUTO(msg) ? "auto-" : ""),
udev->do_remote_wakeup);
- usb_set_device_state(udev, USB_STATE_SUSPENDED);
if (really_suspend) {
udev->port_is_suspended = 1;
+
+ /* device has up to 10 msec to fully suspend */
msleep(10);
}
+ usb_set_device_state(udev, USB_STATE_SUSPENDED);
}
/*
@@ -3293,7 +3318,11 @@ static int hub_suspend(struct usb_interface *intf, pm_message_t msg)
unsigned port1;
int status;
- /* Warn if children aren't already suspended */
+ /*
+ * Warn if children aren't already suspended.
+ * Also, add up the number of wakeup-enabled descendants.
+ */
+ hub->wakeup_enabled_descendants = 0;
for (port1 = 1; port1 <= hdev->maxchild; port1++) {
struct usb_device *udev;
@@ -3303,6 +3332,9 @@ static int hub_suspend(struct usb_interface *intf, pm_message_t msg)
if (PMSG_IS_AUTO(msg))
return -EBUSY;
}
+ if (udev)
+ hub->wakeup_enabled_descendants +=
+ wakeup_enabled_descendants(udev);
}
if (hdev->do_remote_wakeup && hub->quirk_check_port_auto_suspend) {
diff --git a/drivers/usb/core/hub.h b/drivers/usb/core/hub.h
index 6508e02b3dac..4e4790dea343 100644
--- a/drivers/usb/core/hub.h
+++ b/drivers/usb/core/hub.h
@@ -59,6 +59,9 @@ struct usb_hub {
struct usb_tt tt; /* Transaction Translator */
unsigned mA_per_port; /* current for each child */
+#ifdef CONFIG_PM
+ unsigned wakeup_enabled_descendants;
+#endif
unsigned limited_power:1;
unsigned quiescing:1;
diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig
index 757aa18027d0..2378958ea63e 100644
--- a/drivers/usb/dwc3/Kconfig
+++ b/drivers/usb/dwc3/Kconfig
@@ -1,6 +1,6 @@
config USB_DWC3
tristate "DesignWare USB3 DRD Core Support"
- depends on (USB || USB_GADGET) && GENERIC_HARDIRQS
+ depends on (USB || USB_GADGET) && GENERIC_HARDIRQS && HAS_DMA
select USB_XHCI_PLATFORM if USB_SUPPORT && USB_XHCI_HCD
help
Say Y or M here if your system has a Dual Role SuperSpeed
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index c35d49d39b76..358375e0b291 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -450,7 +450,7 @@ static int dwc3_probe(struct platform_device *pdev)
}
if (IS_ERR(dwc->usb3_phy)) {
- ret = PTR_ERR(dwc->usb2_phy);
+ ret = PTR_ERR(dwc->usb3_phy);
/*
* if -ENXIO is returned, it means PHY layer wasn't
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index b69d322e3cab..27dad993b007 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -759,8 +759,8 @@ struct dwc3 {
struct dwc3_event_type {
u32 is_devspec:1;
- u32 type:6;
- u32 reserved8_31:25;
+ u32 type:7;
+ u32 reserved8_31:24;
} __packed;
#define DWC3_DEPEVT_XFERCOMPLETE 0x01
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index b5e5b35df49c..f77083fedc68 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1584,6 +1584,7 @@ err1:
__dwc3_gadget_ep_disable(dwc->eps[0]);
err0:
+ dwc->gadget_driver = NULL;
spin_unlock_irqrestore(&dwc->lock, flags);
return ret;
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index 62f6802f6e0f..8e9368330b10 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -193,6 +193,7 @@ config USB_FUSB300
Faraday usb device controller FUSB300 driver
config USB_FOTG210_UDC
+ depends on HAS_DMA
tristate "Faraday FOTG210 USB Peripheral Controller"
help
Faraday USB2.0 OTG controller which can be configured as
@@ -328,13 +329,14 @@ config USB_S3C_HSUDC
config USB_MV_UDC
tristate "Marvell USB2.0 Device Controller"
- depends on GENERIC_HARDIRQS
+ depends on GENERIC_HARDIRQS && HAS_DMA
help
Marvell Socs (including PXA and MMP series) include a high speed
USB2.0 OTG controller, which can be configured as high speed or
full speed USB peripheral.
config USB_MV_U3D
+ depends on HAS_DMA
tristate "MARVELL PXA2128 USB 3.0 controller"
help
MARVELL PXA2128 Processor series include a super speed USB3.0 device
@@ -639,6 +641,7 @@ config USB_CONFIGFS_RNDIS
depends on USB_CONFIGFS
depends on NET
select USB_U_ETHER
+ select USB_U_RNDIS
select USB_F_RNDIS
help
Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c
index 073b938f9135..d9a6add0c852 100644
--- a/drivers/usb/gadget/at91_udc.c
+++ b/drivers/usb/gadget/at91_udc.c
@@ -870,8 +870,8 @@ static void clk_on(struct at91_udc *udc)
if (udc->clocked)
return;
udc->clocked = 1;
- clk_enable(udc->iclk);
- clk_enable(udc->fclk);
+ clk_prepare_enable(udc->iclk);
+ clk_prepare_enable(udc->fclk);
}
static void clk_off(struct at91_udc *udc)
@@ -880,8 +880,8 @@ static void clk_off(struct at91_udc *udc)
return;
udc->clocked = 0;
udc->gadget.speed = USB_SPEED_UNKNOWN;
- clk_disable(udc->fclk);
- clk_disable(udc->iclk);
+ clk_disable_unprepare(udc->fclk);
+ clk_disable_unprepare(udc->iclk);
}
/*
@@ -1725,7 +1725,7 @@ static int at91udc_probe(struct platform_device *pdev)
/* init software state */
udc = &controller;
udc->gadget.dev.parent = dev;
- if (pdev->dev.of_node)
+ if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node)
at91udc_of_init(udc, pdev->dev.of_node);
else
memcpy(&udc->board, dev->platform_data,
@@ -1782,12 +1782,14 @@ static int at91udc_probe(struct platform_device *pdev)
}
/* don't do anything until we have both gadget driver and VBUS */
- clk_enable(udc->iclk);
+ retval = clk_prepare_enable(udc->iclk);
+ if (retval)
+ goto fail1;
at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff);
/* Clear all pending interrupts - UDP may be used by bootloader. */
at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff);
- clk_disable(udc->iclk);
+ clk_disable_unprepare(udc->iclk);
/* request UDC and maybe VBUS irqs */
udc->udp_irq = platform_get_irq(pdev, 0);
diff --git a/drivers/usb/gadget/f_ecm.c b/drivers/usb/gadget/f_ecm.c
index 5d3561ea1c15..edab45da3741 100644
--- a/drivers/usb/gadget/f_ecm.c
+++ b/drivers/usb/gadget/f_ecm.c
@@ -959,8 +959,11 @@ static struct usb_function_instance *ecm_alloc_inst(void)
mutex_init(&opts->lock);
opts->func_inst.free_func_inst = ecm_free_inst;
opts->net = gether_setup_default();
- if (IS_ERR(opts->net))
- return ERR_PTR(PTR_ERR(opts->net));
+ if (IS_ERR(opts->net)) {
+ struct net_device *net = opts->net;
+ kfree(opts);
+ return ERR_CAST(net);
+ }
config_group_init_type_name(&opts->func_inst.group, "", &ecm_func_type);
diff --git a/drivers/usb/gadget/f_eem.c b/drivers/usb/gadget/f_eem.c
index 90ee8022e8d8..d00392d879db 100644
--- a/drivers/usb/gadget/f_eem.c
+++ b/drivers/usb/gadget/f_eem.c
@@ -593,8 +593,11 @@ static struct usb_function_instance *eem_alloc_inst(void)
mutex_init(&opts->lock);
opts->func_inst.free_func_inst = eem_free_inst;
opts->net = gether_setup_default();
- if (IS_ERR(opts->net))
- return ERR_CAST(opts->net);
+ if (IS_ERR(opts->net)) {
+ struct net_device *net = opts->net;
+ kfree(opts);
+ return ERR_CAST(net);
+ }
config_group_init_type_name(&opts->func_inst.group, "", &eem_func_type);
diff --git a/drivers/usb/gadget/f_ncm.c b/drivers/usb/gadget/f_ncm.c
index 952177f7eb9b..1c28fe13328a 100644
--- a/drivers/usb/gadget/f_ncm.c
+++ b/drivers/usb/gadget/f_ncm.c
@@ -1350,8 +1350,11 @@ static struct usb_function_instance *ncm_alloc_inst(void)
mutex_init(&opts->lock);
opts->func_inst.free_func_inst = ncm_free_inst;
opts->net = gether_setup_default();
- if (IS_ERR(opts->net))
- return ERR_PTR(PTR_ERR(opts->net));
+ if (IS_ERR(opts->net)) {
+ struct net_device *net = opts->net;
+ kfree(opts);
+ return ERR_CAST(net);
+ }
config_group_init_type_name(&opts->func_inst.group, "", &ncm_func_type);
diff --git a/drivers/usb/gadget/f_phonet.c b/drivers/usb/gadget/f_phonet.c
index 7944fb0efe3b..1bf26e9f38cd 100644
--- a/drivers/usb/gadget/f_phonet.c
+++ b/drivers/usb/gadget/f_phonet.c
@@ -656,8 +656,11 @@ static struct usb_function_instance *phonet_alloc_inst(void)
opts->func_inst.free_func_inst = phonet_free_inst;
opts->net = gphonet_setup_default();
- if (IS_ERR(opts->net))
- return ERR_PTR(PTR_ERR(opts->net));
+ if (IS_ERR(opts->net)) {
+ struct net_device *net = opts->net;
+ kfree(opts);
+ return ERR_CAST(net);
+ }
config_group_init_type_name(&opts->func_inst.group, "",
&phonet_func_type);
diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c
index 191df35ae69d..717ed7f95639 100644
--- a/drivers/usb/gadget/f_rndis.c
+++ b/drivers/usb/gadget/f_rndis.c
@@ -963,8 +963,11 @@ static struct usb_function_instance *rndis_alloc_inst(void)
mutex_init(&opts->lock);
opts->func_inst.free_func_inst = rndis_free_inst;
opts->net = gether_setup_default();
- if (IS_ERR(opts->net))
- return ERR_CAST(opts->net);
+ if (IS_ERR(opts->net)) {
+ struct net_device *net = opts->net;
+ kfree(opts);
+ return ERR_CAST(net);
+ }
config_group_init_type_name(&opts->func_inst.group, "",
&rndis_func_type);
diff --git a/drivers/usb/gadget/f_subset.c b/drivers/usb/gadget/f_subset.c
index 5601e1d96c4f..7c8674fa7e80 100644
--- a/drivers/usb/gadget/f_subset.c
+++ b/drivers/usb/gadget/f_subset.c
@@ -505,8 +505,11 @@ static struct usb_function_instance *geth_alloc_inst(void)
mutex_init(&opts->lock);
opts->func_inst.free_func_inst = geth_free_inst;
opts->net = gether_setup_default();
- if (IS_ERR(opts->net))
- return ERR_CAST(opts->net);
+ if (IS_ERR(opts->net)) {
+ struct net_device *net = opts->net;
+ kfree(opts);
+ return ERR_CAST(net);
+ }
config_group_init_type_name(&opts->func_inst.group, "",
&gether_func_type);
diff --git a/drivers/usb/gadget/fotg210-udc.c b/drivers/usb/gadget/fotg210-udc.c
index cce5535b1dc6..10cd18ddd0d4 100644
--- a/drivers/usb/gadget/fotg210-udc.c
+++ b/drivers/usb/gadget/fotg210-udc.c
@@ -1074,7 +1074,7 @@ static struct usb_gadget_ops fotg210_gadget_ops = {
.udc_stop = fotg210_udc_stop,
};
-static int __exit fotg210_udc_remove(struct platform_device *pdev)
+static int fotg210_udc_remove(struct platform_device *pdev)
{
struct fotg210_udc *fotg210 = dev_get_drvdata(&pdev->dev);
@@ -1088,7 +1088,7 @@ static int __exit fotg210_udc_remove(struct platform_device *pdev)
return 0;
}
-static int __init fotg210_udc_probe(struct platform_device *pdev)
+static int fotg210_udc_probe(struct platform_device *pdev)
{
struct resource *res, *ires;
struct fotg210_udc *fotg210 = NULL;
diff --git a/drivers/usb/gadget/mv_u3d_core.c b/drivers/usb/gadget/mv_u3d_core.c
index 07fdb3eaf48a..ec6a2d290398 100644
--- a/drivers/usb/gadget/mv_u3d_core.c
+++ b/drivers/usb/gadget/mv_u3d_core.c
@@ -1776,7 +1776,7 @@ static int mv_u3d_remove(struct platform_device *dev)
kfree(u3d->eps);
if (u3d->irq)
- free_irq(u3d->irq, &dev->dev);
+ free_irq(u3d->irq, u3d);
if (u3d->cap_regs)
iounmap(u3d->cap_regs);
@@ -1974,7 +1974,7 @@ static int mv_u3d_probe(struct platform_device *dev)
return 0;
err_unregister:
- free_irq(u3d->irq, &dev->dev);
+ free_irq(u3d->irq, u3d);
err_request_irq:
err_get_irq:
kfree(u3d->status_req);
diff --git a/drivers/usb/gadget/udc-core.c b/drivers/usb/gadget/udc-core.c
index ffd8fa541101..c28ac9872030 100644
--- a/drivers/usb/gadget/udc-core.c
+++ b/drivers/usb/gadget/udc-core.c
@@ -50,6 +50,8 @@ static DEFINE_MUTEX(udc_lock);
/* ------------------------------------------------------------------------- */
+#ifdef CONFIG_HAS_DMA
+
int usb_gadget_map_request(struct usb_gadget *gadget,
struct usb_request *req, int is_in)
{
@@ -99,6 +101,8 @@ void usb_gadget_unmap_request(struct usb_gadget *gadget,
}
EXPORT_SYMBOL_GPL(usb_gadget_unmap_request);
+#endif /* CONFIG_HAS_DMA */
+
/* ------------------------------------------------------------------------- */
void usb_gadget_set_state(struct usb_gadget *gadget,
@@ -194,9 +198,11 @@ int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget,
dev_set_name(&gadget->dev, "gadget");
gadget->dev.parent = parent;
+#ifdef CONFIG_HAS_DMA
dma_set_coherent_mask(&gadget->dev, parent->coherent_dma_mask);
gadget->dev.dma_parms = parent->dma_parms;
gadget->dev.dma_mask = parent->dma_mask;
+#endif
if (release)
gadget->dev.release = release;
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
index 2b702772d04d..6dce37555c4f 100644
--- a/drivers/usb/host/ehci-hub.c
+++ b/drivers/usb/host/ehci-hub.c
@@ -874,6 +874,7 @@ static int ehci_hub_control (
ehci->reset_done[wIndex] = jiffies
+ msecs_to_jiffies(20);
usb_hcd_start_port_resume(&hcd->self, wIndex);
+ set_bit(wIndex, &ehci->resuming_ports);
/* check the port again */
mod_timer(&ehci_to_hcd(ehci)->rh_timer,
ehci->reset_done[wIndex]);
diff --git a/drivers/usb/host/pci-quirks.h b/drivers/usb/host/pci-quirks.h
index 4b8a2092432f..978c849f9c9a 100644
--- a/drivers/usb/host/pci-quirks.h
+++ b/drivers/usb/host/pci-quirks.h
@@ -13,6 +13,7 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev);
void usb_disable_xhci_ports(struct pci_dev *xhci_pdev);
void sb800_prefetch(struct device *dev, int on);
#else
+struct pci_dev;
static inline void usb_amd_quirk_pll_disable(void) {}
static inline void usb_amd_quirk_pll_enable(void) {}
static inline void usb_amd_dev_put(void) {}
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index cc24e39b97d5..f00cb203faea 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -93,7 +93,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
}
if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) {
- xhci->quirks |= XHCI_SPURIOUS_SUCCESS;
xhci->quirks |= XHCI_EP_LIMIT_QUIRK;
xhci->limit_active_eps = 64;
xhci->quirks |= XHCI_SW_BW_CHECKING;
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 1e57eafa6910..5b08cd85f8e7 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -434,7 +434,7 @@ static void ring_doorbell_for_active_rings(struct xhci_hcd *xhci,
/* A ring has pending URBs if its TD list is not empty */
if (!(ep->ep_state & EP_HAS_STREAMS)) {
- if (!(list_empty(&ep->ring->td_list)))
+ if (ep->ring && !(list_empty(&ep->ring->td_list)))
xhci_ring_ep_doorbell(xhci, slot_id, ep_index, 0);
return;
}
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 2c49f00260ca..41eb4fc33453 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -329,7 +329,7 @@ static void xhci_cleanup_msix(struct xhci_hcd *xhci)
return;
}
-static void xhci_msix_sync_irqs(struct xhci_hcd *xhci)
+static void __maybe_unused xhci_msix_sync_irqs(struct xhci_hcd *xhci)
{
int i;
@@ -1181,9 +1181,6 @@ static int xhci_check_args(struct usb_hcd *hcd, struct usb_device *udev,
}
xhci = hcd_to_xhci(hcd);
- if (xhci->xhc_state & XHCI_STATE_HALTED)
- return -ENODEV;
-
if (check_virt_dev) {
if (!udev->slot_id || !xhci->devs[udev->slot_id]) {
printk(KERN_DEBUG "xHCI %s called with unaddressed "
@@ -1199,6 +1196,9 @@ static int xhci_check_args(struct usb_hcd *hcd, struct usb_device *udev,
}
}
+ if (xhci->xhc_state & XHCI_STATE_HALTED)
+ return -ENODEV;
+
return 1;
}
@@ -3898,7 +3898,7 @@ int xhci_find_raw_port_number(struct usb_hcd *hcd, int port1)
* Issue an Evaluate Context command to change the Maximum Exit Latency in the
* slot context. If that succeeds, store the new MEL in the xhci_virt_device.
*/
-static int xhci_change_max_exit_latency(struct xhci_hcd *xhci,
+static int __maybe_unused xhci_change_max_exit_latency(struct xhci_hcd *xhci,
struct usb_device *udev, u16 max_exit_latency)
{
struct xhci_virt_device *virt_dev;
@@ -4892,6 +4892,13 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
get_quirks(dev, xhci);
+ /* In xhci controllers which follow xhci 1.0 spec gives a spurious
+ * success event after a short transfer. This quirk will ignore such
+ * spurious event.
+ */
+ if (xhci->hci_version > 0x96)
+ xhci->quirks |= XHCI_SPURIOUS_SUCCESS;
+
/* Make sure the HC is halted. */
retval = xhci_halt(xhci);
if (retval)
diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c
index c21386ec5d35..de98906f786d 100644
--- a/drivers/usb/misc/sisusbvga/sisusb.c
+++ b/drivers/usb/misc/sisusbvga/sisusb.c
@@ -3247,6 +3247,7 @@ static const struct usb_device_id sisusb_table[] = {
{ USB_DEVICE(0x0711, 0x0903) },
{ USB_DEVICE(0x0711, 0x0918) },
{ USB_DEVICE(0x0711, 0x0920) },
+ { USB_DEVICE(0x0711, 0x0950) },
{ USB_DEVICE(0x182d, 0x021c) },
{ USB_DEVICE(0x182d, 0x0269) },
{ }
diff --git a/drivers/usb/phy/phy-omap-usb3.c b/drivers/usb/phy/phy-omap-usb3.c
index efe6e1464f45..a2fb30bbb971 100644
--- a/drivers/usb/phy/phy-omap-usb3.c
+++ b/drivers/usb/phy/phy-omap-usb3.c
@@ -71,9 +71,9 @@ static struct usb_dpll_params omap_usb3_dpll_params[NUM_SYS_CLKS] = {
{1250, 5, 4, 20, 0}, /* 12 MHz */
{3125, 20, 4, 20, 0}, /* 16.8 MHz */
{1172, 8, 4, 20, 65537}, /* 19.2 MHz */
+ {1000, 7, 4, 10, 0}, /* 20 MHz */
{1250, 12, 4, 20, 0}, /* 26 MHz */
{3125, 47, 4, 20, 92843}, /* 38.4 MHz */
- {1000, 7, 4, 10, 0}, /* 20 MHz */
};
diff --git a/drivers/usb/phy/phy-samsung-usb2.c b/drivers/usb/phy/phy-samsung-usb2.c
index 1011c16ade7e..758b86d0fcb3 100644
--- a/drivers/usb/phy/phy-samsung-usb2.c
+++ b/drivers/usb/phy/phy-samsung-usb2.c
@@ -388,7 +388,7 @@ static int samsung_usb2phy_probe(struct platform_device *pdev)
clk = devm_clk_get(dev, "otg");
if (IS_ERR(clk)) {
- dev_err(dev, "Failed to get otg clock\n");
+ dev_err(dev, "Failed to get usbhost/otg clock\n");
return PTR_ERR(clk);
}
diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c
index ed4949faa70d..805940c37353 100644
--- a/drivers/usb/renesas_usbhs/mod_gadget.c
+++ b/drivers/usb/renesas_usbhs/mod_gadget.c
@@ -855,10 +855,6 @@ static int usbhsg_gadget_stop(struct usb_gadget *gadget,
struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
- if (!driver ||
- !driver->unbind)
- return -EINVAL;
-
usbhsg_try_stop(priv, USBHSG_STATUS_REGISTERD);
gpriv->driver = NULL;
diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
index d6ef2f8da37d..0eae4ba3760e 100644
--- a/drivers/usb/serial/cp210x.c
+++ b/drivers/usb/serial/cp210x.c
@@ -53,6 +53,7 @@ static const struct usb_device_id id_table[] = {
{ USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
{ USB_DEVICE(0x0489, 0xE003) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
{ USB_DEVICE(0x0745, 0x1000) }, /* CipherLab USB CCD Barcode Scanner 1000 */
+ { USB_DEVICE(0x0846, 0x1100) }, /* NetGear Managed Switch M4100 series, M5300 series, M7100 series */
{ USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */
{ USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */
{ USB_DEVICE(0x0BED, 0x1100) }, /* MEI (TM) Cashflow-SC Bill/Voucher Acceptor */
@@ -118,6 +119,8 @@ static const struct usb_device_id id_table[] = {
{ USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */
{ USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */
{ USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */
+ { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */
+ { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */
{ USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
{ USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
{ USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
@@ -148,6 +151,7 @@ static const struct usb_device_id id_table[] = {
{ USB_DEVICE(0x17F4, 0xAAAA) }, /* Wavesense Jazz blood glucose meter */
{ USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */
{ USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
+ { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */
{ USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */
{ USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */
{ USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */
diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c
index 0a818b238508..603fb70dde80 100644
--- a/drivers/usb/serial/mos7840.c
+++ b/drivers/usb/serial/mos7840.c
@@ -905,20 +905,20 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port)
status = mos7840_get_reg_sync(port, mos7840_port->SpRegOffset, &Data);
if (status < 0) {
dev_dbg(&port->dev, "Reading Spreg failed\n");
- return -1;
+ goto err;
}
Data |= 0x80;
status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data);
if (status < 0) {
dev_dbg(&port->dev, "writing Spreg failed\n");
- return -1;
+ goto err;
}
Data &= ~0x80;
status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data);
if (status < 0) {
dev_dbg(&port->dev, "writing Spreg failed\n");
- return -1;
+ goto err;
}
/* End of block to be checked */
@@ -927,7 +927,7 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port)
&Data);
if (status < 0) {
dev_dbg(&port->dev, "Reading Controlreg failed\n");
- return -1;
+ goto err;
}
Data |= 0x08; /* Driver done bit */
Data |= 0x20; /* rx_disable */
@@ -935,7 +935,7 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port)
mos7840_port->ControlRegOffset, Data);
if (status < 0) {
dev_dbg(&port->dev, "writing Controlreg failed\n");
- return -1;
+ goto err;
}
/* do register settings here */
/* Set all regs to the device default values. */
@@ -946,21 +946,21 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port)
status = mos7840_set_uart_reg(port, INTERRUPT_ENABLE_REGISTER, Data);
if (status < 0) {
dev_dbg(&port->dev, "disabling interrupts failed\n");
- return -1;
+ goto err;
}
/* Set FIFO_CONTROL_REGISTER to the default value */
Data = 0x00;
status = mos7840_set_uart_reg(port, FIFO_CONTROL_REGISTER, Data);
if (status < 0) {
dev_dbg(&port->dev, "Writing FIFO_CONTROL_REGISTER failed\n");
- return -1;
+ goto err;
}
Data = 0xcf;
status = mos7840_set_uart_reg(port, FIFO_CONTROL_REGISTER, Data);
if (status < 0) {
dev_dbg(&port->dev, "Writing FIFO_CONTROL_REGISTER failed\n");
- return -1;
+ goto err;
}
Data = 0x03;
@@ -1103,6 +1103,15 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port)
/* mos7840_change_port_settings(mos7840_port,old_termios); */
return 0;
+err:
+ for (j = 0; j < NUM_URBS; ++j) {
+ urb = mos7840_port->write_urb_pool[j];
+ if (!urb)
+ continue;
+ kfree(urb->transfer_buffer);
+ usb_free_urb(urb);
+ }
+ return status;
}
/*****************************************************************************
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index 5dd857de05b0..1cf6f125f5f0 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -341,17 +341,12 @@ static void option_instat_callback(struct urb *urb);
#define OLIVETTI_VENDOR_ID 0x0b3c
#define OLIVETTI_PRODUCT_OLICARD100 0xc000
#define OLIVETTI_PRODUCT_OLICARD145 0xc003
+#define OLIVETTI_PRODUCT_OLICARD200 0xc005
/* Celot products */
#define CELOT_VENDOR_ID 0x211f
#define CELOT_PRODUCT_CT680M 0x6801
-/* ONDA Communication vendor id */
-#define ONDA_VENDOR_ID 0x1ee8
-
-/* ONDA MT825UP HSDPA 14.2 modem */
-#define ONDA_MT825UP 0x000b
-
/* Samsung products */
#define SAMSUNG_VENDOR_ID 0x04e8
#define SAMSUNG_PRODUCT_GT_B3730 0x6889
@@ -444,7 +439,8 @@ static void option_instat_callback(struct urb *urb);
/* Hyundai Petatel Inc. products */
#define PETATEL_VENDOR_ID 0x1ff4
-#define PETATEL_PRODUCT_NP10T 0x600e
+#define PETATEL_PRODUCT_NP10T_600A 0x600a
+#define PETATEL_PRODUCT_NP10T_600E 0x600e
/* TP-LINK Incorporated products */
#define TPLINK_VENDOR_ID 0x2357
@@ -782,6 +778,7 @@ static const struct usb_device_id option_ids[] = {
{ USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC650) },
{ USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
+ { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) },
@@ -817,7 +814,8 @@ static const struct usb_device_id option_ids[] = {
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0017, 0xff, 0xff, 0xff),
.driver_info = (kernel_ulong_t)&net_intf3_blacklist },
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0018, 0xff, 0xff, 0xff) },
- { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff) },
+ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff),
+ .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0020, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0021, 0xff, 0xff, 0xff),
.driver_info = (kernel_ulong_t)&net_intf4_blacklist },
@@ -1256,8 +1254,8 @@ static const struct usb_device_id option_ids[] = {
{ USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) },
{ USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD145) },
+ { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200) },
{ USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */
- { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */
{ USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) },
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM610) },
@@ -1329,9 +1327,12 @@ static const struct usb_device_id option_ids[] = {
{ USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x02, 0x01) },
{ USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) },
{ USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) },
- { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T) },
+ { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600A) },
+ { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600E) },
{ USB_DEVICE(TPLINK_VENDOR_ID, TPLINK_PRODUCT_MA180),
.driver_info = (kernel_ulong_t)&net_intf4_blacklist },
+ { USB_DEVICE(TPLINK_VENDOR_ID, 0x9000), /* TP-Link MA260 */
+ .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
{ USB_DEVICE(CHANGHONG_VENDOR_ID, CHANGHONG_PRODUCT_CH690) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x02, 0x01) }, /* D-Link DWM-156 (variant) */
{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x00, 0x00) }, /* D-Link DWM-156 (variant) */
@@ -1339,6 +1340,8 @@ static const struct usb_device_id option_ids[] = {
{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d02, 0xff, 0x00, 0x00) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x02, 0x01) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) },
+ { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */
+ { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */
{ } /* Terminating entry */
};
MODULE_DEVICE_TABLE(usb, option_ids);
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 7182bb774b79..375b5a400b6f 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -371,7 +371,7 @@ static int ti_startup(struct usb_serial *serial)
usb_set_serial_data(serial, tdev);
/* determine device type */
- if (usb_match_id(serial->interface, ti_id_table_3410))
+ if (serial->type == &ti_1port_device)
tdev->td_is_3410 = 1;
dev_dbg(&dev->dev, "%s - device type is %s\n", __func__,
tdev->td_is_3410 ? "3410" : "5052");
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
index 1799335288bd..c015f2c16729 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -665,6 +665,13 @@ UNUSUAL_DEV( 0x054c, 0x016a, 0x0000, 0x9999,
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
US_FL_FIX_INQUIRY ),
+/* Submitted by Ren Bigcren <bigcren.ren@sonymobile.com> */
+UNUSUAL_DEV( 0x054c, 0x02a5, 0x0100, 0x0100,
+ "Sony Corp.",
+ "MicroVault Flash Drive",
+ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+ US_FL_NO_READ_CAPACITY_16 ),
+
/* floppy reports multiple luns */
UNUSUAL_DEV( 0x055d, 0x2020, 0x0000, 0x0210,
"SAMSUNG",
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index 027be91db139..969a85960e9f 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -15,7 +15,6 @@
#include <linux/moduleparam.h>
#include <linux/mutex.h>
#include <linux/workqueue.h>
-#include <linux/rcupdate.h>
#include <linux/file.h>
#include <linux/slab.h>
@@ -346,12 +345,11 @@ static void handle_tx(struct vhost_net *net)
struct vhost_net_ubuf_ref *uninitialized_var(ubufs);
bool zcopy, zcopy_used;
- /* TODO: check that we are running from vhost_worker? */
- sock = rcu_dereference_check(vq->private_data, 1);
+ mutex_lock(&vq->mutex);
+ sock = vq->private_data;
if (!sock)
- return;
+ goto out;
- mutex_lock(&vq->mutex);
vhost_disable_notify(&net->dev, vq);
hdr_size = nvq->vhost_hlen;
@@ -461,7 +459,7 @@ static void handle_tx(struct vhost_net *net)
break;
}
}
-
+out:
mutex_unlock(&vq->mutex);
}
@@ -570,14 +568,14 @@ static void handle_rx(struct vhost_net *net)
s16 headcount;
size_t vhost_hlen, sock_hlen;
size_t vhost_len, sock_len;
- /* TODO: check that we are running from vhost_worker? */
- struct socket *sock = rcu_dereference_check(vq->private_data, 1);
-
- if (!sock)
- return;
+ struct socket *sock;
mutex_lock(&vq->mutex);
+ sock = vq->private_data;
+ if (!sock)
+ goto out;
vhost_disable_notify(&net->dev, vq);
+
vhost_hlen = nvq->vhost_hlen;
sock_hlen = nvq->sock_hlen;
@@ -652,7 +650,7 @@ static void handle_rx(struct vhost_net *net)
break;
}
}
-
+out:
mutex_unlock(&vq->mutex);
}
@@ -750,8 +748,7 @@ static int vhost_net_enable_vq(struct vhost_net *n,
struct vhost_poll *poll = n->poll + (nvq - n->vqs);
struct socket *sock;
- sock = rcu_dereference_protected(vq->private_data,
- lockdep_is_held(&vq->mutex));
+ sock = vq->private_data;
if (!sock)
return 0;
@@ -764,10 +761,9 @@ static struct socket *vhost_net_stop_vq(struct vhost_net *n,
struct socket *sock;
mutex_lock(&vq->mutex);
- sock = rcu_dereference_protected(vq->private_data,
- lockdep_is_held(&vq->mutex));
+ sock = vq->private_data;
vhost_net_disable_vq(n, vq);
- rcu_assign_pointer(vq->private_data, NULL);
+ vq->private_data = NULL;
mutex_unlock(&vq->mutex);
return sock;
}
@@ -923,8 +919,7 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd)
}
/* start polling new socket */
- oldsock = rcu_dereference_protected(vq->private_data,
- lockdep_is_held(&vq->mutex));
+ oldsock = vq->private_data;
if (sock != oldsock) {
ubufs = vhost_net_ubuf_alloc(vq,
sock && vhost_sock_zcopy(sock));
@@ -934,7 +929,7 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd)
}
vhost_net_disable_vq(n, vq);
- rcu_assign_pointer(vq->private_data, sock);
+ vq->private_data = sock;
r = vhost_init_used(vq);
if (r)
goto err_used;
@@ -968,7 +963,7 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd)
return 0;
err_used:
- rcu_assign_pointer(vq->private_data, oldsock);
+ vq->private_data = oldsock;
vhost_net_enable_vq(n, vq);
if (ubufs)
vhost_net_ubuf_put_wait_and_free(ubufs);
diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c
index 06adf31a9248..0c27c7df1b09 100644
--- a/drivers/vhost/scsi.c
+++ b/drivers/vhost/scsi.c
@@ -902,19 +902,15 @@ vhost_scsi_handle_vq(struct vhost_scsi *vs, struct vhost_virtqueue *vq)
int head, ret;
u8 target;
+ mutex_lock(&vq->mutex);
/*
* We can handle the vq only after the endpoint is setup by calling the
* VHOST_SCSI_SET_ENDPOINT ioctl.
- *
- * TODO: Check that we are running from vhost_worker which acts
- * as read-side critical section for vhost kind of RCU.
- * See the comments in struct vhost_virtqueue in drivers/vhost/vhost.h
*/
- vs_tpg = rcu_dereference_check(vq->private_data, 1);
+ vs_tpg = vq->private_data;
if (!vs_tpg)
- return;
+ goto out;
- mutex_lock(&vq->mutex);
vhost_disable_notify(&vs->dev, vq);
for (;;) {
@@ -1064,6 +1060,7 @@ err_free:
vhost_scsi_free_cmd(cmd);
err_cmd:
vhost_scsi_send_bad_target(vs, vq, head, out);
+out:
mutex_unlock(&vq->mutex);
}
@@ -1232,9 +1229,8 @@ vhost_scsi_set_endpoint(struct vhost_scsi *vs,
sizeof(vs->vs_vhost_wwpn));
for (i = 0; i < VHOST_SCSI_MAX_VQ; i++) {
vq = &vs->vqs[i].vq;
- /* Flushing the vhost_work acts as synchronize_rcu */
mutex_lock(&vq->mutex);
- rcu_assign_pointer(vq->private_data, vs_tpg);
+ vq->private_data = vs_tpg;
vhost_init_used(vq);
mutex_unlock(&vq->mutex);
}
@@ -1313,9 +1309,8 @@ vhost_scsi_clear_endpoint(struct vhost_scsi *vs,
if (match) {
for (i = 0; i < VHOST_SCSI_MAX_VQ; i++) {
vq = &vs->vqs[i].vq;
- /* Flushing the vhost_work acts as synchronize_rcu */
mutex_lock(&vq->mutex);
- rcu_assign_pointer(vq->private_data, NULL);
+ vq->private_data = NULL;
mutex_unlock(&vq->mutex);
}
}
diff --git a/drivers/vhost/test.c b/drivers/vhost/test.c
index a73ea217f24d..339eae85859a 100644
--- a/drivers/vhost/test.c
+++ b/drivers/vhost/test.c
@@ -13,7 +13,6 @@
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/workqueue.h>
-#include <linux/rcupdate.h>
#include <linux/file.h>
#include <linux/slab.h>
@@ -200,9 +199,8 @@ static long vhost_test_run(struct vhost_test *n, int test)
priv = test ? n : NULL;
/* start polling new socket */
- oldpriv = rcu_dereference_protected(vq->private_data,
- lockdep_is_held(&vq->mutex));
- rcu_assign_pointer(vq->private_data, priv);
+ oldpriv = vq->private_data;
+ vq->private_data = priv;
r = vhost_init_used(&n->vqs[index]);
diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h
index 42298cd23c73..4465ed5f316d 100644
--- a/drivers/vhost/vhost.h
+++ b/drivers/vhost/vhost.h
@@ -103,14 +103,8 @@ struct vhost_virtqueue {
struct iovec iov[UIO_MAXIOV];
struct iovec *indirect;
struct vring_used_elem *heads;
- /* We use a kind of RCU to access private pointer.
- * All readers access it from worker, which makes it possible to
- * flush the vhost_work instead of synchronize_rcu. Therefore readers do
- * not need to call rcu_read_lock/rcu_read_unlock: the beginning of
- * vhost_work execution acts instead of rcu_read_lock() and the end of
- * vhost_work execution acts instead of rcu_read_unlock().
- * Writers use virtqueue mutex. */
- void __rcu *private_data;
+ /* Protected by virtqueue mutex. */
+ void *private_data;
/* Log write descriptors */
void __user *log_base;
struct vhost_log *log;
diff --git a/drivers/video/backlight/max8925_bl.c b/drivers/video/backlight/max8925_bl.c
index 5ca11b066b7e..886e797f75f9 100644
--- a/drivers/video/backlight/max8925_bl.c
+++ b/drivers/video/backlight/max8925_bl.c
@@ -101,33 +101,37 @@ static const struct backlight_ops max8925_backlight_ops = {
.get_brightness = max8925_backlight_get_brightness,
};
-#ifdef CONFIG_OF
-static int max8925_backlight_dt_init(struct platform_device *pdev,
- struct max8925_backlight_pdata *pdata)
+static void max8925_backlight_dt_init(struct platform_device *pdev)
{
struct device_node *nproot = pdev->dev.parent->of_node, *np;
- int dual_string;
+ struct max8925_backlight_pdata *pdata;
+ u32 val;
+
+ if (!nproot || !IS_ENABLED(CONFIG_OF))
+ return;
+
+ pdata = devm_kzalloc(&pdev->dev,
+ sizeof(struct max8925_backlight_pdata),
+ GFP_KERNEL);
+ if (!pdata)
+ return;
- if (!nproot)
- return -ENODEV;
np = of_find_node_by_name(nproot, "backlight");
if (!np) {
dev_err(&pdev->dev, "failed to find backlight node\n");
- return -ENODEV;
+ return;
}
- of_property_read_u32(np, "maxim,max8925-dual-string", &dual_string);
- pdata->dual_string = dual_string;
- return 0;
+ if (!of_property_read_u32(np, "maxim,max8925-dual-string", &val))
+ pdata->dual_string = val;
+
+ pdev->dev.platform_data = pdata;
}
-#else
-#define max8925_backlight_dt_init(x, y) (-1)
-#endif
static int max8925_backlight_probe(struct platform_device *pdev)
{
struct max8925_chip *chip = dev_get_drvdata(pdev->dev.parent);
- struct max8925_backlight_pdata *pdata = pdev->dev.platform_data;
+ struct max8925_backlight_pdata *pdata;
struct max8925_backlight_data *data;
struct backlight_device *bl;
struct backlight_properties props;
@@ -170,13 +174,10 @@ static int max8925_backlight_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, bl);
value = 0;
- if (pdev->dev.parent->of_node && !pdata) {
- pdata = devm_kzalloc(&pdev->dev,
- sizeof(struct max8925_backlight_pdata),
- GFP_KERNEL);
- max8925_backlight_dt_init(pdev, pdata);
- }
+ if (!pdev->dev.platform_data)
+ max8925_backlight_dt_init(pdev);
+ pdata = pdev->dev.platform_data;
if (pdata) {
if (pdata->lxw_scl)
value |= (1 << 7);
diff --git a/drivers/video/uvesafb.c b/drivers/video/uvesafb.c
index b963ea12d175..7aec6f39fdd5 100644
--- a/drivers/video/uvesafb.c
+++ b/drivers/video/uvesafb.c
@@ -1891,7 +1891,7 @@ static int uvesafb_setup(char *options)
}
}
- if (mtrr != 3 && mtrr != 1)
+ if (mtrr != 3 && mtrr != 0)
pr_warn("uvesafb: mtrr should be set to 0 or 3; %d is unsupported", mtrr);
return 0;
diff --git a/drivers/xen/xen-acpi-cpuhotplug.c b/drivers/xen/xen-acpi-cpuhotplug.c
index 0caf4863be8c..8dae6c13063a 100644
--- a/drivers/xen/xen-acpi-cpuhotplug.c
+++ b/drivers/xen/xen-acpi-cpuhotplug.c
@@ -91,7 +91,7 @@ static int xen_acpi_processor_enable(struct acpi_device *device)
return 0;
}
-static int __cpuinit xen_acpi_processor_add(struct acpi_device *device)
+static int xen_acpi_processor_add(struct acpi_device *device)
{
int ret;
struct acpi_processor *pr;
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 0236de711989..1204c8ef6f32 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -7466,6 +7466,7 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
int err = 0;
int ret;
int level;
+ bool root_dropped = false;
path = btrfs_alloc_path();
if (!path) {
@@ -7523,6 +7524,7 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
while (1) {
btrfs_tree_lock(path->nodes[level]);
btrfs_set_lock_blocking(path->nodes[level]);
+ path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING;
ret = btrfs_lookup_extent_info(trans, root,
path->nodes[level]->start,
@@ -7538,6 +7540,7 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
break;
btrfs_tree_unlock(path->nodes[level]);
+ path->locks[level] = 0;
WARN_ON(wc->refs[level] != 1);
level--;
}
@@ -7552,11 +7555,6 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(root);
while (1) {
- if (!for_reloc && btrfs_need_cleaner_sleep(root)) {
- pr_debug("btrfs: drop snapshot early exit\n");
- err = -EAGAIN;
- goto out_end_trans;
- }
ret = walk_down_tree(trans, root, path, wc);
if (ret < 0) {
@@ -7584,7 +7582,8 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
}
BUG_ON(wc->level == 0);
- if (btrfs_should_end_transaction(trans, tree_root)) {
+ if (btrfs_should_end_transaction(trans, tree_root) ||
+ (!for_reloc && btrfs_need_cleaner_sleep(root))) {
ret = btrfs_update_root(trans, tree_root,
&root->root_key,
root_item);
@@ -7595,6 +7594,12 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
}
btrfs_end_transaction_throttle(trans, tree_root);
+ if (!for_reloc && btrfs_need_cleaner_sleep(root)) {
+ pr_debug("btrfs: drop snapshot early exit\n");
+ err = -EAGAIN;
+ goto out_free;
+ }
+
trans = btrfs_start_transaction(tree_root, 0);
if (IS_ERR(trans)) {
err = PTR_ERR(trans);
@@ -7639,12 +7644,22 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
free_extent_buffer(root->commit_root);
btrfs_put_fs_root(root);
}
+ root_dropped = true;
out_end_trans:
btrfs_end_transaction_throttle(trans, tree_root);
out_free:
kfree(wc);
btrfs_free_path(path);
out:
+ /*
+ * So if we need to stop dropping the snapshot for whatever reason we
+ * need to make sure to add it back to the dead root list so that we
+ * keep trying to do the work later. This also cleans up roots if we
+ * don't have it in the radix (like when we recover after a power fail
+ * or unmount) so we don't leak memory.
+ */
+ if (root_dropped == false)
+ btrfs_add_dead_root(root);
if (err)
btrfs_std_error(root->fs_info, err);
return err;
diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
index 4ba2a69a60ad..64a157becbe5 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
@@ -2495,7 +2495,7 @@ again:
ret = scrub_extent(sctx, extent_logical, extent_len,
extent_physical, extent_dev, flags,
generation, extent_mirror_num,
- extent_physical);
+ extent_logical - logical + physical);
if (ret)
goto out;
diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c
index 998ea111e537..1194b1f0f839 100644
--- a/fs/ext3/namei.c
+++ b/fs/ext3/namei.c
@@ -1780,11 +1780,11 @@ retry:
inode->i_op = &ext3_file_inode_operations;
inode->i_fop = &ext3_file_operations;
ext3_set_aops(inode);
+ d_tmpfile(dentry, inode);
err = ext3_orphan_add(handle, inode);
if (err)
goto err_drop_inode;
mark_inode_dirty(inode);
- d_tmpfile(dentry, inode);
unlock_new_inode(inode);
}
ext3_journal_stop(handle);
diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
index 58339393fa6e..ddd715e42a5c 100644
--- a/fs/ext4/balloc.c
+++ b/fs/ext4/balloc.c
@@ -38,8 +38,8 @@ ext4_group_t ext4_get_group_number(struct super_block *sb,
ext4_group_t group;
if (test_opt2(sb, STD_GROUP_SIZE))
- group = (le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block) +
- block) >>
+ group = (block -
+ le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block)) >>
(EXT4_BLOCK_SIZE_BITS(sb) + EXT4_CLUSTER_BITS(sb) + 3);
else
ext4_get_group_no_and_offset(sb, block, &group, NULL);
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index 7097b0f680e6..a61873808f76 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -2835,6 +2835,9 @@ again:
err = -EIO;
break;
}
+ /* Yield here to deal with large extent trees.
+ * Should be a no-op if we did IO above. */
+ cond_resched();
if (WARN_ON(i + 1 > depth)) {
err = -EIO;
break;
@@ -4261,8 +4264,8 @@ got_allocated_blocks:
/* not a good idea to call discard here directly,
* but otherwise we'd need to call it every free() */
ext4_discard_preallocations(inode);
- ext4_free_blocks(handle, inode, NULL, ext4_ext_pblock(&newex),
- ext4_ext_get_actual_len(&newex), fb_flags);
+ ext4_free_blocks(handle, inode, NULL, newblock,
+ EXT4_C2B(sbi, allocated_clusters), fb_flags);
goto out2;
}
@@ -4382,8 +4385,9 @@ out2:
}
out3:
- trace_ext4_ext_map_blocks_exit(inode, flags, map, err ? err : allocated);
-
+ trace_ext4_ext_map_blocks_exit(inode, flags, map,
+ err ? err : allocated);
+ ext4_es_lru_add(inode);
return err ? err : allocated;
}
@@ -4405,9 +4409,20 @@ void ext4_ext_truncate(handle_t *handle, struct inode *inode)
last_block = (inode->i_size + sb->s_blocksize - 1)
>> EXT4_BLOCK_SIZE_BITS(sb);
+retry:
err = ext4_es_remove_extent(inode, last_block,
EXT_MAX_BLOCKS - last_block);
+ if (err == ENOMEM) {
+ cond_resched();
+ congestion_wait(BLK_RW_ASYNC, HZ/50);
+ goto retry;
+ }
+ if (err) {
+ ext4_std_error(inode->i_sb, err);
+ return;
+ }
err = ext4_ext_remove_space(inode, last_block, EXT_MAX_BLOCKS - 1);
+ ext4_std_error(inode->i_sb, err);
}
static void ext4_falloc_update_inode(struct inode *inode,
diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c
index ee018d5f397e..91cb110da1b4 100644
--- a/fs/ext4/extents_status.c
+++ b/fs/ext4/extents_status.c
@@ -148,6 +148,8 @@ static int __es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
ext4_lblk_t end);
static int __es_try_to_reclaim_extents(struct ext4_inode_info *ei,
int nr_to_scan);
+static int __ext4_es_shrink(struct ext4_sb_info *sbi, int nr_to_scan,
+ struct ext4_inode_info *locked_ei);
int __init ext4_init_es(void)
{
@@ -439,7 +441,7 @@ static void ext4_es_insert_extent_ext_check(struct inode *inode,
*/
if (!ext4_es_is_written(es) && !ext4_es_is_unwritten(es)) {
if (in_range(es->es_lblk, ee_block, ee_len)) {
- pr_warn("ES insert assertation failed for "
+ pr_warn("ES insert assertion failed for "
"inode: %lu we can find an extent "
"at block [%d/%d/%llu/%c], but we "
"want to add an delayed/hole extent "
@@ -458,7 +460,7 @@ static void ext4_es_insert_extent_ext_check(struct inode *inode,
*/
if (es->es_lblk < ee_block ||
ext4_es_pblock(es) != ee_start + es->es_lblk - ee_block) {
- pr_warn("ES insert assertation failed for inode: %lu "
+ pr_warn("ES insert assertion failed for inode: %lu "
"ex_status [%d/%d/%llu/%c] != "
"es_status [%d/%d/%llu/%c]\n", inode->i_ino,
ee_block, ee_len, ee_start,
@@ -468,7 +470,7 @@ static void ext4_es_insert_extent_ext_check(struct inode *inode,
}
if (ee_status ^ es_status) {
- pr_warn("ES insert assertation failed for inode: %lu "
+ pr_warn("ES insert assertion failed for inode: %lu "
"ex_status [%d/%d/%llu/%c] != "
"es_status [%d/%d/%llu/%c]\n", inode->i_ino,
ee_block, ee_len, ee_start,
@@ -481,7 +483,7 @@ static void ext4_es_insert_extent_ext_check(struct inode *inode,
* that we don't want to add an written/unwritten extent.
*/
if (!ext4_es_is_delayed(es) && !ext4_es_is_hole(es)) {
- pr_warn("ES insert assertation failed for inode: %lu "
+ pr_warn("ES insert assertion failed for inode: %lu "
"can't find an extent at block %d but we want "
"to add an written/unwritten extent "
"[%d/%d/%llu/%llx]\n", inode->i_ino,
@@ -519,7 +521,7 @@ static void ext4_es_insert_extent_ind_check(struct inode *inode,
* We want to add a delayed/hole extent but this
* block has been allocated.
*/
- pr_warn("ES insert assertation failed for inode: %lu "
+ pr_warn("ES insert assertion failed for inode: %lu "
"We can find blocks but we want to add a "
"delayed/hole extent [%d/%d/%llu/%llx]\n",
inode->i_ino, es->es_lblk, es->es_len,
@@ -527,13 +529,13 @@ static void ext4_es_insert_extent_ind_check(struct inode *inode,
return;
} else if (ext4_es_is_written(es)) {
if (retval != es->es_len) {
- pr_warn("ES insert assertation failed for "
+ pr_warn("ES insert assertion failed for "
"inode: %lu retval %d != es_len %d\n",
inode->i_ino, retval, es->es_len);
return;
}
if (map.m_pblk != ext4_es_pblock(es)) {
- pr_warn("ES insert assertation failed for "
+ pr_warn("ES insert assertion failed for "
"inode: %lu m_pblk %llu != "
"es_pblk %llu\n",
inode->i_ino, map.m_pblk,
@@ -549,7 +551,7 @@ static void ext4_es_insert_extent_ind_check(struct inode *inode,
}
} else if (retval == 0) {
if (ext4_es_is_written(es)) {
- pr_warn("ES insert assertation failed for inode: %lu "
+ pr_warn("ES insert assertion failed for inode: %lu "
"We can't find the block but we want to add "
"an written extent [%d/%d/%llu/%llx]\n",
inode->i_ino, es->es_lblk, es->es_len,
@@ -632,10 +634,8 @@ out:
}
/*
- * ext4_es_insert_extent() adds a space to a extent status tree.
- *
- * ext4_es_insert_extent is called by ext4_da_write_begin and
- * ext4_es_remove_extent.
+ * ext4_es_insert_extent() adds information to an inode's extent
+ * status tree.
*
* Return 0 on success, error code on failure.
*/
@@ -667,7 +667,13 @@ int ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk,
err = __es_remove_extent(inode, lblk, end);
if (err != 0)
goto error;
+retry:
err = __es_insert_extent(inode, &newes);
+ if (err == -ENOMEM && __ext4_es_shrink(EXT4_SB(inode->i_sb), 1,
+ EXT4_I(inode)))
+ goto retry;
+ if (err == -ENOMEM && !ext4_es_is_delayed(&newes))
+ err = 0;
error:
write_unlock(&EXT4_I(inode)->i_es_lock);
@@ -746,8 +752,10 @@ static int __es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
struct extent_status orig_es;
ext4_lblk_t len1, len2;
ext4_fsblk_t block;
- int err = 0;
+ int err;
+retry:
+ err = 0;
es = __es_tree_search(&tree->root, lblk);
if (!es)
goto out;
@@ -782,6 +790,10 @@ static int __es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
if (err) {
es->es_lblk = orig_es.es_lblk;
es->es_len = orig_es.es_len;
+ if ((err == -ENOMEM) &&
+ __ext4_es_shrink(EXT4_SB(inode->i_sb), 1,
+ EXT4_I(inode)))
+ goto retry;
goto out;
}
} else {
@@ -891,22 +903,14 @@ static int ext4_inode_touch_time_cmp(void *priv, struct list_head *a,
return -1;
}
-static int ext4_es_shrink(struct shrinker *shrink, struct shrink_control *sc)
+static int __ext4_es_shrink(struct ext4_sb_info *sbi, int nr_to_scan,
+ struct ext4_inode_info *locked_ei)
{
- struct ext4_sb_info *sbi = container_of(shrink,
- struct ext4_sb_info, s_es_shrinker);
struct ext4_inode_info *ei;
struct list_head *cur, *tmp;
LIST_HEAD(skiped);
- int nr_to_scan = sc->nr_to_scan;
int ret, nr_shrunk = 0;
- ret = percpu_counter_read_positive(&sbi->s_extent_cache_cnt);
- trace_ext4_es_shrink_enter(sbi->s_sb, nr_to_scan, ret);
-
- if (!nr_to_scan)
- return ret;
-
spin_lock(&sbi->s_es_lru_lock);
/*
@@ -935,7 +939,7 @@ static int ext4_es_shrink(struct shrinker *shrink, struct shrink_control *sc)
continue;
}
- if (ei->i_es_lru_nr == 0)
+ if (ei->i_es_lru_nr == 0 || ei == locked_ei)
continue;
write_lock(&ei->i_es_lock);
@@ -954,6 +958,27 @@ static int ext4_es_shrink(struct shrinker *shrink, struct shrink_control *sc)
list_splice_tail(&skiped, &sbi->s_es_lru);
spin_unlock(&sbi->s_es_lru_lock);
+ if (locked_ei && nr_shrunk == 0)
+ nr_shrunk = __es_try_to_reclaim_extents(ei, nr_to_scan);
+
+ return nr_shrunk;
+}
+
+static int ext4_es_shrink(struct shrinker *shrink, struct shrink_control *sc)
+{
+ struct ext4_sb_info *sbi = container_of(shrink,
+ struct ext4_sb_info, s_es_shrinker);
+ int nr_to_scan = sc->nr_to_scan;
+ int ret, nr_shrunk;
+
+ ret = percpu_counter_read_positive(&sbi->s_extent_cache_cnt);
+ trace_ext4_es_shrink_enter(sbi->s_sb, nr_to_scan, ret);
+
+ if (!nr_to_scan)
+ return ret;
+
+ nr_shrunk = __ext4_es_shrink(sbi, nr_to_scan, NULL);
+
ret = percpu_counter_read_positive(&sbi->s_extent_cache_cnt);
trace_ext4_es_shrink_exit(sbi->s_sb, nr_shrunk, ret);
return ret;
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 0188e65e1f58..ba33c67d6e48 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -465,7 +465,7 @@ static void ext4_map_blocks_es_recheck(handle_t *handle,
if (es_map->m_lblk != map->m_lblk ||
es_map->m_flags != map->m_flags ||
es_map->m_pblk != map->m_pblk) {
- printk("ES cache assertation failed for inode: %lu "
+ printk("ES cache assertion failed for inode: %lu "
"es_cached ex [%d/%d/%llu/%x] != "
"found ex [%d/%d/%llu/%x] retval %d flags %x\n",
inode->i_ino, es_map->m_lblk, es_map->m_len,
@@ -514,10 +514,9 @@ int ext4_map_blocks(handle_t *handle, struct inode *inode,
"logical block %lu\n", inode->i_ino, flags, map->m_len,
(unsigned long) map->m_lblk);
- ext4_es_lru_add(inode);
-
/* Lookup extent status tree firstly */
if (ext4_es_lookup_extent(inode, map->m_lblk, &es)) {
+ ext4_es_lru_add(inode);
if (ext4_es_is_written(&es) || ext4_es_is_unwritten(&es)) {
map->m_pblk = ext4_es_pblock(&es) +
map->m_lblk - es.es_lblk;
@@ -558,7 +557,7 @@ int ext4_map_blocks(handle_t *handle, struct inode *inode,
#ifdef ES_AGGRESSIVE_TEST
if (retval != map->m_len) {
- printk("ES len assertation failed for inode: %lu "
+ printk("ES len assertion failed for inode: %lu "
"retval %d != map->m_len %d "
"in %s (lookup)\n", inode->i_ino, retval,
map->m_len, __func__);
@@ -659,7 +658,7 @@ found:
#ifdef ES_AGGRESSIVE_TEST
if (retval != map->m_len) {
- printk("ES len assertation failed for inode: %lu "
+ printk("ES len assertion failed for inode: %lu "
"retval %d != map->m_len %d "
"in %s (allocation)\n", inode->i_ino, retval,
map->m_len, __func__);
@@ -1529,11 +1528,9 @@ static int ext4_da_map_blocks(struct inode *inode, sector_t iblock,
"logical block %lu\n", inode->i_ino, map->m_len,
(unsigned long) map->m_lblk);
- ext4_es_lru_add(inode);
-
/* Lookup extent status tree firstly */
if (ext4_es_lookup_extent(inode, iblock, &es)) {
-
+ ext4_es_lru_add(inode);
if (ext4_es_is_hole(&es)) {
retval = 0;
down_read((&EXT4_I(inode)->i_data_sem));
@@ -1642,7 +1639,7 @@ add_delayed:
#ifdef ES_AGGRESSIVE_TEST
if (retval != map->m_len) {
- printk("ES len assertation failed for inode: %lu "
+ printk("ES len assertion failed for inode: %lu "
"retval %d != map->m_len %d "
"in %s (lookup)\n", inode->i_ino, retval,
map->m_len, __func__);
@@ -2163,7 +2160,7 @@ static int mpage_map_and_submit_extent(handle_t *handle,
mpd->io_submit.io_end->offset =
((loff_t)map->m_lblk) << inode->i_blkbits;
- while (map->m_len) {
+ do {
err = mpage_map_one_extent(handle, mpd);
if (err < 0) {
struct super_block *sb = inode->i_sb;
@@ -2201,7 +2198,7 @@ static int mpage_map_and_submit_extent(handle_t *handle,
err = mpage_map_and_submit_buffers(mpd);
if (err < 0)
return err;
- }
+ } while (map->m_len);
/* Update on-disk size after IO is submitted */
disksize = ((loff_t)mpd->first_page) << PAGE_CACHE_SHIFT;
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index a9ff5e5137ca..4bbbf13bd743 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -4740,11 +4740,16 @@ do_more:
* blocks being freed are metadata. these blocks shouldn't
* be used until this transaction is committed
*/
+ retry:
new_entry = kmem_cache_alloc(ext4_free_data_cachep, GFP_NOFS);
if (!new_entry) {
- ext4_mb_unload_buddy(&e4b);
- err = -ENOMEM;
- goto error_return;
+ /*
+ * We use a retry loop because
+ * ext4_free_blocks() is not allowed to fail.
+ */
+ cond_resched();
+ congestion_wait(BLK_RW_ASYNC, HZ/50);
+ goto retry;
}
new_entry->efd_start_cluster = bit;
new_entry->efd_group = block_group;
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index 234b834d5a97..35f55a0dbc4b 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -2316,11 +2316,11 @@ retry:
inode->i_op = &ext4_file_inode_operations;
inode->i_fop = &ext4_file_operations;
ext4_set_aops(inode);
+ d_tmpfile(dentry, inode);
err = ext4_orphan_add(handle, inode);
if (err)
goto err_drop_inode;
mark_inode_dirty(inode);
- d_tmpfile(dentry, inode);
unlock_new_inode(inode);
}
if (handle)
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
index 48786cdb5e6c..6625d210fb45 100644
--- a/fs/ext4/page-io.c
+++ b/fs/ext4/page-io.c
@@ -25,6 +25,7 @@
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/mm.h>
+#include <linux/ratelimit.h>
#include "ext4_jbd2.h"
#include "xattr.h"
@@ -55,7 +56,7 @@ void ext4_exit_pageio(void)
static void buffer_io_error(struct buffer_head *bh)
{
char b[BDEVNAME_SIZE];
- printk(KERN_ERR "Buffer I/O error on device %s, logical block %llu\n",
+ printk_ratelimited(KERN_ERR "Buffer I/O error on device %s, logical block %llu\n",
bdevname(bh->b_bdev, b),
(unsigned long long)bh->b_blocknr);
}
@@ -308,6 +309,7 @@ ext4_io_end_t *ext4_get_io_end(ext4_io_end_t *io_end)
return io_end;
}
+/* BIO completion function for page writeback */
static void ext4_end_bio(struct bio *bio, int error)
{
ext4_io_end_t *io_end = bio->bi_private;
@@ -318,18 +320,6 @@ static void ext4_end_bio(struct bio *bio, int error)
if (test_bit(BIO_UPTODATE, &bio->bi_flags))
error = 0;
- if (io_end->flag & EXT4_IO_END_UNWRITTEN) {
- /*
- * Link bio into list hanging from io_end. We have to do it
- * atomically as bio completions can be racing against each
- * other.
- */
- bio->bi_private = xchg(&io_end->bio, bio);
- } else {
- ext4_finish_bio(bio);
- bio_put(bio);
- }
-
if (error) {
struct inode *inode = io_end->inode;
@@ -341,7 +331,24 @@ static void ext4_end_bio(struct bio *bio, int error)
(unsigned long long)
bi_sector >> (inode->i_blkbits - 9));
}
- ext4_put_io_end_defer(io_end);
+
+ if (io_end->flag & EXT4_IO_END_UNWRITTEN) {
+ /*
+ * Link bio into list hanging from io_end. We have to do it
+ * atomically as bio completions can be racing against each
+ * other.
+ */
+ bio->bi_private = xchg(&io_end->bio, bio);
+ ext4_put_io_end_defer(io_end);
+ } else {
+ /*
+ * Drop io_end reference early. Inode can get freed once
+ * we finish the bio.
+ */
+ ext4_put_io_end_defer(io_end);
+ ext4_finish_bio(bio);
+ bio_put(bio);
+ }
}
void ext4_io_submit(struct ext4_io_submit *io)
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 85b3dd60169b..bca26f34edf4 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -1702,12 +1702,6 @@ static inline void ext4_show_quota_options(struct seq_file *seq,
if (sbi->s_qf_names[GRPQUOTA])
seq_printf(seq, ",grpjquota=%s", sbi->s_qf_names[GRPQUOTA]);
-
- if (test_opt(sb, USRQUOTA))
- seq_puts(seq, ",usrquota");
-
- if (test_opt(sb, GRPQUOTA))
- seq_puts(seq, ",grpquota");
#endif
}
@@ -3624,10 +3618,6 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb));
sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb));
- /* Do we have standard group size of blocksize * 8 blocks ? */
- if (sbi->s_blocks_per_group == blocksize << 3)
- set_opt2(sb, STD_GROUP_SIZE);
-
for (i = 0; i < 4; i++)
sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]);
sbi->s_def_hash_version = es->s_def_hash_version;
@@ -3697,6 +3687,10 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
goto failed_mount;
}
+ /* Do we have standard group size of clustersize * 8 blocks ? */
+ if (sbi->s_blocks_per_group == clustersize << 3)
+ set_opt2(sb, STD_GROUP_SIZE);
+
/*
* Test whether we have more sectors than will fit in sector_t,
* and whether the max offset is addressable by the page cache.
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
index 0eda52738ec4..72a5d5b04494 100644
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -1223,30 +1223,46 @@ static int fuse_direntplus_link(struct file *file,
if (name.name[1] == '.' && name.len == 2)
return 0;
}
+
+ if (invalid_nodeid(o->nodeid))
+ return -EIO;
+ if (!fuse_valid_type(o->attr.mode))
+ return -EIO;
+
fc = get_fuse_conn(dir);
name.hash = full_name_hash(name.name, name.len);
dentry = d_lookup(parent, &name);
- if (dentry && dentry->d_inode) {
+ if (dentry) {
inode = dentry->d_inode;
- if (get_node_id(inode) == o->nodeid) {
+ if (!inode) {
+ d_drop(dentry);
+ } else if (get_node_id(inode) != o->nodeid ||
+ ((o->attr.mode ^ inode->i_mode) & S_IFMT)) {
+ err = d_invalidate(dentry);
+ if (err)
+ goto out;
+ } else if (is_bad_inode(inode)) {
+ err = -EIO;
+ goto out;
+ } else {
struct fuse_inode *fi;
fi = get_fuse_inode(inode);
spin_lock(&fc->lock);
fi->nlookup++;
spin_unlock(&fc->lock);
+ fuse_change_attributes(inode, &o->attr,
+ entry_attr_timeout(o),
+ attr_version);
+
/*
* The other branch to 'found' comes via fuse_iget()
* which bumps nlookup inside
*/
goto found;
}
- err = d_invalidate(dentry);
- if (err)
- goto out;
dput(dentry);
- dentry = NULL;
}
dentry = d_alloc(parent, &name);
@@ -1259,25 +1275,30 @@ static int fuse_direntplus_link(struct file *file,
if (!inode)
goto out;
- alias = d_materialise_unique(dentry, inode);
- err = PTR_ERR(alias);
- if (IS_ERR(alias))
- goto out;
+ if (S_ISDIR(inode->i_mode)) {
+ mutex_lock(&fc->inst_mutex);
+ alias = fuse_d_add_directory(dentry, inode);
+ mutex_unlock(&fc->inst_mutex);
+ err = PTR_ERR(alias);
+ if (IS_ERR(alias)) {
+ iput(inode);
+ goto out;
+ }
+ } else {
+ alias = d_splice_alias(inode, dentry);
+ }
+
if (alias) {
dput(dentry);
dentry = alias;
}
found:
- fuse_change_attributes(inode, &o->attr, entry_attr_timeout(o),
- attr_version);
-
fuse_change_entry_timeout(dentry, o);
err = 0;
out:
- if (dentry)
- dput(dentry);
+ dput(dentry);
return err;
}
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c
index 067778b0ccc9..e066a3902973 100644
--- a/fs/lockd/svclock.c
+++ b/fs/lockd/svclock.c
@@ -951,6 +951,7 @@ nlmsvc_retry_blocked(void)
unsigned long timeout = MAX_SCHEDULE_TIMEOUT;
struct nlm_block *block;
+ spin_lock(&nlm_blocked_lock);
while (!list_empty(&nlm_blocked) && !kthread_should_stop()) {
block = list_entry(nlm_blocked.next, struct nlm_block, b_list);
@@ -960,6 +961,7 @@ nlmsvc_retry_blocked(void)
timeout = block->b_when - jiffies;
break;
}
+ spin_unlock(&nlm_blocked_lock);
dprintk("nlmsvc_retry_blocked(%p, when=%ld)\n",
block, block->b_when);
@@ -969,7 +971,9 @@ nlmsvc_retry_blocked(void)
retry_deferred_block(block);
} else
nlmsvc_grant_blocked(block);
+ spin_lock(&nlm_blocked_lock);
}
+ spin_unlock(&nlm_blocked_lock);
return timeout;
}
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index 0abfb8466e79..3850b018815f 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -999,6 +999,7 @@ static void encode_attrs(struct xdr_stream *xdr, const struct iattr *iap,
__be32 *p;
__be32 *q;
int len;
+ uint32_t bmval_len = 2;
uint32_t bmval0 = 0;
uint32_t bmval1 = 0;
uint32_t bmval2 = 0;
@@ -1010,7 +1011,7 @@ static void encode_attrs(struct xdr_stream *xdr, const struct iattr *iap,
* = 40 bytes, plus any contribution from variable-length fields
* such as owner/group.
*/
- len = 20;
+ len = 8;
/* Sigh */
if (iap->ia_valid & ATTR_SIZE)
@@ -1040,8 +1041,6 @@ static void encode_attrs(struct xdr_stream *xdr, const struct iattr *iap,
}
len += 4 + (XDR_QUADLEN(owner_grouplen) << 2);
}
- if (label)
- len += 4 + 4 + 4 + (XDR_QUADLEN(label->len) << 2);
if (iap->ia_valid & ATTR_ATIME_SET)
len += 16;
else if (iap->ia_valid & ATTR_ATIME)
@@ -1050,15 +1049,22 @@ static void encode_attrs(struct xdr_stream *xdr, const struct iattr *iap,
len += 16;
else if (iap->ia_valid & ATTR_MTIME)
len += 4;
+ if (label) {
+ len += 4 + 4 + 4 + (XDR_QUADLEN(label->len) << 2);
+ bmval_len = 3;
+ }
+
+ len += bmval_len << 2;
p = reserve_space(xdr, len);
/*
* We write the bitmap length now, but leave the bitmap and the attribute
* buffer length to be backfilled at the end of this routine.
*/
- *p++ = cpu_to_be32(3);
+ *p++ = cpu_to_be32(bmval_len);
q = p;
- p += 4;
+ /* Skip bitmap entries + attrlen */
+ p += bmval_len + 1;
if (iap->ia_valid & ATTR_SIZE) {
bmval0 |= FATTR4_WORD0_SIZE;
@@ -1112,10 +1118,11 @@ static void encode_attrs(struct xdr_stream *xdr, const struct iattr *iap,
len, ((char *)p - (char *)q) + 4);
BUG();
}
- len = (char *)p - (char *)q - 16;
*q++ = htonl(bmval0);
*q++ = htonl(bmval1);
- *q++ = htonl(bmval2);
+ if (bmval_len == 3)
+ *q++ = htonl(bmval2);
+ len = (char *)p - (char *)(q + 1);
*q = htonl(len);
/* out: */
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
index a7cee864e7b2..0d4c410e4589 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -1293,7 +1293,7 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
* According to RFC3010, this takes precedence over all other errors.
*/
status = nfserr_minor_vers_mismatch;
- if (args->minorversion > nfsd_supported_minorversion)
+ if (nfsd_minorversion(args->minorversion, NFSD_TEST) <= 0)
goto out;
status = nfs41_check_op_ordering(args);
diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h
index 2bbd94e51efc..30f34ab02137 100644
--- a/fs/nfsd/nfsd.h
+++ b/fs/nfsd/nfsd.h
@@ -53,7 +53,6 @@ struct readdir_cd {
extern struct svc_program nfsd_program;
extern struct svc_version nfsd_version2, nfsd_version3,
nfsd_version4;
-extern u32 nfsd_supported_minorversion;
extern struct mutex nfsd_mutex;
extern spinlock_t nfsd_drc_lock;
extern unsigned long nfsd_drc_max_mem;
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
index 6b9f48ca4c25..760c85a6f534 100644
--- a/fs/nfsd/nfssvc.c
+++ b/fs/nfsd/nfssvc.c
@@ -116,7 +116,10 @@ struct svc_program nfsd_program = {
};
-u32 nfsd_supported_minorversion = 1;
+static bool nfsd_supported_minorversions[NFSD_SUPPORTED_MINOR_VERSION + 1] = {
+ [0] = 1,
+ [1] = 1,
+};
int nfsd_vers(int vers, enum vers_op change)
{
@@ -151,15 +154,13 @@ int nfsd_minorversion(u32 minorversion, enum vers_op change)
return -1;
switch(change) {
case NFSD_SET:
- nfsd_supported_minorversion = minorversion;
+ nfsd_supported_minorversions[minorversion] = true;
break;
case NFSD_CLEAR:
- if (minorversion == 0)
- return -1;
- nfsd_supported_minorversion = minorversion - 1;
+ nfsd_supported_minorversions[minorversion] = false;
break;
case NFSD_TEST:
- return minorversion <= nfsd_supported_minorversion;
+ return nfsd_supported_minorversions[minorversion];
case NFSD_AVAIL:
return minorversion <= NFSD_SUPPORTED_MINOR_VERSION;
}
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index 8ff6a0019b0b..c827acb0e943 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -830,9 +830,10 @@ nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, umode_t type,
flags = O_WRONLY|O_LARGEFILE;
}
*filp = dentry_open(&path, flags, current_cred());
- if (IS_ERR(*filp))
+ if (IS_ERR(*filp)) {
host_err = PTR_ERR(*filp);
- else {
+ *filp = NULL;
+ } else {
host_err = ima_file_check(*filp, may_flags);
if (may_flags & NFSD_MAY_64BIT_COOKIE)
diff --git a/fs/open.c b/fs/open.c
index 9156cb050d08..d53e29895082 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -844,6 +844,8 @@ static inline int build_open_flags(int flags, umode_t mode, struct open_flags *o
if ((flags & O_TMPFILE_MASK) != O_TMPFILE)
return -EINVAL;
acc_mode = MAY_OPEN | ACC_MODE(flags);
+ if (!(acc_mode & MAY_WRITE))
+ return -EINVAL;
} else if (flags & O_PATH) {
/*
* If we have O_PATH in the open flag. Then we
diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
index 28503172f2e4..a1a16eb97c7b 100644
--- a/fs/proc/vmcore.c
+++ b/fs/proc/vmcore.c
@@ -223,7 +223,7 @@ static inline char *alloc_elfnotes_buf(size_t notes_sz)
* regions in the 1st kernel pointed to by PT_LOAD entries) into
* virtually contiguous user-space in ELF layout.
*/
-#ifdef CONFIG_MMU
+#if defined(CONFIG_MMU) && !defined(CONFIG_S390)
static int mmap_vmcore(struct file *file, struct vm_area_struct *vma)
{
size_t size = vma->vm_end - vma->vm_start;
diff --git a/fs/super.c b/fs/super.c
index 7465d4364208..68307c029228 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -336,19 +336,19 @@ EXPORT_SYMBOL(deactivate_super);
* and want to turn it into a full-blown active reference. grab_super()
* is called with sb_lock held and drops it. Returns 1 in case of
* success, 0 if we had failed (superblock contents was already dead or
- * dying when grab_super() had been called).
+ * dying when grab_super() had been called). Note that this is only
+ * called for superblocks not in rundown mode (== ones still on ->fs_supers
+ * of their type), so increment of ->s_count is OK here.
*/
static int grab_super(struct super_block *s) __releases(sb_lock)
{
- if (atomic_inc_not_zero(&s->s_active)) {
- spin_unlock(&sb_lock);
- return 1;
- }
- /* it's going away */
s->s_count++;
spin_unlock(&sb_lock);
- /* wait for it to die */
down_write(&s->s_umount);
+ if ((s->s_flags & MS_BORN) && atomic_inc_not_zero(&s->s_active)) {
+ put_super(s);
+ return 1;
+ }
up_write(&s->s_umount);
put_super(s);
return 0;
@@ -463,11 +463,6 @@ retry:
destroy_super(s);
s = NULL;
}
- down_write(&old->s_umount);
- if (unlikely(!(old->s_flags & MS_BORN))) {
- deactivate_locked_super(old);
- goto retry;
- }
return old;
}
}
@@ -660,10 +655,10 @@ restart:
if (hlist_unhashed(&sb->s_instances))
continue;
if (sb->s_bdev == bdev) {
- if (grab_super(sb)) /* drops sb_lock */
- return sb;
- else
+ if (!grab_super(sb))
goto restart;
+ up_write(&sb->s_umount);
+ return sb;
}
}
spin_unlock(&sb_lock);
diff --git a/fs/sysfs/group.c b/fs/sysfs/group.c
index aec3d5c98c94..09a1a25cd145 100644
--- a/fs/sysfs/group.c
+++ b/fs/sysfs/group.c
@@ -20,38 +20,64 @@ static void remove_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,
const struct attribute_group *grp)
{
struct attribute *const* attr;
- int i;
+ struct bin_attribute *const* bin_attr;
- for (i = 0, attr = grp->attrs; *attr; i++, attr++)
- sysfs_hash_and_remove(dir_sd, NULL, (*attr)->name);
+ if (grp->attrs)
+ for (attr = grp->attrs; *attr; attr++)
+ sysfs_hash_and_remove(dir_sd, NULL, (*attr)->name);
+ if (grp->bin_attrs)
+ for (bin_attr = grp->bin_attrs; *bin_attr; bin_attr++)
+ sysfs_remove_bin_file(kobj, *bin_attr);
}
static int create_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,
const struct attribute_group *grp, int update)
{
struct attribute *const* attr;
+ struct bin_attribute *const* bin_attr;
int error = 0, i;
- for (i = 0, attr = grp->attrs; *attr && !error; i++, attr++) {
- umode_t mode = 0;
+ if (grp->attrs) {
+ for (i = 0, attr = grp->attrs; *attr && !error; i++, attr++) {
+ umode_t mode = 0;
+
+ /*
+ * In update mode, we're changing the permissions or
+ * visibility. Do this by first removing then
+ * re-adding (if required) the file.
+ */
+ if (update)
+ sysfs_hash_and_remove(dir_sd, NULL,
+ (*attr)->name);
+ if (grp->is_visible) {
+ mode = grp->is_visible(kobj, *attr, i);
+ if (!mode)
+ continue;
+ }
+ error = sysfs_add_file_mode(dir_sd, *attr,
+ SYSFS_KOBJ_ATTR,
+ (*attr)->mode | mode);
+ if (unlikely(error))
+ break;
+ }
+ if (error) {
+ remove_files(dir_sd, kobj, grp);
+ goto exit;
+ }
+ }
- /* in update mode, we're changing the permissions or
- * visibility. Do this by first removing then
- * re-adding (if required) the file */
- if (update)
- sysfs_hash_and_remove(dir_sd, NULL, (*attr)->name);
- if (grp->is_visible) {
- mode = grp->is_visible(kobj, *attr, i);
- if (!mode)
- continue;
+ if (grp->bin_attrs) {
+ for (bin_attr = grp->bin_attrs; *bin_attr; bin_attr++) {
+ if (update)
+ sysfs_remove_bin_file(kobj, *bin_attr);
+ error = sysfs_create_bin_file(kobj, *bin_attr);
+ if (error)
+ break;
}
- error = sysfs_add_file_mode(dir_sd, *attr, SYSFS_KOBJ_ATTR,
- (*attr)->mode | mode);
- if (unlikely(error))
- break;
+ if (error)
+ remove_files(dir_sd, kobj, grp);
}
- if (error)
- remove_files(dir_sd, kobj, grp);
+exit:
return error;
}
@@ -67,8 +93,8 @@ static int internal_create_group(struct kobject *kobj, int update,
/* Updates may happen before the object has been instantiated */
if (unlikely(update && !kobj->sd))
return -EINVAL;
- if (!grp->attrs) {
- WARN(1, "sysfs: attrs not set by subsystem for group: %s/%s\n",
+ if (!grp->attrs && !grp->bin_attrs) {
+ WARN(1, "sysfs: (bin_)attrs not set by subsystem for group: %s/%s\n",
kobj->name, grp->name ? "" : grp->name);
return -EINVAL;
}
diff --git a/fs/xfs/xfs_dinode.h b/fs/xfs/xfs_dinode.h
index 07d735a80a0f..e5869b50dc41 100644
--- a/fs/xfs/xfs_dinode.h
+++ b/fs/xfs/xfs_dinode.h
@@ -39,6 +39,9 @@ typedef struct xfs_timestamp {
* There is a very similar struct icdinode in xfs_inode which matches the
* layout of the first 96 bytes of this structure, but is kept in native
* format instead of big endian.
+ *
+ * Note: di_flushiter is only used by v1/2 inodes - it's effectively a zeroed
+ * padding field for v3 inodes.
*/
typedef struct xfs_dinode {
__be16 di_magic; /* inode magic # = XFS_DINODE_MAGIC */
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index b78481f99d9d..bb262c25c8de 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -896,7 +896,6 @@ xfs_dinode_to_disk(
to->di_projid_lo = cpu_to_be16(from->di_projid_lo);
to->di_projid_hi = cpu_to_be16(from->di_projid_hi);
memcpy(to->di_pad, from->di_pad, sizeof(to->di_pad));
- to->di_flushiter = cpu_to_be16(from->di_flushiter);
to->di_atime.t_sec = cpu_to_be32(from->di_atime.t_sec);
to->di_atime.t_nsec = cpu_to_be32(from->di_atime.t_nsec);
to->di_mtime.t_sec = cpu_to_be32(from->di_mtime.t_sec);
@@ -924,6 +923,9 @@ xfs_dinode_to_disk(
to->di_lsn = cpu_to_be64(from->di_lsn);
memcpy(to->di_pad2, from->di_pad2, sizeof(to->di_pad2));
uuid_copy(&to->di_uuid, &from->di_uuid);
+ to->di_flushiter = 0;
+ } else {
+ to->di_flushiter = cpu_to_be16(from->di_flushiter);
}
}
@@ -1029,10 +1031,14 @@ xfs_dinode_calc_crc(
/*
* Read the disk inode attributes into the in-core inode structure.
*
- * If we are initialising a new inode and we are not utilising the
- * XFS_MOUNT_IKEEP inode cluster mode, we can simple build the new inode core
- * with a random generation number. If we are keeping inodes around, we need to
- * read the inode cluster to get the existing generation number off disk.
+ * For version 5 superblocks, if we are initialising a new inode and we are not
+ * utilising the XFS_MOUNT_IKEEP inode cluster mode, we can simple build the new
+ * inode core with a random generation number. If we are keeping inodes around,
+ * we need to read the inode cluster to get the existing generation number off
+ * disk. Further, if we are using version 4 superblocks (i.e. v1/v2 inode
+ * format) then log recovery is dependent on the di_flushiter field being
+ * initialised from the current on-disk value and hence we must also read the
+ * inode off disk.
*/
int
xfs_iread(
@@ -1054,6 +1060,7 @@ xfs_iread(
/* shortcut IO on inode allocation if possible */
if ((iget_flags & XFS_IGET_CREATE) &&
+ xfs_sb_version_hascrc(&mp->m_sb) &&
!(mp->m_flags & XFS_MOUNT_IKEEP)) {
/* initialise the on-disk inode core */
memset(&ip->i_d, 0, sizeof(ip->i_d));
@@ -2882,12 +2889,18 @@ xfs_iflush_int(
__func__, ip->i_ino, ip->i_d.di_forkoff, ip);
goto corrupt_out;
}
+
/*
- * bump the flush iteration count, used to detect flushes which
- * postdate a log record during recovery. This is redundant as we now
- * log every change and hence this can't happen. Still, it doesn't hurt.
+ * Inode item log recovery for v1/v2 inodes are dependent on the
+ * di_flushiter count for correct sequencing. We bump the flush
+ * iteration count so we can detect flushes which postdate a log record
+ * during recovery. This is redundant as we now log every change and
+ * hence this can't happen but we need to still do it to ensure
+ * backwards compatibility with old kernels that predate logging all
+ * inode changes.
*/
- ip->i_d.di_flushiter++;
+ if (ip->i_d.di_version < 3)
+ ip->i_d.di_flushiter++;
/*
* Copy the dirty parts of the inode into the on-disk
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
index 6fcc910a50b9..7681b19aa5dc 100644
--- a/fs/xfs/xfs_log_recover.c
+++ b/fs/xfs/xfs_log_recover.c
@@ -2592,8 +2592,16 @@ xlog_recover_inode_pass2(
goto error;
}
- /* Skip replay when the on disk inode is newer than the log one */
- if (dicp->di_flushiter < be16_to_cpu(dip->di_flushiter)) {
+ /*
+ * di_flushiter is only valid for v1/2 inodes. All changes for v3 inodes
+ * are transactional and if ordering is necessary we can determine that
+ * more accurately by the LSN field in the V3 inode core. Don't trust
+ * the inode versions we might be changing them here - use the
+ * superblock flag to determine whether we need to look at di_flushiter
+ * to skip replay when the on disk inode is newer than the log one
+ */
+ if (!xfs_sb_version_hascrc(&mp->m_sb) &&
+ dicp->di_flushiter < be16_to_cpu(dip->di_flushiter)) {
/*
* Deal with the wrap case, DI_MAX_FLUSH is less
* than smaller numbers
@@ -2608,6 +2616,7 @@ xlog_recover_inode_pass2(
goto error;
}
}
+
/* Take the opportunity to reset the flush iteration count */
dicp->di_flushiter = 0;
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
index 1b09300810e6..22d497ee6ef9 100644
--- a/include/acpi/acpixf.h
+++ b/include/acpi/acpixf.h
@@ -62,6 +62,7 @@ extern u32 acpi_current_gpe_count;
extern struct acpi_table_fadt acpi_gbl_FADT;
extern u8 acpi_gbl_system_awake_and_running;
extern u8 acpi_gbl_reduced_hardware; /* ACPI 5.0 */
+extern u8 acpi_gbl_osi_data;
/* Runtime configuration of debug print levels */
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h
index a64adcc29ae5..22b03c9286e9 100644
--- a/include/acpi/actypes.h
+++ b/include/acpi/actypes.h
@@ -1144,4 +1144,19 @@ struct acpi_memory_list {
#endif
};
+/* Definitions for _OSI support */
+
+#define ACPI_OSI_WIN_2000 0x01
+#define ACPI_OSI_WIN_XP 0x02
+#define ACPI_OSI_WIN_XP_SP1 0x03
+#define ACPI_OSI_WINSRV_2003 0x04
+#define ACPI_OSI_WIN_XP_SP2 0x05
+#define ACPI_OSI_WINSRV_2003_SP1 0x06
+#define ACPI_OSI_WIN_VISTA 0x07
+#define ACPI_OSI_WINSRV_2008 0x08
+#define ACPI_OSI_WIN_VISTA_SP1 0x09
+#define ACPI_OSI_WIN_VISTA_SP2 0x0A
+#define ACPI_OSI_WIN_7 0x0B
+#define ACPI_OSI_WIN_8 0x0C
+
#endif /* __ACTYPES_H__ */
diff --git a/include/dt-bindings/clock/vf610-clock.h b/include/dt-bindings/clock/vf610-clock.h
index 15e997fa78f2..4aa2b48cd151 100644
--- a/include/dt-bindings/clock/vf610-clock.h
+++ b/include/dt-bindings/clock/vf610-clock.h
@@ -158,6 +158,8 @@
#define VF610_CLK_GPU_SEL 145
#define VF610_CLK_GPU_EN 146
#define VF610_CLK_GPU2D 147
-#define VF610_CLK_END 148
+#define VF610_CLK_ENET0 148
+#define VF610_CLK_ENET1 149
+#define VF610_CLK_END 150
#endif /* __DT_BINDINGS_CLOCK_VF610_H */
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index 297462b9f41a..e9ac882868c0 100644
--- a/include/linux/cgroup.h
+++ b/include/linux/cgroup.h
@@ -542,8 +542,7 @@ int cgroup_rm_cftypes(struct cgroup_subsys *ss, struct cftype *cfts);
bool cgroup_is_descendant(struct cgroup *cgrp, struct cgroup *ancestor);
int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen);
-int task_cgroup_path_from_hierarchy(struct task_struct *task, int hierarchy_id,
- char *buf, size_t buflen);
+int task_cgroup_path(struct task_struct *task, char *buf, size_t buflen);
int cgroup_task_count(const struct cgroup *cgrp);
diff --git a/include/linux/cgroup_subsys.h b/include/linux/cgroup_subsys.h
index 6e7ec64b69ab..b613ffd402d1 100644
--- a/include/linux/cgroup_subsys.h
+++ b/include/linux/cgroup_subsys.h
@@ -1,86 +1,55 @@
-/* Add subsystem definitions of the form SUBSYS(<name>) in this
- * file. Surround each one by a line of comment markers so that
- * patches don't collide
+/*
+ * List of cgroup subsystems.
+ *
+ * DO NOT ADD ANY SUBSYSTEM WITHOUT EXPLICIT ACKS FROM CGROUP MAINTAINERS.
*/
-
-/* */
-
-/* */
-
#if IS_SUBSYS_ENABLED(CONFIG_CPUSETS)
SUBSYS(cpuset)
#endif
-/* */
-
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_DEBUG)
SUBSYS(debug)
#endif
-/* */
-
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_SCHED)
SUBSYS(cpu_cgroup)
#endif
-/* */
-
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_CPUACCT)
SUBSYS(cpuacct)
#endif
-/* */
-
#if IS_SUBSYS_ENABLED(CONFIG_MEMCG)
SUBSYS(mem_cgroup)
#endif
-/* */
-
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_DEVICE)
SUBSYS(devices)
#endif
-/* */
-
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_FREEZER)
SUBSYS(freezer)
#endif
-/* */
-
#if IS_SUBSYS_ENABLED(CONFIG_NET_CLS_CGROUP)
SUBSYS(net_cls)
#endif
-/* */
-
#if IS_SUBSYS_ENABLED(CONFIG_BLK_CGROUP)
SUBSYS(blkio)
#endif
-/* */
-
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_PERF)
SUBSYS(perf)
#endif
-/* */
-
#if IS_SUBSYS_ENABLED(CONFIG_NETPRIO_CGROUP)
SUBSYS(net_prio)
#endif
-/* */
-
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_HUGETLB)
SUBSYS(hugetlb)
#endif
-
-/* */
-
-#ifdef CONFIG_CGROUP_BCACHE
-SUBSYS(bcache)
-#endif
-
-/* */
+/*
+ * DO NOT ADD ANY SUBSYSTEM WITHOUT EXPLICIT ACKS FROM CGROUP MAINTAINERS.
+ */
diff --git a/include/linux/cpu.h b/include/linux/cpu.h
index 944f283f01c4..ab0eade73039 100644
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -114,7 +114,7 @@ enum {
/* Need to know about CPUs going up/down? */
#if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE)
#define cpu_notifier(fn, pri) { \
- static struct notifier_block fn##_nb __cpuinitdata = \
+ static struct notifier_block fn##_nb = \
{ .notifier_call = fn, .priority = pri }; \
register_cpu_notifier(&fn##_nb); \
}
diff --git a/include/linux/crc-t10dif.h b/include/linux/crc-t10dif.h
index b3cb71f0d3b0..a9c96d865ee7 100644
--- a/include/linux/crc-t10dif.h
+++ b/include/linux/crc-t10dif.h
@@ -3,10 +3,6 @@
#include <linux/types.h>
-#define CRC_T10DIF_DIGEST_SIZE 2
-#define CRC_T10DIF_BLOCK_SIZE 1
-
-__u16 crc_t10dif_generic(__u16 crc, const unsigned char *buffer, size_t len);
__u16 crc_t10dif(unsigned char const *, size_t);
#endif
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index 3092df3614ae..b90337c9d468 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -324,7 +324,7 @@ static inline int __d_rcu_to_refcount(struct dentry *dentry, unsigned seq)
return ret;
}
-static inline unsigned d_count(struct dentry *dentry)
+static inline unsigned d_count(const struct dentry *dentry)
{
return dentry->d_count;
}
diff --git a/include/linux/device.h b/include/linux/device.h
index bcf8c0d4cd98..22b546a58591 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -47,7 +47,11 @@ struct bus_attribute {
};
#define BUS_ATTR(_name, _mode, _show, _store) \
-struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)
+ struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)
+#define BUS_ATTR_RW(_name) \
+ struct bus_attribute bus_attr_##_name = __ATTR_RW(_name)
+#define BUS_ATTR_RO(_name) \
+ struct bus_attribute bus_attr_##_name = __ATTR_RO(_name)
extern int __must_check bus_create_file(struct bus_type *,
struct bus_attribute *);
@@ -261,9 +265,12 @@ struct driver_attribute {
size_t count);
};
-#define DRIVER_ATTR(_name, _mode, _show, _store) \
-struct driver_attribute driver_attr_##_name = \
- __ATTR(_name, _mode, _show, _store)
+#define DRIVER_ATTR(_name, _mode, _show, _store) \
+ struct driver_attribute driver_attr_##_name = __ATTR(_name, _mode, _show, _store)
+#define DRIVER_ATTR_RW(_name) \
+ struct driver_attribute driver_attr_##_name = __ATTR_RW(_name)
+#define DRIVER_ATTR_RO(_name) \
+ struct driver_attribute driver_attr_##_name = __ATTR_RO(_name)
extern int __must_check driver_create_file(struct device_driver *driver,
const struct driver_attribute *attr);
@@ -313,6 +320,7 @@ int subsys_virtual_register(struct bus_type *subsys,
* @name: Name of the class.
* @owner: The module owner.
* @class_attrs: Default attributes of this class.
+ * @dev_groups: Default attributes of the devices that belong to the class.
* @dev_attrs: Default attributes of the devices belong to the class.
* @dev_bin_attrs: Default binary attributes of the devices belong to the class.
* @dev_kobj: The kobject that represents this class and links it into the hierarchy.
@@ -342,7 +350,8 @@ struct class {
struct module *owner;
struct class_attribute *class_attrs;
- struct device_attribute *dev_attrs;
+ struct device_attribute *dev_attrs; /* use dev_groups instead */
+ const struct attribute_group **dev_groups;
struct bin_attribute *dev_bin_attrs;
struct kobject *dev_kobj;
@@ -414,8 +423,12 @@ struct class_attribute {
const struct class_attribute *attr);
};
-#define CLASS_ATTR(_name, _mode, _show, _store) \
-struct class_attribute class_attr_##_name = __ATTR(_name, _mode, _show, _store)
+#define CLASS_ATTR(_name, _mode, _show, _store) \
+ struct class_attribute class_attr_##_name = __ATTR(_name, _mode, _show, _store)
+#define CLASS_ATTR_RW(_name) \
+ struct class_attribute class_attr_##_name = __ATTR_RW(_name)
+#define CLASS_ATTR_RO(_name) \
+ struct class_attribute class_attr_##_name = __ATTR_RO(_name)
extern int __must_check class_create_file(struct class *class,
const struct class_attribute *attr);
@@ -423,7 +436,6 @@ extern void class_remove_file(struct class *class,
const struct class_attribute *attr);
/* Simple class attribute that is just a static string */
-
struct class_attribute_string {
struct class_attribute attr;
char *str;
@@ -512,6 +524,10 @@ ssize_t device_store_bool(struct device *dev, struct device_attribute *attr,
#define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
+#define DEVICE_ATTR_RW(_name) \
+ struct device_attribute dev_attr_##_name = __ATTR_RW(_name)
+#define DEVICE_ATTR_RO(_name) \
+ struct device_attribute dev_attr_##_name = __ATTR_RO(_name)
#define DEVICE_ULONG_ATTR(_name, _mode, _var) \
struct dev_ext_attribute dev_attr_##_name = \
{ __ATTR(_name, _mode, device_show_ulong, device_store_ulong), &(_var) }
@@ -924,6 +940,11 @@ extern __printf(5, 6)
struct device *device_create(struct class *cls, struct device *parent,
dev_t devt, void *drvdata,
const char *fmt, ...);
+extern __printf(6, 7)
+struct device *device_create_with_groups(struct class *cls,
+ struct device *parent, dev_t devt, void *drvdata,
+ const struct attribute_group **groups,
+ const char *fmt, ...);
extern void device_destroy(struct class *cls, dev_t devt);
/*
diff --git a/include/linux/drbd.h b/include/linux/drbd.h
index 1b4d4ee1168f..de7d74ab3de6 100644
--- a/include/linux/drbd.h
+++ b/include/linux/drbd.h
@@ -177,7 +177,11 @@ enum drbd_ret_code {
ERR_NEED_APV_100 = 163,
ERR_NEED_ALLOW_TWO_PRI = 164,
ERR_MD_UNCLEAN = 165,
-
+ ERR_MD_LAYOUT_CONNECTED = 166,
+ ERR_MD_LAYOUT_TOO_BIG = 167,
+ ERR_MD_LAYOUT_TOO_SMALL = 168,
+ ERR_MD_LAYOUT_NO_FIT = 169,
+ ERR_IMPLICIT_SHRINK = 170,
/* insert new ones above this line */
AFTER_LAST_ERR_CODE
};
diff --git a/include/linux/drbd_genl.h b/include/linux/drbd_genl.h
index d0d8fac8a6e4..e8c44572b8cb 100644
--- a/include/linux/drbd_genl.h
+++ b/include/linux/drbd_genl.h
@@ -181,6 +181,8 @@ GENL_struct(DRBD_NLA_RESIZE_PARMS, 7, resize_parms,
__u64_field(1, DRBD_GENLA_F_MANDATORY, resize_size)
__flg_field(2, DRBD_GENLA_F_MANDATORY, resize_force)
__flg_field(3, DRBD_GENLA_F_MANDATORY, no_resync)
+ __u32_field_def(4, 0 /* OPTIONAL */, al_stripes, DRBD_AL_STRIPES_DEF)
+ __u32_field_def(5, 0 /* OPTIONAL */, al_stripe_size, DRBD_AL_STRIPE_SIZE_DEF)
)
GENL_struct(DRBD_NLA_STATE_INFO, 8, state_info,
diff --git a/include/linux/drbd_limits.h b/include/linux/drbd_limits.h
index 1fedf2b17cc8..17e50bb00521 100644
--- a/include/linux/drbd_limits.h
+++ b/include/linux/drbd_limits.h
@@ -215,4 +215,13 @@
#define DRBD_ALWAYS_ASBP_DEF 0
#define DRBD_USE_RLE_DEF 1
+#define DRBD_AL_STRIPES_MIN 1
+#define DRBD_AL_STRIPES_MAX 1024
+#define DRBD_AL_STRIPES_DEF 1
+#define DRBD_AL_STRIPES_SCALE '1'
+
+#define DRBD_AL_STRIPE_SIZE_MIN 4
+#define DRBD_AL_STRIPE_SIZE_MAX 16777216
+#define DRBD_AL_STRIPE_SIZE_DEF 32
+#define DRBD_AL_STRIPE_SIZE_SCALE 'k' /* kilobytes */
#endif
diff --git a/include/linux/edac.h b/include/linux/edac.h
index 0b763276f619..5c6d7fbaf89e 100644
--- a/include/linux/edac.h
+++ b/include/linux/edac.h
@@ -622,7 +622,7 @@ struct edac_raw_error_desc {
*/
struct mem_ctl_info {
struct device dev;
- struct bus_type bus;
+ struct bus_type *bus;
struct list_head link; /* for global list of mem_ctl_info structs */
@@ -742,4 +742,9 @@ struct mem_ctl_info {
#endif
};
+/*
+ * Maximum number of memory controllers in the coherent fabric.
+ */
+#define EDAC_MAX_MCS 16
+
#endif
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
index cdcbafa9b39a..715c343f7c00 100644
--- a/include/linux/if_vlan.h
+++ b/include/linux/if_vlan.h
@@ -79,9 +79,8 @@ static inline int is_vlan_dev(struct net_device *dev)
}
#define vlan_tx_tag_present(__skb) ((__skb)->vlan_tci & VLAN_TAG_PRESENT)
-#define vlan_tx_nonzero_tag_present(__skb) \
- (vlan_tx_tag_present(__skb) && ((__skb)->vlan_tci & VLAN_VID_MASK))
#define vlan_tx_tag_get(__skb) ((__skb)->vlan_tci & ~VLAN_TAG_PRESENT)
+#define vlan_tx_tag_get_id(__skb) ((__skb)->vlan_tci & VLAN_VID_MASK)
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
index 8d171f427632..3d35b7023591 100644
--- a/include/linux/iio/iio.h
+++ b/include/linux/iio/iio.h
@@ -211,8 +211,8 @@ struct iio_chan_spec {
static inline bool iio_channel_has_info(const struct iio_chan_spec *chan,
enum iio_chan_info_enum type)
{
- return (chan->info_mask_separate & type) |
- (chan->info_mask_shared_by_type & type);
+ return (chan->info_mask_separate & BIT(type)) |
+ (chan->info_mask_shared_by_type & BIT(type));
}
#define IIO_ST(si, rb, sb, sh) \
diff --git a/include/linux/list.h b/include/linux/list.h
index b83e5657365a..f4d8a2f12a33 100644
--- a/include/linux/list.h
+++ b/include/linux/list.h
@@ -381,17 +381,6 @@ static inline void list_splice_tail_init(struct list_head *list,
for (pos = (head)->next; pos != (head); pos = pos->next)
/**
- * __list_for_each - iterate over a list
- * @pos: the &struct list_head to use as a loop cursor.
- * @head: the head for your list.
- *
- * This variant doesn't differ from list_for_each() any more.
- * We don't do prefetching in either case.
- */
-#define __list_for_each(pos, head) \
- for (pos = (head)->next; pos != (head); pos = pos->next)
-
-/**
* list_for_each_prev - iterate over a list backwards
* @pos: the &struct list_head to use as a loop cursor.
* @head: the head for your list.
diff --git a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
index dab34a1deb2c..b6bdcd66c07d 100644
--- a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
+++ b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
@@ -103,15 +103,15 @@
#define IMX6Q_GPR1_EXC_MON_MASK BIT(22)
#define IMX6Q_GPR1_EXC_MON_OKAY 0x0
#define IMX6Q_GPR1_EXC_MON_SLVE BIT(22)
-#define IMX6Q_GPR1_MIPI_IPU2_SEL_MASK BIT(21)
-#define IMX6Q_GPR1_MIPI_IPU2_SEL_GASKET 0x0
-#define IMX6Q_GPR1_MIPI_IPU2_SEL_IOMUX BIT(21)
-#define IMX6Q_GPR1_MIPI_IPU1_MUX_MASK BIT(20)
-#define IMX6Q_GPR1_MIPI_IPU1_MUX_GASKET 0x0
-#define IMX6Q_GPR1_MIPI_IPU1_MUX_IOMUX BIT(20)
-#define IMX6Q_GPR1_MIPI_IPU2_MUX_MASK BIT(19)
+#define IMX6Q_GPR1_ENET_CLK_SEL_MASK BIT(21)
+#define IMX6Q_GPR1_ENET_CLK_SEL_PAD 0
+#define IMX6Q_GPR1_ENET_CLK_SEL_ANATOP BIT(21)
+#define IMX6Q_GPR1_MIPI_IPU2_MUX_MASK BIT(20)
#define IMX6Q_GPR1_MIPI_IPU2_MUX_GASKET 0x0
-#define IMX6Q_GPR1_MIPI_IPU2_MUX_IOMUX BIT(19)
+#define IMX6Q_GPR1_MIPI_IPU2_MUX_IOMUX BIT(20)
+#define IMX6Q_GPR1_MIPI_IPU1_MUX_MASK BIT(19)
+#define IMX6Q_GPR1_MIPI_IPU1_MUX_GASKET 0x0
+#define IMX6Q_GPR1_MIPI_IPU1_MUX_IOMUX BIT(19)
#define IMX6Q_GPR1_PCIE_TEST_PD BIT(18)
#define IMX6Q_GPR1_IPU_VPU_MUX_MASK BIT(17)
#define IMX6Q_GPR1_IPU_VPU_MUX_IPU1 0x0
@@ -279,41 +279,88 @@
#define IMX6Q_GPR13_CAN2_STOP_REQ BIT(29)
#define IMX6Q_GPR13_CAN1_STOP_REQ BIT(28)
#define IMX6Q_GPR13_ENET_STOP_REQ BIT(27)
-#define IMX6Q_GPR13_SATA_PHY_8_MASK (0x7 << 24)
-#define IMX6Q_GPR13_SATA_PHY_8_0_5_DB (0x0 << 24)
-#define IMX6Q_GPR13_SATA_PHY_8_1_0_DB (0x1 << 24)
-#define IMX6Q_GPR13_SATA_PHY_8_1_5_DB (0x2 << 24)
-#define IMX6Q_GPR13_SATA_PHY_8_2_0_DB (0x3 << 24)
-#define IMX6Q_GPR13_SATA_PHY_8_2_5_DB (0x4 << 24)
-#define IMX6Q_GPR13_SATA_PHY_8_3_0_DB (0x5 << 24)
-#define IMX6Q_GPR13_SATA_PHY_8_3_5_DB (0x6 << 24)
-#define IMX6Q_GPR13_SATA_PHY_8_4_0_DB (0x7 << 24)
-#define IMX6Q_GPR13_SATA_PHY_7_MASK (0x1f << 19)
-#define IMX6Q_GPR13_SATA_PHY_7_SATA1I (0x10 << 19)
-#define IMX6Q_GPR13_SATA_PHY_7_SATA1M (0x10 << 19)
-#define IMX6Q_GPR13_SATA_PHY_7_SATA1X (0x1a << 19)
-#define IMX6Q_GPR13_SATA_PHY_7_SATA2I (0x12 << 19)
-#define IMX6Q_GPR13_SATA_PHY_7_SATA2M (0x12 << 19)
-#define IMX6Q_GPR13_SATA_PHY_7_SATA2X (0x1a << 19)
-#define IMX6Q_GPR13_SATA_PHY_6_MASK (0x7 << 16)
-#define IMX6Q_GPR13_SATA_SPEED_MASK BIT(15)
-#define IMX6Q_GPR13_SATA_SPEED_1P5G 0x0
-#define IMX6Q_GPR13_SATA_SPEED_3P0G BIT(15)
-#define IMX6Q_GPR13_SATA_PHY_5 BIT(14)
-#define IMX6Q_GPR13_SATA_PHY_4_MASK (0x7 << 11)
-#define IMX6Q_GPR13_SATA_PHY_4_16_16 (0x0 << 11)
-#define IMX6Q_GPR13_SATA_PHY_4_14_16 (0x1 << 11)
-#define IMX6Q_GPR13_SATA_PHY_4_12_16 (0x2 << 11)
-#define IMX6Q_GPR13_SATA_PHY_4_10_16 (0x3 << 11)
-#define IMX6Q_GPR13_SATA_PHY_4_9_16 (0x4 << 11)
-#define IMX6Q_GPR13_SATA_PHY_4_8_16 (0x5 << 11)
-#define IMX6Q_GPR13_SATA_PHY_3_MASK (0xf << 7)
-#define IMX6Q_GPR13_SATA_PHY_3_OFF 0x7
-#define IMX6Q_GPR13_SATA_PHY_2_MASK (0x1f << 2)
-#define IMX6Q_GPR13_SATA_PHY_2_OFF 0x2
-#define IMX6Q_GPR13_SATA_PHY_1_MASK (0x3 << 0)
-#define IMX6Q_GPR13_SATA_PHY_1_FAST (0x0 << 0)
-#define IMX6Q_GPR13_SATA_PHY_1_MED (0x1 << 0)
-#define IMX6Q_GPR13_SATA_PHY_1_SLOW (0x2 << 0)
-
+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_MASK (0x7 << 24)
+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_0_5_DB (0x0 << 24)
+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_1_0_DB (0x1 << 24)
+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_1_5_DB (0x2 << 24)
+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_2_0_DB (0x3 << 24)
+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_2_5_DB (0x4 << 24)
+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB (0x5 << 24)
+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_3_5_DB (0x6 << 24)
+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_4_0_DB (0x7 << 24)
+#define IMX6Q_GPR13_SATA_RX_LOS_LVL_MASK (0x1f << 19)
+#define IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA1I (0x10 << 19)
+#define IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA1M (0x10 << 19)
+#define IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA1X (0x1a << 19)
+#define IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2I (0x12 << 19)
+#define IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M (0x12 << 19)
+#define IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2X (0x1a << 19)
+#define IMX6Q_GPR13_SATA_RX_DPLL_MODE_MASK (0x7 << 16)
+#define IMX6Q_GPR13_SATA_RX_DPLL_MODE_1P_1F (0x0 << 16)
+#define IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_2F (0x1 << 16)
+#define IMX6Q_GPR13_SATA_RX_DPLL_MODE_1P_4F (0x2 << 16)
+#define IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F (0x3 << 16)
+#define IMX6Q_GPR13_SATA_SPD_MODE_MASK BIT(15)
+#define IMX6Q_GPR13_SATA_SPD_MODE_1P5G 0x0
+#define IMX6Q_GPR13_SATA_SPD_MODE_3P0G BIT(15)
+#define IMX6Q_GPR13_SATA_MPLL_SS_EN BIT(14)
+#define IMX6Q_GPR13_SATA_TX_ATTEN_MASK (0x7 << 11)
+#define IMX6Q_GPR13_SATA_TX_ATTEN_16_16 (0x0 << 11)
+#define IMX6Q_GPR13_SATA_TX_ATTEN_14_16 (0x1 << 11)
+#define IMX6Q_GPR13_SATA_TX_ATTEN_12_16 (0x2 << 11)
+#define IMX6Q_GPR13_SATA_TX_ATTEN_10_16 (0x3 << 11)
+#define IMX6Q_GPR13_SATA_TX_ATTEN_9_16 (0x4 << 11)
+#define IMX6Q_GPR13_SATA_TX_ATTEN_8_16 (0x5 << 11)
+#define IMX6Q_GPR13_SATA_TX_BOOST_MASK (0xf << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_0_00_DB (0x0 << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_0_37_DB (0x1 << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_0_74_DB (0x2 << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_1_11_DB (0x3 << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_1_48_DB (0x4 << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_1_85_DB (0x5 << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_2_22_DB (0x6 << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_2_59_DB (0x7 << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_2_96_DB (0x8 << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_3_33_DB (0x9 << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_3_70_DB (0xa << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_4_07_DB (0xb << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_4_44_DB (0xc << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_4_81_DB (0xd << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_5_28_DB (0xe << 7)
+#define IMX6Q_GPR13_SATA_TX_BOOST_5_75_DB (0xf << 7)
+#define IMX6Q_GPR13_SATA_TX_LVL_MASK (0x1f << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_0_937_V (0x00 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_0_947_V (0x01 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_0_957_V (0x02 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_0_966_V (0x03 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_0_976_V (0x04 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_0_986_V (0x05 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_0_996_V (0x06 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_005_V (0x07 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_015_V (0x08 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_025_V (0x09 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_035_V (0x0a << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_045_V (0x0b << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_054_V (0x0c << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_064_V (0x0d << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_074_V (0x0e << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_084_V (0x0f << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_094_V (0x10 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_104_V (0x11 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_113_V (0x12 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_123_V (0x13 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_133_V (0x14 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_143_V (0x15 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_152_V (0x16 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_162_V (0x17 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_172_V (0x18 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_182_V (0x19 << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_191_V (0x1a << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_201_V (0x1b << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_211_V (0x1c << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_221_V (0x1d << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_230_V (0x1e << 2)
+#define IMX6Q_GPR13_SATA_TX_LVL_1_240_V (0x1f << 2)
+#define IMX6Q_GPR13_SATA_MPLL_CLK_EN BIT(1)
+#define IMX6Q_GPR13_SATA_TX_EDGE_RATE BIT(0)
#endif /* __LINUX_IMX6Q_IOMUXC_GPR_H */
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 8873f82c7baa..c43f6eabad5b 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -826,7 +826,7 @@ static inline void perf_restore_debug_store(void) { }
*/
#define perf_cpu_notifier(fn) \
do { \
- static struct notifier_block fn##_nb __cpuinitdata = \
+ static struct notifier_block fn##_nb = \
{ .notifier_call = fn, .priority = CPU_PRI_PERF }; \
unsigned long cpu = smp_processor_id(); \
unsigned long flags; \
diff --git a/include/linux/platform_data/mmc-pxamci.h b/include/linux/platform_data/mmc-pxamci.h
index 9eb515bb799d..1706b3597ce0 100644
--- a/include/linux/platform_data/mmc-pxamci.h
+++ b/include/linux/platform_data/mmc-pxamci.h
@@ -12,7 +12,7 @@ struct pxamci_platform_data {
unsigned long detect_delay_ms; /* delay in millisecond before detecting cards after interrupt */
int (*init)(struct device *, irq_handler_t , void *);
int (*get_ro)(struct device *);
- void (*setpower)(struct device *, unsigned int);
+ int (*setpower)(struct device *, unsigned int);
void (*exit)(struct device *, void *);
int gpio_card_detect; /* gpio detecting card insertion */
int gpio_card_ro; /* gpio detecting read only toggle */
diff --git a/include/linux/pm_wakeup.h b/include/linux/pm_wakeup.h
index 569781faa504..a0f70808d7f4 100644
--- a/include/linux/pm_wakeup.h
+++ b/include/linux/pm_wakeup.h
@@ -36,8 +36,8 @@
* @last_time: Monotonic clock when the wakeup source's was touched last time.
* @prevent_sleep_time: Total time this source has been preventing autosleep.
* @event_count: Number of signaled wakeup events.
- * @active_count: Number of times the wakeup sorce was activated.
- * @relax_count: Number of times the wakeup sorce was deactivated.
+ * @active_count: Number of times the wakeup source was activated.
+ * @relax_count: Number of times the wakeup source was deactivated.
* @expire_count: Number of times the wakeup source's timeout has expired.
* @wakeup_count: Number of times the wakeup source might abort suspend.
* @active: Status of the wakeup source.
diff --git a/include/linux/shdma-base.h b/include/linux/shdma-base.h
index 382cf710ca9a..5b1c9848124c 100644
--- a/include/linux/shdma-base.h
+++ b/include/linux/shdma-base.h
@@ -124,6 +124,10 @@ void shdma_chan_remove(struct shdma_chan *schan);
int shdma_init(struct device *dev, struct shdma_dev *sdev,
int chan_num);
void shdma_cleanup(struct shdma_dev *sdev);
+#if IS_ENABLED(CONFIG_SH_DMAE_BASE)
bool shdma_chan_filter(struct dma_chan *chan, void *arg);
+#else
+#define shdma_chan_filter NULL
+#endif
#endif
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h
index e2cee22f578a..9e8a9b555ad6 100644
--- a/include/linux/sysfs.h
+++ b/include/linux/sysfs.h
@@ -17,10 +17,12 @@
#include <linux/list.h>
#include <linux/lockdep.h>
#include <linux/kobject_ns.h>
+#include <linux/stat.h>
#include <linux/atomic.h>
struct kobject;
struct module;
+struct bin_attribute;
enum kobj_ns_type;
struct attribute {
@@ -59,26 +61,28 @@ struct attribute_group {
umode_t (*is_visible)(struct kobject *,
struct attribute *, int);
struct attribute **attrs;
+ struct bin_attribute **bin_attrs;
};
-
-
/**
* Use these macros to make defining attributes easier. See include/linux/device.h
* for examples..
*/
-#define __ATTR(_name,_mode,_show,_store) { \
- .attr = {.name = __stringify(_name), .mode = _mode }, \
- .show = _show, \
- .store = _store, \
+#define __ATTR(_name,_mode,_show,_store) { \
+ .attr = {.name = __stringify(_name), .mode = _mode }, \
+ .show = _show, \
+ .store = _store, \
}
-#define __ATTR_RO(_name) { \
- .attr = { .name = __stringify(_name), .mode = 0444 }, \
- .show = _name##_show, \
+#define __ATTR_RO(_name) { \
+ .attr = { .name = __stringify(_name), .mode = S_IRUGO }, \
+ .show = _name##_show, \
}
+#define __ATTR_RW(_name) __ATTR(_name, (S_IWUSR | S_IRUGO), \
+ _name##_show, _name##_store)
+
#define __ATTR_NULL { .attr = { .name = NULL } }
#ifdef CONFIG_DEBUG_LOCK_ALLOC
@@ -92,6 +96,18 @@ struct attribute_group {
#define __ATTR_IGNORE_LOCKDEP __ATTR
#endif
+#define __ATTRIBUTE_GROUPS(_name) \
+static const struct attribute_group *_name##_groups[] = { \
+ &_name##_group, \
+ NULL, \
+}
+
+#define ATTRIBUTE_GROUPS(_name) \
+static const struct attribute_group _name##_group = { \
+ .attrs = _name##_attrs, \
+}; \
+__ATTRIBUTE_GROUPS(_name)
+
#define attr_name(_attr) (_attr).attr.name
struct file;
@@ -121,6 +137,36 @@ struct bin_attribute {
*/
#define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr)
+/* macros to create static binary attributes easier */
+#define __BIN_ATTR(_name, _mode, _read, _write, _size) { \
+ .attr = { .name = __stringify(_name), .mode = _mode }, \
+ .read = _read, \
+ .write = _write, \
+ .size = _size, \
+}
+
+#define __BIN_ATTR_RO(_name, _size) { \
+ .attr = { .name = __stringify(_name), .mode = S_IRUGO }, \
+ .read = _name##_read, \
+ .size = _size, \
+}
+
+#define __BIN_ATTR_RW(_name, _size) __BIN_ATTR(_name, \
+ (S_IWUSR | S_IRUGO), _name##_read, \
+ _name##_write)
+
+#define __BIN_ATTR_NULL __ATTR_NULL
+
+#define BIN_ATTR(_name, _mode, _read, _write, _size) \
+struct bin_attribute bin_attr_##_name = __BIN_ATTR(_name, _mode, _read, \
+ _write, _size)
+
+#define BIN_ATTR_RO(_name, _size) \
+struct bin_attribute bin_attr_##_name = __BIN_ATTR_RO(_name, _size)
+
+#define BIN_ATTR_RW(_name, _size) \
+struct bin_attribute bin_attr_##_name = __BIN_ATTR_RW(_name, _size)
+
struct sysfs_ops {
ssize_t (*show)(struct kobject *, struct attribute *,char *);
ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
diff --git a/include/linux/usb.h b/include/linux/usb.h
index a232b7ece1f6..0eec2689b955 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -367,17 +367,6 @@ struct usb_bus {
/* ----------------------------------------------------------------------- */
-/* This is arbitrary.
- * From USB 2.0 spec Table 11-13, offset 7, a hub can
- * have up to 255 ports. The most yet reported is 10.
- *
- * Current Wireless USB host hardware (Intel i1480 for example) allows
- * up to 22 devices to connect. Upcoming hardware might raise that
- * limit. Because the arrays need to add a bit for hub status data, we
- * do 31, so plus one evens out to four bytes.
- */
-#define USB_MAXCHILDREN (31)
-
struct usb_tt;
enum usb_device_removable {
diff --git a/include/trace/events/bcache.h b/include/trace/events/bcache.h
index 3cc5a0b278c3..5ebda976ea93 100644
--- a/include/trace/events/bcache.h
+++ b/include/trace/events/bcache.h
@@ -9,9 +9,7 @@
struct search;
DECLARE_EVENT_CLASS(bcache_request,
-
TP_PROTO(struct search *s, struct bio *bio),
-
TP_ARGS(s, bio),
TP_STRUCT__entry(
@@ -22,7 +20,6 @@ DECLARE_EVENT_CLASS(bcache_request,
__field(dev_t, orig_sector )
__field(unsigned int, nr_sector )
__array(char, rwbs, 6 )
- __array(char, comm, TASK_COMM_LEN )
),
TP_fast_assign(
@@ -33,36 +30,66 @@ DECLARE_EVENT_CLASS(bcache_request,
__entry->orig_sector = bio->bi_sector - 16;
__entry->nr_sector = bio->bi_size >> 9;
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
- memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
),
- TP_printk("%d,%d %s %llu + %u [%s] (from %d,%d @ %llu)",
+ TP_printk("%d,%d %s %llu + %u (from %d,%d @ %llu)",
MAJOR(__entry->dev), MINOR(__entry->dev),
- __entry->rwbs,
- (unsigned long long)__entry->sector,
- __entry->nr_sector, __entry->comm,
- __entry->orig_major, __entry->orig_minor,
+ __entry->rwbs, (unsigned long long)__entry->sector,
+ __entry->nr_sector, __entry->orig_major, __entry->orig_minor,
(unsigned long long)__entry->orig_sector)
);
-DEFINE_EVENT(bcache_request, bcache_request_start,
+DECLARE_EVENT_CLASS(bkey,
+ TP_PROTO(struct bkey *k),
+ TP_ARGS(k),
- TP_PROTO(struct search *s, struct bio *bio),
+ TP_STRUCT__entry(
+ __field(u32, size )
+ __field(u32, inode )
+ __field(u64, offset )
+ __field(bool, dirty )
+ ),
- TP_ARGS(s, bio)
+ TP_fast_assign(
+ __entry->inode = KEY_INODE(k);
+ __entry->offset = KEY_OFFSET(k);
+ __entry->size = KEY_SIZE(k);
+ __entry->dirty = KEY_DIRTY(k);
+ ),
+
+ TP_printk("%u:%llu len %u dirty %u", __entry->inode,
+ __entry->offset, __entry->size, __entry->dirty)
);
-DEFINE_EVENT(bcache_request, bcache_request_end,
+DECLARE_EVENT_CLASS(btree_node,
+ TP_PROTO(struct btree *b),
+ TP_ARGS(b),
+
+ TP_STRUCT__entry(
+ __field(size_t, bucket )
+ ),
+ TP_fast_assign(
+ __entry->bucket = PTR_BUCKET_NR(b->c, &b->key, 0);
+ ),
+
+ TP_printk("bucket %zu", __entry->bucket)
+);
+
+/* request.c */
+
+DEFINE_EVENT(bcache_request, bcache_request_start,
TP_PROTO(struct search *s, struct bio *bio),
+ TP_ARGS(s, bio)
+);
+DEFINE_EVENT(bcache_request, bcache_request_end,
+ TP_PROTO(struct search *s, struct bio *bio),
TP_ARGS(s, bio)
);
DECLARE_EVENT_CLASS(bcache_bio,
-
TP_PROTO(struct bio *bio),
-
TP_ARGS(bio),
TP_STRUCT__entry(
@@ -70,7 +97,6 @@ DECLARE_EVENT_CLASS(bcache_bio,
__field(sector_t, sector )
__field(unsigned int, nr_sector )
__array(char, rwbs, 6 )
- __array(char, comm, TASK_COMM_LEN )
),
TP_fast_assign(
@@ -78,191 +104,328 @@ DECLARE_EVENT_CLASS(bcache_bio,
__entry->sector = bio->bi_sector;
__entry->nr_sector = bio->bi_size >> 9;
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
- memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
),
- TP_printk("%d,%d %s %llu + %u [%s]",
- MAJOR(__entry->dev), MINOR(__entry->dev),
- __entry->rwbs,
- (unsigned long long)__entry->sector,
- __entry->nr_sector, __entry->comm)
+ TP_printk("%d,%d %s %llu + %u",
+ MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
+ (unsigned long long)__entry->sector, __entry->nr_sector)
);
-
-DEFINE_EVENT(bcache_bio, bcache_passthrough,
-
+DEFINE_EVENT(bcache_bio, bcache_bypass_sequential,
TP_PROTO(struct bio *bio),
+ TP_ARGS(bio)
+);
+DEFINE_EVENT(bcache_bio, bcache_bypass_congested,
+ TP_PROTO(struct bio *bio),
TP_ARGS(bio)
);
-DEFINE_EVENT(bcache_bio, bcache_cache_hit,
+TRACE_EVENT(bcache_read,
+ TP_PROTO(struct bio *bio, bool hit, bool bypass),
+ TP_ARGS(bio, hit, bypass),
- TP_PROTO(struct bio *bio),
+ TP_STRUCT__entry(
+ __field(dev_t, dev )
+ __field(sector_t, sector )
+ __field(unsigned int, nr_sector )
+ __array(char, rwbs, 6 )
+ __field(bool, cache_hit )
+ __field(bool, bypass )
+ ),
- TP_ARGS(bio)
+ TP_fast_assign(
+ __entry->dev = bio->bi_bdev->bd_dev;
+ __entry->sector = bio->bi_sector;
+ __entry->nr_sector = bio->bi_size >> 9;
+ blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
+ __entry->cache_hit = hit;
+ __entry->bypass = bypass;
+ ),
+
+ TP_printk("%d,%d %s %llu + %u hit %u bypass %u",
+ MAJOR(__entry->dev), MINOR(__entry->dev),
+ __entry->rwbs, (unsigned long long)__entry->sector,
+ __entry->nr_sector, __entry->cache_hit, __entry->bypass)
);
-DEFINE_EVENT(bcache_bio, bcache_cache_miss,
+TRACE_EVENT(bcache_write,
+ TP_PROTO(struct bio *bio, bool writeback, bool bypass),
+ TP_ARGS(bio, writeback, bypass),
- TP_PROTO(struct bio *bio),
+ TP_STRUCT__entry(
+ __field(dev_t, dev )
+ __field(sector_t, sector )
+ __field(unsigned int, nr_sector )
+ __array(char, rwbs, 6 )
+ __field(bool, writeback )
+ __field(bool, bypass )
+ ),
- TP_ARGS(bio)
+ TP_fast_assign(
+ __entry->dev = bio->bi_bdev->bd_dev;
+ __entry->sector = bio->bi_sector;
+ __entry->nr_sector = bio->bi_size >> 9;
+ blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
+ __entry->writeback = writeback;
+ __entry->bypass = bypass;
+ ),
+
+ TP_printk("%d,%d %s %llu + %u hit %u bypass %u",
+ MAJOR(__entry->dev), MINOR(__entry->dev),
+ __entry->rwbs, (unsigned long long)__entry->sector,
+ __entry->nr_sector, __entry->writeback, __entry->bypass)
);
DEFINE_EVENT(bcache_bio, bcache_read_retry,
-
TP_PROTO(struct bio *bio),
-
TP_ARGS(bio)
);
-DEFINE_EVENT(bcache_bio, bcache_writethrough,
+DEFINE_EVENT(bkey, bcache_cache_insert,
+ TP_PROTO(struct bkey *k),
+ TP_ARGS(k)
+);
- TP_PROTO(struct bio *bio),
+/* Journal */
- TP_ARGS(bio)
-);
+DECLARE_EVENT_CLASS(cache_set,
+ TP_PROTO(struct cache_set *c),
+ TP_ARGS(c),
-DEFINE_EVENT(bcache_bio, bcache_writeback,
+ TP_STRUCT__entry(
+ __array(char, uuid, 16 )
+ ),
- TP_PROTO(struct bio *bio),
+ TP_fast_assign(
+ memcpy(__entry->uuid, c->sb.set_uuid, 16);
+ ),
- TP_ARGS(bio)
+ TP_printk("%pU", __entry->uuid)
);
-DEFINE_EVENT(bcache_bio, bcache_write_skip,
-
- TP_PROTO(struct bio *bio),
+DEFINE_EVENT(bkey, bcache_journal_replay_key,
+ TP_PROTO(struct bkey *k),
+ TP_ARGS(k)
+);
- TP_ARGS(bio)
+DEFINE_EVENT(cache_set, bcache_journal_full,
+ TP_PROTO(struct cache_set *c),
+ TP_ARGS(c)
);
-DEFINE_EVENT(bcache_bio, bcache_btree_read,
+DEFINE_EVENT(cache_set, bcache_journal_entry_full,
+ TP_PROTO(struct cache_set *c),
+ TP_ARGS(c)
+);
+DEFINE_EVENT(bcache_bio, bcache_journal_write,
TP_PROTO(struct bio *bio),
-
TP_ARGS(bio)
);
-DEFINE_EVENT(bcache_bio, bcache_btree_write,
+/* Btree */
- TP_PROTO(struct bio *bio),
+DEFINE_EVENT(cache_set, bcache_btree_cache_cannibalize,
+ TP_PROTO(struct cache_set *c),
+ TP_ARGS(c)
+);
- TP_ARGS(bio)
+DEFINE_EVENT(btree_node, bcache_btree_read,
+ TP_PROTO(struct btree *b),
+ TP_ARGS(b)
);
-DEFINE_EVENT(bcache_bio, bcache_write_dirty,
+TRACE_EVENT(bcache_btree_write,
+ TP_PROTO(struct btree *b),
+ TP_ARGS(b),
- TP_PROTO(struct bio *bio),
+ TP_STRUCT__entry(
+ __field(size_t, bucket )
+ __field(unsigned, block )
+ __field(unsigned, keys )
+ ),
- TP_ARGS(bio)
+ TP_fast_assign(
+ __entry->bucket = PTR_BUCKET_NR(b->c, &b->key, 0);
+ __entry->block = b->written;
+ __entry->keys = b->sets[b->nsets].data->keys;
+ ),
+
+ TP_printk("bucket %zu", __entry->bucket)
);
-DEFINE_EVENT(bcache_bio, bcache_read_dirty,
+DEFINE_EVENT(btree_node, bcache_btree_node_alloc,
+ TP_PROTO(struct btree *b),
+ TP_ARGS(b)
+);
- TP_PROTO(struct bio *bio),
+DEFINE_EVENT(btree_node, bcache_btree_node_alloc_fail,
+ TP_PROTO(struct btree *b),
+ TP_ARGS(b)
+);
- TP_ARGS(bio)
+DEFINE_EVENT(btree_node, bcache_btree_node_free,
+ TP_PROTO(struct btree *b),
+ TP_ARGS(b)
);
-DEFINE_EVENT(bcache_bio, bcache_write_moving,
+TRACE_EVENT(bcache_btree_gc_coalesce,
+ TP_PROTO(unsigned nodes),
+ TP_ARGS(nodes),
- TP_PROTO(struct bio *bio),
+ TP_STRUCT__entry(
+ __field(unsigned, nodes )
+ ),
- TP_ARGS(bio)
+ TP_fast_assign(
+ __entry->nodes = nodes;
+ ),
+
+ TP_printk("coalesced %u nodes", __entry->nodes)
);
-DEFINE_EVENT(bcache_bio, bcache_read_moving,
+DEFINE_EVENT(cache_set, bcache_gc_start,
+ TP_PROTO(struct cache_set *c),
+ TP_ARGS(c)
+);
- TP_PROTO(struct bio *bio),
+DEFINE_EVENT(cache_set, bcache_gc_end,
+ TP_PROTO(struct cache_set *c),
+ TP_ARGS(c)
+);
- TP_ARGS(bio)
+DEFINE_EVENT(bkey, bcache_gc_copy,
+ TP_PROTO(struct bkey *k),
+ TP_ARGS(k)
);
-DEFINE_EVENT(bcache_bio, bcache_journal_write,
+DEFINE_EVENT(bkey, bcache_gc_copy_collision,
+ TP_PROTO(struct bkey *k),
+ TP_ARGS(k)
+);
- TP_PROTO(struct bio *bio),
+TRACE_EVENT(bcache_btree_insert_key,
+ TP_PROTO(struct btree *b, struct bkey *k, unsigned op, unsigned status),
+ TP_ARGS(b, k, op, status),
- TP_ARGS(bio)
-);
+ TP_STRUCT__entry(
+ __field(u64, btree_node )
+ __field(u32, btree_level )
+ __field(u32, inode )
+ __field(u64, offset )
+ __field(u32, size )
+ __field(u8, dirty )
+ __field(u8, op )
+ __field(u8, status )
+ ),
-DECLARE_EVENT_CLASS(bcache_cache_bio,
+ TP_fast_assign(
+ __entry->btree_node = PTR_BUCKET_NR(b->c, &b->key, 0);
+ __entry->btree_level = b->level;
+ __entry->inode = KEY_INODE(k);
+ __entry->offset = KEY_OFFSET(k);
+ __entry->size = KEY_SIZE(k);
+ __entry->dirty = KEY_DIRTY(k);
+ __entry->op = op;
+ __entry->status = status;
+ ),
- TP_PROTO(struct bio *bio,
- sector_t orig_sector,
- struct block_device* orig_bdev),
+ TP_printk("%u for %u at %llu(%u): %u:%llu len %u dirty %u",
+ __entry->status, __entry->op,
+ __entry->btree_node, __entry->btree_level,
+ __entry->inode, __entry->offset,
+ __entry->size, __entry->dirty)
+);
- TP_ARGS(bio, orig_sector, orig_bdev),
+DECLARE_EVENT_CLASS(btree_split,
+ TP_PROTO(struct btree *b, unsigned keys),
+ TP_ARGS(b, keys),
TP_STRUCT__entry(
- __field(dev_t, dev )
- __field(dev_t, orig_dev )
- __field(sector_t, sector )
- __field(sector_t, orig_sector )
- __field(unsigned int, nr_sector )
- __array(char, rwbs, 6 )
- __array(char, comm, TASK_COMM_LEN )
+ __field(size_t, bucket )
+ __field(unsigned, keys )
),
TP_fast_assign(
- __entry->dev = bio->bi_bdev->bd_dev;
- __entry->orig_dev = orig_bdev->bd_dev;
- __entry->sector = bio->bi_sector;
- __entry->orig_sector = orig_sector;
- __entry->nr_sector = bio->bi_size >> 9;
- blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
- memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
+ __entry->bucket = PTR_BUCKET_NR(b->c, &b->key, 0);
+ __entry->keys = keys;
),
- TP_printk("%d,%d %s %llu + %u [%s] (from %d,%d %llu)",
- MAJOR(__entry->dev), MINOR(__entry->dev),
- __entry->rwbs,
- (unsigned long long)__entry->sector,
- __entry->nr_sector, __entry->comm,
- MAJOR(__entry->orig_dev), MINOR(__entry->orig_dev),
- (unsigned long long)__entry->orig_sector)
+ TP_printk("bucket %zu keys %u", __entry->bucket, __entry->keys)
);
-DEFINE_EVENT(bcache_cache_bio, bcache_cache_insert,
-
- TP_PROTO(struct bio *bio,
- sector_t orig_sector,
- struct block_device *orig_bdev),
+DEFINE_EVENT(btree_split, bcache_btree_node_split,
+ TP_PROTO(struct btree *b, unsigned keys),
+ TP_ARGS(b, keys)
+);
- TP_ARGS(bio, orig_sector, orig_bdev)
+DEFINE_EVENT(btree_split, bcache_btree_node_compact,
+ TP_PROTO(struct btree *b, unsigned keys),
+ TP_ARGS(b, keys)
);
-DECLARE_EVENT_CLASS(bcache_gc,
+DEFINE_EVENT(btree_node, bcache_btree_set_root,
+ TP_PROTO(struct btree *b),
+ TP_ARGS(b)
+);
- TP_PROTO(uint8_t *uuid),
+/* Allocator */
- TP_ARGS(uuid),
+TRACE_EVENT(bcache_alloc_invalidate,
+ TP_PROTO(struct cache *ca),
+ TP_ARGS(ca),
TP_STRUCT__entry(
- __field(uint8_t *, uuid)
+ __field(unsigned, free )
+ __field(unsigned, free_inc )
+ __field(unsigned, free_inc_size )
+ __field(unsigned, unused )
),
TP_fast_assign(
- __entry->uuid = uuid;
+ __entry->free = fifo_used(&ca->free);
+ __entry->free_inc = fifo_used(&ca->free_inc);
+ __entry->free_inc_size = ca->free_inc.size;
+ __entry->unused = fifo_used(&ca->unused);
),
- TP_printk("%pU", __entry->uuid)
+ TP_printk("free %u free_inc %u/%u unused %u", __entry->free,
+ __entry->free_inc, __entry->free_inc_size, __entry->unused)
);
+TRACE_EVENT(bcache_alloc_fail,
+ TP_PROTO(struct cache *ca),
+ TP_ARGS(ca),
-DEFINE_EVENT(bcache_gc, bcache_gc_start,
+ TP_STRUCT__entry(
+ __field(unsigned, free )
+ __field(unsigned, free_inc )
+ __field(unsigned, unused )
+ __field(unsigned, blocked )
+ ),
- TP_PROTO(uint8_t *uuid),
+ TP_fast_assign(
+ __entry->free = fifo_used(&ca->free);
+ __entry->free_inc = fifo_used(&ca->free_inc);
+ __entry->unused = fifo_used(&ca->unused);
+ __entry->blocked = atomic_read(&ca->set->prio_blocked);
+ ),
- TP_ARGS(uuid)
+ TP_printk("free %u free_inc %u unused %u blocked %u", __entry->free,
+ __entry->free_inc, __entry->unused, __entry->blocked)
);
-DEFINE_EVENT(bcache_gc, bcache_gc_end,
+/* Background writeback */
- TP_PROTO(uint8_t *uuid),
+DEFINE_EVENT(bkey, bcache_writeback,
+ TP_PROTO(struct bkey *k),
+ TP_ARGS(k)
+);
- TP_ARGS(uuid)
+DEFINE_EVENT(bkey, bcache_writeback_collision,
+ TP_PROTO(struct bkey *k),
+ TP_ARGS(k)
);
#endif /* _TRACE_BCACHE_H */
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
index d615f78cc6b6..41a6643e2136 100644
--- a/include/trace/ftrace.h
+++ b/include/trace/ftrace.h
@@ -670,10 +670,6 @@ perf_trace_##call(void *__data, proto) \
sizeof(u64)); \
__entry_size -= sizeof(u32); \
\
- if (WARN_ONCE(__entry_size > PERF_MAX_TRACE_SIZE, \
- "profile buffer not large enough")) \
- return; \
- \
entry = (struct ftrace_raw_##call *)perf_trace_buf_prepare( \
__entry_size, event_call->event.type, &__regs, &rctx); \
if (!entry) \
diff --git a/include/uapi/asm-generic/fcntl.h b/include/uapi/asm-generic/fcntl.h
index 05ac354e124d..95e46c8e05f9 100644
--- a/include/uapi/asm-generic/fcntl.h
+++ b/include/uapi/asm-generic/fcntl.h
@@ -89,8 +89,8 @@
#endif
/* a horrid kludge trying to make sure that this will fail on old kernels */
-#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY | O_RDWR)
-#define O_TMPFILE_MASK (__O_TMPFILE | O_DIRECTORY | O_CREAT | O_ACCMODE)
+#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY)
+#define O_TMPFILE_MASK (__O_TMPFILE | O_DIRECTORY | O_CREAT)
#ifndef O_NDELAY
#define O_NDELAY O_NONBLOCK
diff --git a/include/uapi/linux/usb/ch11.h b/include/uapi/linux/usb/ch11.h
index 7692dc69ccf7..331499d597fa 100644
--- a/include/uapi/linux/usb/ch11.h
+++ b/include/uapi/linux/usb/ch11.h
@@ -11,6 +11,17 @@
#include <linux/types.h> /* __u8 etc */
+/* This is arbitrary.
+ * From USB 2.0 spec Table 11-13, offset 7, a hub can
+ * have up to 255 ports. The most yet reported is 10.
+ *
+ * Current Wireless USB host hardware (Intel i1480 for example) allows
+ * up to 22 devices to connect. Upcoming hardware might raise that
+ * limit. Because the arrays need to add a bit for hub status data, we
+ * use 31, so plus one evens out to four bytes.
+ */
+#define USB_MAXCHILDREN 31
+
/*
* Hub request types
*/
diff --git a/include/xen/interface/io/blkif.h b/include/xen/interface/io/blkif.h
index ffd4652de91c..65e12099ef89 100644
--- a/include/xen/interface/io/blkif.h
+++ b/include/xen/interface/io/blkif.h
@@ -103,12 +103,46 @@ typedef uint64_t blkif_sector_t;
#define BLKIF_OP_DISCARD 5
/*
+ * Recognized if "feature-max-indirect-segments" in present in the backend
+ * xenbus info. The "feature-max-indirect-segments" node contains the maximum
+ * number of segments allowed by the backend per request. If the node is
+ * present, the frontend might use blkif_request_indirect structs in order to
+ * issue requests with more than BLKIF_MAX_SEGMENTS_PER_REQUEST (11). The
+ * maximum number of indirect segments is fixed by the backend, but the
+ * frontend can issue requests with any number of indirect segments as long as
+ * it's less than the number provided by the backend. The indirect_grefs field
+ * in blkif_request_indirect should be filled by the frontend with the
+ * grant references of the pages that are holding the indirect segments.
+ * This pages are filled with an array of blkif_request_segment_aligned
+ * that hold the information about the segments. The number of indirect
+ * pages to use is determined by the maximum number of segments
+ * a indirect request contains. Every indirect page can contain a maximum
+ * of 512 segments (PAGE_SIZE/sizeof(blkif_request_segment_aligned)),
+ * so to calculate the number of indirect pages to use we have to do
+ * ceil(indirect_segments/512).
+ *
+ * If a backend does not recognize BLKIF_OP_INDIRECT, it should *not*
+ * create the "feature-max-indirect-segments" node!
+ */
+#define BLKIF_OP_INDIRECT 6
+
+/*
* Maximum scatter/gather segments per request.
* This is carefully chosen so that sizeof(struct blkif_ring) <= PAGE_SIZE.
* NB. This could be 12 if the ring indexes weren't stored in the same page.
*/
#define BLKIF_MAX_SEGMENTS_PER_REQUEST 11
+#define BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST 8
+
+struct blkif_request_segment_aligned {
+ grant_ref_t gref; /* reference to I/O buffer frame */
+ /* @first_sect: first sector in frame to transfer (inclusive). */
+ /* @last_sect: last sector in frame to transfer (inclusive). */
+ uint8_t first_sect, last_sect;
+ uint16_t _pad; /* padding to make it 8 bytes, so it's cache-aligned */
+} __attribute__((__packed__));
+
struct blkif_request_rw {
uint8_t nr_segments; /* number of segments */
blkif_vdev_t handle; /* only for read/write requests */
@@ -147,12 +181,31 @@ struct blkif_request_other {
uint64_t id; /* private guest value, echoed in resp */
} __attribute__((__packed__));
+struct blkif_request_indirect {
+ uint8_t indirect_op;
+ uint16_t nr_segments;
+#ifdef CONFIG_X86_64
+ uint32_t _pad1; /* offsetof(blkif_...,u.indirect.id) == 8 */
+#endif
+ uint64_t id;
+ blkif_sector_t sector_number;
+ blkif_vdev_t handle;
+ uint16_t _pad2;
+ grant_ref_t indirect_grefs[BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST];
+#ifdef CONFIG_X86_64
+ uint32_t _pad3; /* make it 64 byte aligned */
+#else
+ uint64_t _pad3; /* make it 64 byte aligned */
+#endif
+} __attribute__((__packed__));
+
struct blkif_request {
uint8_t operation; /* BLKIF_OP_??? */
union {
struct blkif_request_rw rw;
struct blkif_request_discard discard;
struct blkif_request_other other;
+ struct blkif_request_indirect indirect;
} u;
} __attribute__((__packed__));
diff --git a/include/xen/interface/io/ring.h b/include/xen/interface/io/ring.h
index 75271b9a8f61..7d28aff605c7 100644
--- a/include/xen/interface/io/ring.h
+++ b/include/xen/interface/io/ring.h
@@ -188,6 +188,11 @@ struct __name##_back_ring { \
#define RING_REQUEST_CONS_OVERFLOW(_r, _cons) \
(((_cons) - (_r)->rsp_prod_pvt) >= RING_SIZE(_r))
+/* Ill-behaved frontend determination: Can there be this many requests? */
+#define RING_REQUEST_PROD_OVERFLOW(_r, _prod) \
+ (((_prod) - (_r)->rsp_prod_pvt) > RING_SIZE(_r))
+
+
#define RING_PUSH_REQUESTS(_r) do { \
wmb(); /* back sees requests /before/ updated producer index */ \
(_r)->sring->req_prod = (_r)->req_prod_pvt; \
diff --git a/init/calibrate.c b/init/calibrate.c
index fda0a7b0f06c..520702db9acc 100644
--- a/init/calibrate.c
+++ b/init/calibrate.c
@@ -31,7 +31,7 @@ __setup("lpj=", lpj_setup);
#define DELAY_CALIBRATION_TICKS ((HZ < 100) ? 1 : (HZ/100))
#define MAX_DIRECT_CALIBRATION_RETRIES 5
-static unsigned long __cpuinit calibrate_delay_direct(void)
+static unsigned long calibrate_delay_direct(void)
{
unsigned long pre_start, start, post_start;
unsigned long pre_end, end, post_end;
@@ -166,7 +166,10 @@ static unsigned long __cpuinit calibrate_delay_direct(void)
return 0;
}
#else
-static unsigned long __cpuinit calibrate_delay_direct(void) {return 0;}
+static unsigned long calibrate_delay_direct(void)
+{
+ return 0;
+}
#endif
/*
@@ -180,7 +183,7 @@ static unsigned long __cpuinit calibrate_delay_direct(void) {return 0;}
*/
#define LPS_PREC 8
-static unsigned long __cpuinit calibrate_delay_converge(void)
+static unsigned long calibrate_delay_converge(void)
{
/* First stage - slowly accelerate to find initial bounds */
unsigned long lpj, lpj_base, ticks, loopadd, loopadd_base, chop_limit;
@@ -254,12 +257,12 @@ static DEFINE_PER_CPU(unsigned long, cpu_loops_per_jiffy) = { 0 };
* Architectures should override this function if a faster calibration
* method is available.
*/
-unsigned long __attribute__((weak)) __cpuinit calibrate_delay_is_known(void)
+unsigned long __attribute__((weak)) calibrate_delay_is_known(void)
{
return 0;
}
-void __cpuinit calibrate_delay(void)
+void calibrate_delay(void)
{
unsigned long lpj;
static bool printed;
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index 0e0b20b8c5db..789ec4683db3 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -1845,36 +1845,43 @@ out:
EXPORT_SYMBOL_GPL(cgroup_path);
/**
- * task_cgroup_path_from_hierarchy - cgroup path of a task on a hierarchy
+ * task_cgroup_path - cgroup path of a task in the first cgroup hierarchy
* @task: target task
- * @hierarchy_id: the hierarchy to look up @task's cgroup from
* @buf: the buffer to write the path into
* @buflen: the length of the buffer
*
- * Determine @task's cgroup on the hierarchy specified by @hierarchy_id and
- * copy its path into @buf. This function grabs cgroup_mutex and shouldn't
- * be used inside locks used by cgroup controller callbacks.
+ * Determine @task's cgroup on the first (the one with the lowest non-zero
+ * hierarchy_id) cgroup hierarchy and copy its path into @buf. This
+ * function grabs cgroup_mutex and shouldn't be used inside locks used by
+ * cgroup controller callbacks.
+ *
+ * Returns 0 on success, fails with -%ENAMETOOLONG if @buflen is too short.
*/
-int task_cgroup_path_from_hierarchy(struct task_struct *task, int hierarchy_id,
- char *buf, size_t buflen)
+int task_cgroup_path(struct task_struct *task, char *buf, size_t buflen)
{
struct cgroupfs_root *root;
- struct cgroup *cgrp = NULL;
- int ret = -ENOENT;
+ struct cgroup *cgrp;
+ int hierarchy_id = 1, ret = 0;
+
+ if (buflen < 2)
+ return -ENAMETOOLONG;
mutex_lock(&cgroup_mutex);
- root = idr_find(&cgroup_hierarchy_idr, hierarchy_id);
+ root = idr_get_next(&cgroup_hierarchy_idr, &hierarchy_id);
+
if (root) {
cgrp = task_cgroup_from_root(task, root);
ret = cgroup_path(cgrp, buf, buflen);
+ } else {
+ /* if no hierarchy exists, everyone is in "/" */
+ memcpy(buf, "/", 2);
}
mutex_unlock(&cgroup_mutex);
-
return ret;
}
-EXPORT_SYMBOL_GPL(task_cgroup_path_from_hierarchy);
+EXPORT_SYMBOL_GPL(task_cgroup_path);
/*
* Control Group taskset
diff --git a/kernel/cpu.c b/kernel/cpu.c
index 198a38883e64..b2b227b82123 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -366,7 +366,7 @@ EXPORT_SYMBOL(cpu_down);
#endif /*CONFIG_HOTPLUG_CPU*/
/* Requires cpu_add_remove_lock to be held */
-static int __cpuinit _cpu_up(unsigned int cpu, int tasks_frozen)
+static int _cpu_up(unsigned int cpu, int tasks_frozen)
{
int ret, nr_calls = 0;
void *hcpu = (void *)(long)cpu;
@@ -419,7 +419,7 @@ out:
return ret;
}
-int __cpuinit cpu_up(unsigned int cpu)
+int cpu_up(unsigned int cpu)
{
int err = 0;
@@ -618,7 +618,7 @@ core_initcall(cpu_hotplug_pm_sync_init);
* It must be called by the arch code on the new cpu, before the new cpu
* enables interrupts and before the "boot" cpu returns from __cpu_up().
*/
-void __cpuinit notify_cpu_starting(unsigned int cpu)
+void notify_cpu_starting(unsigned int cpu)
{
unsigned long val = CPU_STARTING;
diff --git a/kernel/events/core.c b/kernel/events/core.c
index eba8fb5834ae..f86599e8c123 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -6234,8 +6234,6 @@ perf_event_mux_interval_ms_store(struct device *dev,
return count;
}
-#define __ATTR_RW(attr) __ATTR(attr, 0644, attr##_show, attr##_store)
-
static struct device_attribute pmu_dev_attrs[] = {
__ATTR_RO(type),
__ATTR_RW(perf_event_mux_interval_ms),
@@ -7630,7 +7628,7 @@ static void __init perf_event_init_all_cpus(void)
}
}
-static void __cpuinit perf_event_init_cpu(int cpu)
+static void perf_event_init_cpu(int cpu)
{
struct swevent_htable *swhash = &per_cpu(swevent_htable, cpu);
@@ -7719,7 +7717,7 @@ static struct notifier_block perf_reboot_notifier = {
.priority = INT_MIN,
};
-static int __cpuinit
+static int
perf_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu)
{
unsigned int cpu = (long)hcpu;
diff --git a/kernel/fork.c b/kernel/fork.c
index 66635c80a813..403d2bb8a968 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1546,7 +1546,7 @@ static inline void init_idle_pids(struct pid_link *links)
}
}
-struct task_struct * __cpuinit fork_idle(int cpu)
+struct task_struct *fork_idle(int cpu)
{
struct task_struct *task;
task = copy_process(CLONE_VM, 0, 0, NULL, &init_struct_pid, 0);
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
index f0f4fe29cd21..383319bae3f7 100644
--- a/kernel/hrtimer.c
+++ b/kernel/hrtimer.c
@@ -1659,7 +1659,7 @@ SYSCALL_DEFINE2(nanosleep, struct timespec __user *, rqtp,
/*
* Functions related to boot-time initialization:
*/
-static void __cpuinit init_hrtimers_cpu(int cpu)
+static void init_hrtimers_cpu(int cpu)
{
struct hrtimer_cpu_base *cpu_base = &per_cpu(hrtimer_bases, cpu);
int i;
@@ -1740,7 +1740,7 @@ static void migrate_hrtimers(int scpu)
#endif /* CONFIG_HOTPLUG_CPU */
-static int __cpuinit hrtimer_cpu_notify(struct notifier_block *self,
+static int hrtimer_cpu_notify(struct notifier_block *self,
unsigned long action, void *hcpu)
{
int scpu = (long)hcpu;
@@ -1773,7 +1773,7 @@ static int __cpuinit hrtimer_cpu_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata hrtimers_nb = {
+static struct notifier_block hrtimers_nb = {
.notifier_call = hrtimer_cpu_notify,
};
diff --git a/kernel/power/autosleep.c b/kernel/power/autosleep.c
index c6422ffeda9a..9012ecf7b814 100644
--- a/kernel/power/autosleep.c
+++ b/kernel/power/autosleep.c
@@ -32,7 +32,8 @@ static void try_to_suspend(struct work_struct *work)
mutex_lock(&autosleep_lock);
- if (!pm_save_wakeup_count(initial_count)) {
+ if (!pm_save_wakeup_count(initial_count) ||
+ system_state != SYSTEM_RUNNING) {
mutex_unlock(&autosleep_lock);
goto out;
}
diff --git a/kernel/printk.c b/kernel/printk.c
index d37d45c90ae6..69b0890ed7e5 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -1921,7 +1921,7 @@ void resume_console(void)
* called when a new CPU comes online (or fails to come up), and ensures
* that any such output gets printed.
*/
-static int __cpuinit console_cpu_notify(struct notifier_block *self,
+static int console_cpu_notify(struct notifier_block *self,
unsigned long action, void *hcpu)
{
switch (action) {
diff --git a/kernel/profile.c b/kernel/profile.c
index 0bf400737660..6631e1ef55ab 100644
--- a/kernel/profile.c
+++ b/kernel/profile.c
@@ -331,7 +331,7 @@ out:
put_cpu();
}
-static int __cpuinit profile_cpu_callback(struct notifier_block *info,
+static int profile_cpu_callback(struct notifier_block *info,
unsigned long action, void *__cpu)
{
int node, cpu = (unsigned long)__cpu;
diff --git a/kernel/rcutorture.c b/kernel/rcutorture.c
index b1fa5510388d..f4871e52c546 100644
--- a/kernel/rcutorture.c
+++ b/kernel/rcutorture.c
@@ -1476,7 +1476,7 @@ rcu_torture_shutdown(void *arg)
* Execute random CPU-hotplug operations at the interval specified
* by the onoff_interval.
*/
-static int __cpuinit
+static int
rcu_torture_onoff(void *arg)
{
int cpu;
@@ -1558,7 +1558,7 @@ rcu_torture_onoff(void *arg)
return 0;
}
-static int __cpuinit
+static int
rcu_torture_onoff_init(void)
{
int ret;
@@ -1601,7 +1601,7 @@ static void rcu_torture_onoff_cleanup(void)
* CPU-stall kthread. It waits as specified by stall_cpu_holdoff, then
* induces a CPU stall for the time specified by stall_cpu.
*/
-static int __cpuinit rcu_torture_stall(void *args)
+static int rcu_torture_stall(void *args)
{
unsigned long stop_at;
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index e08abb9461ac..068de3a93606 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -2910,7 +2910,7 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp)
* can accept some slop in the rsp->completed access due to the fact
* that this CPU cannot possibly have any RCU callbacks in flight yet.
*/
-static void __cpuinit
+static void
rcu_init_percpu_data(int cpu, struct rcu_state *rsp, int preemptible)
{
unsigned long flags;
@@ -2962,7 +2962,7 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp, int preemptible)
mutex_unlock(&rsp->onoff_mutex);
}
-static void __cpuinit rcu_prepare_cpu(int cpu)
+static void rcu_prepare_cpu(int cpu)
{
struct rcu_state *rsp;
@@ -2974,7 +2974,7 @@ static void __cpuinit rcu_prepare_cpu(int cpu)
/*
* Handle CPU online/offline notification events.
*/
-static int __cpuinit rcu_cpu_notify(struct notifier_block *self,
+static int rcu_cpu_notify(struct notifier_block *self,
unsigned long action, void *hcpu)
{
long cpu = (long)hcpu;
diff --git a/kernel/rcutree.h b/kernel/rcutree.h
index 4a39d364493c..b3832581043c 100644
--- a/kernel/rcutree.h
+++ b/kernel/rcutree.h
@@ -521,10 +521,10 @@ static void invoke_rcu_callbacks_kthread(void);
static bool rcu_is_callbacks_kthread(void);
#ifdef CONFIG_RCU_BOOST
static void rcu_preempt_do_callbacks(void);
-static int __cpuinit rcu_spawn_one_boost_kthread(struct rcu_state *rsp,
+static int rcu_spawn_one_boost_kthread(struct rcu_state *rsp,
struct rcu_node *rnp);
#endif /* #ifdef CONFIG_RCU_BOOST */
-static void __cpuinit rcu_prepare_kthreads(int cpu);
+static void rcu_prepare_kthreads(int cpu);
static void rcu_cleanup_after_idle(int cpu);
static void rcu_prepare_for_idle(int cpu);
static void rcu_idle_count_callbacks_posted(void);
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
index 63098a59216e..769e12e3151b 100644
--- a/kernel/rcutree_plugin.h
+++ b/kernel/rcutree_plugin.h
@@ -1352,7 +1352,7 @@ static void rcu_preempt_boost_start_gp(struct rcu_node *rnp)
* already exist. We only create this kthread for preemptible RCU.
* Returns zero if all is well, a negated errno otherwise.
*/
-static int __cpuinit rcu_spawn_one_boost_kthread(struct rcu_state *rsp,
+static int rcu_spawn_one_boost_kthread(struct rcu_state *rsp,
struct rcu_node *rnp)
{
int rnp_index = rnp - &rsp->node[0];
@@ -1507,7 +1507,7 @@ static int __init rcu_spawn_kthreads(void)
}
early_initcall(rcu_spawn_kthreads);
-static void __cpuinit rcu_prepare_kthreads(int cpu)
+static void rcu_prepare_kthreads(int cpu)
{
struct rcu_data *rdp = per_cpu_ptr(rcu_state->rda, cpu);
struct rcu_node *rnp = rdp->mynode;
@@ -1549,7 +1549,7 @@ static int __init rcu_scheduler_really_started(void)
}
early_initcall(rcu_scheduler_really_started);
-static void __cpuinit rcu_prepare_kthreads(int cpu)
+static void rcu_prepare_kthreads(int cpu)
{
}
diff --git a/kernel/relay.c b/kernel/relay.c
index b91488ba2e5a..5001c9887db1 100644
--- a/kernel/relay.c
+++ b/kernel/relay.c
@@ -516,7 +516,7 @@ static void setup_callbacks(struct rchan *chan,
*
* Returns the success/failure of the operation. (%NOTIFY_OK, %NOTIFY_BAD)
*/
-static int __cpuinit relay_hotcpu_callback(struct notifier_block *nb,
+static int relay_hotcpu_callback(struct notifier_block *nb,
unsigned long action,
void *hcpu)
{
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 0d8eb4525e76..b7c32cb7bfeb 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -4133,7 +4133,7 @@ void show_state_filter(unsigned long state_filter)
debug_show_all_locks();
}
-void __cpuinit init_idle_bootup_task(struct task_struct *idle)
+void init_idle_bootup_task(struct task_struct *idle)
{
idle->sched_class = &idle_sched_class;
}
@@ -4146,7 +4146,7 @@ void __cpuinit init_idle_bootup_task(struct task_struct *idle)
* NOTE: this function does not set the idle thread's NEED_RESCHED
* flag, to make booting more robust.
*/
-void __cpuinit init_idle(struct task_struct *idle, int cpu)
+void init_idle(struct task_struct *idle, int cpu)
{
struct rq *rq = cpu_rq(cpu);
unsigned long flags;
@@ -4630,7 +4630,7 @@ static void set_rq_offline(struct rq *rq)
* migration_call - callback that gets triggered when a CPU is added.
* Here we can start up the necessary migration thread for the new CPU.
*/
-static int __cpuinit
+static int
migration_call(struct notifier_block *nfb, unsigned long action, void *hcpu)
{
int cpu = (long)hcpu;
@@ -4684,12 +4684,12 @@ migration_call(struct notifier_block *nfb, unsigned long action, void *hcpu)
* happens before everything else. This has to be lower priority than
* the notifier in the perf_event subsystem, though.
*/
-static struct notifier_block __cpuinitdata migration_notifier = {
+static struct notifier_block migration_notifier = {
.notifier_call = migration_call,
.priority = CPU_PRI_MIGRATION,
};
-static int __cpuinit sched_cpu_active(struct notifier_block *nfb,
+static int sched_cpu_active(struct notifier_block *nfb,
unsigned long action, void *hcpu)
{
switch (action & ~CPU_TASKS_FROZEN) {
@@ -4702,7 +4702,7 @@ static int __cpuinit sched_cpu_active(struct notifier_block *nfb,
}
}
-static int __cpuinit sched_cpu_inactive(struct notifier_block *nfb,
+static int sched_cpu_inactive(struct notifier_block *nfb,
unsigned long action, void *hcpu)
{
switch (action & ~CPU_TASKS_FROZEN) {
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index f77f9c527449..bb456f44b7b1 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5506,7 +5506,7 @@ void nohz_balance_enter_idle(int cpu)
set_bit(NOHZ_TICK_STOPPED, nohz_flags(cpu));
}
-static int __cpuinit sched_ilb_notifier(struct notifier_block *nfb,
+static int sched_ilb_notifier(struct notifier_block *nfb,
unsigned long action, void *hcpu)
{
switch (action & ~CPU_TASKS_FROZEN) {
diff --git a/kernel/smp.c b/kernel/smp.c
index 4dba0f7b72ad..fe9f773d7114 100644
--- a/kernel/smp.c
+++ b/kernel/smp.c
@@ -73,7 +73,7 @@ hotplug_cfd(struct notifier_block *nfb, unsigned long action, void *hcpu)
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata hotplug_cfd_notifier = {
+static struct notifier_block hotplug_cfd_notifier = {
.notifier_call = hotplug_cfd,
};
diff --git a/kernel/smpboot.c b/kernel/smpboot.c
index 02fc5c933673..eb89e1807408 100644
--- a/kernel/smpboot.c
+++ b/kernel/smpboot.c
@@ -24,7 +24,7 @@
*/
static DEFINE_PER_CPU(struct task_struct *, idle_threads);
-struct task_struct * __cpuinit idle_thread_get(unsigned int cpu)
+struct task_struct *idle_thread_get(unsigned int cpu)
{
struct task_struct *tsk = per_cpu(idle_threads, cpu);
diff --git a/kernel/softirq.c b/kernel/softirq.c
index ca25e6e704a2..be3d3514c325 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -699,7 +699,7 @@ void send_remote_softirq(struct call_single_data *cp, int cpu, int softirq)
}
EXPORT_SYMBOL(send_remote_softirq);
-static int __cpuinit remote_softirq_cpu_notify(struct notifier_block *self,
+static int remote_softirq_cpu_notify(struct notifier_block *self,
unsigned long action, void *hcpu)
{
/*
@@ -728,7 +728,7 @@ static int __cpuinit remote_softirq_cpu_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata remote_softirq_cpu_notifier = {
+static struct notifier_block remote_softirq_cpu_notifier = {
.notifier_call = remote_softirq_cpu_notify,
};
@@ -830,7 +830,7 @@ static void takeover_tasklets(unsigned int cpu)
}
#endif /* CONFIG_HOTPLUG_CPU */
-static int __cpuinit cpu_callback(struct notifier_block *nfb,
+static int cpu_callback(struct notifier_block *nfb,
unsigned long action,
void *hcpu)
{
@@ -845,7 +845,7 @@ static int __cpuinit cpu_callback(struct notifier_block *nfb,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata cpu_nfb = {
+static struct notifier_block cpu_nfb = {
.notifier_call = cpu_callback
};
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index 69601726a745..e80183f4a6c4 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -298,7 +298,7 @@ static int __init tick_nohz_full_setup(char *str)
}
__setup("nohz_full=", tick_nohz_full_setup);
-static int __cpuinit tick_nohz_cpu_down_callback(struct notifier_block *nfb,
+static int tick_nohz_cpu_down_callback(struct notifier_block *nfb,
unsigned long action,
void *hcpu)
{
diff --git a/kernel/timer.c b/kernel/timer.c
index 15bc1b41021d..4296d13db3d1 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -1505,11 +1505,11 @@ signed long __sched schedule_timeout_uninterruptible(signed long timeout)
}
EXPORT_SYMBOL(schedule_timeout_uninterruptible);
-static int __cpuinit init_timers_cpu(int cpu)
+static int init_timers_cpu(int cpu)
{
int j;
struct tvec_base *base;
- static char __cpuinitdata tvec_base_done[NR_CPUS];
+ static char tvec_base_done[NR_CPUS];
if (!tvec_base_done[cpu]) {
static char boot_done;
@@ -1577,7 +1577,7 @@ static void migrate_timer_list(struct tvec_base *new_base, struct list_head *hea
}
}
-static void __cpuinit migrate_timers(int cpu)
+static void migrate_timers(int cpu)
{
struct tvec_base *old_base;
struct tvec_base *new_base;
@@ -1610,7 +1610,7 @@ static void __cpuinit migrate_timers(int cpu)
}
#endif /* CONFIG_HOTPLUG_CPU */
-static int __cpuinit timer_cpu_notify(struct notifier_block *self,
+static int timer_cpu_notify(struct notifier_block *self,
unsigned long action, void *hcpu)
{
long cpu = (long)hcpu;
@@ -1635,7 +1635,7 @@ static int __cpuinit timer_cpu_notify(struct notifier_block *self,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata timers_nb = {
+static struct notifier_block timers_nb = {
.notifier_call = timer_cpu_notify,
};
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 67708f46baae..8ce9eefc5bb4 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -1441,12 +1441,22 @@ ftrace_hash_move(struct ftrace_ops *ops, int enable,
* the hashes are freed with call_rcu_sched().
*/
static int
-ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip)
+ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip, void *regs)
{
struct ftrace_hash *filter_hash;
struct ftrace_hash *notrace_hash;
int ret;
+#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
+ /*
+ * There's a small race when adding ops that the ftrace handler
+ * that wants regs, may be called without them. We can not
+ * allow that handler to be called if regs is NULL.
+ */
+ if (regs == NULL && (ops->flags & FTRACE_OPS_FL_SAVE_REGS))
+ return 0;
+#endif
+
filter_hash = rcu_dereference_raw_notrace(ops->filter_hash);
notrace_hash = rcu_dereference_raw_notrace(ops->notrace_hash);
@@ -4218,7 +4228,7 @@ static inline void ftrace_startup_enable(int command) { }
# define ftrace_shutdown_sysctl() do { } while (0)
static inline int
-ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip)
+ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip, void *regs)
{
return 1;
}
@@ -4241,7 +4251,7 @@ ftrace_ops_control_func(unsigned long ip, unsigned long parent_ip,
do_for_each_ftrace_op(op, ftrace_control_list) {
if (!(op->flags & FTRACE_OPS_FL_STUB) &&
!ftrace_function_local_disabled(op) &&
- ftrace_ops_test(op, ip))
+ ftrace_ops_test(op, ip, regs))
op->func(ip, parent_ip, op, regs);
} while_for_each_ftrace_op(op);
trace_recursion_clear(TRACE_CONTROL_BIT);
@@ -4274,7 +4284,7 @@ __ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
*/
preempt_disable_notrace();
do_for_each_ftrace_op(op, ftrace_ops_list) {
- if (ftrace_ops_test(op, ip))
+ if (ftrace_ops_test(op, ip, regs))
op->func(ip, parent_ip, op, regs);
} while_for_each_ftrace_op(op);
preempt_enable_notrace();
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index e444ff88f0a4..cc2f66f68dc5 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -36,11 +36,11 @@ int ring_buffer_print_entry_header(struct trace_seq *s)
{
int ret;
- ret = trace_seq_printf(s, "# compressed entry header\n");
- ret = trace_seq_printf(s, "\ttype_len : 5 bits\n");
- ret = trace_seq_printf(s, "\ttime_delta : 27 bits\n");
- ret = trace_seq_printf(s, "\tarray : 32 bits\n");
- ret = trace_seq_printf(s, "\n");
+ ret = trace_seq_puts(s, "# compressed entry header\n");
+ ret = trace_seq_puts(s, "\ttype_len : 5 bits\n");
+ ret = trace_seq_puts(s, "\ttime_delta : 27 bits\n");
+ ret = trace_seq_puts(s, "\tarray : 32 bits\n");
+ ret = trace_seq_putc(s, '\n');
ret = trace_seq_printf(s, "\tpadding : type == %d\n",
RINGBUF_TYPE_PADDING);
ret = trace_seq_printf(s, "\ttime_extend : type == %d\n",
@@ -1066,7 +1066,7 @@ static int rb_check_list(struct ring_buffer_per_cpu *cpu_buffer,
}
/**
- * check_pages - integrity check of buffer pages
+ * rb_check_pages - integrity check of buffer pages
* @cpu_buffer: CPU buffer with pages to test
*
* As a safety measure we check to make sure the data pages have not
@@ -1258,7 +1258,7 @@ static int rb_cpu_notify(struct notifier_block *self,
#endif
/**
- * ring_buffer_alloc - allocate a new ring_buffer
+ * __ring_buffer_alloc - allocate a new ring_buffer
* @size: the size in bytes per cpu that is needed.
* @flags: attributes to set for the ring buffer.
*
@@ -1607,6 +1607,7 @@ static void update_pages_handler(struct work_struct *work)
* ring_buffer_resize - resize the ring buffer
* @buffer: the buffer to resize.
* @size: the new size.
+ * @cpu_id: the cpu buffer to resize
*
* Minimum size is 2 * BUF_PAGE_SIZE.
*
@@ -3956,11 +3957,11 @@ EXPORT_SYMBOL_GPL(ring_buffer_consume);
* expected.
*
* After a sequence of ring_buffer_read_prepare calls, the user is
- * expected to make at least one call to ring_buffer_prepare_sync.
+ * expected to make at least one call to ring_buffer_read_prepare_sync.
* Afterwards, ring_buffer_read_start is invoked to get things going
* for real.
*
- * This overall must be paired with ring_buffer_finish.
+ * This overall must be paired with ring_buffer_read_finish.
*/
struct ring_buffer_iter *
ring_buffer_read_prepare(struct ring_buffer *buffer, int cpu)
@@ -4009,7 +4010,7 @@ EXPORT_SYMBOL_GPL(ring_buffer_read_prepare_sync);
* an intervening ring_buffer_read_prepare_sync must have been
* performed.
*
- * Must be paired with ring_buffer_finish.
+ * Must be paired with ring_buffer_read_finish.
*/
void
ring_buffer_read_start(struct ring_buffer_iter *iter)
@@ -4031,7 +4032,7 @@ ring_buffer_read_start(struct ring_buffer_iter *iter)
EXPORT_SYMBOL_GPL(ring_buffer_read_start);
/**
- * ring_buffer_finish - finish reading the iterator of the buffer
+ * ring_buffer_read_finish - finish reading the iterator of the buffer
* @iter: The iterator retrieved by ring_buffer_start
*
* This re-enables the recording to the buffer, and frees the
@@ -4346,6 +4347,7 @@ EXPORT_SYMBOL_GPL(ring_buffer_swap_cpu);
/**
* ring_buffer_alloc_read_page - allocate a page to read from buffer
* @buffer: the buffer to allocate for.
+ * @cpu: the cpu buffer to allocate.
*
* This function is used in conjunction with ring_buffer_read_page.
* When reading a full page from the ring buffer, these functions
@@ -4403,7 +4405,7 @@ EXPORT_SYMBOL_GPL(ring_buffer_free_read_page);
* to swap with a page in the ring buffer.
*
* for example:
- * rpage = ring_buffer_alloc_read_page(buffer);
+ * rpage = ring_buffer_alloc_read_page(buffer, cpu);
* if (!rpage)
* return error;
* ret = ring_buffer_read_page(buffer, &rpage, len, cpu, 0);
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 0cd500bffd9b..882ec1dd1515 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -1224,18 +1224,17 @@ void tracing_reset_current(int cpu)
tracing_reset(&global_trace.trace_buffer, cpu);
}
+/* Must have trace_types_lock held */
void tracing_reset_all_online_cpus(void)
{
struct trace_array *tr;
- mutex_lock(&trace_types_lock);
list_for_each_entry(tr, &ftrace_trace_arrays, list) {
tracing_reset_online_cpus(&tr->trace_buffer);
#ifdef CONFIG_TRACER_MAX_TRACE
tracing_reset_online_cpus(&tr->max_buffer);
#endif
}
- mutex_unlock(&trace_types_lock);
}
#define SAVED_CMDLINES 128
@@ -2843,6 +2842,17 @@ static int s_show(struct seq_file *m, void *v)
return 0;
}
+/*
+ * Should be used after trace_array_get(), trace_types_lock
+ * ensures that i_cdev was already initialized.
+ */
+static inline int tracing_get_cpu(struct inode *inode)
+{
+ if (inode->i_cdev) /* See trace_create_cpu_file() */
+ return (long)inode->i_cdev - 1;
+ return RING_BUFFER_ALL_CPUS;
+}
+
static const struct seq_operations tracer_seq_ops = {
.start = s_start,
.next = s_next,
@@ -2851,9 +2861,9 @@ static const struct seq_operations tracer_seq_ops = {
};
static struct trace_iterator *
-__tracing_open(struct trace_array *tr, struct trace_cpu *tc,
- struct inode *inode, struct file *file, bool snapshot)
+__tracing_open(struct inode *inode, struct file *file, bool snapshot)
{
+ struct trace_array *tr = inode->i_private;
struct trace_iterator *iter;
int cpu;
@@ -2894,8 +2904,8 @@ __tracing_open(struct trace_array *tr, struct trace_cpu *tc,
iter->trace_buffer = &tr->trace_buffer;
iter->snapshot = snapshot;
iter->pos = -1;
+ iter->cpu_file = tracing_get_cpu(inode);
mutex_init(&iter->mutex);
- iter->cpu_file = tc->cpu;
/* Notify the tracer early; before we stop tracing. */
if (iter->trace && iter->trace->open)
@@ -2971,45 +2981,22 @@ static int tracing_open_generic_tr(struct inode *inode, struct file *filp)
filp->private_data = inode->i_private;
return 0;
-
-}
-
-static int tracing_open_generic_tc(struct inode *inode, struct file *filp)
-{
- struct trace_cpu *tc = inode->i_private;
- struct trace_array *tr = tc->tr;
-
- if (tracing_disabled)
- return -ENODEV;
-
- if (trace_array_get(tr) < 0)
- return -ENODEV;
-
- filp->private_data = inode->i_private;
-
- return 0;
-
}
static int tracing_release(struct inode *inode, struct file *file)
{
+ struct trace_array *tr = inode->i_private;
struct seq_file *m = file->private_data;
struct trace_iterator *iter;
- struct trace_array *tr;
int cpu;
- /* Writes do not use seq_file, need to grab tr from inode */
if (!(file->f_mode & FMODE_READ)) {
- struct trace_cpu *tc = inode->i_private;
-
- trace_array_put(tc->tr);
+ trace_array_put(tr);
return 0;
}
+ /* Writes do not use seq_file */
iter = m->private;
- tr = iter->tr;
- trace_array_put(tr);
-
mutex_lock(&trace_types_lock);
for_each_tracing_cpu(cpu) {
@@ -3023,6 +3010,9 @@ static int tracing_release(struct inode *inode, struct file *file)
if (!iter->snapshot)
/* reenable tracing if it was previously enabled */
tracing_start_tr(tr);
+
+ __trace_array_put(tr);
+
mutex_unlock(&trace_types_lock);
mutex_destroy(&iter->mutex);
@@ -3042,15 +3032,6 @@ static int tracing_release_generic_tr(struct inode *inode, struct file *file)
return 0;
}
-static int tracing_release_generic_tc(struct inode *inode, struct file *file)
-{
- struct trace_cpu *tc = inode->i_private;
- struct trace_array *tr = tc->tr;
-
- trace_array_put(tr);
- return 0;
-}
-
static int tracing_single_release_tr(struct inode *inode, struct file *file)
{
struct trace_array *tr = inode->i_private;
@@ -3062,8 +3043,7 @@ static int tracing_single_release_tr(struct inode *inode, struct file *file)
static int tracing_open(struct inode *inode, struct file *file)
{
- struct trace_cpu *tc = inode->i_private;
- struct trace_array *tr = tc->tr;
+ struct trace_array *tr = inode->i_private;
struct trace_iterator *iter;
int ret = 0;
@@ -3071,16 +3051,17 @@ static int tracing_open(struct inode *inode, struct file *file)
return -ENODEV;
/* If this file was open for write, then erase contents */
- if ((file->f_mode & FMODE_WRITE) &&
- (file->f_flags & O_TRUNC)) {
- if (tc->cpu == RING_BUFFER_ALL_CPUS)
+ if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) {
+ int cpu = tracing_get_cpu(inode);
+
+ if (cpu == RING_BUFFER_ALL_CPUS)
tracing_reset_online_cpus(&tr->trace_buffer);
else
- tracing_reset(&tr->trace_buffer, tc->cpu);
+ tracing_reset(&tr->trace_buffer, cpu);
}
if (file->f_mode & FMODE_READ) {
- iter = __tracing_open(tr, tc, inode, file, false);
+ iter = __tracing_open(inode, file, false);
if (IS_ERR(iter))
ret = PTR_ERR(iter);
else if (trace_flags & TRACE_ITER_LATENCY_FMT)
@@ -3447,6 +3428,7 @@ tracing_trace_options_write(struct file *filp, const char __user *ubuf,
static int tracing_trace_options_open(struct inode *inode, struct file *file)
{
struct trace_array *tr = inode->i_private;
+ int ret;
if (tracing_disabled)
return -ENODEV;
@@ -3454,7 +3436,11 @@ static int tracing_trace_options_open(struct inode *inode, struct file *file)
if (trace_array_get(tr) < 0)
return -ENODEV;
- return single_open(file, tracing_trace_options_show, inode->i_private);
+ ret = single_open(file, tracing_trace_options_show, inode->i_private);
+ if (ret < 0)
+ trace_array_put(tr);
+
+ return ret;
}
static const struct file_operations tracing_iter_fops = {
@@ -3537,14 +3523,14 @@ static const char readme_msg[] =
"\n snapshot\t\t- Like 'trace' but shows the content of the static snapshot buffer\n"
"\t\t\t Read the contents for more information\n"
#endif
-#ifdef CONFIG_STACKTRACE
+#ifdef CONFIG_STACK_TRACER
" stack_trace\t\t- Shows the max stack trace when active\n"
" stack_max_size\t- Shows current max stack size that was traced\n"
"\t\t\t Write into this file to reset the max size (trigger a new trace)\n"
#ifdef CONFIG_DYNAMIC_FTRACE
" stack_trace_filter\t- Like set_ftrace_filter but limits what stack_trace traces\n"
#endif
-#endif /* CONFIG_STACKTRACE */
+#endif /* CONFIG_STACK_TRACER */
;
static ssize_t
@@ -3941,8 +3927,7 @@ tracing_max_lat_write(struct file *filp, const char __user *ubuf,
static int tracing_open_pipe(struct inode *inode, struct file *filp)
{
- struct trace_cpu *tc = inode->i_private;
- struct trace_array *tr = tc->tr;
+ struct trace_array *tr = inode->i_private;
struct trace_iterator *iter;
int ret = 0;
@@ -3958,6 +3943,7 @@ static int tracing_open_pipe(struct inode *inode, struct file *filp)
iter = kzalloc(sizeof(*iter), GFP_KERNEL);
if (!iter) {
ret = -ENOMEM;
+ __trace_array_put(tr);
goto out;
}
@@ -3987,9 +3973,9 @@ static int tracing_open_pipe(struct inode *inode, struct file *filp)
if (trace_clocks[tr->clock_id].in_ns)
iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
- iter->cpu_file = tc->cpu;
- iter->tr = tc->tr;
- iter->trace_buffer = &tc->tr->trace_buffer;
+ iter->tr = tr;
+ iter->trace_buffer = &tr->trace_buffer;
+ iter->cpu_file = tracing_get_cpu(inode);
mutex_init(&iter->mutex);
filp->private_data = iter;
@@ -4012,8 +3998,7 @@ fail:
static int tracing_release_pipe(struct inode *inode, struct file *file)
{
struct trace_iterator *iter = file->private_data;
- struct trace_cpu *tc = inode->i_private;
- struct trace_array *tr = tc->tr;
+ struct trace_array *tr = inode->i_private;
mutex_lock(&trace_types_lock);
@@ -4366,15 +4351,16 @@ static ssize_t
tracing_entries_read(struct file *filp, char __user *ubuf,
size_t cnt, loff_t *ppos)
{
- struct trace_cpu *tc = filp->private_data;
- struct trace_array *tr = tc->tr;
+ struct inode *inode = file_inode(filp);
+ struct trace_array *tr = inode->i_private;
+ int cpu = tracing_get_cpu(inode);
char buf[64];
int r = 0;
ssize_t ret;
mutex_lock(&trace_types_lock);
- if (tc->cpu == RING_BUFFER_ALL_CPUS) {
+ if (cpu == RING_BUFFER_ALL_CPUS) {
int cpu, buf_size_same;
unsigned long size;
@@ -4401,7 +4387,7 @@ tracing_entries_read(struct file *filp, char __user *ubuf,
} else
r = sprintf(buf, "X\n");
} else
- r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->trace_buffer.data, tc->cpu)->entries >> 10);
+ r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10);
mutex_unlock(&trace_types_lock);
@@ -4413,7 +4399,8 @@ static ssize_t
tracing_entries_write(struct file *filp, const char __user *ubuf,
size_t cnt, loff_t *ppos)
{
- struct trace_cpu *tc = filp->private_data;
+ struct inode *inode = file_inode(filp);
+ struct trace_array *tr = inode->i_private;
unsigned long val;
int ret;
@@ -4427,8 +4414,7 @@ tracing_entries_write(struct file *filp, const char __user *ubuf,
/* value is in KB */
val <<= 10;
-
- ret = tracing_resize_ring_buffer(tc->tr, val, tc->cpu);
+ ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode));
if (ret < 0)
return ret;
@@ -4689,8 +4675,7 @@ struct ftrace_buffer_info {
#ifdef CONFIG_TRACER_SNAPSHOT
static int tracing_snapshot_open(struct inode *inode, struct file *file)
{
- struct trace_cpu *tc = inode->i_private;
- struct trace_array *tr = tc->tr;
+ struct trace_array *tr = inode->i_private;
struct trace_iterator *iter;
struct seq_file *m;
int ret = 0;
@@ -4699,26 +4684,29 @@ static int tracing_snapshot_open(struct inode *inode, struct file *file)
return -ENODEV;
if (file->f_mode & FMODE_READ) {
- iter = __tracing_open(tr, tc, inode, file, true);
+ iter = __tracing_open(inode, file, true);
if (IS_ERR(iter))
ret = PTR_ERR(iter);
} else {
/* Writes still need the seq_file to hold the private data */
+ ret = -ENOMEM;
m = kzalloc(sizeof(*m), GFP_KERNEL);
if (!m)
- return -ENOMEM;
+ goto out;
iter = kzalloc(sizeof(*iter), GFP_KERNEL);
if (!iter) {
kfree(m);
- return -ENOMEM;
+ goto out;
}
+ ret = 0;
+
iter->tr = tr;
- iter->trace_buffer = &tc->tr->max_buffer;
- iter->cpu_file = tc->cpu;
+ iter->trace_buffer = &tr->max_buffer;
+ iter->cpu_file = tracing_get_cpu(inode);
m->private = iter;
file->private_data = m;
}
-
+out:
if (ret < 0)
trace_array_put(tr);
@@ -4873,11 +4861,11 @@ static const struct file_operations tracing_pipe_fops = {
};
static const struct file_operations tracing_entries_fops = {
- .open = tracing_open_generic_tc,
+ .open = tracing_open_generic_tr,
.read = tracing_entries_read,
.write = tracing_entries_write,
.llseek = generic_file_llseek,
- .release = tracing_release_generic_tc,
+ .release = tracing_release_generic_tr,
};
static const struct file_operations tracing_total_entries_fops = {
@@ -4929,8 +4917,7 @@ static const struct file_operations snapshot_raw_fops = {
static int tracing_buffers_open(struct inode *inode, struct file *filp)
{
- struct trace_cpu *tc = inode->i_private;
- struct trace_array *tr = tc->tr;
+ struct trace_array *tr = inode->i_private;
struct ftrace_buffer_info *info;
int ret;
@@ -4948,10 +4935,8 @@ static int tracing_buffers_open(struct inode *inode, struct file *filp)
mutex_lock(&trace_types_lock);
- tr->ref++;
-
info->iter.tr = tr;
- info->iter.cpu_file = tc->cpu;
+ info->iter.cpu_file = tracing_get_cpu(inode);
info->iter.trace = tr->current_trace;
info->iter.trace_buffer = &tr->trace_buffer;
info->spare = NULL;
@@ -5268,14 +5253,14 @@ static ssize_t
tracing_stats_read(struct file *filp, char __user *ubuf,
size_t count, loff_t *ppos)
{
- struct trace_cpu *tc = filp->private_data;
- struct trace_array *tr = tc->tr;
+ struct inode *inode = file_inode(filp);
+ struct trace_array *tr = inode->i_private;
struct trace_buffer *trace_buf = &tr->trace_buffer;
+ int cpu = tracing_get_cpu(inode);
struct trace_seq *s;
unsigned long cnt;
unsigned long long t;
unsigned long usec_rem;
- int cpu = tc->cpu;
s = kmalloc(sizeof(*s), GFP_KERNEL);
if (!s)
@@ -5328,9 +5313,10 @@ tracing_stats_read(struct file *filp, char __user *ubuf,
}
static const struct file_operations tracing_stats_fops = {
- .open = tracing_open_generic,
+ .open = tracing_open_generic_tr,
.read = tracing_stats_read,
.llseek = generic_file_llseek,
+ .release = tracing_release_generic_tr,
};
#ifdef CONFIG_DYNAMIC_FTRACE
@@ -5519,10 +5505,20 @@ static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu)
return tr->percpu_dir;
}
+static struct dentry *
+trace_create_cpu_file(const char *name, umode_t mode, struct dentry *parent,
+ void *data, long cpu, const struct file_operations *fops)
+{
+ struct dentry *ret = trace_create_file(name, mode, parent, data, fops);
+
+ if (ret) /* See tracing_get_cpu() */
+ ret->d_inode->i_cdev = (void *)(cpu + 1);
+ return ret;
+}
+
static void
tracing_init_debugfs_percpu(struct trace_array *tr, long cpu)
{
- struct trace_array_cpu *data = per_cpu_ptr(tr->trace_buffer.data, cpu);
struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu);
struct dentry *d_cpu;
char cpu_dir[30]; /* 30 characters should be more than enough */
@@ -5538,28 +5534,28 @@ tracing_init_debugfs_percpu(struct trace_array *tr, long cpu)
}
/* per cpu trace_pipe */
- trace_create_file("trace_pipe", 0444, d_cpu,
- (void *)&data->trace_cpu, &tracing_pipe_fops);
+ trace_create_cpu_file("trace_pipe", 0444, d_cpu,
+ tr, cpu, &tracing_pipe_fops);
/* per cpu trace */
- trace_create_file("trace", 0644, d_cpu,
- (void *)&data->trace_cpu, &tracing_fops);
+ trace_create_cpu_file("trace", 0644, d_cpu,
+ tr, cpu, &tracing_fops);
- trace_create_file("trace_pipe_raw", 0444, d_cpu,
- (void *)&data->trace_cpu, &tracing_buffers_fops);
+ trace_create_cpu_file("trace_pipe_raw", 0444, d_cpu,
+ tr, cpu, &tracing_buffers_fops);
- trace_create_file("stats", 0444, d_cpu,
- (void *)&data->trace_cpu, &tracing_stats_fops);
+ trace_create_cpu_file("stats", 0444, d_cpu,
+ tr, cpu, &tracing_stats_fops);
- trace_create_file("buffer_size_kb", 0444, d_cpu,
- (void *)&data->trace_cpu, &tracing_entries_fops);
+ trace_create_cpu_file("buffer_size_kb", 0444, d_cpu,
+ tr, cpu, &tracing_entries_fops);
#ifdef CONFIG_TRACER_SNAPSHOT
- trace_create_file("snapshot", 0644, d_cpu,
- (void *)&data->trace_cpu, &snapshot_fops);
+ trace_create_cpu_file("snapshot", 0644, d_cpu,
+ tr, cpu, &snapshot_fops);
- trace_create_file("snapshot_raw", 0444, d_cpu,
- (void *)&data->trace_cpu, &snapshot_raw_fops);
+ trace_create_cpu_file("snapshot_raw", 0444, d_cpu,
+ tr, cpu, &snapshot_raw_fops);
#endif
}
@@ -5868,17 +5864,6 @@ struct dentry *trace_instance_dir;
static void
init_tracer_debugfs(struct trace_array *tr, struct dentry *d_tracer);
-static void init_trace_buffers(struct trace_array *tr, struct trace_buffer *buf)
-{
- int cpu;
-
- for_each_tracing_cpu(cpu) {
- memset(per_cpu_ptr(buf->data, cpu), 0, sizeof(struct trace_array_cpu));
- per_cpu_ptr(buf->data, cpu)->trace_cpu.cpu = cpu;
- per_cpu_ptr(buf->data, cpu)->trace_cpu.tr = tr;
- }
-}
-
static int
allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size)
{
@@ -5896,8 +5881,6 @@ allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size
return -ENOMEM;
}
- init_trace_buffers(tr, buf);
-
/* Allocate the first page for all buffers */
set_buffer_entries(&tr->trace_buffer,
ring_buffer_size(tr->trace_buffer.buffer, 0));
@@ -5964,17 +5947,15 @@ static int new_instance_create(const char *name)
if (allocate_trace_buffers(tr, trace_buf_size) < 0)
goto out_free_tr;
- /* Holder for file callbacks */
- tr->trace_cpu.cpu = RING_BUFFER_ALL_CPUS;
- tr->trace_cpu.tr = tr;
-
tr->dir = debugfs_create_dir(name, trace_instance_dir);
if (!tr->dir)
goto out_free_tr;
ret = event_trace_add_tracer(tr->dir, tr);
- if (ret)
+ if (ret) {
+ debugfs_remove_recursive(tr->dir);
goto out_free_tr;
+ }
init_tracer_debugfs(tr, tr->dir);
@@ -6120,13 +6101,13 @@ init_tracer_debugfs(struct trace_array *tr, struct dentry *d_tracer)
tr, &tracing_iter_fops);
trace_create_file("trace", 0644, d_tracer,
- (void *)&tr->trace_cpu, &tracing_fops);
+ tr, &tracing_fops);
trace_create_file("trace_pipe", 0444, d_tracer,
- (void *)&tr->trace_cpu, &tracing_pipe_fops);
+ tr, &tracing_pipe_fops);
trace_create_file("buffer_size_kb", 0644, d_tracer,
- (void *)&tr->trace_cpu, &tracing_entries_fops);
+ tr, &tracing_entries_fops);
trace_create_file("buffer_total_size_kb", 0444, d_tracer,
tr, &tracing_total_entries_fops);
@@ -6141,11 +6122,11 @@ init_tracer_debugfs(struct trace_array *tr, struct dentry *d_tracer)
&trace_clock_fops);
trace_create_file("tracing_on", 0644, d_tracer,
- tr, &rb_simple_fops);
+ tr, &rb_simple_fops);
#ifdef CONFIG_TRACER_SNAPSHOT
trace_create_file("snapshot", 0644, d_tracer,
- (void *)&tr->trace_cpu, &snapshot_fops);
+ tr, &snapshot_fops);
#endif
for_each_tracing_cpu(cpu)
@@ -6439,10 +6420,6 @@ __init static int tracer_alloc_buffers(void)
global_trace.flags = TRACE_ARRAY_FL_GLOBAL;
- /* Holder for file callbacks */
- global_trace.trace_cpu.cpu = RING_BUFFER_ALL_CPUS;
- global_trace.trace_cpu.tr = &global_trace;
-
INIT_LIST_HEAD(&global_trace.systems);
INIT_LIST_HEAD(&global_trace.events);
list_add(&global_trace.list, &ftrace_trace_arrays);
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 4a4f6e1828b6..afaae41b0a02 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -130,19 +130,12 @@ enum trace_flag_type {
struct trace_array;
-struct trace_cpu {
- struct trace_array *tr;
- struct dentry *dir;
- int cpu;
-};
-
/*
* The CPU trace array - it consists of thousands of trace entries
* plus some other descriptor data: (for example which task started
* the trace, etc.)
*/
struct trace_array_cpu {
- struct trace_cpu trace_cpu;
atomic_t disabled;
void *buffer_page; /* ring buffer spare */
@@ -196,7 +189,6 @@ struct trace_array {
bool allocated_snapshot;
#endif
int buffer_disabled;
- struct trace_cpu trace_cpu; /* place holder */
#ifdef CONFIG_FTRACE_SYSCALLS
int sys_refcount_enter;
int sys_refcount_exit;
@@ -214,7 +206,6 @@ struct trace_array {
struct dentry *event_dir;
struct list_head systems;
struct list_head events;
- struct task_struct *waiter;
int ref;
};
@@ -680,6 +671,15 @@ extern int trace_selftest_startup_sched_switch(struct tracer *trace,
struct trace_array *tr);
extern int trace_selftest_startup_branch(struct tracer *trace,
struct trace_array *tr);
+/*
+ * Tracer data references selftest functions that only occur
+ * on boot up. These can be __init functions. Thus, when selftests
+ * are enabled, then the tracers need to reference __init functions.
+ */
+#define __tracer_data __refdata
+#else
+/* Tracers are seldom changed. Optimize when selftests are disabled. */
+#define __tracer_data __read_mostly
#endif /* CONFIG_FTRACE_STARTUP_TEST */
extern void *head_page(struct trace_array_cpu *data);
diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c
index 84b1e045faba..80c36bcf66e8 100644
--- a/kernel/trace/trace_event_perf.c
+++ b/kernel/trace/trace_event_perf.c
@@ -236,6 +236,10 @@ __kprobes void *perf_trace_buf_prepare(int size, unsigned short type,
BUILD_BUG_ON(PERF_MAX_TRACE_SIZE % sizeof(unsigned long));
+ if (WARN_ONCE(size > PERF_MAX_TRACE_SIZE,
+ "perf buffer not large enough"))
+ return NULL;
+
pc = preempt_count();
*rctxp = perf_swevent_get_recursion_context();
@@ -266,6 +270,10 @@ perf_ftrace_function_call(unsigned long ip, unsigned long parent_ip,
struct pt_regs regs;
int rctx;
+ head = this_cpu_ptr(event_function.perf_events);
+ if (hlist_empty(head))
+ return;
+
#define ENTRY_SIZE (ALIGN(sizeof(struct ftrace_entry) + sizeof(u32), \
sizeof(u64)) - sizeof(u32))
@@ -279,8 +287,6 @@ perf_ftrace_function_call(unsigned long ip, unsigned long parent_ip,
entry->ip = ip;
entry->parent_ip = parent_ip;
-
- head = this_cpu_ptr(event_function.perf_events);
perf_trace_buf_submit(entry, ENTRY_SIZE, rctx, 0,
1, &regs, head, NULL);
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 7d854290bf81..898f868833f2 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -826,59 +826,33 @@ enum {
static void *f_next(struct seq_file *m, void *v, loff_t *pos)
{
struct ftrace_event_call *call = m->private;
- struct ftrace_event_field *field;
struct list_head *common_head = &ftrace_common_fields;
struct list_head *head = trace_get_fields(call);
+ struct list_head *node = v;
(*pos)++;
switch ((unsigned long)v) {
case FORMAT_HEADER:
- if (unlikely(list_empty(common_head)))
- return NULL;
-
- field = list_entry(common_head->prev,
- struct ftrace_event_field, link);
- return field;
+ node = common_head;
+ break;
case FORMAT_FIELD_SEPERATOR:
- if (unlikely(list_empty(head)))
- return NULL;
-
- field = list_entry(head->prev, struct ftrace_event_field, link);
- return field;
+ node = head;
+ break;
case FORMAT_PRINTFMT:
/* all done */
return NULL;
}
- field = v;
- if (field->link.prev == common_head)
+ node = node->prev;
+ if (node == common_head)
return (void *)FORMAT_FIELD_SEPERATOR;
- else if (field->link.prev == head)
+ else if (node == head)
return (void *)FORMAT_PRINTFMT;
-
- field = list_entry(field->link.prev, struct ftrace_event_field, link);
-
- return field;
-}
-
-static void *f_start(struct seq_file *m, loff_t *pos)
-{
- loff_t l = 0;
- void *p;
-
- /* Start by showing the header */
- if (!*pos)
- return (void *)FORMAT_HEADER;
-
- p = (void *)FORMAT_HEADER;
- do {
- p = f_next(m, p, &l);
- } while (p && l < *pos);
-
- return p;
+ else
+ return node;
}
static int f_show(struct seq_file *m, void *v)
@@ -904,8 +878,7 @@ static int f_show(struct seq_file *m, void *v)
return 0;
}
- field = v;
-
+ field = list_entry(v, struct ftrace_event_field, link);
/*
* Smartly shows the array type(except dynamic array).
* Normal:
@@ -932,6 +905,17 @@ static int f_show(struct seq_file *m, void *v)
return 0;
}
+static void *f_start(struct seq_file *m, loff_t *pos)
+{
+ void *p = (void *)FORMAT_HEADER;
+ loff_t l = 0;
+
+ while (l < *pos && p)
+ p = f_next(m, p, &l);
+
+ return p;
+}
+
static void f_stop(struct seq_file *m, void *p)
{
}
@@ -963,23 +947,14 @@ static ssize_t
event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
{
struct ftrace_event_call *call = filp->private_data;
- struct trace_seq *s;
- int r;
+ char buf[32];
+ int len;
if (*ppos)
return 0;
- s = kmalloc(sizeof(*s), GFP_KERNEL);
- if (!s)
- return -ENOMEM;
-
- trace_seq_init(s);
- trace_seq_printf(s, "%d\n", call->event.type);
-
- r = simple_read_from_buffer(ubuf, cnt, ppos,
- s->buffer, s->len);
- kfree(s);
- return r;
+ len = sprintf(buf, "%d\n", call->event.type);
+ return simple_read_from_buffer(ubuf, cnt, ppos, buf, len);
}
static ssize_t
@@ -1218,6 +1193,7 @@ show_header(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
static int ftrace_event_avail_open(struct inode *inode, struct file *file);
static int ftrace_event_set_open(struct inode *inode, struct file *file);
+static int ftrace_event_release(struct inode *inode, struct file *file);
static const struct seq_operations show_event_seq_ops = {
.start = t_start,
@@ -1245,7 +1221,7 @@ static const struct file_operations ftrace_set_event_fops = {
.read = seq_read,
.write = ftrace_event_write,
.llseek = seq_lseek,
- .release = seq_release,
+ .release = ftrace_event_release,
};
static const struct file_operations ftrace_enable_fops = {
@@ -1323,6 +1299,15 @@ ftrace_event_open(struct inode *inode, struct file *file,
return ret;
}
+static int ftrace_event_release(struct inode *inode, struct file *file)
+{
+ struct trace_array *tr = inode->i_private;
+
+ trace_array_put(tr);
+
+ return seq_release(inode, file);
+}
+
static int
ftrace_event_avail_open(struct inode *inode, struct file *file)
{
@@ -1336,12 +1321,19 @@ ftrace_event_set_open(struct inode *inode, struct file *file)
{
const struct seq_operations *seq_ops = &show_set_event_seq_ops;
struct trace_array *tr = inode->i_private;
+ int ret;
+
+ if (trace_array_get(tr) < 0)
+ return -ENODEV;
if ((file->f_mode & FMODE_WRITE) &&
(file->f_flags & O_TRUNC))
ftrace_clear_events(tr);
- return ftrace_event_open(inode, file, seq_ops);
+ ret = ftrace_event_open(inode, file, seq_ops);
+ if (ret < 0)
+ trace_array_put(tr);
+ return ret;
}
static struct event_subsystem *
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index 0d883dc057d6..0c7b75a8acc8 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -646,7 +646,7 @@ void print_event_filter(struct ftrace_event_call *call, struct trace_seq *s)
if (filter && filter->filter_string)
trace_seq_printf(s, "%s\n", filter->filter_string);
else
- trace_seq_printf(s, "none\n");
+ trace_seq_puts(s, "none\n");
mutex_unlock(&event_mutex);
}
@@ -660,7 +660,7 @@ void print_subsystem_event_filter(struct event_subsystem *system,
if (filter && filter->filter_string)
trace_seq_printf(s, "%s\n", filter->filter_string);
else
- trace_seq_printf(s, DEFAULT_SYS_FILTER_MESSAGE "\n");
+ trace_seq_puts(s, DEFAULT_SYS_FILTER_MESSAGE "\n");
mutex_unlock(&event_mutex);
}
diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c
index b863f93b30f3..38fe1483c508 100644
--- a/kernel/trace/trace_functions.c
+++ b/kernel/trace/trace_functions.c
@@ -199,7 +199,7 @@ static int func_set_flag(u32 old_flags, u32 bit, int set)
return 0;
}
-static struct tracer function_trace __read_mostly =
+static struct tracer function_trace __tracer_data =
{
.name = "function",
.init = function_trace_init,
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
index 8388bc99f2ee..b5c09242683d 100644
--- a/kernel/trace/trace_functions_graph.c
+++ b/kernel/trace/trace_functions_graph.c
@@ -446,7 +446,7 @@ print_graph_proc(struct trace_seq *s, pid_t pid)
/* First spaces to align center */
for (i = 0; i < spaces / 2; i++) {
- ret = trace_seq_printf(s, " ");
+ ret = trace_seq_putc(s, ' ');
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
}
@@ -457,7 +457,7 @@ print_graph_proc(struct trace_seq *s, pid_t pid)
/* Last spaces to align center */
for (i = 0; i < spaces - (spaces / 2); i++) {
- ret = trace_seq_printf(s, " ");
+ ret = trace_seq_putc(s, ' ');
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
}
@@ -503,7 +503,7 @@ verif_pid(struct trace_seq *s, pid_t pid, int cpu, struct fgraph_data *data)
------------------------------------------
*/
- ret = trace_seq_printf(s,
+ ret = trace_seq_puts(s,
" ------------------------------------------\n");
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
@@ -516,7 +516,7 @@ verif_pid(struct trace_seq *s, pid_t pid, int cpu, struct fgraph_data *data)
if (ret == TRACE_TYPE_PARTIAL_LINE)
return TRACE_TYPE_PARTIAL_LINE;
- ret = trace_seq_printf(s, " => ");
+ ret = trace_seq_puts(s, " => ");
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
@@ -524,7 +524,7 @@ verif_pid(struct trace_seq *s, pid_t pid, int cpu, struct fgraph_data *data)
if (ret == TRACE_TYPE_PARTIAL_LINE)
return TRACE_TYPE_PARTIAL_LINE;
- ret = trace_seq_printf(s,
+ ret = trace_seq_puts(s,
"\n ------------------------------------------\n\n");
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
@@ -645,7 +645,7 @@ print_graph_irq(struct trace_iterator *iter, unsigned long addr,
ret = print_graph_proc(s, pid);
if (ret == TRACE_TYPE_PARTIAL_LINE)
return TRACE_TYPE_PARTIAL_LINE;
- ret = trace_seq_printf(s, " | ");
+ ret = trace_seq_puts(s, " | ");
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
}
@@ -657,9 +657,9 @@ print_graph_irq(struct trace_iterator *iter, unsigned long addr,
return ret;
if (type == TRACE_GRAPH_ENT)
- ret = trace_seq_printf(s, "==========>");
+ ret = trace_seq_puts(s, "==========>");
else
- ret = trace_seq_printf(s, "<==========");
+ ret = trace_seq_puts(s, "<==========");
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
@@ -668,7 +668,7 @@ print_graph_irq(struct trace_iterator *iter, unsigned long addr,
if (ret != TRACE_TYPE_HANDLED)
return ret;
- ret = trace_seq_printf(s, "\n");
+ ret = trace_seq_putc(s, '\n');
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
@@ -705,13 +705,13 @@ trace_print_graph_duration(unsigned long long duration, struct trace_seq *s)
len += strlen(nsecs_str);
}
- ret = trace_seq_printf(s, " us ");
+ ret = trace_seq_puts(s, " us ");
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
/* Print remaining spaces to fit the row's width */
for (i = len; i < 7; i++) {
- ret = trace_seq_printf(s, " ");
+ ret = trace_seq_putc(s, ' ');
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
}
@@ -731,13 +731,13 @@ print_graph_duration(unsigned long long duration, struct trace_seq *s,
/* No real adata, just filling the column with spaces */
switch (duration) {
case DURATION_FILL_FULL:
- ret = trace_seq_printf(s, " | ");
+ ret = trace_seq_puts(s, " | ");
return ret ? TRACE_TYPE_HANDLED : TRACE_TYPE_PARTIAL_LINE;
case DURATION_FILL_START:
- ret = trace_seq_printf(s, " ");
+ ret = trace_seq_puts(s, " ");
return ret ? TRACE_TYPE_HANDLED : TRACE_TYPE_PARTIAL_LINE;
case DURATION_FILL_END:
- ret = trace_seq_printf(s, " |");
+ ret = trace_seq_puts(s, " |");
return ret ? TRACE_TYPE_HANDLED : TRACE_TYPE_PARTIAL_LINE;
}
@@ -745,10 +745,10 @@ print_graph_duration(unsigned long long duration, struct trace_seq *s,
if (flags & TRACE_GRAPH_PRINT_OVERHEAD) {
/* Duration exceeded 100 msecs */
if (duration > 100000ULL)
- ret = trace_seq_printf(s, "! ");
+ ret = trace_seq_puts(s, "! ");
/* Duration exceeded 10 msecs */
else if (duration > 10000ULL)
- ret = trace_seq_printf(s, "+ ");
+ ret = trace_seq_puts(s, "+ ");
}
/*
@@ -757,7 +757,7 @@ print_graph_duration(unsigned long long duration, struct trace_seq *s,
* to fill out the space.
*/
if (ret == -1)
- ret = trace_seq_printf(s, " ");
+ ret = trace_seq_puts(s, " ");
/* Catching here any failure happenned above */
if (!ret)
@@ -767,7 +767,7 @@ print_graph_duration(unsigned long long duration, struct trace_seq *s,
if (ret != TRACE_TYPE_HANDLED)
return ret;
- ret = trace_seq_printf(s, "| ");
+ ret = trace_seq_puts(s, "| ");
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
@@ -817,7 +817,7 @@ print_graph_entry_leaf(struct trace_iterator *iter,
/* Function */
for (i = 0; i < call->depth * TRACE_GRAPH_INDENT; i++) {
- ret = trace_seq_printf(s, " ");
+ ret = trace_seq_putc(s, ' ');
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
}
@@ -858,7 +858,7 @@ print_graph_entry_nested(struct trace_iterator *iter,
/* Function */
for (i = 0; i < call->depth * TRACE_GRAPH_INDENT; i++) {
- ret = trace_seq_printf(s, " ");
+ ret = trace_seq_putc(s, ' ');
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
}
@@ -917,7 +917,7 @@ print_graph_prologue(struct trace_iterator *iter, struct trace_seq *s,
if (ret == TRACE_TYPE_PARTIAL_LINE)
return TRACE_TYPE_PARTIAL_LINE;
- ret = trace_seq_printf(s, " | ");
+ ret = trace_seq_puts(s, " | ");
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
}
@@ -1117,7 +1117,7 @@ print_graph_return(struct ftrace_graph_ret *trace, struct trace_seq *s,
/* Closing brace */
for (i = 0; i < trace->depth * TRACE_GRAPH_INDENT; i++) {
- ret = trace_seq_printf(s, " ");
+ ret = trace_seq_putc(s, ' ');
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
}
@@ -1129,7 +1129,7 @@ print_graph_return(struct ftrace_graph_ret *trace, struct trace_seq *s,
* belongs to, write out the function name.
*/
if (func_match) {
- ret = trace_seq_printf(s, "}\n");
+ ret = trace_seq_puts(s, "}\n");
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
} else {
@@ -1179,13 +1179,13 @@ print_graph_comment(struct trace_seq *s, struct trace_entry *ent,
/* Indentation */
if (depth > 0)
for (i = 0; i < (depth + 1) * TRACE_GRAPH_INDENT; i++) {
- ret = trace_seq_printf(s, " ");
+ ret = trace_seq_putc(s, ' ');
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
}
/* The comment */
- ret = trace_seq_printf(s, "/* ");
+ ret = trace_seq_puts(s, "/* ");
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
@@ -1216,7 +1216,7 @@ print_graph_comment(struct trace_seq *s, struct trace_entry *ent,
s->len--;
}
- ret = trace_seq_printf(s, " */\n");
+ ret = trace_seq_puts(s, " */\n");
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
@@ -1448,7 +1448,7 @@ static struct trace_event graph_trace_ret_event = {
.funcs = &graph_functions
};
-static struct tracer graph_trace __read_mostly = {
+static struct tracer graph_trace __tracer_data = {
.name = "function_graph",
.open = graph_trace_open,
.pipe_open = graph_trace_open,
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index 7ed6976493c8..3811487e7a7a 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -243,11 +243,11 @@ find_event_file_link(struct trace_probe *tp, struct ftrace_event_file *file)
static int
disable_trace_probe(struct trace_probe *tp, struct ftrace_event_file *file)
{
+ struct event_file_link *link = NULL;
+ int wait = 0;
int ret = 0;
if (file) {
- struct event_file_link *link;
-
link = find_event_file_link(tp, file);
if (!link) {
ret = -EINVAL;
@@ -255,10 +255,7 @@ disable_trace_probe(struct trace_probe *tp, struct ftrace_event_file *file)
}
list_del_rcu(&link->list);
- /* synchronize with kprobe_trace_func/kretprobe_trace_func */
- synchronize_sched();
- kfree(link);
-
+ wait = 1;
if (!list_empty(&tp->files))
goto out;
@@ -271,8 +268,22 @@ disable_trace_probe(struct trace_probe *tp, struct ftrace_event_file *file)
disable_kretprobe(&tp->rp);
else
disable_kprobe(&tp->rp.kp);
+ wait = 1;
}
out:
+ if (wait) {
+ /*
+ * Synchronize with kprobe_trace_func/kretprobe_trace_func
+ * to ensure disabled (all running handlers are finished).
+ * This is not only for kfree(), but also the caller,
+ * trace_remove_event_call() supposes it for releasing
+ * event_call related objects, which will be accessed in
+ * the kprobe_trace_func/kretprobe_trace_func.
+ */
+ synchronize_sched();
+ kfree(link); /* Ignored if link == NULL */
+ }
+
return ret;
}
@@ -1087,9 +1098,6 @@ kprobe_perf_func(struct trace_probe *tp, struct pt_regs *regs)
__size = sizeof(*entry) + tp->size + dsize;
size = ALIGN(__size + sizeof(u32), sizeof(u64));
size -= sizeof(u32);
- if (WARN_ONCE(size > PERF_MAX_TRACE_SIZE,
- "profile buffer not large enough"))
- return;
entry = perf_trace_buf_prepare(size, call->event.type, regs, &rctx);
if (!entry)
@@ -1120,9 +1128,6 @@ kretprobe_perf_func(struct trace_probe *tp, struct kretprobe_instance *ri,
__size = sizeof(*entry) + tp->size + dsize;
size = ALIGN(__size + sizeof(u32), sizeof(u64));
size -= sizeof(u32);
- if (WARN_ONCE(size > PERF_MAX_TRACE_SIZE,
- "profile buffer not large enough"))
- return;
entry = perf_trace_buf_prepare(size, call->event.type, regs, &rctx);
if (!entry)
diff --git a/kernel/trace/trace_mmiotrace.c b/kernel/trace/trace_mmiotrace.c
index a5e8f4878bfa..b3dcfb2f0fef 100644
--- a/kernel/trace/trace_mmiotrace.c
+++ b/kernel/trace/trace_mmiotrace.c
@@ -90,7 +90,7 @@ static int mmio_print_pcidev(struct trace_seq *s, const struct pci_dev *dev)
if (drv)
ret += trace_seq_printf(s, " %s\n", drv->name);
else
- ret += trace_seq_printf(s, " \n");
+ ret += trace_seq_puts(s, " \n");
return ret;
}
@@ -107,7 +107,7 @@ static void mmio_pipe_open(struct trace_iterator *iter)
struct header_iter *hiter;
struct trace_seq *s = &iter->seq;
- trace_seq_printf(s, "VERSION 20070824\n");
+ trace_seq_puts(s, "VERSION 20070824\n");
hiter = kzalloc(sizeof(*hiter), GFP_KERNEL);
if (!hiter)
@@ -209,7 +209,7 @@ static enum print_line_t mmio_print_rw(struct trace_iterator *iter)
(rw->value >> 0) & 0xff, rw->pc, 0);
break;
default:
- ret = trace_seq_printf(s, "rw what?\n");
+ ret = trace_seq_puts(s, "rw what?\n");
break;
}
if (ret)
@@ -245,7 +245,7 @@ static enum print_line_t mmio_print_map(struct trace_iterator *iter)
secs, usec_rem, m->map_id, 0UL, 0);
break;
default:
- ret = trace_seq_printf(s, "map what?\n");
+ ret = trace_seq_puts(s, "map what?\n");
break;
}
if (ret)
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
index bb922d9ee51b..34e7cbac0c9c 100644
--- a/kernel/trace/trace_output.c
+++ b/kernel/trace/trace_output.c
@@ -78,7 +78,7 @@ enum print_line_t trace_print_printk_msg_only(struct trace_iterator *iter)
trace_assign_type(field, entry);
- ret = trace_seq_printf(s, "%s", field->buf);
+ ret = trace_seq_puts(s, field->buf);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
@@ -558,14 +558,14 @@ seq_print_userip_objs(const struct userstack_entry *entry, struct trace_seq *s,
if (ret)
ret = trace_seq_puts(s, "??");
if (ret)
- ret = trace_seq_puts(s, "\n");
+ ret = trace_seq_putc(s, '\n');
continue;
}
if (!ret)
break;
if (ret)
ret = seq_print_user_ip(s, mm, ip, sym_flags);
- ret = trace_seq_puts(s, "\n");
+ ret = trace_seq_putc(s, '\n');
}
if (mm)
@@ -579,7 +579,7 @@ seq_print_ip_sym(struct trace_seq *s, unsigned long ip, unsigned long sym_flags)
int ret;
if (!ip)
- return trace_seq_printf(s, "0");
+ return trace_seq_putc(s, '0');
if (sym_flags & TRACE_ITER_SYM_OFFSET)
ret = seq_print_sym_offset(s, "%s", ip);
@@ -964,14 +964,14 @@ static enum print_line_t trace_fn_trace(struct trace_iterator *iter, int flags,
goto partial;
if ((flags & TRACE_ITER_PRINT_PARENT) && field->parent_ip) {
- if (!trace_seq_printf(s, " <-"))
+ if (!trace_seq_puts(s, " <-"))
goto partial;
if (!seq_print_ip_sym(s,
field->parent_ip,
flags))
goto partial;
}
- if (!trace_seq_printf(s, "\n"))
+ if (!trace_seq_putc(s, '\n'))
goto partial;
return TRACE_TYPE_HANDLED;
@@ -1210,7 +1210,7 @@ static enum print_line_t trace_stack_print(struct trace_iterator *iter,
if (!seq_print_ip_sym(s, *p, flags))
goto partial;
- if (!trace_seq_puts(s, "\n"))
+ if (!trace_seq_putc(s, '\n'))
goto partial;
}
diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
index 322e16461072..8fd03657bc7d 100644
--- a/kernel/trace/trace_syscalls.c
+++ b/kernel/trace/trace_syscalls.c
@@ -175,7 +175,7 @@ print_syscall_exit(struct trace_iterator *iter, int flags,
entry = syscall_nr_to_meta(syscall);
if (!entry) {
- trace_seq_printf(s, "\n");
+ trace_seq_putc(s, '\n');
return TRACE_TYPE_HANDLED;
}
@@ -566,15 +566,15 @@ static void perf_syscall_enter(void *ignore, struct pt_regs *regs, long id)
if (!sys_data)
return;
+ head = this_cpu_ptr(sys_data->enter_event->perf_events);
+ if (hlist_empty(head))
+ return;
+
/* get the size after alignment with the u32 buffer size field */
size = sizeof(unsigned long) * sys_data->nb_args + sizeof(*rec);
size = ALIGN(size + sizeof(u32), sizeof(u64));
size -= sizeof(u32);
- if (WARN_ONCE(size > PERF_MAX_TRACE_SIZE,
- "perf buffer not large enough"))
- return;
-
rec = (struct syscall_trace_enter *)perf_trace_buf_prepare(size,
sys_data->enter_event->event.type, regs, &rctx);
if (!rec)
@@ -583,8 +583,6 @@ static void perf_syscall_enter(void *ignore, struct pt_regs *regs, long id)
rec->nr = syscall_nr;
syscall_get_arguments(current, regs, 0, sys_data->nb_args,
(unsigned long *)&rec->args);
-
- head = this_cpu_ptr(sys_data->enter_event->perf_events);
perf_trace_buf_submit(rec, size, rctx, 0, 1, regs, head, NULL);
}
@@ -642,18 +640,14 @@ static void perf_syscall_exit(void *ignore, struct pt_regs *regs, long ret)
if (!sys_data)
return;
+ head = this_cpu_ptr(sys_data->exit_event->perf_events);
+ if (hlist_empty(head))
+ return;
+
/* We can probably do that at build time */
size = ALIGN(sizeof(*rec) + sizeof(u32), sizeof(u64));
size -= sizeof(u32);
- /*
- * Impossible, but be paranoid with the future
- * How to put this check outside runtime?
- */
- if (WARN_ONCE(size > PERF_MAX_TRACE_SIZE,
- "exit event has grown above perf buffer size"))
- return;
-
rec = (struct syscall_trace_exit *)perf_trace_buf_prepare(size,
sys_data->exit_event->event.type, regs, &rctx);
if (!rec)
@@ -661,8 +655,6 @@ static void perf_syscall_exit(void *ignore, struct pt_regs *regs, long ret)
rec->nr = syscall_nr;
rec->ret = syscall_get_return_value(current, regs);
-
- head = this_cpu_ptr(sys_data->exit_event->perf_events);
perf_trace_buf_submit(rec, size, rctx, 0, 1, regs, head, NULL);
}
diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
index d5d0cd368a56..a23d2d71188e 100644
--- a/kernel/trace/trace_uprobe.c
+++ b/kernel/trace/trace_uprobe.c
@@ -818,8 +818,6 @@ static void uprobe_perf_print(struct trace_uprobe *tu,
size = SIZEOF_TRACE_ENTRY(is_ret_probe(tu));
size = ALIGN(size + tu->size + sizeof(u32), sizeof(u64)) - sizeof(u32);
- if (WARN_ONCE(size > PERF_MAX_TRACE_SIZE, "profile buffer not large enough"))
- return;
preempt_disable();
head = this_cpu_ptr(call->perf_events);
diff --git a/kernel/wait.c b/kernel/wait.c
index ce0daa320a26..dec68bd4e9d8 100644
--- a/kernel/wait.c
+++ b/kernel/wait.c
@@ -333,7 +333,8 @@ int __wait_on_atomic_t(wait_queue_head_t *wq, struct wait_bit_queue *q,
prepare_to_wait(wq, &q->wait, mode);
val = q->key.flags;
if (atomic_read(val) == 0)
- ret = (*action)(val);
+ break;
+ ret = (*action)(val);
} while (!ret && atomic_read(val) != 0);
finish_wait(wq, &q->wait);
return ret;
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index f02c4a4a0c3c..0b72e816b8d0 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -4644,7 +4644,7 @@ static void restore_unbound_workers_cpumask(struct worker_pool *pool, int cpu)
* Workqueues should be brought up before normal priority CPU notifiers.
* This will be registered high priority CPU notifier.
*/
-static int __cpuinit workqueue_cpu_up_callback(struct notifier_block *nfb,
+static int workqueue_cpu_up_callback(struct notifier_block *nfb,
unsigned long action,
void *hcpu)
{
@@ -4697,7 +4697,7 @@ static int __cpuinit workqueue_cpu_up_callback(struct notifier_block *nfb,
* Workqueues should be brought down after normal priority CPU notifiers.
* This will be registered as low priority CPU notifier.
*/
-static int __cpuinit workqueue_cpu_down_callback(struct notifier_block *nfb,
+static int workqueue_cpu_down_callback(struct notifier_block *nfb,
unsigned long action,
void *hcpu)
{
diff --git a/lib/Kconfig b/lib/Kconfig
index 35da51359d40..71d9f81f6eed 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -66,8 +66,6 @@ config CRC16
config CRC_T10DIF
tristate "CRC calculation for the T10 Data Integrity Field"
- select CRYPTO
- select CRYPTO_CRCT10DIF
help
This option is only needed if a module that's not in the
kernel tree needs to calculate CRC checks for use with the
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 98ac17ed6222..1501aa553221 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -238,7 +238,7 @@ config DEBUG_SECTION_MISMATCH
any use of code/data previously in these sections would
most likely result in an oops.
In the code, functions and variables are annotated with
- __init, __cpuinit, etc. (see the full list in include/linux/init.h),
+ __init,, etc. (see the full list in include/linux/init.h),
which results in the code/data being placed in specific sections.
The section mismatch analysis is always performed after a full
kernel build, and enabling this option causes the following
diff --git a/lib/crc-t10dif.c b/lib/crc-t10dif.c
index fe3428c07b47..fbbd66ed86cd 100644
--- a/lib/crc-t10dif.c
+++ b/lib/crc-t10dif.c
@@ -11,44 +11,57 @@
#include <linux/types.h>
#include <linux/module.h>
#include <linux/crc-t10dif.h>
-#include <linux/err.h>
-#include <linux/init.h>
-#include <crypto/hash.h>
-static struct crypto_shash *crct10dif_tfm;
+/* Table generated using the following polynomium:
+ * x^16 + x^15 + x^11 + x^9 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1
+ * gt: 0x8bb7
+ */
+static const __u16 t10_dif_crc_table[256] = {
+ 0x0000, 0x8BB7, 0x9CD9, 0x176E, 0xB205, 0x39B2, 0x2EDC, 0xA56B,
+ 0xEFBD, 0x640A, 0x7364, 0xF8D3, 0x5DB8, 0xD60F, 0xC161, 0x4AD6,
+ 0x54CD, 0xDF7A, 0xC814, 0x43A3, 0xE6C8, 0x6D7F, 0x7A11, 0xF1A6,
+ 0xBB70, 0x30C7, 0x27A9, 0xAC1E, 0x0975, 0x82C2, 0x95AC, 0x1E1B,
+ 0xA99A, 0x222D, 0x3543, 0xBEF4, 0x1B9F, 0x9028, 0x8746, 0x0CF1,
+ 0x4627, 0xCD90, 0xDAFE, 0x5149, 0xF422, 0x7F95, 0x68FB, 0xE34C,
+ 0xFD57, 0x76E0, 0x618E, 0xEA39, 0x4F52, 0xC4E5, 0xD38B, 0x583C,
+ 0x12EA, 0x995D, 0x8E33, 0x0584, 0xA0EF, 0x2B58, 0x3C36, 0xB781,
+ 0xD883, 0x5334, 0x445A, 0xCFED, 0x6A86, 0xE131, 0xF65F, 0x7DE8,
+ 0x373E, 0xBC89, 0xABE7, 0x2050, 0x853B, 0x0E8C, 0x19E2, 0x9255,
+ 0x8C4E, 0x07F9, 0x1097, 0x9B20, 0x3E4B, 0xB5FC, 0xA292, 0x2925,
+ 0x63F3, 0xE844, 0xFF2A, 0x749D, 0xD1F6, 0x5A41, 0x4D2F, 0xC698,
+ 0x7119, 0xFAAE, 0xEDC0, 0x6677, 0xC31C, 0x48AB, 0x5FC5, 0xD472,
+ 0x9EA4, 0x1513, 0x027D, 0x89CA, 0x2CA1, 0xA716, 0xB078, 0x3BCF,
+ 0x25D4, 0xAE63, 0xB90D, 0x32BA, 0x97D1, 0x1C66, 0x0B08, 0x80BF,
+ 0xCA69, 0x41DE, 0x56B0, 0xDD07, 0x786C, 0xF3DB, 0xE4B5, 0x6F02,
+ 0x3AB1, 0xB106, 0xA668, 0x2DDF, 0x88B4, 0x0303, 0x146D, 0x9FDA,
+ 0xD50C, 0x5EBB, 0x49D5, 0xC262, 0x6709, 0xECBE, 0xFBD0, 0x7067,
+ 0x6E7C, 0xE5CB, 0xF2A5, 0x7912, 0xDC79, 0x57CE, 0x40A0, 0xCB17,
+ 0x81C1, 0x0A76, 0x1D18, 0x96AF, 0x33C4, 0xB873, 0xAF1D, 0x24AA,
+ 0x932B, 0x189C, 0x0FF2, 0x8445, 0x212E, 0xAA99, 0xBDF7, 0x3640,
+ 0x7C96, 0xF721, 0xE04F, 0x6BF8, 0xCE93, 0x4524, 0x524A, 0xD9FD,
+ 0xC7E6, 0x4C51, 0x5B3F, 0xD088, 0x75E3, 0xFE54, 0xE93A, 0x628D,
+ 0x285B, 0xA3EC, 0xB482, 0x3F35, 0x9A5E, 0x11E9, 0x0687, 0x8D30,
+ 0xE232, 0x6985, 0x7EEB, 0xF55C, 0x5037, 0xDB80, 0xCCEE, 0x4759,
+ 0x0D8F, 0x8638, 0x9156, 0x1AE1, 0xBF8A, 0x343D, 0x2353, 0xA8E4,
+ 0xB6FF, 0x3D48, 0x2A26, 0xA191, 0x04FA, 0x8F4D, 0x9823, 0x1394,
+ 0x5942, 0xD2F5, 0xC59B, 0x4E2C, 0xEB47, 0x60F0, 0x779E, 0xFC29,
+ 0x4BA8, 0xC01F, 0xD771, 0x5CC6, 0xF9AD, 0x721A, 0x6574, 0xEEC3,
+ 0xA415, 0x2FA2, 0x38CC, 0xB37B, 0x1610, 0x9DA7, 0x8AC9, 0x017E,
+ 0x1F65, 0x94D2, 0x83BC, 0x080B, 0xAD60, 0x26D7, 0x31B9, 0xBA0E,
+ 0xF0D8, 0x7B6F, 0x6C01, 0xE7B6, 0x42DD, 0xC96A, 0xDE04, 0x55B3
+};
__u16 crc_t10dif(const unsigned char *buffer, size_t len)
{
- struct {
- struct shash_desc shash;
- char ctx[2];
- } desc;
- int err;
-
- desc.shash.tfm = crct10dif_tfm;
- desc.shash.flags = 0;
- *(__u16 *)desc.ctx = 0;
+ __u16 crc = 0;
+ unsigned int i;
- err = crypto_shash_update(&desc.shash, buffer, len);
- BUG_ON(err);
+ for (i = 0 ; i < len ; i++)
+ crc = (crc << 8) ^ t10_dif_crc_table[((crc >> 8) ^ buffer[i]) & 0xff];
- return *(__u16 *)desc.ctx;
+ return crc;
}
EXPORT_SYMBOL(crc_t10dif);
-static int __init crc_t10dif_mod_init(void)
-{
- crct10dif_tfm = crypto_alloc_shash("crct10dif", 0, 0);
- return PTR_RET(crct10dif_tfm);
-}
-
-static void __exit crc_t10dif_mod_fini(void)
-{
- crypto_free_shash(crct10dif_tfm);
-}
-
-module_init(crc_t10dif_mod_init);
-module_exit(crc_t10dif_mod_fini);
-
MODULE_DESCRIPTION("T10 DIF CRC calculation");
MODULE_LICENSE("GPL");
diff --git a/lib/earlycpio.c b/lib/earlycpio.c
index 8078ef49cb79..7aa7ce250c94 100644
--- a/lib/earlycpio.c
+++ b/lib/earlycpio.c
@@ -63,7 +63,7 @@ enum cpio_fields {
* the match returned an empty filename string.
*/
-struct cpio_data __cpuinit find_cpio_data(const char *path, void *data,
+struct cpio_data find_cpio_data(const char *path, void *data,
size_t len, long *offset)
{
const size_t cpio_header_len = 8*C_NFIELDS - 2;
diff --git a/lib/mpi/longlong.h b/lib/mpi/longlong.h
index d411355f238e..aac511417ad1 100644
--- a/lib/mpi/longlong.h
+++ b/lib/mpi/longlong.h
@@ -151,15 +151,12 @@ do { \
#endif /* __a29k__ */
#if defined(__alpha) && W_TYPE_SIZE == 64
-#define umul_ppmm(ph, pl, m0, m1) \
-do { \
- UDItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("umulh %r1,%2,%0" \
- : "=r" ((UDItype) ph) \
- : "%rJ" (__m0), \
- "rI" (__m1)); \
- (pl) = __m0 * __m1; \
- } while (0)
+#define umul_ppmm(ph, pl, m0, m1) \
+do { \
+ UDItype __m0 = (m0), __m1 = (m1); \
+ (ph) = __builtin_alpha_umulh(__m0, __m1); \
+ (pl) = __m0 * __m1; \
+} while (0)
#define UMUL_TIME 46
#ifndef LONGLONG_STANDALONE
#define udiv_qrnnd(q, r, n1, n0, d) \
@@ -167,7 +164,7 @@ do { UDItype __r; \
(q) = __udiv_qrnnd(&__r, (n1), (n0), (d)); \
(r) = __r; \
} while (0)
-extern UDItype __udiv_qrnnd();
+extern UDItype __udiv_qrnnd(UDItype *, UDItype, UDItype, UDItype);
#define UDIV_TIME 220
#endif /* LONGLONG_STANDALONE */
#endif /* __alpha */
diff --git a/lib/percpu_counter.c b/lib/percpu_counter.c
index 1fc23a3277e1..93c5d5ecff4e 100644
--- a/lib/percpu_counter.c
+++ b/lib/percpu_counter.c
@@ -158,7 +158,7 @@ static void compute_batch_value(void)
percpu_counter_batch = max(32, nr*2);
}
-static int __cpuinit percpu_counter_hotcpu_callback(struct notifier_block *nb,
+static int percpu_counter_hotcpu_callback(struct notifier_block *nb,
unsigned long action, void *hcpu)
{
#ifdef CONFIG_HOTPLUG_CPU
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index d014ee5fcbbd..e04454cdb33f 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -232,8 +232,6 @@ static ssize_t stable_pages_required_show(struct device *dev,
bdi_cap_stable_pages_required(bdi) ? 1 : 0);
}
-#define __ATTR_RW(attr) __ATTR(attr, 0644, attr##_show, attr##_store)
-
static struct device_attribute bdi_dev_attrs[] = {
__ATTR_RW(read_ahead_kb),
__ATTR_RW(min_ratio),
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index d12ca6f3c293..00a7a664b9c1 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -2522,7 +2522,7 @@ static void mem_cgroup_drain_pcp_counter(struct mem_cgroup *memcg, int cpu)
spin_unlock(&memcg->pcp_counter_lock);
}
-static int __cpuinit memcg_cpu_hotplug_callback(struct notifier_block *nb,
+static int memcg_cpu_hotplug_callback(struct notifier_block *nb,
unsigned long action,
void *hcpu)
{
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 4514ad7415c3..3f0c895c71fe 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -1619,7 +1619,7 @@ void writeback_set_ratelimit(void)
ratelimit_pages = 16;
}
-static int __cpuinit
+static int
ratelimit_handler(struct notifier_block *self, unsigned long action,
void *hcpu)
{
@@ -1634,7 +1634,7 @@ ratelimit_handler(struct notifier_block *self, unsigned long action,
}
}
-static struct notifier_block __cpuinitdata ratelimit_nb = {
+static struct notifier_block ratelimit_nb = {
.notifier_call = ratelimit_handler,
.next = NULL,
};
diff --git a/mm/slab.c b/mm/slab.c
index 35cb0c861508..2580db062df9 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -787,7 +787,7 @@ static void next_reap_node(void)
* the CPUs getting into lockstep and contending for the global cache chain
* lock.
*/
-static void __cpuinit start_cpu_timer(int cpu)
+static void start_cpu_timer(int cpu)
{
struct delayed_work *reap_work = &per_cpu(slab_reap_work, cpu);
@@ -1186,7 +1186,7 @@ static inline int slabs_tofree(struct kmem_cache *cachep,
return (n->free_objects + cachep->num - 1) / cachep->num;
}
-static void __cpuinit cpuup_canceled(long cpu)
+static void cpuup_canceled(long cpu)
{
struct kmem_cache *cachep;
struct kmem_cache_node *n = NULL;
@@ -1251,7 +1251,7 @@ free_array_cache:
}
}
-static int __cpuinit cpuup_prepare(long cpu)
+static int cpuup_prepare(long cpu)
{
struct kmem_cache *cachep;
struct kmem_cache_node *n = NULL;
@@ -1334,7 +1334,7 @@ bad:
return -ENOMEM;
}
-static int __cpuinit cpuup_callback(struct notifier_block *nfb,
+static int cpuup_callback(struct notifier_block *nfb,
unsigned long action, void *hcpu)
{
long cpu = (long)hcpu;
@@ -1390,7 +1390,7 @@ static int __cpuinit cpuup_callback(struct notifier_block *nfb,
return notifier_from_errno(err);
}
-static struct notifier_block __cpuinitdata cpucache_notifier = {
+static struct notifier_block cpucache_notifier = {
&cpuup_callback, NULL, 0
};
diff --git a/mm/slub.c b/mm/slub.c
index 3b482c863002..2b02d666bf63 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -3773,7 +3773,7 @@ int __kmem_cache_create(struct kmem_cache *s, unsigned long flags)
* Use the cpu notifier to insure that the cpu slabs are flushed when
* necessary.
*/
-static int __cpuinit slab_cpuup_callback(struct notifier_block *nfb,
+static int slab_cpuup_callback(struct notifier_block *nfb,
unsigned long action, void *hcpu)
{
long cpu = (long)hcpu;
@@ -3799,7 +3799,7 @@ static int __cpuinit slab_cpuup_callback(struct notifier_block *nfb,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata slab_notifier = {
+static struct notifier_block slab_notifier = {
.notifier_call = slab_cpuup_callback
};
diff --git a/mm/vmstat.c b/mm/vmstat.c
index f42745e65780..20c2ef4458fa 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -1182,7 +1182,7 @@ static void vmstat_update(struct work_struct *w)
round_jiffies_relative(sysctl_stat_interval));
}
-static void __cpuinit start_cpu_timer(int cpu)
+static void start_cpu_timer(int cpu)
{
struct delayed_work *work = &per_cpu(vmstat_work, cpu);
@@ -1194,7 +1194,7 @@ static void __cpuinit start_cpu_timer(int cpu)
* Use the cpu notifier to insure that the thresholds are recalculated
* when necessary.
*/
-static int __cpuinit vmstat_cpuup_callback(struct notifier_block *nfb,
+static int vmstat_cpuup_callback(struct notifier_block *nfb,
unsigned long action,
void *hcpu)
{
@@ -1226,7 +1226,7 @@ static int __cpuinit vmstat_cpuup_callback(struct notifier_block *nfb,
return NOTIFY_OK;
}
-static struct notifier_block __cpuinitdata vmstat_notifier =
+static struct notifier_block vmstat_notifier =
{ &vmstat_cpuup_callback, NULL, 0 };
#endif
diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c
index 8a15eaadc4bd..4a78c4de9f20 100644
--- a/net/8021q/vlan_core.c
+++ b/net/8021q/vlan_core.c
@@ -9,7 +9,7 @@ bool vlan_do_receive(struct sk_buff **skbp)
{
struct sk_buff *skb = *skbp;
__be16 vlan_proto = skb->vlan_proto;
- u16 vlan_id = skb->vlan_tci & VLAN_VID_MASK;
+ u16 vlan_id = vlan_tx_tag_get_id(skb);
struct net_device *vlan_dev;
struct vlan_pcpu_stats *rx_stats;
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index 3a8c8fd63c88..1cd3d2a406f5 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -73,6 +73,8 @@ vlan_dev_get_egress_qos_mask(struct net_device *dev, struct sk_buff *skb)
{
struct vlan_priority_tci_mapping *mp;
+ smp_rmb(); /* coupled with smp_wmb() in vlan_dev_set_egress_priority() */
+
mp = vlan_dev_priv(dev)->egress_priority_map[(skb->priority & 0xF)];
while (mp) {
if (mp->priority == skb->priority) {
@@ -249,6 +251,11 @@ int vlan_dev_set_egress_priority(const struct net_device *dev,
np->next = mp;
np->priority = skb_prio;
np->vlan_qos = vlan_qos;
+ /* Before inserting this element in hash table, make sure all its fields
+ * are committed to memory.
+ * coupled with smp_rmb() in vlan_dev_get_egress_qos_mask()
+ */
+ smp_wmb();
vlan->egress_priority_map[skb_prio & 0xF] = np;
if (vlan_qos)
vlan->nr_egress_mappings++;
diff --git a/net/core/dev.c b/net/core/dev.c
index a3d8d44cb7f4..26755dd40daa 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3580,8 +3580,15 @@ ncls:
}
}
- if (vlan_tx_nonzero_tag_present(skb))
- skb->pkt_type = PACKET_OTHERHOST;
+ if (unlikely(vlan_tx_tag_present(skb))) {
+ if (vlan_tx_tag_get_id(skb))
+ skb->pkt_type = PACKET_OTHERHOST;
+ /* Note: we might in the future use prio bits
+ * and set skb->priority like in vlan_do_receive()
+ * For the time being, just ignore Priority Code Point
+ */
+ skb->vlan_tci = 0;
+ }
/* deliver only exact match when indicated */
null_or_dev = deliver_exact ? skb->dev : NULL;
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index ab5fa6336c84..78e9d9223e40 100644
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -279,11 +279,16 @@ static u32 __ethtool_get_flags(struct net_device *dev)
{
u32 flags = 0;
- if (dev->features & NETIF_F_LRO) flags |= ETH_FLAG_LRO;
- if (dev->features & NETIF_F_HW_VLAN_CTAG_RX) flags |= ETH_FLAG_RXVLAN;
- if (dev->features & NETIF_F_HW_VLAN_CTAG_TX) flags |= ETH_FLAG_TXVLAN;
- if (dev->features & NETIF_F_NTUPLE) flags |= ETH_FLAG_NTUPLE;
- if (dev->features & NETIF_F_RXHASH) flags |= ETH_FLAG_RXHASH;
+ if (dev->features & NETIF_F_LRO)
+ flags |= ETH_FLAG_LRO;
+ if (dev->features & NETIF_F_HW_VLAN_CTAG_RX)
+ flags |= ETH_FLAG_RXVLAN;
+ if (dev->features & NETIF_F_HW_VLAN_CTAG_TX)
+ flags |= ETH_FLAG_TXVLAN;
+ if (dev->features & NETIF_F_NTUPLE)
+ flags |= ETH_FLAG_NTUPLE;
+ if (dev->features & NETIF_F_RXHASH)
+ flags |= ETH_FLAG_RXHASH;
return flags;
}
@@ -295,11 +300,16 @@ static int __ethtool_set_flags(struct net_device *dev, u32 data)
if (data & ~ETH_ALL_FLAGS)
return -EINVAL;
- if (data & ETH_FLAG_LRO) features |= NETIF_F_LRO;
- if (data & ETH_FLAG_RXVLAN) features |= NETIF_F_HW_VLAN_CTAG_RX;
- if (data & ETH_FLAG_TXVLAN) features |= NETIF_F_HW_VLAN_CTAG_TX;
- if (data & ETH_FLAG_NTUPLE) features |= NETIF_F_NTUPLE;
- if (data & ETH_FLAG_RXHASH) features |= NETIF_F_RXHASH;
+ if (data & ETH_FLAG_LRO)
+ features |= NETIF_F_LRO;
+ if (data & ETH_FLAG_RXVLAN)
+ features |= NETIF_F_HW_VLAN_CTAG_RX;
+ if (data & ETH_FLAG_TXVLAN)
+ features |= NETIF_F_HW_VLAN_CTAG_TX;
+ if (data & ETH_FLAG_NTUPLE)
+ features |= NETIF_F_NTUPLE;
+ if (data & ETH_FLAG_RXHASH)
+ features |= NETIF_F_RXHASH;
/* allow changing only bits set in hw_features */
changed = (features ^ dev->features) & ETH_ALL_FEATURES;
diff --git a/net/core/flow.c b/net/core/flow.c
index 7102f166482d..dfa602ceb8cd 100644
--- a/net/core/flow.c
+++ b/net/core/flow.c
@@ -403,7 +403,7 @@ void flow_cache_flush_deferred(void)
schedule_work(&flow_cache_flush_work);
}
-static int __cpuinit flow_cache_cpu_prepare(struct flow_cache *fc, int cpu)
+static int flow_cache_cpu_prepare(struct flow_cache *fc, int cpu)
{
struct flow_cache_percpu *fcp = per_cpu_ptr(fc->percpu, cpu);
size_t sz = sizeof(struct hlist_head) * flow_cache_hash_size(fc);
@@ -421,7 +421,7 @@ static int __cpuinit flow_cache_cpu_prepare(struct flow_cache *fc, int cpu)
return 0;
}
-static int __cpuinit flow_cache_cpu(struct notifier_block *nfb,
+static int flow_cache_cpu(struct notifier_block *nfb,
unsigned long action,
void *hcpu)
{
diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c
index 5359560926bc..be1f64d35358 100644
--- a/net/ethernet/eth.c
+++ b/net/ethernet/eth.c
@@ -401,27 +401,8 @@ struct net_device *alloc_etherdev_mqs(int sizeof_priv, unsigned int txqs,
}
EXPORT_SYMBOL(alloc_etherdev_mqs);
-static size_t _format_mac_addr(char *buf, int buflen,
- const unsigned char *addr, int len)
-{
- int i;
- char *cp = buf;
-
- for (i = 0; i < len; i++) {
- cp += scnprintf(cp, buflen - (cp - buf), "%02x", addr[i]);
- if (i == len - 1)
- break;
- cp += scnprintf(cp, buflen - (cp - buf), ":");
- }
- return cp - buf;
-}
-
ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len)
{
- size_t l;
-
- l = _format_mac_addr(buf, PAGE_SIZE, addr, len);
- l += scnprintf(buf + l, PAGE_SIZE - l, "\n");
- return (ssize_t)l;
+ return scnprintf(buf, PAGE_SIZE, "%*phC\n", len, addr);
}
EXPORT_SYMBOL(sysfs_format_mac);
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c
index 3da817b89e9b..15e3e683adec 100644
--- a/net/ipv4/ip_input.c
+++ b/net/ipv4/ip_input.c
@@ -190,10 +190,7 @@ static int ip_local_deliver_finish(struct sk_buff *skb)
{
struct net *net = dev_net(skb->dev);
- __skb_pull(skb, ip_hdrlen(skb));
-
- /* Point into the IP datagram, just past the header. */
- skb_reset_transport_header(skb);
+ __skb_pull(skb, skb_network_header_len(skb));
rcu_read_lock();
{
@@ -437,6 +434,8 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt,
goto drop;
}
+ skb->transport_header = skb->network_header + iph->ihl*4;
+
/* Remove any debris in the socket control block */
memset(IPCB(skb), 0, sizeof(struct inet_skb_parm));
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index b3b5730b48c5..24c03396e008 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -479,7 +479,7 @@ static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,
if (ifp) {
src_addr = solicited_addr;
if (ifp->flags & IFA_F_OPTIMISTIC)
- override = 0;
+ override = false;
inc_opt |= ifp->idev->cnf.force_tllao;
in6_ifa_put(ifp);
} else {
@@ -557,7 +557,7 @@ void ndisc_send_ns(struct net_device *dev, struct neighbour *neigh,
}
if (ipv6_addr_any(saddr))
- inc_opt = 0;
+ inc_opt = false;
if (inc_opt)
optlen += ndisc_opt_addr_space(dev);
@@ -790,7 +790,7 @@ static void ndisc_recv_ns(struct sk_buff *skb)
(is_router = pndisc_is_router(&msg->target, dev)) >= 0)) {
if (!(NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED) &&
skb->pkt_type != PACKET_HOST &&
- inc != 0 &&
+ inc &&
idev->nd_parms->proxy_delay != 0) {
/*
* for anycast or proxy,
diff --git a/net/irda/irlan/irlan_eth.c b/net/irda/irlan/irlan_eth.c
index d14152e866d9..ffcec225b5d9 100644
--- a/net/irda/irlan/irlan_eth.c
+++ b/net/irda/irlan/irlan_eth.c
@@ -44,12 +44,12 @@ static int irlan_eth_open(struct net_device *dev);
static int irlan_eth_close(struct net_device *dev);
static netdev_tx_t irlan_eth_xmit(struct sk_buff *skb,
struct net_device *dev);
-static void irlan_eth_set_multicast_list( struct net_device *dev);
+static void irlan_eth_set_multicast_list(struct net_device *dev);
static const struct net_device_ops irlan_eth_netdev_ops = {
- .ndo_open = irlan_eth_open,
- .ndo_stop = irlan_eth_close,
- .ndo_start_xmit = irlan_eth_xmit,
+ .ndo_open = irlan_eth_open,
+ .ndo_stop = irlan_eth_close,
+ .ndo_start_xmit = irlan_eth_xmit,
.ndo_set_rx_mode = irlan_eth_set_multicast_list,
.ndo_change_mtu = eth_change_mtu,
.ndo_validate_addr = eth_validate_addr,
@@ -110,7 +110,7 @@ static int irlan_eth_open(struct net_device *dev)
{
struct irlan_cb *self = netdev_priv(dev);
- IRDA_DEBUG(2, "%s()\n", __func__ );
+ IRDA_DEBUG(2, "%s()\n", __func__);
/* Ready to play! */
netif_stop_queue(dev); /* Wait until data link is ready */
@@ -137,7 +137,7 @@ static int irlan_eth_close(struct net_device *dev)
{
struct irlan_cb *self = netdev_priv(dev);
- IRDA_DEBUG(2, "%s()\n", __func__ );
+ IRDA_DEBUG(2, "%s()\n", __func__);
/* Stop device */
netif_stop_queue(dev);
@@ -310,35 +310,32 @@ static void irlan_eth_set_multicast_list(struct net_device *dev)
{
struct irlan_cb *self = netdev_priv(dev);
- IRDA_DEBUG(2, "%s()\n", __func__ );
+ IRDA_DEBUG(2, "%s()\n", __func__);
/* Check if data channel has been connected yet */
if (self->client.state != IRLAN_DATA) {
- IRDA_DEBUG(1, "%s(), delaying!\n", __func__ );
+ IRDA_DEBUG(1, "%s(), delaying!\n", __func__);
return;
}
if (dev->flags & IFF_PROMISC) {
/* Enable promiscuous mode */
IRDA_WARNING("Promiscuous mode not implemented by IrLAN!\n");
- }
- else if ((dev->flags & IFF_ALLMULTI) ||
+ } else if ((dev->flags & IFF_ALLMULTI) ||
netdev_mc_count(dev) > HW_MAX_ADDRS) {
/* Disable promiscuous mode, use normal mode. */
- IRDA_DEBUG(4, "%s(), Setting multicast filter\n", __func__ );
+ IRDA_DEBUG(4, "%s(), Setting multicast filter\n", __func__);
/* hardware_set_filter(NULL); */
irlan_set_multicast_filter(self, TRUE);
- }
- else if (!netdev_mc_empty(dev)) {
- IRDA_DEBUG(4, "%s(), Setting multicast filter\n", __func__ );
+ } else if (!netdev_mc_empty(dev)) {
+ IRDA_DEBUG(4, "%s(), Setting multicast filter\n", __func__);
/* Walk the address list, and load the filter */
/* hardware_set_filter(dev->mc_list); */
irlan_set_multicast_filter(self, TRUE);
- }
- else {
- IRDA_DEBUG(4, "%s(), Clearing multicast filter\n", __func__ );
+ } else {
+ IRDA_DEBUG(4, "%s(), Clearing multicast filter\n", __func__);
irlan_set_multicast_filter(self, FALSE);
}
diff --git a/net/iucv/iucv.c b/net/iucv/iucv.c
index 4fe76ff214c2..cd5b8ec9be04 100644
--- a/net/iucv/iucv.c
+++ b/net/iucv/iucv.c
@@ -621,7 +621,7 @@ static void iucv_disable(void)
put_online_cpus();
}
-static int __cpuinit iucv_cpu_notify(struct notifier_block *self,
+static int iucv_cpu_notify(struct notifier_block *self,
unsigned long action, void *hcpu)
{
cpumask_t cpumask;
diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c
index a7ab323849b6..8056fb4e618a 100644
--- a/net/sched/sch_qfq.c
+++ b/net/sched/sch_qfq.c
@@ -113,7 +113,6 @@
#define FRAC_BITS 30 /* fixed point arithmetic */
#define ONE_FP (1UL << FRAC_BITS)
-#define IWSUM (ONE_FP/QFQ_MAX_WSUM)
#define QFQ_MTU_SHIFT 16 /* to support TSO/GSO */
#define QFQ_MIN_LMAX 512 /* see qfq_slot_insert */
@@ -189,6 +188,7 @@ struct qfq_sched {
struct qfq_aggregate *in_serv_agg; /* Aggregate being served. */
u32 num_active_agg; /* Num. of active aggregates */
u32 wsum; /* weight sum */
+ u32 iwsum; /* inverse weight sum */
unsigned long bitmaps[QFQ_MAX_STATE]; /* Group bitmaps. */
struct qfq_group groups[QFQ_MAX_INDEX + 1]; /* The groups. */
@@ -314,6 +314,7 @@ static void qfq_update_agg(struct qfq_sched *q, struct qfq_aggregate *agg,
q->wsum +=
(int) agg->class_weight * (new_num_classes - agg->num_classes);
+ q->iwsum = ONE_FP / q->wsum;
agg->num_classes = new_num_classes;
}
@@ -340,6 +341,10 @@ static void qfq_destroy_agg(struct qfq_sched *q, struct qfq_aggregate *agg)
{
if (!hlist_unhashed(&agg->nonfull_next))
hlist_del_init(&agg->nonfull_next);
+ q->wsum -= agg->class_weight;
+ if (q->wsum != 0)
+ q->iwsum = ONE_FP / q->wsum;
+
if (q->in_serv_agg == agg)
q->in_serv_agg = qfq_choose_next_agg(q);
kfree(agg);
@@ -834,38 +839,60 @@ static void qfq_make_eligible(struct qfq_sched *q)
}
}
-
/*
- * The index of the slot in which the aggregate is to be inserted must
- * not be higher than QFQ_MAX_SLOTS-2. There is a '-2' and not a '-1'
- * because the start time of the group may be moved backward by one
- * slot after the aggregate has been inserted, and this would cause
- * non-empty slots to be right-shifted by one position.
+ * The index of the slot in which the input aggregate agg is to be
+ * inserted must not be higher than QFQ_MAX_SLOTS-2. There is a '-2'
+ * and not a '-1' because the start time of the group may be moved
+ * backward by one slot after the aggregate has been inserted, and
+ * this would cause non-empty slots to be right-shifted by one
+ * position.
+ *
+ * QFQ+ fully satisfies this bound to the slot index if the parameters
+ * of the classes are not changed dynamically, and if QFQ+ never
+ * happens to postpone the service of agg unjustly, i.e., it never
+ * happens that the aggregate becomes backlogged and eligible, or just
+ * eligible, while an aggregate with a higher approximated finish time
+ * is being served. In particular, in this case QFQ+ guarantees that
+ * the timestamps of agg are low enough that the slot index is never
+ * higher than 2. Unfortunately, QFQ+ cannot provide the same
+ * guarantee if it happens to unjustly postpone the service of agg, or
+ * if the parameters of some class are changed.
+ *
+ * As for the first event, i.e., an out-of-order service, the
+ * upper bound to the slot index guaranteed by QFQ+ grows to
+ * 2 +
+ * QFQ_MAX_AGG_CLASSES * ((1<<QFQ_MTU_SHIFT)/QFQ_MIN_LMAX) *
+ * (current_max_weight/current_wsum) <= 2 + 8 * 128 * 1.
*
- * If the weight and lmax (max_pkt_size) of the classes do not change,
- * then QFQ+ does meet the above contraint according to the current
- * values of its parameters. In fact, if the weight and lmax of the
- * classes do not change, then, from the theory, QFQ+ guarantees that
- * the slot index is never higher than
- * 2 + QFQ_MAX_AGG_CLASSES * ((1<<QFQ_MTU_SHIFT)/QFQ_MIN_LMAX) *
- * (QFQ_MAX_WEIGHT/QFQ_MAX_WSUM) = 2 + 8 * 128 * (1 / 64) = 18
+ * The following function deals with this problem by backward-shifting
+ * the timestamps of agg, if needed, so as to guarantee that the slot
+ * index is never higher than QFQ_MAX_SLOTS-2. This backward-shift may
+ * cause the service of other aggregates to be postponed, yet the
+ * worst-case guarantees of these aggregates are not violated. In
+ * fact, in case of no out-of-order service, the timestamps of agg
+ * would have been even lower than they are after the backward shift,
+ * because QFQ+ would have guaranteed a maximum value equal to 2 for
+ * the slot index, and 2 < QFQ_MAX_SLOTS-2. Hence the aggregates whose
+ * service is postponed because of the backward-shift would have
+ * however waited for the service of agg before being served.
*
- * When the weight of a class is increased or the lmax of the class is
- * decreased, a new aggregate with smaller slot size than the original
- * parent aggregate of the class may happen to be activated. The
- * activation of this aggregate should be properly delayed to when the
- * service of the class has finished in the ideal system tracked by
- * QFQ+. If the activation of the aggregate is not delayed to this
- * reference time instant, then this aggregate may be unjustly served
- * before other aggregates waiting for service. This may cause the
- * above bound to the slot index to be violated for some of these
- * unlucky aggregates.
+ * The other event that may cause the slot index to be higher than 2
+ * for agg is a recent change of the parameters of some class. If the
+ * weight of a class is increased or the lmax (max_pkt_size) of the
+ * class is decreased, then a new aggregate with smaller slot size
+ * than the original parent aggregate of the class may happen to be
+ * activated. The activation of this aggregate should be properly
+ * delayed to when the service of the class has finished in the ideal
+ * system tracked by QFQ+. If the activation of the aggregate is not
+ * delayed to this reference time instant, then this aggregate may be
+ * unjustly served before other aggregates waiting for service. This
+ * may cause the above bound to the slot index to be violated for some
+ * of these unlucky aggregates.
*
* Instead of delaying the activation of the new aggregate, which is
- * quite complex, the following inaccurate but simple solution is used:
- * if the slot index is higher than QFQ_MAX_SLOTS-2, then the
- * timestamps of the aggregate are shifted backward so as to let the
- * slot index become equal to QFQ_MAX_SLOTS-2.
+ * quite complex, the above-discussed capping of the slot index is
+ * used to handle also the consequences of a change of the parameters
+ * of a class.
*/
static void qfq_slot_insert(struct qfq_group *grp, struct qfq_aggregate *agg,
u64 roundedS)
@@ -1136,7 +1163,7 @@ static struct sk_buff *qfq_dequeue(struct Qdisc *sch)
else
in_serv_agg->budget -= len;
- q->V += (u64)len * IWSUM;
+ q->V += (u64)len * q->iwsum;
pr_debug("qfq dequeue: len %u F %lld now %lld\n",
len, (unsigned long long) in_serv_agg->F,
(unsigned long long) q->V);
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 9963584605c0..74f6a704e374 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -309,6 +309,7 @@ static int rpc_client_register(const struct rpc_create_args *args,
return 0;
err_auth:
pipefs_sb = rpc_get_sb_net(net);
+ rpc_unregister_client(clnt);
__rpc_clnt_remove_pipedir(clnt);
out:
if (pipefs_sb)
diff --git a/net/sunrpc/xprtrdma/svc_rdma_marshal.c b/net/sunrpc/xprtrdma/svc_rdma_marshal.c
index 8d2edddf48cf..65b146297f5a 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_marshal.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_marshal.c
@@ -98,6 +98,7 @@ void svc_rdma_rcl_chunk_counts(struct rpcrdma_read_chunk *ch,
*/
static u32 *decode_write_list(u32 *va, u32 *vaend)
{
+ unsigned long start, end;
int nchunks;
struct rpcrdma_write_array *ary =
@@ -113,9 +114,12 @@ static u32 *decode_write_list(u32 *va, u32 *vaend)
return NULL;
}
nchunks = ntohl(ary->wc_nchunks);
- if (((unsigned long)&ary->wc_array[0] +
- (sizeof(struct rpcrdma_write_chunk) * nchunks)) >
- (unsigned long)vaend) {
+
+ start = (unsigned long)&ary->wc_array[0];
+ end = (unsigned long)vaend;
+ if (nchunks < 0 ||
+ nchunks > (SIZE_MAX - start) / sizeof(struct rpcrdma_write_chunk) ||
+ (start + (sizeof(struct rpcrdma_write_chunk) * nchunks)) > end) {
dprintk("svcrdma: ary=%p, wc_nchunks=%d, vaend=%p\n",
ary, nchunks, vaend);
return NULL;
@@ -129,6 +133,7 @@ static u32 *decode_write_list(u32 *va, u32 *vaend)
static u32 *decode_reply_array(u32 *va, u32 *vaend)
{
+ unsigned long start, end;
int nchunks;
struct rpcrdma_write_array *ary =
(struct rpcrdma_write_array *)va;
@@ -143,9 +148,12 @@ static u32 *decode_reply_array(u32 *va, u32 *vaend)
return NULL;
}
nchunks = ntohl(ary->wc_nchunks);
- if (((unsigned long)&ary->wc_array[0] +
- (sizeof(struct rpcrdma_write_chunk) * nchunks)) >
- (unsigned long)vaend) {
+
+ start = (unsigned long)&ary->wc_array[0];
+ end = (unsigned long)vaend;
+ if (nchunks < 0 ||
+ nchunks > (SIZE_MAX - start) / sizeof(struct rpcrdma_write_chunk) ||
+ (start + (sizeof(struct rpcrdma_write_chunk) * nchunks)) > end) {
dprintk("svcrdma: ary=%p, wc_nchunks=%d, vaend=%p\n",
ary, nchunks, vaend);
return NULL;
diff --git a/sound/arm/pxa2xx-pcm-lib.c b/sound/arm/pxa2xx-pcm-lib.c
index 76e0d5695075..823359ed95e1 100644
--- a/sound/arm/pxa2xx-pcm-lib.c
+++ b/sound/arm/pxa2xx-pcm-lib.c
@@ -166,7 +166,9 @@ void pxa2xx_pcm_dma_irq(int dma_ch, void *dev_id)
} else {
printk(KERN_ERR "%s: DMA error on channel %d (DCSR=%#x)\n",
rtd->params->name, dma_ch, dcsr);
+ snd_pcm_stream_lock(substream);
snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
+ snd_pcm_stream_unlock(substream);
}
}
EXPORT_SYMBOL(pxa2xx_pcm_dma_irq);
diff --git a/sound/core/seq/oss/seq_oss_init.c b/sound/core/seq/oss/seq_oss_init.c
index e3cb46fef2c7..b3f39b5ed742 100644
--- a/sound/core/seq/oss/seq_oss_init.c
+++ b/sound/core/seq/oss/seq_oss_init.c
@@ -31,6 +31,7 @@
#include <linux/export.h>
#include <linux/moduleparam.h>
#include <linux/slab.h>
+#include <linux/workqueue.h>
/*
* common variables
@@ -60,6 +61,14 @@ static void free_devinfo(void *private);
#define call_ctl(type,rec) snd_seq_kernel_client_ctl(system_client, type, rec)
+/* call snd_seq_oss_midi_lookup_ports() asynchronously */
+static void async_call_lookup_ports(struct work_struct *work)
+{
+ snd_seq_oss_midi_lookup_ports(system_client);
+}
+
+static DECLARE_WORK(async_lookup_work, async_call_lookup_ports);
+
/*
* create sequencer client for OSS sequencer
*/
@@ -85,9 +94,6 @@ snd_seq_oss_create_client(void)
system_client = rc;
debug_printk(("new client = %d\n", rc));
- /* look up midi devices */
- snd_seq_oss_midi_lookup_ports(system_client);
-
/* create annoucement receiver port */
memset(port, 0, sizeof(*port));
strcpy(port->name, "Receiver");
@@ -115,6 +121,9 @@ snd_seq_oss_create_client(void)
}
rc = 0;
+ /* look up midi devices */
+ schedule_work(&async_lookup_work);
+
__error:
kfree(port);
return rc;
@@ -160,6 +169,7 @@ receive_announce(struct snd_seq_event *ev, int direct, void *private, int atomic
int
snd_seq_oss_delete_client(void)
{
+ cancel_work_sync(&async_lookup_work);
if (system_client >= 0)
snd_seq_delete_kernel_client(system_client);
diff --git a/sound/core/seq/oss/seq_oss_midi.c b/sound/core/seq/oss/seq_oss_midi.c
index 677dc84590c7..862d84893ee8 100644
--- a/sound/core/seq/oss/seq_oss_midi.c
+++ b/sound/core/seq/oss/seq_oss_midi.c
@@ -72,7 +72,7 @@ static int send_midi_event(struct seq_oss_devinfo *dp, struct snd_seq_event *ev,
* look up the existing ports
* this looks a very exhausting job.
*/
-int __init
+int
snd_seq_oss_midi_lookup_ports(int client)
{
struct snd_seq_client_info *clinfo;
diff --git a/sound/oss/vwsnd.c b/sound/oss/vwsnd.c
index 7e814a5c3677..4bbcc0fcd4eb 100644
--- a/sound/oss/vwsnd.c
+++ b/sound/oss/vwsnd.c
@@ -149,17 +149,19 @@
#include <linux/interrupt.h>
#include <linux/mutex.h>
#include <linux/slab.h>
+#include <linux/delay.h>
#include <asm/visws/cobalt.h>
#include "sound_config.h"
+static DEFINE_MUTEX(vwsnd_mutex);
+
/*****************************************************************************/
/* debug stuff */
#ifdef VWSND_DEBUG
-static DEFINE_MUTEX(vwsnd_mutex);
static int shut_up = 1;
/*
diff --git a/sound/pci/asihpi/asihpi.c b/sound/pci/asihpi/asihpi.c
index 185d54a5cb1a..dc632cdc3870 100644
--- a/sound/pci/asihpi/asihpi.c
+++ b/sound/pci/asihpi/asihpi.c
@@ -769,7 +769,10 @@ static void snd_card_asihpi_timer_function(unsigned long data)
s->number);
ds->drained_count++;
if (ds->drained_count > 20) {
+ unsigned long flags;
+ snd_pcm_stream_lock_irqsave(s, flags);
snd_pcm_stop(s, SNDRV_PCM_STATE_XRUN);
+ snd_pcm_stream_unlock_irqrestore(s, flags);
continue;
}
} else {
diff --git a/sound/pci/atiixp.c b/sound/pci/atiixp.c
index fe4c61bdb8ba..f6dec3ea371f 100644
--- a/sound/pci/atiixp.c
+++ b/sound/pci/atiixp.c
@@ -689,7 +689,9 @@ static void snd_atiixp_xrun_dma(struct atiixp *chip, struct atiixp_dma *dma)
if (! dma->substream || ! dma->running)
return;
snd_printdd("atiixp: XRUN detected (DMA %d)\n", dma->ops->type);
+ snd_pcm_stream_lock(dma->substream);
snd_pcm_stop(dma->substream, SNDRV_PCM_STATE_XRUN);
+ snd_pcm_stream_unlock(dma->substream);
}
/*
diff --git a/sound/pci/atiixp_modem.c b/sound/pci/atiixp_modem.c
index cf29b9a1d65d..289563ecb6dd 100644
--- a/sound/pci/atiixp_modem.c
+++ b/sound/pci/atiixp_modem.c
@@ -638,7 +638,9 @@ static void snd_atiixp_xrun_dma(struct atiixp_modem *chip,
if (! dma->substream || ! dma->running)
return;
snd_printdd("atiixp-modem: XRUN detected (DMA %d)\n", dma->ops->type);
+ snd_pcm_stream_lock(dma->substream);
snd_pcm_stop(dma->substream, SNDRV_PCM_STATE_XRUN);
+ snd_pcm_stream_unlock(dma->substream);
}
/*
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index 540bdef2f904..030ca8652a1c 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -2622,6 +2622,7 @@ static const struct hda_codec_preset snd_hda_preset_hdmi[] = {
{ .id = 0x10de0043, .name = "GPU 43 HDMI/DP", .patch = patch_generic_hdmi },
{ .id = 0x10de0044, .name = "GPU 44 HDMI/DP", .patch = patch_generic_hdmi },
{ .id = 0x10de0051, .name = "GPU 51 HDMI/DP", .patch = patch_generic_hdmi },
+{ .id = 0x10de0060, .name = "GPU 60 HDMI/DP", .patch = patch_generic_hdmi },
{ .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch },
{ .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi_2ch },
{ .id = 0x11069f80, .name = "VX900 HDMI/DP", .patch = patch_via_hdmi },
@@ -2674,6 +2675,7 @@ MODULE_ALIAS("snd-hda-codec-id:10de0042");
MODULE_ALIAS("snd-hda-codec-id:10de0043");
MODULE_ALIAS("snd-hda-codec-id:10de0044");
MODULE_ALIAS("snd-hda-codec-id:10de0051");
+MODULE_ALIAS("snd-hda-codec-id:10de0060");
MODULE_ALIAS("snd-hda-codec-id:10de0067");
MODULE_ALIAS("snd-hda-codec-id:10de8001");
MODULE_ALIAS("snd-hda-codec-id:11069f80");
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index e2f83591161b..92b9b4324372 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -417,9 +417,11 @@ static void stac_update_outputs(struct hda_codec *codec)
val &= ~spec->eapd_mask;
else
val |= spec->eapd_mask;
- if (spec->gpio_data != val)
+ if (spec->gpio_data != val) {
+ spec->gpio_data = val;
stac_gpio_set(codec, spec->gpio_mask, spec->gpio_dir,
val);
+ }
}
}
@@ -3231,7 +3233,7 @@ static const struct hda_fixup stac927x_fixups[] = {
/* configure the analog microphone on some laptops */
{ 0x0c, 0x90a79130 },
/* correct the front output jack as a hp out */
- { 0x0f, 0x0227011f },
+ { 0x0f, 0x0221101f },
/* correct the front input jack as a mic */
{ 0x0e, 0x02a79130 },
{}
@@ -3612,20 +3614,18 @@ static int stac_parse_auto_config(struct hda_codec *codec)
static int stac_init(struct hda_codec *codec)
{
struct sigmatel_spec *spec = codec->spec;
- unsigned int gpio;
int i;
/* override some hints */
stac_store_hints(codec);
/* set up GPIO */
- gpio = spec->gpio_data;
/* turn on EAPD statically when spec->eapd_switch isn't set.
* otherwise, unsol event will turn it on/off dynamically
*/
if (!spec->eapd_switch)
- gpio |= spec->eapd_mask;
- stac_gpio_set(codec, spec->gpio_mask, spec->gpio_dir, gpio);
+ spec->gpio_data |= spec->eapd_mask;
+ stac_gpio_set(codec, spec->gpio_mask, spec->gpio_dir, spec->gpio_data);
snd_hda_gen_init(codec);
@@ -3915,6 +3915,7 @@ static void stac_setup_gpio(struct hda_codec *codec)
{
struct sigmatel_spec *spec = codec->spec;
+ spec->gpio_mask |= spec->eapd_mask;
if (spec->gpio_led) {
if (!spec->vref_mute_led_nid) {
spec->gpio_mask |= spec->gpio_led;
diff --git a/sound/soc/atmel/atmel-pcm-dma.c b/sound/soc/atmel/atmel-pcm-dma.c
index 1d38fd0bc4e2..d12826526798 100644
--- a/sound/soc/atmel/atmel-pcm-dma.c
+++ b/sound/soc/atmel/atmel-pcm-dma.c
@@ -81,7 +81,9 @@ static void atmel_pcm_dma_irq(u32 ssc_sr,
/* stop RX and capture: will be enabled again at restart */
ssc_writex(prtd->ssc->regs, SSC_CR, prtd->mask->ssc_disable);
+ snd_pcm_stream_lock(substream);
snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
+ snd_pcm_stream_unlock(substream);
/* now drain RHR and read status to remove xrun condition */
ssc_readx(prtd->ssc->regs, SSC_RHR);
diff --git a/sound/soc/cirrus/ep93xx-ac97.c b/sound/soc/cirrus/ep93xx-ac97.c
index ac73c607410a..04491f0e8d1b 100644
--- a/sound/soc/cirrus/ep93xx-ac97.c
+++ b/sound/soc/cirrus/ep93xx-ac97.c
@@ -102,13 +102,13 @@ static struct ep93xx_ac97_info *ep93xx_ac97_info;
static struct ep93xx_dma_data ep93xx_ac97_pcm_out = {
.name = "ac97-pcm-out",
- .dma_port = EP93XX_DMA_AAC1,
+ .port = EP93XX_DMA_AAC1,
.direction = DMA_MEM_TO_DEV,
};
static struct ep93xx_dma_data ep93xx_ac97_pcm_in = {
.name = "ac97-pcm-in",
- .dma_port = EP93XX_DMA_AAC1,
+ .port = EP93XX_DMA_AAC1,
.direction = DMA_DEV_TO_MEM,
};
diff --git a/sound/soc/codecs/max98088.c b/sound/soc/codecs/max98088.c
index 3eeada57e87d..566a367c94fa 100644
--- a/sound/soc/codecs/max98088.c
+++ b/sound/soc/codecs/max98088.c
@@ -1612,7 +1612,7 @@ static int max98088_dai2_digital_mute(struct snd_soc_dai *codec_dai, int mute)
static void max98088_sync_cache(struct snd_soc_codec *codec)
{
- u16 *reg_cache = codec->reg_cache;
+ u8 *reg_cache = codec->reg_cache;
int i;
if (!codec->cache_sync)
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
index d441559dc92c..6c8a9e7bee25 100644
--- a/sound/soc/codecs/sgtl5000.c
+++ b/sound/soc/codecs/sgtl5000.c
@@ -38,7 +38,7 @@
static const struct reg_default sgtl5000_reg_defaults[] = {
{ SGTL5000_CHIP_CLK_CTRL, 0x0008 },
{ SGTL5000_CHIP_I2S_CTRL, 0x0010 },
- { SGTL5000_CHIP_SSS_CTRL, 0x0008 },
+ { SGTL5000_CHIP_SSS_CTRL, 0x0010 },
{ SGTL5000_CHIP_DAC_VOL, 0x3c3c },
{ SGTL5000_CHIP_PAD_STRENGTH, 0x015f },
{ SGTL5000_CHIP_ANA_HP_CTRL, 0x1818 },
@@ -1527,6 +1527,9 @@ static int sgtl5000_i2c_probe(struct i2c_client *client,
if (IS_ERR(sgtl5000->mclk)) {
ret = PTR_ERR(sgtl5000->mclk);
dev_err(&client->dev, "Failed to get mclock: %d\n", ret);
+ /* Defer the probe to see if the clk will be provided later */
+ if (ret == -ENOENT)
+ return -EPROBE_DEFER;
return ret;
}
diff --git a/sound/soc/codecs/sgtl5000.h b/sound/soc/codecs/sgtl5000.h
index 4b69229a9818..2f8c88931f69 100644
--- a/sound/soc/codecs/sgtl5000.h
+++ b/sound/soc/codecs/sgtl5000.h
@@ -347,7 +347,7 @@
#define SGTL5000_PLL_INT_DIV_MASK 0xf800
#define SGTL5000_PLL_INT_DIV_SHIFT 11
#define SGTL5000_PLL_INT_DIV_WIDTH 5
-#define SGTL5000_PLL_FRAC_DIV_MASK 0x0700
+#define SGTL5000_PLL_FRAC_DIV_MASK 0x07ff
#define SGTL5000_PLL_FRAC_DIV_SHIFT 0
#define SGTL5000_PLL_FRAC_DIV_WIDTH 11
diff --git a/sound/soc/codecs/wm8978.c b/sound/soc/codecs/wm8978.c
index 029f31c8e703..d8fc531c0e59 100644
--- a/sound/soc/codecs/wm8978.c
+++ b/sound/soc/codecs/wm8978.c
@@ -921,6 +921,7 @@ static struct snd_soc_dai_driver wm8978_dai = {
.formats = WM8978_FORMATS,
},
.ops = &wm8978_dai_ops,
+ .symmetric_rates = 1,
};
static int wm8978_suspend(struct snd_soc_codec *codec)
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index 1d4b1ec66e36..ba832b77c543 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -3852,8 +3852,6 @@ static void wm8958_mic_work(struct work_struct *work)
mic_complete_work.work);
struct snd_soc_codec *codec = wm8994->hubs.codec;
- dev_crit(codec->dev, "MIC WORK %x\n", wm8994->mic_status);
-
pm_runtime_get_sync(codec->dev);
mutex_lock(&wm8994->accdet_lock);
@@ -3863,8 +3861,6 @@ static void wm8958_mic_work(struct work_struct *work)
mutex_unlock(&wm8994->accdet_lock);
pm_runtime_put(codec->dev);
-
- dev_crit(codec->dev, "MIC WORK %x DONE\n", wm8994->mic_status);
}
static irqreturn_t wm8958_mic_irq(int irq, void *data)
diff --git a/sound/soc/omap/mcbsp.c b/sound/soc/omap/mcbsp.c
index eb68c7db1cf3..361e4c03646e 100644
--- a/sound/soc/omap/mcbsp.c
+++ b/sound/soc/omap/mcbsp.c
@@ -1012,28 +1012,33 @@ int omap_mcbsp_init(struct platform_device *pdev)
}
}
- res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx");
- if (!res) {
- dev_err(&pdev->dev, "invalid rx DMA channel\n");
- return -ENODEV;
- }
- /* RX DMA request number, and port address configuration */
- mcbsp->dma_req[1] = res->start;
- mcbsp->dma_data[1].filter_data = &mcbsp->dma_req[1];
- mcbsp->dma_data[1].addr = omap_mcbsp_dma_reg_params(mcbsp, 1);
- mcbsp->dma_data[1].maxburst = 4;
+ if (!pdev->dev.of_node) {
+ res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
+ if (!res) {
+ dev_err(&pdev->dev, "invalid tx DMA channel\n");
+ return -ENODEV;
+ }
+ mcbsp->dma_req[0] = res->start;
+ mcbsp->dma_data[0].filter_data = &mcbsp->dma_req[0];
- res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
- if (!res) {
- dev_err(&pdev->dev, "invalid tx DMA channel\n");
- return -ENODEV;
+ res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx");
+ if (!res) {
+ dev_err(&pdev->dev, "invalid rx DMA channel\n");
+ return -ENODEV;
+ }
+ mcbsp->dma_req[1] = res->start;
+ mcbsp->dma_data[1].filter_data = &mcbsp->dma_req[1];
+ } else {
+ mcbsp->dma_data[0].filter_data = "tx";
+ mcbsp->dma_data[1].filter_data = "rx";
}
- /* TX DMA request number, and port address configuration */
- mcbsp->dma_req[0] = res->start;
- mcbsp->dma_data[0].filter_data = &mcbsp->dma_req[0];
+
mcbsp->dma_data[0].addr = omap_mcbsp_dma_reg_params(mcbsp, 0);
mcbsp->dma_data[0].maxburst = 4;
+ mcbsp->dma_data[1].addr = omap_mcbsp_dma_reg_params(mcbsp, 1);
+ mcbsp->dma_data[1].maxburst = 4;
+
mcbsp->fclk = clk_get(&pdev->dev, "fck");
if (IS_ERR(mcbsp->fclk)) {
ret = PTR_ERR(mcbsp->fclk);
diff --git a/sound/soc/omap/omap-dmic.c b/sound/soc/omap/omap-dmic.c
index 2ad0370146fd..4db1f8e6e172 100644
--- a/sound/soc/omap/omap-dmic.c
+++ b/sound/soc/omap/omap-dmic.c
@@ -57,7 +57,6 @@ struct omap_dmic {
struct mutex mutex;
struct snd_dmaengine_dai_dma_data dma_data;
- unsigned int dma_req;
};
static inline void omap_dmic_write(struct omap_dmic *dmic, u16 reg, u32 val)
@@ -478,15 +477,7 @@ static int asoc_dmic_probe(struct platform_device *pdev)
}
dmic->dma_data.addr = res->start + OMAP_DMIC_DATA_REG;
- res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
- if (!res) {
- dev_err(dmic->dev, "invalid dma resource\n");
- ret = -ENODEV;
- goto err_put_clk;
- }
-
- dmic->dma_req = res->start;
- dmic->dma_data.filter_data = &dmic->dma_req;
+ dmic->dma_data.filter_data = "up_link";
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
if (!res) {
diff --git a/sound/soc/omap/omap-mcpdm.c b/sound/soc/omap/omap-mcpdm.c
index eb05c7ed6d05..a49dc52f8abc 100644
--- a/sound/soc/omap/omap-mcpdm.c
+++ b/sound/soc/omap/omap-mcpdm.c
@@ -66,7 +66,6 @@ struct omap_mcpdm {
bool restart;
struct snd_dmaengine_dai_dma_data dma_data[2];
- unsigned int dma_req[2];
};
/*
@@ -477,19 +476,8 @@ static int asoc_mcpdm_probe(struct platform_device *pdev)
mcpdm->dma_data[0].addr = res->start + MCPDM_REG_DN_DATA;
mcpdm->dma_data[1].addr = res->start + MCPDM_REG_UP_DATA;
- res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "dn_link");
- if (!res)
- return -ENODEV;
-
- mcpdm->dma_req[0] = res->start;
- mcpdm->dma_data[0].filter_data = &mcpdm->dma_req[0];
-
- res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "up_link");
- if (!res)
- return -ENODEV;
-
- mcpdm->dma_req[1] = res->start;
- mcpdm->dma_data[1].filter_data = &mcpdm->dma_req[1];
+ mcpdm->dma_data[0].filter_data = "dn_link";
+ mcpdm->dma_data[1].filter_data = "up_link";
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
if (res == NULL)
diff --git a/sound/soc/omap/omap-pcm.c b/sound/soc/omap/omap-pcm.c
index c28e042f2208..a11405de86e8 100644
--- a/sound/soc/omap/omap-pcm.c
+++ b/sound/soc/omap/omap-pcm.c
@@ -113,14 +113,25 @@ static int omap_pcm_open(struct snd_pcm_substream *substream)
{
struct snd_soc_pcm_runtime *rtd = substream->private_data;
struct snd_dmaengine_dai_dma_data *dma_data;
+ int ret;
snd_soc_set_runtime_hwparams(substream, &omap_pcm_hardware);
dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
- return snd_dmaengine_pcm_open_request_chan(substream,
- omap_dma_filter_fn,
- dma_data->filter_data);
+ /* DT boot: filter_data is the DMA name */
+ if (rtd->cpu_dai->dev->of_node) {
+ struct dma_chan *chan;
+
+ chan = dma_request_slave_channel(rtd->cpu_dai->dev,
+ dma_data->filter_data);
+ ret = snd_dmaengine_pcm_open(substream, chan);
+ } else {
+ ret = snd_dmaengine_pcm_open_request_chan(substream,
+ omap_dma_filter_fn,
+ dma_data->filter_data);
+ }
+ return ret;
}
static int omap_pcm_mmap(struct snd_pcm_substream *substream,
diff --git a/sound/soc/s6000/s6000-pcm.c b/sound/soc/s6000/s6000-pcm.c
index 1358c7de2521..d0740a762963 100644
--- a/sound/soc/s6000/s6000-pcm.c
+++ b/sound/soc/s6000/s6000-pcm.c
@@ -128,7 +128,9 @@ static irqreturn_t s6000_pcm_irq(int irq, void *data)
substream->runtime &&
snd_pcm_running(substream)) {
dev_dbg(pcm->dev, "xrun\n");
+ snd_pcm_stream_lock(substream);
snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
+ snd_pcm_stream_unlock(substream);
ret = IRQ_HANDLED;
}
diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c
index 7a1734697434..959c702235c8 100644
--- a/sound/soc/samsung/i2s.c
+++ b/sound/soc/samsung/i2s.c
@@ -742,13 +742,13 @@ static int config_setup(struct i2s_dai *i2s)
return -EAGAIN;
}
- /* Don't bother RFS, BFS & PSR in Slave mode */
- if (is_slave(i2s))
- return 0;
-
set_bfs(i2s, bfs);
set_rfs(i2s, rfs);
+ /* Don't bother with PSR in Slave mode */
+ if (is_slave(i2s))
+ return 0;
+
if (!(i2s->quirks & QUIRK_NO_MUXPSR)) {
psr = i2s->rclk_srcrate / i2s->frmclk / rfs;
writel(((psr - 1) << 8) | PSR_PSREN, i2s->addr + I2SPSR);
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 0ec070cf7231..d82ee386eab5 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -3908,10 +3908,8 @@ int snd_soc_add_platform(struct device *dev, struct snd_soc_platform *platform,
{
/* create platform component name */
platform->name = fmt_single_name(dev, &platform->id);
- if (platform->name == NULL) {
- kfree(platform);
+ if (platform->name == NULL)
return -ENOMEM;
- }
platform->dev = dev;
platform->driver = platform_drv;
diff --git a/sound/soc/tegra/tegra20_ac97.c b/sound/soc/tegra/tegra20_ac97.c
index e58233f7df61..6c486625321b 100644
--- a/sound/soc/tegra/tegra20_ac97.c
+++ b/sound/soc/tegra/tegra20_ac97.c
@@ -389,9 +389,9 @@ static int tegra20_ac97_platform_probe(struct platform_device *pdev)
ac97->capture_dma_data.slave_id = of_dma[1];
ac97->playback_dma_data.addr = mem->start + TEGRA20_AC97_FIFO_TX1;
- ac97->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
- ac97->capture_dma_data.maxburst = 4;
- ac97->capture_dma_data.slave_id = of_dma[0];
+ ac97->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
+ ac97->playback_dma_data.maxburst = 4;
+ ac97->playback_dma_data.slave_id = of_dma[1];
ret = tegra_asoc_utils_init(&ac97->util_data, &pdev->dev);
if (ret)
diff --git a/sound/soc/tegra/tegra20_spdif.c b/sound/soc/tegra/tegra20_spdif.c
index 5eaa12cdc6eb..551b3c93ce93 100644
--- a/sound/soc/tegra/tegra20_spdif.c
+++ b/sound/soc/tegra/tegra20_spdif.c
@@ -323,8 +323,8 @@ static int tegra20_spdif_platform_probe(struct platform_device *pdev)
}
spdif->playback_dma_data.addr = mem->start + TEGRA20_SPDIF_DATA_OUT;
- spdif->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
- spdif->capture_dma_data.maxburst = 4;
+ spdif->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
+ spdif->playback_dma_data.maxburst = 4;
spdif->playback_dma_data.slave_id = dmareq->start;
pm_runtime_enable(&pdev->dev);
diff --git a/sound/usb/6fire/pcm.c b/sound/usb/6fire/pcm.c
index c5b9cac37dc4..3d2551cc10f2 100644
--- a/sound/usb/6fire/pcm.c
+++ b/sound/usb/6fire/pcm.c
@@ -543,7 +543,7 @@ static snd_pcm_uframes_t usb6fire_pcm_pointer(
snd_pcm_uframes_t ret;
if (rt->panic || !sub)
- return SNDRV_PCM_STATE_XRUN;
+ return SNDRV_PCM_POS_XRUN;
spin_lock_irqsave(&sub->lock, flags);
ret = sub->dma_off;
@@ -639,17 +639,25 @@ int usb6fire_pcm_init(struct sfire_chip *chip)
void usb6fire_pcm_abort(struct sfire_chip *chip)
{
struct pcm_runtime *rt = chip->pcm;
+ unsigned long flags;
int i;
if (rt) {
rt->panic = true;
- if (rt->playback.instance)
+ if (rt->playback.instance) {
+ snd_pcm_stream_lock_irqsave(rt->playback.instance, flags);
snd_pcm_stop(rt->playback.instance,
SNDRV_PCM_STATE_XRUN);
- if (rt->capture.instance)
+ snd_pcm_stream_unlock_irqrestore(rt->playback.instance, flags);
+ }
+
+ if (rt->capture.instance) {
+ snd_pcm_stream_lock_irqsave(rt->capture.instance, flags);
snd_pcm_stop(rt->capture.instance,
SNDRV_PCM_STATE_XRUN);
+ snd_pcm_stream_unlock_irqrestore(rt->capture.instance, flags);
+ }
for (i = 0; i < PCM_N_URBS; i++) {
usb_poison_urb(&rt->in_urbs[i].instance);
diff --git a/sound/usb/hiface/pcm.c b/sound/usb/hiface/pcm.c
index 6430ed2a9f65..c21a3df9a0df 100644
--- a/sound/usb/hiface/pcm.c
+++ b/sound/usb/hiface/pcm.c
@@ -503,7 +503,7 @@ static snd_pcm_uframes_t hiface_pcm_pointer(struct snd_pcm_substream *alsa_sub)
snd_pcm_uframes_t dma_offset;
if (rt->panic || !sub)
- return SNDRV_PCM_STATE_XRUN;
+ return SNDRV_PCM_POS_XRUN;
spin_lock_irqsave(&sub->lock, flags);
dma_offset = sub->dma_off;
diff --git a/sound/usb/misc/ua101.c b/sound/usb/misc/ua101.c
index 8b5d2c564e04..509315937f25 100644
--- a/sound/usb/misc/ua101.c
+++ b/sound/usb/misc/ua101.c
@@ -613,14 +613,24 @@ static int start_usb_playback(struct ua101 *ua)
static void abort_alsa_capture(struct ua101 *ua)
{
- if (test_bit(ALSA_CAPTURE_RUNNING, &ua->states))
+ unsigned long flags;
+
+ if (test_bit(ALSA_CAPTURE_RUNNING, &ua->states)) {
+ snd_pcm_stream_lock_irqsave(ua->capture.substream, flags);
snd_pcm_stop(ua->capture.substream, SNDRV_PCM_STATE_XRUN);
+ snd_pcm_stream_unlock_irqrestore(ua->capture.substream, flags);
+ }
}
static void abort_alsa_playback(struct ua101 *ua)
{
- if (test_bit(ALSA_PLAYBACK_RUNNING, &ua->states))
+ unsigned long flags;
+
+ if (test_bit(ALSA_PLAYBACK_RUNNING, &ua->states)) {
+ snd_pcm_stream_lock_irqsave(ua->playback.substream, flags);
snd_pcm_stop(ua->playback.substream, SNDRV_PCM_STATE_XRUN);
+ snd_pcm_stream_unlock_irqrestore(ua->playback.substream, flags);
+ }
}
static int set_stream_hw(struct ua101 *ua, struct snd_pcm_substream *substream,
diff --git a/sound/usb/usx2y/usbusx2yaudio.c b/sound/usb/usx2y/usbusx2yaudio.c
index 4967fe9c938d..63fb5219f0f8 100644
--- a/sound/usb/usx2y/usbusx2yaudio.c
+++ b/sound/usb/usx2y/usbusx2yaudio.c
@@ -273,7 +273,11 @@ static void usX2Y_clients_stop(struct usX2Ydev *usX2Y)
struct snd_usX2Y_substream *subs = usX2Y->subs[s];
if (subs) {
if (atomic_read(&subs->state) >= state_PRERUNNING) {
+ unsigned long flags;
+
+ snd_pcm_stream_lock_irqsave(subs->pcm_substream, flags);
snd_pcm_stop(subs->pcm_substream, SNDRV_PCM_STATE_XRUN);
+ snd_pcm_stream_unlock_irqrestore(subs->pcm_substream, flags);
}
for (u = 0; u < NRURBS; u++) {
struct urb *urb = subs->urb[u];
diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
index ca9fa4d32e07..07819bfa7dba 100644
--- a/tools/hv/hv_kvp_daemon.c
+++ b/tools/hv/hv_kvp_daemon.c
@@ -1026,9 +1026,10 @@ kvp_get_ip_info(int family, char *if_name, int op,
if (sn_offset == 0)
strcpy(sn_str, cidr_mask);
- else
+ else {
+ strcat((char *)ip_buffer->sub_net, ";");
strcat(sn_str, cidr_mask);
- strcat((char *)ip_buffer->sub_net, ";");
+ }
sn_offset += strlen(sn_str) + 1;
}