summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@gmail.com>2013-08-07 08:09:03 (GMT)
committerDave Airlie <airlied@gmail.com>2013-08-07 08:11:35 (GMT)
commit32c913e4369ce7bd1d16a9b6983f7b8975c13f5a (patch)
treeda5868a2b7e7c068d4b733420330a15001786365
parentabf190351b49937335130970a99a0b4275402b5e (diff)
parentcd234b0bfd5ab012e42274b24aae420fa1823d58 (diff)
downloadlinux-fsl-qoriq-32c913e4369ce7bd1d16a9b6983f7b8975c13f5a.tar.xz
Merge tag 'drm-intel-next-2013-07-26-fixed' of git://people.freedesktop.org/~danvet/drm-intel into drm-next
Neat that QA (and Ben) keeps on humming along while I'm on vacation, so you already get the next feature pull request: - proper eLLC support for HSW from Ben - more interrupt refactoring - add w/a tags where we implement them already (Damien) - hangcheck fixes (Chris) + hangcheck stats (Mika) - flesh out the new vm structs for ppgtt and ggtt (Ben) - PSR for Haswell, still disabled by default (Rodrigo et al.) - pc8+ refclock sequence code from Paulo - more interrupt refactoring from Paulo, unifying ilk/snb with the ivb/hsw interrupt code - full solution for the Haswell concurrent reg access issues (Chris) - fix racy object accounting, used by some new leak tests - fix sync polarity settings on ch7xxx dvo encoder - random bits&pieces, little fixes and better debug output all over [airlied: fix conflict with drm_mm cleanups] * tag 'drm-intel-next-2013-07-26-fixed' of git://people.freedesktop.org/~danvet/drm-intel: (289 commits) drm/i915: Do not dereference NULL crtc or fb until after checking drm/i915: fix pnv display core clock readout out drm/i915: Replace open-coded offset_in_page() drm/i915: Retry DP aux_ch communications with a different clock after failure drm/i915: Add messages useful for HPD storm detection debugging (v2) drm/i915: dvo_ch7xxx: fix vsync polarity setting drm/i915: fix the racy object accounting drm/i915: Convert the register access tracepoint to be conditional drm/i915: Squash gen lookup through multiple indirections inside GT access drm/i915: Use the common register access functions for NOTRACE variants drm/i915: Use a private interface for register access within GT drm/i915: Colocate all GT access routines in the same file drm/i915: fix reference counting in i915_gem_create drm/i915: Use Graphics Base of Stolen Memory on all gen3+ drm/i915: disable stolen mem for OVERLAY_NEEDS_PHYSICAL drm/i915: add functions to disable and restore LCPLL drm/i915: disable CLKOUT_DP when it's not needed drm/i915: extend lpt_enable_clkout_dp drm/i915: fix up error cleanup in i915_gem_object_bind_to_gtt drm/i915: Add some debug breadcrumbs to connector detection ...
-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--MAINTAINERS4
-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.c5
-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.c8
-rw-r--r--arch/arm/mach-s3c24xx/Kconfig2
-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/kernel/process.c2
-rw-r--r--arch/arm64/kernel/smp.c15
-rw-r--r--arch/arm64/mm/fault.c46
-rw-r--r--arch/mips/Kconfig1
-rw-r--r--arch/mips/cavium-octeon/octeon-platform.c5
-rw-r--r--arch/mips/kernel/smp-bmips.c2
-rw-r--r--arch/mips/kernel/traps.c1
-rw-r--r--arch/mips/kvm/Kconfig1
-rw-r--r--arch/mips/mm/tlbex.c4
-rw-r--r--arch/mips/netlogic/common/irq.c68
-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/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/crash_dump.c51
-rw-r--r--arch/s390/kernel/ptrace.c50
-rw-r--r--arch/s390/net/bpf_jit_comp.c113
-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/kvm/mmu.c7
-rw-r--r--arch/x86/um/signal.c1
-rw-r--r--drivers/acpi/acpi_memhotplug.c1
-rw-r--r--drivers/acpi/acpica/aclocal.h13
-rw-r--r--drivers/acpi/internal.h11
-rw-r--r--drivers/acpi/scan.c13
-rw-r--r--drivers/acpi/video.c98
-rw-r--r--drivers/acpi/video_detect.c21
-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/cpufreq/cpufreq.c4
-rw-r--r--drivers/cpufreq/cpufreq_governor.c3
-rw-r--r--drivers/cpufreq/cpufreq_stats.c6
-rw-r--r--drivers/cpufreq/s3c24xx-cpufreq.c4
-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/Makefile1
-rw-r--r--drivers/gpu/drm/i915/dvo_ch7xxx.c2
-rw-r--r--drivers/gpu/drm/i915/i915_debugfs.c178
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c65
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c277
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h261
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c173
-rw-r--r--drivers/gpu/drm/i915/i915_gem_context.c23
-rw-r--r--drivers/gpu/drm/i915/i915_gem_debug.c2
-rw-r--r--drivers/gpu/drm/i915/i915_gem_evict.c34
-rw-r--r--drivers/gpu/drm/i915/i915_gem_execbuffer.c16
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.c213
-rw-r--r--drivers/gpu/drm/i915/i915_gem_stolen.c68
-rw-r--r--drivers/gpu/drm/i915/i915_gpu_error.c8
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c552
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h104
-rw-r--r--drivers/gpu/drm/i915/i915_trace.h8
-rw-r--r--drivers/gpu/drm/i915/intel_crt.c4
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c12
-rw-r--r--drivers/gpu/drm/i915/intel_display.c473
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c411
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h12
-rw-r--r--drivers/gpu/drm/i915/intel_dvo.c2
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c3
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c15
-rw-r--r--drivers/gpu/drm/i915/intel_overlay.c4
-rw-r--r--drivers/gpu/drm/i915/intel_panel.c6
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c333
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c3
-rw-r--r--drivers/gpu/drm/i915/intel_tv.c4
-rw-r--r--drivers/gpu/drm/i915/intel_uncore.c595
-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/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/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/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/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/staging/Kconfig2
-rw-r--r--drivers/staging/Makefile1
-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/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/thermal/x86_pkg_temp_thermal.c18
-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--fs/btrfs/extent-tree.c27
-rw-r--r--fs/btrfs/scrub.c2
-rw-r--r--fs/ext3/namei.c2
-rw-r--r--fs/ext4/extents.c23
-rw-r--r--fs/ext4/extents_status.c51
-rw-r--r--fs/ext4/inode.c7
-rw-r--r--fs/ext4/namei.c2
-rw-r--r--fs/fuse/dir.c51
-rw-r--r--fs/nfs/nfs4xdr.c21
-rw-r--r--fs/open.c2
-rw-r--r--fs/proc/vmcore.c2
-rw-r--r--fs/super.c25
-rw-r--r--include/acpi/acpixf.h1
-rw-r--r--include/acpi/actypes.h15
-rw-r--r--include/acpi/video.h11
-rw-r--r--include/drm/drm_dp_helper.h31
-rw-r--r--include/linux/acpi.h1
-rw-r--r--include/linux/dcache.h2
-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/if_vlan.h3
-rw-r--r--include/linux/iio/iio.h4
-rw-r--r--include/linux/pm_wakeup.h4
-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/drm/i915_drm.h24
-rw-r--r--include/xen/interface/io/blkif.h53
-rw-r--r--include/xen/interface/io/ring.h5
-rw-r--r--kernel/power/autosleep.c3
-rw-r--r--kernel/trace/ring_buffer.c26
-rw-r--r--kernel/trace/trace.c34
-rw-r--r--kernel/trace/trace.h10
-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--lib/mpi/longlong.h17
-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/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/sched/sch_qfq.c85
-rw-r--r--net/sunrpc/clnt.c1
374 files changed, 7541 insertions, 95548 deletions
diff --git a/Documentation/ABI/testing/sysfs-driver-xen-blkback b/Documentation/ABI/testing/sysfs-driver-xen-blkback
new file mode 100644
index 0000000..8bb43b6
--- /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 0000000..c0a6cb7
--- /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 c3365f2..32b6c31 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/MAINTAINERS b/MAINTAINERS
index bf61e04..5d3facf 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
diff --git a/Makefile b/Makefile
index 9262ba8..a35f72a 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 837a1f2..082d9b4 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 c2cbe4f..78b03ef 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 bf46af5..a5b68b2 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 3bba21e..37b570d 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 43baee1..f2c9440 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 29daed8..dbcd983 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 801d28b..53ae7bb 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 f62a994..a969b95 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 f433fc1..28e4429 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 53b18a6..9dbbcb3 100644
--- a/arch/alpha/kernel/smp.c
+++ b/arch/alpha/kernel/smp.c
@@ -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 = ' ';
diff --git a/arch/alpha/kernel/sys_dp264.c b/arch/alpha/kernel/sys_dp264.c
index 5bf401f..6c35159 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 407accc..c92e389 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 4284ec7..dca9b3f 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 e336694..ea33950 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 be1fba3..bd0665c 100644
--- a/arch/alpha/kernel/traps.c
+++ b/arch/alpha/kernel/traps.c
@@ -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;
diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig
index 6d9252e..7791ac7 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/arm64/include/asm/debug-monitors.h b/arch/arm64/include/asm/debug-monitors.h
index ef8235c..a2232d0 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 a6e1750..7a18fab 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/kernel/process.c b/arch/arm64/kernel/process.c
index 46f02c3..1788bf6 100644
--- a/arch/arm64/kernel/process.c
+++ b/arch/arm64/kernel/process.c
@@ -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 4a053b3..fee5cce 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -200,13 +200,6 @@ asmlinkage void 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 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 0ecac89..6c8ba25 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/mips/Kconfig b/arch/mips/Kconfig
index 4758a8f..c3abed3 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/cavium-octeon/octeon-platform.c b/arch/mips/cavium-octeon/octeon-platform.c
index 7b746e7..1830874 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/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c
index 76f3135..c0bb4d5 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)
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index c89568f..aec3408 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -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)
diff --git a/arch/mips/kvm/Kconfig b/arch/mips/kvm/Kconfig
index 2c15590..30e334e 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/mm/tlbex.c b/arch/mips/mm/tlbex.c
index 34fce2b..556cb48 100644
--- a/arch/mips/mm/tlbex.c
+++ b/arch/mips/mm/tlbex.c
@@ -1456,7 +1456,7 @@ 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;
@@ -1793,7 +1793,7 @@ static void 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);
diff --git a/arch/mips/netlogic/common/irq.c b/arch/mips/netlogic/common/irq.c
index 73facb2..1c7e3a1 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/dts/xlp_evp.dts b/arch/mips/netlogic/dts/xlp_evp.dts
index e14f423..0640703 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 8af4bdb..9c5db10 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 9c401dd..ef3897e 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/s390/include/asm/processor.h b/arch/s390/include/asm/processor.h
index 6b49987..b0e6435 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 f3a9e0f..80b6f11 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 3aa9f1e..7a84619 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/crash_dump.c b/arch/s390/kernel/crash_dump.c
index f703d91..d8f3556 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/ptrace.c b/arch/s390/kernel/ptrace.c
index a314c57..e9fadb0 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/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c
index 82f165f..d5f10a4 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/um/include/shared/frame_kern.h b/arch/um/include/shared/frame_kern.h
index e584e40..f2ca570 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 3e831b3..f57e02e 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 ff03067..007d550 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 1d3e0c1..4ffb644 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 ba43980..3c4af77 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 9d9f1b4..905924b 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 4625949..d531879 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/kvm/mmu.c b/arch/x86/kvm/mmu.c
index 0d094da..9e9285a 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/um/signal.c b/arch/x86/um/signal.c
index ae7319d..5e04a1c 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/drivers/acpi/acpi_memhotplug.c b/drivers/acpi/acpi_memhotplug.c
index c711d11..999adb5 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/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h
index dfed265..d4a49016 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 3a50a34..227aca7 100644
--- a/drivers/acpi/internal.h
+++ b/drivers/acpi/internal.h
@@ -164,4 +164,15 @@ 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);
+bool acpi_video_verify_backlight_support(void);
+#else
+static inline bool acpi_video_backlight_quirks(void) { return false; }
+static inline bool acpi_video_verify_backlight_support(void) { return false; }
+#endif
+
#endif /* _ACPI_INTERNAL_H_ */
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 1098557..8a46c92 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 5d7075d..6dd237e 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,7 +908,10 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
device->cap._DDC = 1;
}
- if (acpi_video_backlight_support()) {
+ if (acpi_video_init_brightness(device))
+ return;
+
+ if (acpi_video_verify_backlight_support()) {
struct backlight_properties props;
struct pci_dev *pdev;
acpi_handle acpi_parent;
@@ -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;
}
}
@@ -1351,8 +1366,8 @@ acpi_video_switch_brightness(struct acpi_video_device *device, int event)
unsigned long long level_current, level_next;
int result = -EINVAL;
- /* no warning message if acpi_backlight=vendor is used */
- if (!acpi_video_backlight_support())
+ /* no warning message if acpi_backlight=vendor or a quirk is used */
+ if (!acpi_video_verify_backlight_support())
return 0;
if (!device->brightness)
@@ -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)
@@ -1854,6 +1875,46 @@ static int acpi_video_bus_remove(struct acpi_device *device)
return 0;
}
+static acpi_status video_unregister_backlight(acpi_handle handle, u32 lvl,
+ void *context, void **rv)
+{
+ struct acpi_device *acpi_dev;
+ struct acpi_video_bus *video;
+ struct acpi_video_device *dev, *next;
+
+ if (acpi_bus_get_device(handle, &acpi_dev))
+ return AE_OK;
+
+ if (acpi_match_device_ids(acpi_dev, video_device_ids))
+ return AE_OK;
+
+ video = acpi_driver_data(acpi_dev);
+ if (!video)
+ return AE_OK;
+
+ acpi_video_bus_stop_devices(video);
+ mutex_lock(&video->device_list_lock);
+ list_for_each_entry_safe(dev, next, &video->video_device_list, entry) {
+ if (dev->backlight) {
+ backlight_device_unregister(dev->backlight);
+ dev->backlight = NULL;
+ kfree(dev->brightness->levels);
+ kfree(dev->brightness);
+ }
+ if (dev->cooling_dev) {
+ sysfs_remove_link(&dev->dev->dev.kobj,
+ "thermal_cooling");
+ sysfs_remove_link(&dev->cooling_dev->device.kobj,
+ "device");
+ thermal_cooling_device_unregister(dev->cooling_dev);
+ dev->cooling_dev = NULL;
+ }
+ }
+ mutex_unlock(&video->device_list_lock);
+ acpi_video_bus_start_devices(video);
+ return AE_OK;
+}
+
static int __init is_i740(struct pci_dev *dev)
{
if (dev->device == 0x00D1)
@@ -1885,14 +1946,25 @@ static int __init intel_opregion_present(void)
return opregion;
}
-int acpi_video_register(void)
+int __acpi_video_register(bool backlight_quirks)
{
- int result = 0;
+ bool no_backlight;
+ int result;
+
+ no_backlight = backlight_quirks ? acpi_video_backlight_quirks() : false;
+
if (register_count) {
/*
- * if the function of acpi_video_register is already called,
- * don't register the acpi_vide_bus again and return no error.
+ * If acpi_video_register() has been called already, don't try
+ * to register acpi_video_bus, but unregister backlight devices
+ * if no backlight support is requested.
*/
+ if (no_backlight)
+ acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
+ ACPI_UINT32_MAX,
+ video_unregister_backlight,
+ NULL, NULL, NULL);
+
return 0;
}
@@ -1908,7 +1980,7 @@ int acpi_video_register(void)
return 0;
}
-EXPORT_SYMBOL(acpi_video_register);
+EXPORT_SYMBOL(__acpi_video_register);
void acpi_video_unregister(void)
{
diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
index e6bd910..826e52d 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,17 @@ static void acpi_video_caps_check(void)
acpi_video_get_capabilities(NULL);
}
+bool acpi_video_backlight_quirks(void)
+{
+ if (acpi_gbl_osi_data >= ACPI_OSI_WIN_8) {
+ acpi_video_caps_check();
+ acpi_video_support |= ACPI_VIDEO_SKIP_BACKLIGHT;
+ return true;
+ }
+ return false;
+}
+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
@@ -278,6 +291,14 @@ int acpi_video_backlight_support(void)
}
EXPORT_SYMBOL(acpi_video_backlight_support);
+/* For the ACPI video driver use only. */
+bool acpi_video_verify_backlight_support(void)
+{
+ return (acpi_video_support & ACPI_VIDEO_SKIP_BACKLIGHT) ?
+ false : acpi_video_backlight_support();
+}
+EXPORT_SYMBOL(acpi_video_verify_backlight_support);
+
/*
* Use acpi_backlight=vendor/video to force that backlight switching
* is processed by vendor specific acpi drivers or video.ko driver.
diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
index b81ddfe..e07a5fd 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 6608076..28c73ca 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 f943aac..2d7f608 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 a5dca6a..55635ed 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 9e3f441..8cc1e64 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 4222aff..cc29cd3 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 90c5be2..216d47b 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 5af21f2..6e85e21 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 4b5c020..926dce9 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 4346d17..d7af441 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 0607513..bed32f1 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 382e8bf..5ad5055 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 dd5b2fe..bf4b9d2 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 60103e2..8d88075 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 04608a6..fe5c3cd 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 d89ef86..a4660bb 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/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index b7bda8d..a4ad733 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1942,13 +1942,15 @@ static int 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 4645876..7b839a8 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 c1ec11c..d37568c 100644
--- a/drivers/cpufreq/cpufreq_stats.c
+++ b/drivers/cpufreq/cpufreq_stats.c
@@ -353,13 +353,11 @@ static int 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/s3c24xx-cpufreq.c b/drivers/cpufreq/s3c24xx-cpufreq.c
index 3513e74..87781eb 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/gpio/gpio-msm-v2.c b/drivers/gpio/gpio-msm-v2.c
index f4491a4..c2fa770 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 dfeb3a3..c57244e 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 738a429..6a64749 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/Makefile b/drivers/gpu/drm/i915/Makefile
index 9d1da7c..b8449a8 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -38,6 +38,7 @@ i915-y := i915_drv.o i915_dma.o i915_irq.o \
intel_sprite.o \
intel_opregion.o \
intel_sideband.o \
+ intel_uncore.o \
dvo_ch7xxx.o \
dvo_ch7017.o \
dvo_ivch.o \
diff --git a/drivers/gpu/drm/i915/dvo_ch7xxx.c b/drivers/gpu/drm/i915/dvo_ch7xxx.c
index 757e0fa..af42e94 100644
--- a/drivers/gpu/drm/i915/dvo_ch7xxx.c
+++ b/drivers/gpu/drm/i915/dvo_ch7xxx.c
@@ -307,7 +307,7 @@ static void ch7xxx_mode_set(struct intel_dvo_device *dvo,
idf |= CH7xxx_IDF_HSP;
if (mode->flags & DRM_MODE_FLAG_PVSYNC)
- idf |= CH7xxx_IDF_HSP;
+ idf |= CH7xxx_IDF_VSP;
ch7xxx_writeb(dvo, CH7xxx_IDF, idf);
}
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 8637979..ed72fe0 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -135,7 +135,8 @@ static int i915_gem_object_list_info(struct seq_file *m, void *data)
uintptr_t list = (uintptr_t) node->info_ent->data;
struct list_head *head;
struct drm_device *dev = node->minor->dev;
- drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct i915_address_space *vm = &dev_priv->gtt.base;
struct drm_i915_gem_object *obj;
size_t total_obj_size, total_gtt_size;
int count, ret;
@@ -147,11 +148,11 @@ static int i915_gem_object_list_info(struct seq_file *m, void *data)
switch (list) {
case ACTIVE_LIST:
seq_puts(m, "Active:\n");
- head = &dev_priv->mm.active_list;
+ head = &vm->active_list;
break;
case INACTIVE_LIST:
seq_puts(m, "Inactive:\n");
- head = &dev_priv->mm.inactive_list;
+ head = &vm->inactive_list;
break;
default:
mutex_unlock(&dev->struct_mutex);
@@ -219,6 +220,7 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
u32 count, mappable_count, purgeable_count;
size_t size, mappable_size, purgeable_size;
struct drm_i915_gem_object *obj;
+ struct i915_address_space *vm = &dev_priv->gtt.base;
struct drm_file *file;
int ret;
@@ -236,12 +238,12 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
count, mappable_count, size, mappable_size);
size = count = mappable_size = mappable_count = 0;
- count_objects(&dev_priv->mm.active_list, mm_list);
+ count_objects(&vm->active_list, mm_list);
seq_printf(m, " %u [%u] active objects, %zu [%zu] bytes\n",
count, mappable_count, size, mappable_size);
size = count = mappable_size = mappable_count = 0;
- count_objects(&dev_priv->mm.inactive_list, mm_list);
+ count_objects(&vm->inactive_list, mm_list);
seq_printf(m, " %u [%u] inactive objects, %zu [%zu] bytes\n",
count, mappable_count, size, mappable_size);
@@ -276,8 +278,8 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
count, size);
seq_printf(m, "%zu [%lu] gtt total\n",
- dev_priv->gtt.total,
- dev_priv->gtt.mappable_end - dev_priv->gtt.start);
+ dev_priv->gtt.base.total,
+ dev_priv->gtt.mappable_end - dev_priv->gtt.base.start);
seq_putc(m, '\n');
list_for_each_entry_reverse(file, &dev->filelist, lhead) {
@@ -987,9 +989,9 @@ static int gen6_drpc_info(struct seq_file *m)
if (ret)
return ret;
- spin_lock_irq(&dev_priv->gt_lock);
- forcewake_count = dev_priv->forcewake_count;
- spin_unlock_irq(&dev_priv->gt_lock);
+ spin_lock_irq(&dev_priv->uncore.lock);
+ forcewake_count = dev_priv->uncore.forcewake_count;
+ spin_unlock_irq(&dev_priv->uncore.lock);
if (forcewake_count) {
seq_puts(m, "RC information inaccurate because somebody "
@@ -1002,7 +1004,7 @@ static int gen6_drpc_info(struct seq_file *m)
}
gt_core_status = readl(dev_priv->regs + GEN6_GT_CORE_STATUS);
- trace_i915_reg_rw(false, GEN6_GT_CORE_STATUS, gt_core_status, 4);
+ trace_i915_reg_rw(false, GEN6_GT_CORE_STATUS, gt_core_status, 4, true);
rpmodectl1 = I915_READ(GEN6_RP_CONTROL);
rcctl1 = I915_READ(GEN6_RC_CONTROL);
@@ -1373,9 +1375,9 @@ static int i915_gen6_forcewake_count_info(struct seq_file *m, void *data)
struct drm_i915_private *dev_priv = dev->dev_private;
unsigned forcewake_count;
- spin_lock_irq(&dev_priv->gt_lock);
- forcewake_count = dev_priv->forcewake_count;
- spin_unlock_irq(&dev_priv->gt_lock);
+ spin_lock_irq(&dev_priv->uncore.lock);
+ forcewake_count = dev_priv->uncore.forcewake_count;
+ spin_unlock_irq(&dev_priv->uncore.lock);
seq_printf(m, "forcewake count = %u\n", forcewake_count);
@@ -1530,6 +1532,148 @@ static int i915_dpio_info(struct seq_file *m, void *data)
return 0;
}
+static int i915_llc(struct seq_file *m, void *data)
+{
+ struct drm_info_node *node = (struct drm_info_node *) m->private;
+ struct drm_device *dev = node->minor->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ /* Size calculation for LLC is a bit of a pain. Ignore for now. */
+ seq_printf(m, "LLC: %s\n", yesno(HAS_LLC(dev)));
+ seq_printf(m, "eLLC: %zuMB\n", dev_priv->ellc_size);
+
+ return 0;
+}
+
+static int i915_edp_psr_status(struct seq_file *m, void *data)
+{
+ struct drm_info_node *node = m->private;
+ struct drm_device *dev = node->minor->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 psrstat, psrperf;
+
+ if (!IS_HASWELL(dev)) {
+ seq_puts(m, "PSR not supported on this platform\n");
+ } else if (IS_HASWELL(dev) && I915_READ(EDP_PSR_CTL) & EDP_PSR_ENABLE) {
+ seq_puts(m, "PSR enabled\n");
+ } else {
+ seq_puts(m, "PSR disabled: ");
+ switch (dev_priv->no_psr_reason) {
+ case PSR_NO_SOURCE:
+ seq_puts(m, "not supported on this platform");
+ break;
+ case PSR_NO_SINK:
+ seq_puts(m, "not supported by panel");
+ break;
+ case PSR_MODULE_PARAM:
+ seq_puts(m, "disabled by flag");
+ break;
+ case PSR_CRTC_NOT_ACTIVE:
+ seq_puts(m, "crtc not active");
+ break;
+ case PSR_PWR_WELL_ENABLED:
+ seq_puts(m, "power well enabled");
+ break;
+ case PSR_NOT_TILED:
+ seq_puts(m, "not tiled");
+ break;
+ case PSR_SPRITE_ENABLED:
+ seq_puts(m, "sprite enabled");
+ break;
+ case PSR_S3D_ENABLED:
+ seq_puts(m, "stereo 3d enabled");
+ break;
+ case PSR_INTERLACED_ENABLED:
+ seq_puts(m, "interlaced enabled");
+ break;
+ case PSR_HSW_NOT_DDIA:
+ seq_puts(m, "HSW ties PSR to DDI A (eDP)");
+ break;
+ default:
+ seq_puts(m, "unknown reason");
+ }
+ seq_puts(m, "\n");
+ return 0;
+ }
+
+ psrstat = I915_READ(EDP_PSR_STATUS_CTL);
+
+ seq_puts(m, "PSR Current State: ");
+ switch (psrstat & EDP_PSR_STATUS_STATE_MASK) {
+ case EDP_PSR_STATUS_STATE_IDLE:
+ seq_puts(m, "Reset state\n");
+ break;
+ case EDP_PSR_STATUS_STATE_SRDONACK:
+ seq_puts(m, "Wait for TG/Stream to send on frame of data after SRD conditions are met\n");
+ break;
+ case EDP_PSR_STATUS_STATE_SRDENT:
+ seq_puts(m, "SRD entry\n");
+ break;
+ case EDP_PSR_STATUS_STATE_BUFOFF:
+ seq_puts(m, "Wait for buffer turn off\n");
+ break;
+ case EDP_PSR_STATUS_STATE_BUFON:
+ seq_puts(m, "Wait for buffer turn on\n");
+ break;
+ case EDP_PSR_STATUS_STATE_AUXACK:
+ seq_puts(m, "Wait for AUX to acknowledge on SRD exit\n");
+ break;
+ case EDP_PSR_STATUS_STATE_SRDOFFACK:
+ seq_puts(m, "Wait for TG/Stream to acknowledge the SRD VDM exit\n");
+ break;
+ default:
+ seq_puts(m, "Unknown\n");
+ break;
+ }
+
+ seq_puts(m, "Link Status: ");
+ switch (psrstat & EDP_PSR_STATUS_LINK_MASK) {
+ case EDP_PSR_STATUS_LINK_FULL_OFF:
+ seq_puts(m, "Link is fully off\n");
+ break;
+ case EDP_PSR_STATUS_LINK_FULL_ON:
+ seq_puts(m, "Link is fully on\n");
+ break;
+ case EDP_PSR_STATUS_LINK_STANDBY:
+ seq_puts(m, "Link is in standby\n");
+ break;
+ default:
+ seq_puts(m, "Unknown\n");
+ break;
+ }
+
+ seq_printf(m, "PSR Entry Count: %u\n",
+ psrstat >> EDP_PSR_STATUS_COUNT_SHIFT &
+ EDP_PSR_STATUS_COUNT_MASK);
+
+ seq_printf(m, "Max Sleep Timer Counter: %u\n",
+ psrstat >> EDP_PSR_STATUS_MAX_SLEEP_TIMER_SHIFT &
+ EDP_PSR_STATUS_MAX_SLEEP_TIMER_MASK);
+
+ seq_printf(m, "Had AUX error: %s\n",
+ yesno(psrstat & EDP_PSR_STATUS_AUX_ERROR));
+
+ seq_printf(m, "Sending AUX: %s\n",
+ yesno(psrstat & EDP_PSR_STATUS_AUX_SENDING));
+
+ seq_printf(m, "Sending Idle: %s\n",
+ yesno(psrstat & EDP_PSR_STATUS_SENDING_IDLE));
+
+ seq_printf(m, "Sending TP2 TP3: %s\n",
+ yesno(psrstat & EDP_PSR_STATUS_SENDING_TP2_TP3));
+
+ seq_printf(m, "Sending TP1: %s\n",
+ yesno(psrstat & EDP_PSR_STATUS_SENDING_TP1));
+
+ seq_printf(m, "Idle Count: %u\n",
+ psrstat & EDP_PSR_STATUS_IDLE_MASK);
+
+ psrperf = (I915_READ(EDP_PSR_PERF_CNT)) & EDP_PSR_PERF_CNT_MASK;
+ seq_printf(m, "Performance Counter: %u\n", psrperf);
+
+ return 0;
+}
+
static int
i915_wedged_get(void *data, u64 *val)
{
@@ -1612,6 +1756,7 @@ i915_drop_caches_set(void *data, u64 val)
struct drm_device *dev = data;
struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_i915_gem_object *obj, *next;
+ struct i915_address_space *vm = &dev_priv->gtt.base;
int ret;
DRM_DEBUG_DRIVER("Dropping caches: 0x%08llx\n", val);
@@ -1632,7 +1777,8 @@ i915_drop_caches_set(void *data, u64 val)
i915_gem_retire_requests(dev);
if (val & DROP_BOUND) {
- list_for_each_entry_safe(obj, next, &dev_priv->mm.inactive_list, mm_list)
+ list_for_each_entry_safe(obj, next, &vm->inactive_list,
+ mm_list)
if (obj->pin_count == 0) {
ret = i915_gem_object_unbind(obj);
if (ret)
@@ -1959,6 +2105,8 @@ static struct drm_info_list i915_debugfs_list[] = {
{"i915_swizzle_info", i915_swizzle_info, 0},
{"i915_ppgtt_info", i915_ppgtt_info, 0},
{"i915_dpio", i915_dpio_info, 0},
+ {"i915_llc", i915_llc, 0},
+ {"i915_edp_psr_status", i915_edp_psr_status, 0},
};
#define I915_DEBUGFS_ENTRIES ARRAY_SIZE(i915_debugfs_list)
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 78ad4dc..05756f9 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1358,7 +1358,7 @@ cleanup_gem:
i915_gem_context_fini(dev);
mutex_unlock(&dev->struct_mutex);
i915_gem_cleanup_aliasing_ppgtt(dev);
- drm_mm_takedown(&dev_priv->mm.gtt_space);
+ drm_mm_takedown(&dev_priv->gtt.base.mm);
cleanup_irq:
drm_irq_uninstall(dev);
cleanup_gem_stolen:
@@ -1436,22 +1436,6 @@ static void i915_dump_device_info(struct drm_i915_private *dev_priv)
}
/**
- * intel_early_sanitize_regs - clean up BIOS state
- * @dev: DRM device
- *
- * This function must be called before we do any I915_READ or I915_WRITE. Its
- * purpose is to clean up any state left by the BIOS that may affect us when
- * reading and/or writing registers.
- */
-static void intel_early_sanitize_regs(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
-
- if (HAS_FPGA_DBG_UNCLAIMED(dev))
- I915_WRITE_NOTRACE(FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
-}
-
-/**
* i915_driver_load - setup chip and create an initial config
* @dev: DRM device
* @flags: startup flags
@@ -1490,8 +1474,21 @@ 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->backlight.lock);
+ spin_lock_init(&dev_priv->uncore.lock);
+ spin_lock_init(&dev_priv->mm.object_stat_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);
+ INIT_LIST_HEAD(&dev_priv->vm_list);
+ INIT_LIST_HEAD(&dev_priv->gtt.base.global_link);
+ list_add(&dev_priv->gtt.base.global_link, &dev_priv->vm_list);
+
if (i915_get_bridge_dev(dev)) {
ret = -EIO;
goto free_priv;
@@ -1517,7 +1514,17 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
goto put_bridge;
}
- intel_early_sanitize_regs(dev);
+ intel_uncore_early_sanitize(dev);
+
+ if (IS_HASWELL(dev) && (I915_READ(HSW_EDRAM_PRESENT) == 1)) {
+ /* The docs do not explain exactly how the calculation can be
+ * made. It is somewhat guessable, but for now, it's always
+ * 128MB.
+ * NB: We can't write IDICR yet because we do not have gt funcs
+ * set up */
+ dev_priv->ellc_size = 128;
+ DRM_INFO("Found %zuMB of eLLC\n", dev_priv->ellc_size);
+ }
ret = i915_gem_gtt_init(dev);
if (ret)
@@ -1580,7 +1587,9 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
intel_detect_pch(dev);
intel_irq_init(dev);
- intel_gt_init(dev);
+ intel_pm_init(dev);
+ intel_uncore_sanitize(dev);
+ intel_uncore_init(dev);
/* Try to make sure MCHBAR is enabled before poking at it */
intel_setup_mchbar(dev);
@@ -1605,14 +1614,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->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;
@@ -1642,7 +1643,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
if (INTEL_INFO(dev)->num_pipes) {
/* Must be done after probing outputs */
intel_opregion_init(dev);
- acpi_video_register();
+ acpi_video_register_with_quirks();
}
if (IS_GEN5(dev))
@@ -1663,7 +1664,7 @@ out_gem_unload:
out_mtrrfree:
arch_phys_wc_del(dev_priv->gtt.mtrr);
io_mapping_free(dev_priv->gtt.mappable);
- dev_priv->gtt.gtt_remove(dev);
+ dev_priv->gtt.base.cleanup(&dev_priv->gtt.base);
out_rmmap:
pci_iounmap(dev->pdev, dev_priv->regs);
put_bridge:
@@ -1748,7 +1749,9 @@ int i915_driver_unload(struct drm_device *dev)
i915_free_hws(dev);
}
- drm_mm_takedown(&dev_priv->mm.gtt_space);
+ list_del(&dev_priv->gtt.base.global_link);
+ WARN_ON(!list_empty(&dev_priv->vm_list));
+ drm_mm_takedown(&dev_priv->gtt.base.mm);
if (dev_priv->regs != NULL)
pci_iounmap(dev->pdev, dev_priv->regs);
@@ -1758,7 +1761,7 @@ int i915_driver_unload(struct drm_device *dev)
destroy_workqueue(dev_priv->wq);
pm_qos_remove_request(&dev_priv->pm_qos);
- dev_priv->gtt.gtt_remove(dev);
+ dev_priv->gtt.base.cleanup(&dev_priv->gtt.base);
if (dev_priv->slab)
kmem_cache_destroy(dev_priv->slab);
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index cca12db..13457e3e 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -118,6 +118,10 @@ module_param_named(i915_enable_ppgtt, i915_enable_ppgtt, int, 0600);
MODULE_PARM_DESC(i915_enable_ppgtt,
"Enable PPGTT (default: true)");
+int i915_enable_psr __read_mostly = 0;
+module_param_named(enable_psr, i915_enable_psr, int, 0600);
+MODULE_PARM_DESC(enable_psr, "Enable PSR (default: false)");
+
unsigned int i915_preliminary_hw_support __read_mostly = 0;
module_param_named(preliminary_hw_support, i915_preliminary_hw_support, int, 0600);
MODULE_PARM_DESC(preliminary_hw_support,
@@ -137,6 +141,11 @@ module_param_named(fastboot, i915_fastboot, bool, 0600);
MODULE_PARM_DESC(fastboot, "Try to skip unnecessary mode sets at boot time "
"(default: false)");
+bool i915_prefault_disable __read_mostly;
+module_param_named(prefault_disable, i915_prefault_disable, bool, 0600);
+MODULE_PARM_DESC(prefault_disable,
+ "Disable page prefaulting for pread/pwrite/reloc (default:false). For developers only.");
+
static struct drm_driver driver;
extern int intel_agp_enabled;
@@ -714,7 +723,7 @@ static int i915_drm_thaw(struct drm_device *dev)
{
int error = 0;
- intel_gt_reset(dev);
+ intel_uncore_sanitize(dev);
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
mutex_lock(&dev->struct_mutex);
@@ -740,7 +749,7 @@ int i915_resume(struct drm_device *dev)
pci_set_master(dev->pdev);
- intel_gt_reset(dev);
+ intel_uncore_sanitize(dev);
/*
* Platforms with opregion should have sane BIOS, older ones (gen3 and
@@ -761,140 +770,6 @@ int i915_resume(struct drm_device *dev)
return 0;
}
-static int i8xx_do_reset(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
-
- if (IS_I85X(dev))
- return -ENODEV;
-
- I915_WRITE(D_STATE, I915_READ(D_STATE) | DSTATE_GFX_RESET_I830);
- POSTING_READ(D_STATE);
-
- if (IS_I830(dev) || IS_845G(dev)) {
- I915_WRITE(DEBUG_RESET_I830,
- DEBUG_RESET_DISPLAY |
- DEBUG_RESET_RENDER |
- DEBUG_RESET_FULL);
- POSTING_READ(DEBUG_RESET_I830);
- msleep(1);
-
- I915_WRITE(DEBUG_RESET_I830, 0);
- POSTING_READ(DEBUG_RESET_I830);
- }
-
- msleep(1);
-
- I915_WRITE(D_STATE, I915_READ(D_STATE) & ~DSTATE_GFX_RESET_I830);
- POSTING_READ(D_STATE);
-
- return 0;
-}
-
-static int i965_reset_complete(struct drm_device *dev)
-{
- u8 gdrst;
- pci_read_config_byte(dev->pdev, I965_GDRST, &gdrst);
- return (gdrst & GRDOM_RESET_ENABLE) == 0;
-}
-
-static int i965_do_reset(struct drm_device *dev)
-{
- int ret;
-
- /*
- * Set the domains we want to reset (GRDOM/bits 2 and 3) as
- * well as the reset bit (GR/bit 0). Setting the GR bit
- * triggers the reset; when done, the hardware will clear it.
- */
- pci_write_config_byte(dev->pdev, I965_GDRST,
- GRDOM_RENDER | GRDOM_RESET_ENABLE);
- ret = wait_for(i965_reset_complete(dev), 500);
- if (ret)
- return ret;
-
- /* We can't reset render&media without also resetting display ... */
- pci_write_config_byte(dev->pdev, I965_GDRST,
- GRDOM_MEDIA | GRDOM_RESET_ENABLE);
-
- ret = wait_for(i965_reset_complete(dev), 500);
- if (ret)
- return ret;
-
- pci_write_config_byte(dev->pdev, I965_GDRST, 0);
-
- return 0;
-}
-
-static int ironlake_do_reset(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
- u32 gdrst;
- int ret;
-
- gdrst = I915_READ(MCHBAR_MIRROR_BASE + ILK_GDSR);
- gdrst &= ~GRDOM_MASK;
- I915_WRITE(MCHBAR_MIRROR_BASE + ILK_GDSR,
- gdrst | GRDOM_RENDER | GRDOM_RESET_ENABLE);
- ret = wait_for(I915_READ(MCHBAR_MIRROR_BASE + ILK_GDSR) & 0x1, 500);
- if (ret)
- return ret;
-
- /* We can't reset render&media without also resetting display ... */
- gdrst = I915_READ(MCHBAR_MIRROR_BASE + ILK_GDSR);
- gdrst &= ~GRDOM_MASK;
- I915_WRITE(MCHBAR_MIRROR_BASE + ILK_GDSR,
- gdrst | GRDOM_MEDIA | GRDOM_RESET_ENABLE);
- return wait_for(I915_READ(MCHBAR_MIRROR_BASE + ILK_GDSR) & 0x1, 500);
-}
-
-static int gen6_do_reset(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
- int ret;
- unsigned long irqflags;
-
- /* Hold gt_lock across reset to prevent any register access
- * with forcewake not set correctly
- */
- spin_lock_irqsave(&dev_priv->gt_lock, irqflags);
-
- /* Reset the chip */
-
- /* GEN6_GDRST is not in the gt power well, no need to check
- * for fifo space for the write or forcewake the chip for
- * the read
- */
- I915_WRITE_NOTRACE(GEN6_GDRST, GEN6_GRDOM_FULL);
-
- /* Spin waiting for the device to ack the reset request */
- ret = wait_for((I915_READ_NOTRACE(GEN6_GDRST) & GEN6_GRDOM_FULL) == 0, 500);
-
- /* If reset with a user forcewake, try to restore, otherwise turn it off */
- if (dev_priv->forcewake_count)
- dev_priv->gt.force_wake_get(dev_priv);
- else
- dev_priv->gt.force_wake_put(dev_priv);
-
- /* Restore fifo count */
- dev_priv->gt_fifo_count = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
-
- spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags);
- return ret;
-}
-
-int intel_gpu_reset(struct drm_device *dev)
-{
- switch (INTEL_INFO(dev)->gen) {
- case 7:
- case 6: return gen6_do_reset(dev);
- case 5: return ironlake_do_reset(dev);
- case 4: return i965_do_reset(dev);
- case 2: return i8xx_do_reset(dev);
- default: return -ENODEV;
- }
-}
-
/**
* i915_reset - reset chip after a hang
* @dev: drm device to reset
@@ -1224,133 +1099,3 @@ module_exit(i915_exit);
MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_LICENSE("GPL and additional rights");
-
-/* We give fast paths for the really cool registers */
-#define NEEDS_FORCE_WAKE(dev_priv, reg) \
- ((HAS_FORCE_WAKE((dev_priv)->dev)) && \
- ((reg) < 0x40000) && \
- ((reg) != FORCEWAKE))
-static void
-ilk_dummy_write(struct drm_i915_private *dev_priv)
-{
- /* WaIssueDummyWriteToWakeupFromRC6:ilk Issue a dummy write to wake up
- * the chip from rc6 before touching it for real. MI_MODE is masked,
- * hence harmless to write 0 into. */
- I915_WRITE_NOTRACE(MI_MODE, 0);
-}
-
-static void
-hsw_unclaimed_reg_clear(struct drm_i915_private *dev_priv, u32 reg)
-{
- if (HAS_FPGA_DBG_UNCLAIMED(dev_priv->dev) &&
- (I915_READ_NOTRACE(FPGA_DBG) & FPGA_DBG_RM_NOCLAIM)) {
- DRM_ERROR("Unknown unclaimed register before writing to %x\n",
- reg);
- I915_WRITE_NOTRACE(FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
- }
-}
-
-static void
-hsw_unclaimed_reg_check(struct drm_i915_private *dev_priv, u32 reg)
-{
- if (HAS_FPGA_DBG_UNCLAIMED(dev_priv->dev) &&
- (I915_READ_NOTRACE(FPGA_DBG) & FPGA_DBG_RM_NOCLAIM)) {
- DRM_ERROR("Unclaimed write to %x\n", reg);
- I915_WRITE_NOTRACE(FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
- }
-}
-
-#define __i915_read(x, y) \
-u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \
- u##x val = 0; \
- 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); \
- } \
- trace_i915_reg_rw(false, reg, val, sizeof(val)); \
- return val; \
-}
-
-__i915_read(8, b)
-__i915_read(16, w)
-__i915_read(32, l)
-__i915_read(64, q)
-#undef __i915_read
-
-#define __i915_write(x, y) \
-void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val) { \
- u32 __fifo_ret = 0; \
- trace_i915_reg_rw(true, reg, val, sizeof(val)); \
- if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
- __fifo_ret = __gen6_gt_wait_for_fifo(dev_priv); \
- } \
- if (IS_GEN5(dev_priv->dev)) \
- ilk_dummy_write(dev_priv); \
- hsw_unclaimed_reg_clear(dev_priv, reg); \
- write##y(val, dev_priv->regs + reg); \
- if (unlikely(__fifo_ret)) { \
- gen6_gt_check_fifodbg(dev_priv); \
- } \
- hsw_unclaimed_reg_check(dev_priv, reg); \
-}
-__i915_write(8, b)
-__i915_write(16, w)
-__i915_write(32, l)
-__i915_write(64, q)
-#undef __i915_write
-
-static const struct register_whitelist {
- uint64_t offset;
- uint32_t size;
- uint32_t gen_bitmask; /* support gens, 0x10 for 4, 0x30 for 4 and 5, etc. */
-} whitelist[] = {
- { RING_TIMESTAMP(RENDER_RING_BASE), 8, 0xF0 },
-};
-
-int i915_reg_read_ioctl(struct drm_device *dev,
- void *data, struct drm_file *file)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
- struct drm_i915_reg_read *reg = data;
- struct register_whitelist const *entry = whitelist;
- int i;
-
- for (i = 0; i < ARRAY_SIZE(whitelist); i++, entry++) {
- if (entry->offset == reg->offset &&
- (1 << INTEL_INFO(dev)->gen & entry->gen_bitmask))
- break;
- }
-
- if (i == ARRAY_SIZE(whitelist))
- return -EINVAL;
-
- switch (entry->size) {
- case 8:
- reg->val = I915_READ64(reg->offset);
- break;
- case 4:
- reg->val = I915_READ(reg->offset);
- break;
- case 2:
- reg->val = I915_READ16(reg->offset);
- break;
- case 1:
- reg->val = I915_READ8(reg->offset);
- break;
- default:
- WARN_ON(1);
- return -EINVAL;
- }
-
- return 0;
-}
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 3dd5731..ab56820 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -391,11 +391,20 @@ struct drm_i915_display_funcs {
/* pll clock increase/decrease */
};
-struct drm_i915_gt_funcs {
+struct intel_uncore_funcs {
void (*force_wake_get)(struct drm_i915_private *dev_priv);
void (*force_wake_put)(struct drm_i915_private *dev_priv);
};
+struct intel_uncore {
+ spinlock_t lock; /** lock is also taken in irq contexts. */
+
+ struct intel_uncore_funcs funcs;
+
+ unsigned fifo_count;
+ unsigned forcewake_count;
+};
+
#define DEV_INFO_FOR_EACH_FLAG(func, sep) \
func(is_mobile) sep \
func(is_i85x) sep \
@@ -446,6 +455,54 @@ enum i915_cache_level {
typedef uint32_t gen6_gtt_pte_t;
+struct i915_address_space {
+ struct drm_mm mm;
+ struct drm_device *dev;
+ struct list_head global_link;
+ unsigned long start; /* Start offset always 0 for dri2 */
+ size_t total; /* size addr space maps (ex. 2GB for ggtt) */
+
+ struct {
+ dma_addr_t addr;
+ struct page *page;
+ } scratch;
+
+ /**
+ * List of objects currently involved in rendering.
+ *
+ * Includes buffers having the contents of their GPU caches
+ * flushed, not necessarily primitives. last_rendering_seqno
+ * represents when the rendering involved will be completed.
+ *
+ * A reference is held on the buffer while on this list.
+ */
+ struct list_head active_list;
+
+ /**
+ * LRU list of objects which are not in the ringbuffer and
+ * are ready to unbind, but are still in the GTT.
+ *
+ * last_rendering_seqno is 0 while an object is in this list.
+ *
+ * A reference is not held on the buffer while on this list,
+ * as merely being GTT-bound shouldn't prevent its being
+ * freed, and we'll pull it off the list in the free path.
+ */
+ struct list_head inactive_list;
+
+ /* FIXME: Need a more generic return type */
+ gen6_gtt_pte_t (*pte_encode)(dma_addr_t addr,
+ enum i915_cache_level level);
+ void (*clear_range)(struct i915_address_space *vm,
+ unsigned int first_entry,
+ unsigned int num_entries);
+ void (*insert_entries)(struct i915_address_space *vm,
+ struct sg_table *st,
+ unsigned int first_entry,
+ enum i915_cache_level cache_level);
+ void (*cleanup)(struct i915_address_space *vm);
+};
+
/* The Graphics Translation Table is the way in which GEN hardware translates a
* Graphics Virtual Address into a Physical Address. In addition to the normal
* collateral associated with any va->pa translations GEN hardware also has a
@@ -454,8 +511,7 @@ typedef uint32_t gen6_gtt_pte_t;
* the spec.
*/
struct i915_gtt {
- unsigned long start; /* Start offset of used GTT */
- size_t total; /* Total size GTT can map */
+ struct i915_address_space base;
size_t stolen_size; /* Total size of stolen memory */
unsigned long mappable_end; /* End offset that we can CPU map */
@@ -466,10 +522,6 @@ struct i915_gtt {
void __iomem *gsm;
bool do_idle_maps;
- struct {
- dma_addr_t addr;
- struct page *page;
- } scratch;
int mtrr;
@@ -477,38 +529,28 @@ struct i915_gtt {
int (*gtt_probe)(struct drm_device *dev, size_t *gtt_total,
size_t *stolen, phys_addr_t *mappable_base,
unsigned long *mappable_end);
- void (*gtt_remove)(struct drm_device *dev);
- void (*gtt_clear_range)(struct drm_device *dev,
- unsigned int first_entry,
- unsigned int num_entries);
- void (*gtt_insert_entries)(struct drm_device *dev,
- struct sg_table *st,
- unsigned int pg_start,
- enum i915_cache_level cache_level);
- gen6_gtt_pte_t (*pte_encode)(dma_addr_t addr,
- enum i915_cache_level level);
};
-#define gtt_total_entries(gtt) ((gtt).total >> PAGE_SHIFT)
+#define gtt_total_entries(gtt) ((gtt).base.total >> PAGE_SHIFT)
struct i915_hw_ppgtt {
- struct drm_device *dev;
+ struct i915_address_space base;
unsigned num_pd_entries;
struct page **pt_pages;
uint32_t pd_offset;
dma_addr_t *pt_dma_addr;
- /* pte functions, mirroring the interface of the global gtt. */
- void (*clear_range)(struct i915_hw_ppgtt *ppgtt,
- unsigned int first_entry,
- unsigned int num_entries);
- void (*insert_entries)(struct i915_hw_ppgtt *ppgtt,
- struct sg_table *st,
- unsigned int pg_start,
- enum i915_cache_level cache_level);
- gen6_gtt_pte_t (*pte_encode)(dma_addr_t addr,
- enum i915_cache_level level);
int (*enable)(struct drm_device *dev);
- void (*cleanup)(struct i915_hw_ppgtt *ppgtt);
+};
+
+/* To make things as simple as possible (ie. no refcounting), a VMA's lifetime
+ * will always be <= an objects lifetime. So object refcounting should cover us.
+ */
+struct i915_vma {
+ struct drm_mm_node node;
+ struct drm_i915_gem_object *obj;
+ struct i915_address_space *vm;
+
+ struct list_head vma_link; /* Link in the object's VMA list */
};
struct i915_ctx_hang_stats {
@@ -560,6 +602,18 @@ struct i915_fbc {
} no_fbc_reason;
};
+enum no_psr_reason {
+ PSR_NO_SOURCE, /* Not supported on platform */
+ PSR_NO_SINK, /* Not supported by panel */
+ PSR_MODULE_PARAM,
+ PSR_CRTC_NOT_ACTIVE,
+ PSR_PWR_WELL_ENABLED,
+ PSR_NOT_TILED,
+ PSR_SPRITE_ENABLED,
+ PSR_S3D_ENABLED,
+ PSR_INTERLACED_ENABLED,
+ PSR_HSW_NOT_DDIA,
+};
enum intel_pch {
PCH_NONE = 0, /* No PCH present */
@@ -577,6 +631,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;
@@ -834,8 +889,6 @@ struct intel_l3_parity {
struct i915_gem_mm {
/** Memory allocator for GTT stolen memory */
struct drm_mm stolen;
- /** Memory allocator for GTT */
- struct drm_mm gtt_space;
/** List of all objects in gtt_space. Used to restore gtt
* mappings on resume */
struct list_head bound_list;
@@ -855,29 +908,6 @@ struct i915_gem_mm {
struct shrinker inactive_shrinker;
bool shrinker_no_lock_stealing;
- /**
- * List of objects currently involved in rendering.
- *
- * Includes buffers having the contents of their GPU caches
- * flushed, not necessarily primitives. last_rendering_seqno
- * represents when the rendering involved will be completed.
- *
- * A reference is held on the buffer while on this list.
- */
- struct list_head active_list;
-
- /**
- * LRU list of objects which are not in the ringbuffer and
- * are ready to unbind, but are still in the GTT.
- *
- * last_rendering_seqno is 0 while an object is in this list.
- *
- * A reference is not held on the buffer while on this list,
- * as merely being GTT-bound shouldn't prevent its being
- * freed, and we'll pull it off the list in the free path.
- */
- struct list_head inactive_list;
-
/** LRU list of objects with fence regs on them. */
struct list_head fence_list;
@@ -905,6 +935,7 @@ struct i915_gem_mm {
struct drm_i915_gem_phys_object *phys_objs[I915_MAX_PHYS_OBJECT];
/* accounting, useful for userland debugging */
+ spinlock_t object_stat_lock;
size_t object_memory;
u32 object_count;
};
@@ -1024,14 +1055,7 @@ typedef struct drm_i915_private {
void __iomem *regs;
- struct drm_i915_gt_funcs gt;
- /** gt_fifo_count and the subsequent register write are synchronized
- * with dev->struct_mutex. */
- unsigned gt_fifo_count;
- /** forcewake_count is protected by gt_lock */
- unsigned forcewake_count;
- /** gt_lock is also taken in irq contexts. */
- spinlock_t gt_lock;
+ struct intel_uncore uncore;
struct intel_gmbus gmbus[GMBUS_NUM_PORTS];
@@ -1124,7 +1148,8 @@ typedef struct drm_i915_private {
enum modeset_restore modeset_restore;
struct mutex modeset_restore_lock;
- struct i915_gtt gtt;
+ struct list_head vm_list; /* Global list of all address spaces */
+ struct i915_gtt gtt; /* VMA representing the global address space */
struct i915_gem_mm mm;
@@ -1151,6 +1176,9 @@ typedef struct drm_i915_private {
struct intel_l3_parity l3_parity;
+ /* Cannot be determined by PCIID. You must always read a register. */
+ size_t ellc_size;
+
/* gen6+ rps state */
struct intel_gen6_power_mgmt rps;
@@ -1161,6 +1189,8 @@ typedef struct drm_i915_private {
/* Haswell power well */
struct i915_power_well power_well;
+ enum no_psr_reason no_psr_reason;
+
struct i915_gpu_error gpu_error;
struct drm_i915_gem_object *vlv_pctx;
@@ -1228,8 +1258,9 @@ struct drm_i915_gem_object {
const struct drm_i915_gem_object_ops *ops;
- /** Current space allocated to this object in the GTT, if any. */
- struct drm_mm_node gtt_space;
+ /** List of VMAs backed by this object */
+ struct list_head vma_list;
+
/** Stolen memory for this object, instead of being backed by shmem. */
struct drm_mm_node *stolen;
struct list_head global_list;
@@ -1355,18 +1386,32 @@ struct drm_i915_gem_object {
#define to_intel_bo(x) container_of(x, struct drm_i915_gem_object, base)
-/* Offset of the first PTE pointing to this object */
-static inline unsigned long
-i915_gem_obj_ggtt_offset(struct drm_i915_gem_object *o)
+/* This is a temporary define to help transition us to real VMAs. If you see
+ * this, you're either reviewing code, or bisecting it. */
+static inline struct i915_vma *
+__i915_gem_obj_to_vma(struct drm_i915_gem_object *obj)
{
- return o->gtt_space.start;
+ if (list_empty(&obj->vma_list))
+ return NULL;
+ return list_first_entry(&obj->vma_list, struct i915_vma, vma_link);
}
/* Whether or not this object is currently mapped by the translation tables */
static inline bool
i915_gem_obj_ggtt_bound(struct drm_i915_gem_object *o)
{
- return drm_mm_node_allocated(&o->gtt_space);
+ struct i915_vma *vma = __i915_gem_obj_to_vma(o);
+ if (vma == NULL)
+ return false;
+ return drm_mm_node_allocated(&vma->node);
+}
+
+/* Offset of the first PTE pointing to this object */
+static inline unsigned long
+i915_gem_obj_ggtt_offset(struct drm_i915_gem_object *o)
+{
+ BUG_ON(list_empty(&o->vma_list));
+ return __i915_gem_obj_to_vma(o)->node.start;
}
/* The size used in the translation tables may be larger than the actual size of
@@ -1376,14 +1421,15 @@ i915_gem_obj_ggtt_bound(struct drm_i915_gem_object *o)
static inline unsigned long
i915_gem_obj_ggtt_size(struct drm_i915_gem_object *o)
{
- return o->gtt_space.size;
+ BUG_ON(list_empty(&o->vma_list));
+ return __i915_gem_obj_to_vma(o)->node.size;
}
static inline void
i915_gem_obj_ggtt_set_color(struct drm_i915_gem_object *o,
enum i915_cache_level color)
{
- o->gtt_space.color = color;
+ __i915_gem_obj_to_vma(o)->node.color = color;
}
/**
@@ -1580,10 +1626,12 @@ extern int i915_enable_rc6 __read_mostly;
extern int i915_enable_fbc __read_mostly;
extern bool i915_enable_hangcheck __read_mostly;
extern int i915_enable_ppgtt __read_mostly;
+extern int i915_enable_psr __read_mostly;
extern unsigned int i915_preliminary_hw_support __read_mostly;
extern int i915_disable_power_well __read_mostly;
extern int i915_enable_ips __read_mostly;
extern bool i915_fastboot __read_mostly;
+extern bool i915_prefault_disable __read_mostly;
extern int i915_suspend(struct drm_device *dev, pm_message_t state);
extern int i915_resume(struct drm_device *dev);
@@ -1619,13 +1667,20 @@ extern void i915_update_gfx_val(struct drm_i915_private *dev_priv);
extern void intel_console_resume(struct work_struct *work);
/* i915_irq.c */
+void i915_queue_hangcheck(struct drm_device *dev);
void i915_hangcheck_elapsed(unsigned long data);
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_pm_init(struct drm_device *dev);
+
+extern void intel_uncore_sanitize(struct drm_device *dev);
+extern void intel_uncore_early_sanitize(struct drm_device *dev);
+extern void intel_uncore_init(struct drm_device *dev);
+extern void intel_uncore_reset(struct drm_device *dev);
+extern void intel_uncore_clear_errors(struct drm_device *dev);
+extern void intel_uncore_check_errors(struct drm_device *dev);
void
i915_enable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask);
@@ -1689,6 +1744,9 @@ void i915_gem_object_init(struct drm_i915_gem_object *obj,
struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
size_t size);
void i915_gem_free_object(struct drm_gem_object *obj);
+struct i915_vma *i915_gem_vma_create(struct drm_i915_gem_object *obj,
+ struct i915_address_space *vm);
+void i915_gem_vma_destroy(struct i915_vma *vma);
int __must_check i915_gem_object_pin(struct drm_i915_gem_object *obj,
uint32_t alignment,
@@ -1857,7 +1915,7 @@ static inline void i915_gem_context_unreference(struct i915_hw_context *ctx)
}
struct i915_ctx_hang_stats * __must_check
-i915_gem_context_get_hang_stats(struct intel_ring_buffer *ring,
+i915_gem_context_get_hang_stats(struct drm_device *dev,
struct drm_file *file,
u32 id);
int i915_gem_context_create_ioctl(struct drm_device *dev, void *data,
@@ -2056,7 +2114,6 @@ extern void intel_display_print_error_state(struct drm_i915_error_state_buf *e,
*/
void gen6_gt_force_wake_get(struct drm_i915_private *dev_priv);
void gen6_gt_force_wake_put(struct drm_i915_private *dev_priv);
-int __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv);
int sandybridge_pcode_read(struct drm_i915_private *dev_priv, u8 mbox, u32 *val);
int sandybridge_pcode_write(struct drm_i915_private *dev_priv, u8 mbox, u32 val);
@@ -2075,39 +2132,37 @@ void intel_sbi_write(struct drm_i915_private *dev_priv, u16 reg, u32 value,
int vlv_gpu_freq(int ddr_freq, int val);
int vlv_freq_opcode(int ddr_freq, int val);
-#define __i915_read(x, y) \
- u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg);
-
-__i915_read(8, b)
-__i915_read(16, w)
-__i915_read(32, l)
-__i915_read(64, q)
+#define __i915_read(x) \
+ u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg, bool trace);
+__i915_read(8)
+__i915_read(16)
+__i915_read(32)
+__i915_read(64)
#undef __i915_read
-#define __i915_write(x, y) \
- void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val);
-
-__i915_write(8, b)
-__i915_write(16, w)
-__i915_write(32, l)
-__i915_write(64, q)
+#define __i915_write(x) \
+ void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val, bool trace);
+__i915_write(8)
+__i915_write(16)
+__i915_write(32)
+__i915_write(64)
#undef __i915_write
-#define I915_READ8(reg) i915_read8(dev_priv, (reg))
-#define I915_WRITE8(reg, val) i915_write8(dev_priv, (reg), (val))
+#define I915_READ8(reg) i915_read8(dev_priv, (reg), true)
+#define I915_WRITE8(reg, val) i915_write8(dev_priv, (reg), (val), true)
-#define I915_READ16(reg) i915_read16(dev_priv, (reg))
-#define I915_WRITE16(reg, val) i915_write16(dev_priv, (reg), (val))
-#define I915_READ16_NOTRACE(reg) readw(dev_priv->regs + (reg))
-#define I915_WRITE16_NOTRACE(reg, val) writew(val, dev_priv->regs + (reg))
+#define I915_READ16(reg) i915_read16(dev_priv, (reg), true)
+#define I915_WRITE16(reg, val) i915_write16(dev_priv, (reg), (val), true)
+#define I915_READ16_NOTRACE(reg) i915_read16(dev_priv, (reg), false)
+#define I915_WRITE16_NOTRACE(reg, val) i915_write16(dev_priv, (reg), (val), false)
-#define I915_READ(reg) i915_read32(dev_priv, (reg))
-#define I915_WRITE(reg, val) i915_write32(dev_priv, (reg), (val))
-#define I915_READ_NOTRACE(reg) readl(dev_priv->regs + (reg))
-#define I915_WRITE_NOTRACE(reg, val) writel(val, dev_priv->regs + (reg))
+#define I915_READ(reg) i915_read32(dev_priv, (reg), true)
+#define I915_WRITE(reg, val) i915_write32(dev_priv, (reg), (val), true)
+#define I915_READ_NOTRACE(reg) i915_read32(dev_priv, (reg), false)
+#define I915_WRITE_NOTRACE(reg, val) i915_write32(dev_priv, (reg), (val), false)
-#define I915_WRITE64(reg, val) i915_write64(dev_priv, (reg), (val))
-#define I915_READ64(reg) i915_read64(dev_priv, (reg))
+#define I915_WRITE64(reg, val) i915_write64(dev_priv, (reg), (val), true)
+#define I915_READ64(reg) i915_read64(dev_priv, (reg), true)
#define POSTING_READ(reg) (void)I915_READ_NOTRACE(reg)
#define POSTING_READ16(reg) (void)I915_READ16_NOTRACE(reg)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index ea2d83d..26c5f80 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -76,15 +76,19 @@ static inline void i915_gem_object_fence_lost(struct drm_i915_gem_object *obj)
static void i915_gem_info_add_obj(struct drm_i915_private *dev_priv,
size_t size)
{
+ spin_lock(&dev_priv->mm.object_stat_lock);
dev_priv->mm.object_count++;
dev_priv->mm.object_memory += size;
+ spin_unlock(&dev_priv->mm.object_stat_lock);
}
static void i915_gem_info_remove_obj(struct drm_i915_private *dev_priv,
size_t size)
{
+ spin_lock(&dev_priv->mm.object_stat_lock);
dev_priv->mm.object_count--;
dev_priv->mm.object_memory -= size;
+ spin_unlock(&dev_priv->mm.object_stat_lock);
}
static int
@@ -182,7 +186,7 @@ i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
pinned += i915_gem_obj_ggtt_size(obj);
mutex_unlock(&dev->struct_mutex);
- args->aper_size = dev_priv->gtt.total;
+ args->aper_size = dev_priv->gtt.base.total;
args->aper_available_size = args->aper_size - pinned;
return 0;
@@ -220,16 +224,10 @@ i915_gem_create(struct drm_file *file,
return -ENOMEM;
ret = drm_gem_handle_create(file, &obj->base, &handle);
- if (ret) {
- drm_gem_object_release(&obj->base);
- i915_gem_info_remove_obj(dev->dev_private, obj->base.size);
- i915_gem_object_free(obj);
- return ret;
- }
-
/* drop reference from allocate - handle holds it now */
- drm_gem_object_unreference(&obj->base);
- trace_i915_gem_object_create(obj);
+ drm_gem_object_unreference_unlocked(&obj->base);
+ if (ret)
+ return ret;
*handle_p = handle;
return 0;
@@ -459,7 +457,7 @@ i915_gem_shmem_pread(struct drm_device *dev,
mutex_unlock(&dev->struct_mutex);
- if (!prefaulted) {
+ if (likely(!i915_prefault_disable) && !prefaulted) {
ret = fault_in_multipages_writeable(user_data, remain);
/* Userspace is tricking us, but we've already clobbered
* its pages with the prefault and promised to write the
@@ -854,10 +852,12 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
args->size))
return -EFAULT;
- ret = fault_in_multipages_readable(to_user_ptr(args->data_ptr),
- args->size);
- if (ret)
- return -EFAULT;
+ if (likely(!i915_prefault_disable)) {
+ ret = fault_in_multipages_readable(to_user_ptr(args->data_ptr),
+ args->size);
+ if (ret)
+ return -EFAULT;
+ }
ret = i915_mutex_lock_interruptible(dev);
if (ret)
@@ -1679,6 +1679,7 @@ __i915_gem_shrink(struct drm_i915_private *dev_priv, long target,
bool purgeable_only)
{
struct drm_i915_gem_object *obj, *next;
+ struct i915_address_space *vm = &dev_priv->gtt.base;
long count = 0;
list_for_each_entry_safe(obj, next,
@@ -1692,9 +1693,7 @@ __i915_gem_shrink(struct drm_i915_private *dev_priv, long target,
}
}
- list_for_each_entry_safe(obj, next,
- &dev_priv->mm.inactive_list,
- mm_list) {
+ list_for_each_entry_safe(obj, next, &vm->inactive_list, mm_list) {
if ((i915_gem_object_is_purgeable(obj) || !purgeable_only) &&
i915_gem_object_unbind(obj) == 0 &&
i915_gem_object_put_pages(obj) == 0) {
@@ -1865,6 +1864,7 @@ i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
{
struct drm_device *dev = obj->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
+ struct i915_address_space *vm = &dev_priv->gtt.base;
u32 seqno = intel_ring_get_seqno(ring);
BUG_ON(ring == NULL);
@@ -1881,7 +1881,7 @@ i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
}
/* Move from whatever list we were on to the tail of execution. */
- list_move_tail(&obj->mm_list, &dev_priv->mm.active_list);
+ list_move_tail(&obj->mm_list, &vm->active_list);
list_move_tail(&obj->ring_list, &ring->active_list);
obj->last_read_seqno = seqno;
@@ -1905,11 +1905,12 @@ i915_gem_object_move_to_inactive(struct drm_i915_gem_object *obj)
{
struct drm_device *dev = obj->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
+ struct i915_address_space *vm = &dev_priv->gtt.base;
BUG_ON(obj->base.write_domain & ~I915_GEM_GPU_DOMAINS);
BUG_ON(!obj->active);
- list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
+ list_move_tail(&obj->mm_list, &vm->inactive_list);
list_del_init(&obj->ring_list);
obj->ring = NULL;
@@ -2074,10 +2075,8 @@ int __i915_add_request(struct intel_ring_buffer *ring,
ring->outstanding_lazy_request = 0;
if (!dev_priv->ums.mm_suspended) {
- if (i915_enable_hangcheck) {
- mod_timer(&dev_priv->gpu_error.hangcheck_timer,
- round_jiffies_up(jiffies + DRM_I915_HANGCHECK_JIFFIES));
- }
+ i915_queue_hangcheck(ring->dev);
+
if (was_empty) {
queue_delayed_work(dev_priv->wq,
&dev_priv->mm.retire_work,
@@ -2246,13 +2245,24 @@ 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);
+ }
}
}
void i915_gem_reset(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
+ struct i915_address_space *vm = &dev_priv->gtt.base;
struct drm_i915_gem_object *obj;
struct intel_ring_buffer *ring;
int i;
@@ -2263,12 +2273,8 @@ void i915_gem_reset(struct drm_device *dev)
/* Move everything out of the GPU domains to ensure we do any
* necessary invalidation upon reuse.
*/
- list_for_each_entry(obj,
- &dev_priv->mm.inactive_list,
- mm_list)
- {
+ list_for_each_entry(obj, &vm->inactive_list, mm_list)
obj->base.read_domains &= ~I915_GEM_GPU_DOMAINS;
- }
i915_gem_restore_fences(dev);
}
@@ -2571,6 +2577,7 @@ int
i915_gem_object_unbind(struct drm_i915_gem_object *obj)
{
drm_i915_private_t *dev_priv = obj->base.dev->dev_private;
+ struct i915_vma *vma;
int ret;
if (!i915_gem_obj_ggtt_bound(obj))
@@ -2608,11 +2615,20 @@ i915_gem_object_unbind(struct drm_i915_gem_object *obj)
i915_gem_object_unpin_pages(obj);
list_del(&obj->mm_list);
- list_move_tail(&obj->global_list, &dev_priv->mm.unbound_list);
/* Avoid an unnecessary call to unbind on rebind. */
obj->map_and_fenceable = true;
- drm_mm_remove_node(&obj->gtt_space);
+ vma = __i915_gem_obj_to_vma(obj);
+ list_del(&vma->vma_link);
+ drm_mm_remove_node(&vma->node);
+ i915_gem_vma_destroy(vma);
+
+ /* Since the unbound list is global, only move to that list if
+ * no more VMAs exist.
+ * NB: Until we have real VMAs there will only ever be one */
+ WARN_ON(!list_empty(&obj->vma_list));
+ if (list_empty(&obj->vma_list))
+ list_move_tail(&obj->global_list, &dev_priv->mm.unbound_list);
return 0;
}
@@ -2781,6 +2797,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:
@@ -2822,6 +2842,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
@@ -2951,7 +2972,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;
}
@@ -3037,12 +3057,17 @@ i915_gem_object_bind_to_gtt(struct drm_i915_gem_object *obj,
{
struct drm_device *dev = obj->base.dev;
drm_i915_private_t *dev_priv = dev->dev_private;
+ struct i915_address_space *vm = &dev_priv->gtt.base;
u32 size, fence_size, fence_alignment, unfenced_alignment;
bool mappable, fenceable;
size_t gtt_max = map_and_fenceable ?
- dev_priv->gtt.mappable_end : dev_priv->gtt.total;
+ dev_priv->gtt.mappable_end : dev_priv->gtt.base.total;
+ struct i915_vma *vma;
int ret;
+ if (WARN_ON(!list_empty(&obj->vma_list)))
+ return -EBUSY;
+
fence_size = i915_gem_get_gtt_size(dev,
obj->base.size,
obj->tiling_mode);
@@ -3081,9 +3106,15 @@ i915_gem_object_bind_to_gtt(struct drm_i915_gem_object *obj,
i915_gem_object_pin_pages(obj);
+ vma = i915_gem_vma_create(obj, &dev_priv->gtt.base);
+ if (IS_ERR(vma)) {
+ ret = PTR_ERR(vma);
+ goto err_unpin;
+ }
+
search_free:
- ret = drm_mm_insert_node_in_range_generic(&dev_priv->mm.gtt_space,
- &obj->gtt_space,
+ ret = drm_mm_insert_node_in_range_generic(&dev_priv->gtt.base.mm,
+ &vma->node,
size, alignment,
obj->cache_level, 0, gtt_max,
DRM_MM_SEARCH_DEFAULT);
@@ -3095,25 +3126,21 @@ search_free:
if (ret == 0)
goto search_free;
- i915_gem_object_unpin_pages(obj);
- return ret;
+ goto err_free_vma;
}
- if (WARN_ON(!i915_gem_valid_gtt_space(dev, &obj->gtt_space,
+ if (WARN_ON(!i915_gem_valid_gtt_space(dev, &vma->node,
obj->cache_level))) {
- i915_gem_object_unpin_pages(obj);
- drm_mm_remove_node(&obj->gtt_space);
- return -EINVAL;
+ ret = -EINVAL;
+ goto err_remove_node;
}
ret = i915_gem_gtt_prepare_object(obj);
- if (ret) {
- i915_gem_object_unpin_pages(obj);
- drm_mm_remove_node(&obj->gtt_space);
- return ret;
- }
+ if (ret)
+ goto err_remove_node;
list_move_tail(&obj->global_list, &dev_priv->mm.bound_list);
- list_add_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
+ list_add_tail(&obj->mm_list, &vm->inactive_list);
+ list_add(&vma->vma_link, &obj->vma_list);
fenceable =
i915_gem_obj_ggtt_size(obj) == fence_size &&
@@ -3127,6 +3154,14 @@ search_free:
trace_i915_gem_object_bind(obj, map_and_fenceable);
i915_gem_verify_gtt(dev);
return 0;
+
+err_remove_node:
+ drm_mm_remove_node(&vma->node);
+err_free_vma:
+ i915_gem_vma_destroy(vma);
+err_unpin:
+ i915_gem_object_unpin_pages(obj);
+ return ret;
}
void
@@ -3261,7 +3296,8 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
/* And bump the LRU for this access */
if (i915_gem_object_is_inactive(obj))
- list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
+ list_move_tail(&obj->mm_list,
+ &dev_priv->gtt.base.inactive_list);
return 0;
}
@@ -3271,6 +3307,7 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
{
struct drm_device *dev = obj->base.dev;
drm_i915_private_t *dev_priv = dev->dev_private;
+ struct i915_vma *vma = __i915_gem_obj_to_vma(obj);
int ret;
if (obj->cache_level == cache_level)
@@ -3281,7 +3318,7 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
return -EBUSY;
}
- if (!i915_gem_valid_gtt_space(dev, &obj->gtt_space, cache_level)) {
+ if (vma && !i915_gem_valid_gtt_space(dev, &vma->node, cache_level)) {
ret = i915_gem_object_unbind(obj);
if (ret)
return ret;
@@ -3826,6 +3863,7 @@ void i915_gem_object_init(struct drm_i915_gem_object *obj,
INIT_LIST_HEAD(&obj->global_list);
INIT_LIST_HEAD(&obj->ring_list);
INIT_LIST_HEAD(&obj->exec_list);
+ INIT_LIST_HEAD(&obj->vma_list);
obj->ops = ops;
@@ -3890,6 +3928,8 @@ struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
} else
obj->cache_level = I915_CACHE_NONE;
+ trace_i915_gem_object_create(obj);
+
return obj;
}
@@ -3946,6 +3986,26 @@ void i915_gem_free_object(struct drm_gem_object *gem_obj)
i915_gem_object_free(obj);
}
+struct i915_vma *i915_gem_vma_create(struct drm_i915_gem_object *obj,
+ struct i915_address_space *vm)
+{
+ struct i915_vma *vma = kzalloc(sizeof(*vma), GFP_KERNEL);
+ if (vma == NULL)
+ return ERR_PTR(-ENOMEM);
+
+ INIT_LIST_HEAD(&vma->vma_link);
+ vma->vm = vm;
+ vma->obj = obj;
+
+ return vma;
+}
+
+void i915_gem_vma_destroy(struct i915_vma *vma)
+{
+ WARN_ON(vma->node.allocated);
+ kfree(vma);
+}
+
int
i915_gem_idle(struct drm_device *dev)
{
@@ -4105,8 +4165,8 @@ i915_gem_init_hw(struct drm_device *dev)
if (INTEL_INFO(dev)->gen < 6 && !intel_enable_gtt())
return -EIO;
- if (IS_HASWELL(dev) && (I915_READ(0x120010) == 1))
- I915_WRITE(0x9008, I915_READ(0x9008) | 0xf0000);
+ if (dev_priv->ellc_size)
+ I915_WRITE(HSW_IDICR, I915_READ(HSW_IDICR) | IDIHASHMSK(0xf));
if (HAS_PCH_NOP(dev)) {
u32 temp = I915_READ(GEN7_MSG_CTL);
@@ -4202,7 +4262,7 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
return ret;
}
- BUG_ON(!list_empty(&dev_priv->mm.active_list));
+ BUG_ON(!list_empty(&dev_priv->gtt.base.active_list));
mutex_unlock(&dev->struct_mutex);
ret = drm_irq_install(dev);
@@ -4280,8 +4340,8 @@ i915_gem_load(struct drm_device *dev)
SLAB_HWCACHE_ALIGN,
NULL);
- INIT_LIST_HEAD(&dev_priv->mm.active_list);
- INIT_LIST_HEAD(&dev_priv->mm.inactive_list);
+ INIT_LIST_HEAD(&dev_priv->gtt.base.active_list);
+ INIT_LIST_HEAD(&dev_priv->gtt.base.inactive_list);
INIT_LIST_HEAD(&dev_priv->mm.unbound_list);
INIT_LIST_HEAD(&dev_priv->mm.bound_list);
INIT_LIST_HEAD(&dev_priv->mm.fence_list);
@@ -4552,6 +4612,7 @@ i915_gem_inactive_shrink(struct shrinker *shrinker, struct shrink_control *sc)
struct drm_i915_private,
mm.inactive_shrinker);
struct drm_device *dev = dev_priv->dev;
+ struct i915_address_space *vm = &dev_priv->gtt.base;
struct drm_i915_gem_object *obj;
int nr_to_scan = sc->nr_to_scan;
bool unlock = true;
@@ -4580,7 +4641,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, mm_list)
+ list_for_each_entry(obj, &vm->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/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
index 2074544..2470206 100644
--- a/drivers/gpu/drm/i915/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/i915_gem_context.c
@@ -304,31 +304,24 @@ static int context_idr_cleanup(int id, void *p, void *data)
}
struct i915_ctx_hang_stats *
-i915_gem_context_get_hang_stats(struct intel_ring_buffer *ring,
+i915_gem_context_get_hang_stats(struct drm_device *dev,
struct drm_file *file,
u32 id)
{
- struct drm_i915_private *dev_priv = ring->dev->dev_private;
+ struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_i915_file_private *file_priv = file->driver_priv;
- struct i915_hw_context *to;
-
- if (dev_priv->hw_contexts_disabled)
- return ERR_PTR(-ENOENT);
-
- if (ring->id != RCS)
- return ERR_PTR(-EINVAL);
-
- if (file == NULL)
- return ERR_PTR(-EINVAL);
+ struct i915_hw_context *ctx;
if (id == DEFAULT_CONTEXT_ID)
return &file_priv->hang_stats;
- to = i915_gem_context_get(file->driver_priv, id);
- if (to == NULL)
+ ctx = NULL;
+ if (!dev_priv->hw_contexts_disabled)
+ ctx = i915_gem_context_get(file->driver_priv, id);
+ if (ctx == NULL)
return ERR_PTR(-ENOENT);
- return &to->hang_stats;
+ return &ctx->hang_stats;
}
void i915_gem_context_close(struct drm_device *dev, struct drm_file *file)
diff --git a/drivers/gpu/drm/i915/i915_gem_debug.c b/drivers/gpu/drm/i915/i915_gem_debug.c
index 582e6a5..bf945a3 100644
--- a/drivers/gpu/drm/i915/i915_gem_debug.c
+++ b/drivers/gpu/drm/i915/i915_gem_debug.c
@@ -97,7 +97,7 @@ i915_verify_lists(struct drm_device *dev)
}
}
- list_for_each_entry(obj, &dev_priv->mm.inactive_list, list) {
+ list_for_each_entry(obj, &i915_gtt_vm->inactive_list, list) {
if (obj->base.dev != dev ||
!atomic_read(&obj->base.refcount.refcount)) {
DRM_ERROR("freed inactive %p\n", obj);
diff --git a/drivers/gpu/drm/i915/i915_gem_evict.c b/drivers/gpu/drm/i915/i915_gem_evict.c
index 5f8afc4..df61f33 100644
--- a/drivers/gpu/drm/i915/i915_gem_evict.c
+++ b/drivers/gpu/drm/i915/i915_gem_evict.c
@@ -34,11 +34,13 @@
static bool
mark_free(struct drm_i915_gem_object *obj, struct list_head *unwind)
{
+ struct i915_vma *vma = __i915_gem_obj_to_vma(obj);
+
if (obj->pin_count)
return false;
list_add(&obj->exec_list, unwind);
- return drm_mm_scan_add_block(&obj->gtt_space);
+ return drm_mm_scan_add_block(&vma->node);
}
int
@@ -47,7 +49,9 @@ i915_gem_evict_something(struct drm_device *dev, int min_size,
bool mappable, bool nonblocking)
{
drm_i915_private_t *dev_priv = dev->dev_private;
+ struct i915_address_space *vm = &dev_priv->gtt.base;
struct list_head eviction_list, unwind_list;
+ struct i915_vma *vma;
struct drm_i915_gem_object *obj;
int ret = 0;
@@ -78,15 +82,14 @@ i915_gem_evict_something(struct drm_device *dev, int min_size,
INIT_LIST_HEAD(&unwind_list);
if (mappable)
- drm_mm_init_scan_with_range(&dev_priv->mm.gtt_space,
- min_size, alignment, cache_level,
- 0, dev_priv->gtt.mappable_end);
+ drm_mm_init_scan_with_range(&vm->mm, min_size,
+ alignment, cache_level, 0,
+ dev_priv->gtt.mappable_end);
else
- drm_mm_init_scan(&dev_priv->mm.gtt_space,
- min_size, alignment, cache_level);
+ drm_mm_init_scan(&vm->mm, min_size, alignment, cache_level);
/* First see if there is a large enough contiguous idle region... */
- list_for_each_entry(obj, &dev_priv->mm.inactive_list, mm_list) {
+ list_for_each_entry(obj, &vm->inactive_list, mm_list) {
if (mark_free(obj, &unwind_list))
goto found;
}
@@ -95,7 +98,7 @@ i915_gem_evict_something(struct drm_device *dev, int min_size,
goto none;
/* Now merge in the soon-to-be-expired objects... */
- list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) {
+ list_for_each_entry(obj, &vm->active_list, mm_list) {
if (mark_free(obj, &unwind_list))
goto found;
}
@@ -106,8 +109,8 @@ none:
obj = list_first_entry(&unwind_list,
struct drm_i915_gem_object,
exec_list);
-
- ret = drm_mm_scan_remove_block(&obj->gtt_space);
+ vma = __i915_gem_obj_to_vma(obj);
+ ret = drm_mm_scan_remove_block(&vma->node);
BUG_ON(ret);
list_del_init(&obj->exec_list);
@@ -127,7 +130,8 @@ found:
obj = list_first_entry(&unwind_list,
struct drm_i915_gem_object,
exec_list);
- if (drm_mm_scan_remove_block(&obj->gtt_space)) {
+ vma = __i915_gem_obj_to_vma(obj);
+ if (drm_mm_scan_remove_block(&vma->node)) {
list_move(&obj->exec_list, &eviction_list);
drm_gem_object_reference(&obj->base);
continue;
@@ -154,12 +158,13 @@ int
i915_gem_evict_everything(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;
+ struct i915_address_space *vm = &dev_priv->gtt.base;
struct drm_i915_gem_object *obj, *next;
bool lists_empty;
int ret;
- lists_empty = (list_empty(&dev_priv->mm.inactive_list) &&
- list_empty(&dev_priv->mm.active_list));
+ lists_empty = (list_empty(&vm->inactive_list) &&
+ list_empty(&vm->active_list));
if (lists_empty)
return -ENOSPC;
@@ -176,8 +181,7 @@ i915_gem_evict_everything(struct drm_device *dev)
i915_gem_retire_requests(dev);
/* Having flushed everything, unbind() should never raise an error */
- list_for_each_entry_safe(obj, next,
- &dev_priv->mm.inactive_list, mm_list)
+ list_for_each_entry_safe(obj, next, &vm->inactive_list, mm_list)
if (obj->pin_count == 0)
WARN_ON(i915_gem_object_unbind(obj));
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index 64eda44..5b6d764 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -255,7 +255,7 @@ i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj,
reloc->delta += target_offset;
if (use_cpu_reloc(obj)) {
- uint32_t page_offset = reloc->offset & ~PAGE_MASK;
+ uint32_t page_offset = offset_in_page(reloc->offset);
char *vaddr;
ret = i915_gem_object_set_to_cpu_domain(obj, 1);
@@ -284,7 +284,7 @@ i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj,
reloc_page = io_mapping_map_atomic_wc(dev_priv->gtt.mappable,
reloc->offset & PAGE_MASK);
reloc_entry = (uint32_t __iomem *)
- (reloc_page + (reloc->offset & ~PAGE_MASK));
+ (reloc_page + offset_in_page(reloc->offset));
iowrite32(reloc->delta, reloc_entry);
io_mapping_unmap_atomic(reloc_page);
}
@@ -759,8 +759,10 @@ validate_exec_list(struct drm_i915_gem_exec_object2 *exec,
if (!access_ok(VERIFY_WRITE, ptr, length))
return -EFAULT;
- if (fault_in_multipages_readable(ptr, length))
- return -EFAULT;
+ if (likely(!i915_prefault_disable)) {
+ if (fault_in_multipages_readable(ptr, length))
+ return -EFAULT;
+ }
}
return 0;
@@ -873,7 +875,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
break;
case I915_EXEC_BSD:
ring = &dev_priv->ring[VCS];
- if (ctx_id != 0) {
+ if (ctx_id != DEFAULT_CONTEXT_ID) {
DRM_DEBUG("Ring %s doesn't support contexts\n",
ring->name);
return -EPERM;
@@ -881,7 +883,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
break;
case I915_EXEC_BLT:
ring = &dev_priv->ring[BCS];
- if (ctx_id != 0) {
+ if (ctx_id != DEFAULT_CONTEXT_ID) {
DRM_DEBUG("Ring %s doesn't support contexts\n",
ring->name);
return -EPERM;
@@ -889,7 +891,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
break;
case I915_EXEC_VEBOX:
ring = &dev_priv->ring[VECS];
- if (ctx_id != 0) {
+ if (ctx_id != DEFAULT_CONTEXT_ID) {
DRM_DEBUG("Ring %s doesn't support contexts\n",
ring->name);
return -EPERM;
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 242d0f9..3b639a9 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -33,6 +33,7 @@
/* PPGTT stuff */
#define GEN6_GTT_ADDR_ENCODE(addr) ((addr) | (((addr) >> 28) & 0xff0))
+#define HSW_GTT_ADDR_ENCODE(addr) ((addr) | (((addr) >> 28) & 0x7f0))
#define GEN6_PDE_VALID (1 << 0)
/* gen6+ has bit 11-4 for physical addr bit 39-32 */
@@ -44,6 +45,15 @@
#define GEN6_PTE_CACHE_LLC (2 << 1)
#define GEN6_PTE_CACHE_LLC_MLC (3 << 1)
#define GEN6_PTE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr)
+#define HSW_PTE_ADDR_ENCODE(addr) HSW_GTT_ADDR_ENCODE(addr)
+
+/* Cacheability Control is a 4-bit value. The low three bits are stored in *
+ * bits 3:1 of the PTE, while the fourth bit is stored in bit 11 of the PTE.
+ */
+#define HSW_CACHEABILITY_CONTROL(bits) ((((bits) & 0x7) << 1) | \
+ (((bits) & 0x8) << (11 - 3)))
+#define HSW_WB_LLC_AGE0 HSW_CACHEABILITY_CONTROL(0x3)
+#define HSW_WB_ELLC_LLC_AGE0 HSW_CACHEABILITY_CONTROL(0xb)
static gen6_gtt_pte_t gen6_pte_encode(dma_addr_t addr,
enum i915_cache_level level)
@@ -92,17 +102,29 @@ static gen6_gtt_pte_t hsw_pte_encode(dma_addr_t addr,
enum i915_cache_level level)
{
gen6_gtt_pte_t pte = GEN6_PTE_VALID;
- pte |= GEN6_PTE_ADDR_ENCODE(addr);
+ pte |= HSW_PTE_ADDR_ENCODE(addr);
if (level != I915_CACHE_NONE)
- pte |= GEN6_PTE_CACHE_LLC;
+ pte |= HSW_WB_LLC_AGE0;
+
+ return pte;
+}
+
+static gen6_gtt_pte_t iris_pte_encode(dma_addr_t addr,
+ enum i915_cache_level level)
+{
+ gen6_gtt_pte_t pte = GEN6_PTE_VALID;
+ pte |= HSW_PTE_ADDR_ENCODE(addr);
+
+ if (level != I915_CACHE_NONE)
+ pte |= HSW_WB_ELLC_LLC_AGE0;
return pte;
}
static void gen6_write_pdes(struct i915_hw_ppgtt *ppgtt)
{
- struct drm_i915_private *dev_priv = ppgtt->dev->dev_private;
+ struct drm_i915_private *dev_priv = ppgtt->base.dev->dev_private;
gen6_gtt_pte_t __iomem *pd_addr;
uint32_t pd_entry;
int i;
@@ -181,18 +203,18 @@ static int gen6_ppgtt_enable(struct drm_device *dev)
}
/* PPGTT support for Sandybdrige/Gen6 and later */
-static void gen6_ppgtt_clear_range(struct i915_hw_ppgtt *ppgtt,
+static void gen6_ppgtt_clear_range(struct i915_address_space *vm,
unsigned first_entry,
unsigned num_entries)
{
- struct drm_i915_private *dev_priv = ppgtt->dev->dev_private;
+ struct i915_hw_ppgtt *ppgtt =
+ container_of(vm, struct i915_hw_ppgtt, base);
gen6_gtt_pte_t *pt_vaddr, scratch_pte;
unsigned act_pt = first_entry / I915_PPGTT_PT_ENTRIES;
unsigned first_pte = first_entry % I915_PPGTT_PT_ENTRIES;
unsigned last_pte, i;
- scratch_pte = ppgtt->pte_encode(dev_priv->gtt.scratch.addr,
- I915_CACHE_LLC);
+ scratch_pte = vm->pte_encode(vm->scratch.addr, I915_CACHE_LLC);
while (num_entries) {
last_pte = first_pte + num_entries;
@@ -212,11 +234,13 @@ static void gen6_ppgtt_clear_range(struct i915_hw_ppgtt *ppgtt,
}
}
-static void gen6_ppgtt_insert_entries(struct i915_hw_ppgtt *ppgtt,
+static void gen6_ppgtt_insert_entries(struct i915_address_space *vm,
struct sg_table *pages,
unsigned first_entry,
enum i915_cache_level cache_level)
{
+ struct i915_hw_ppgtt *ppgtt =
+ container_of(vm, struct i915_hw_ppgtt, base);
gen6_gtt_pte_t *pt_vaddr;
unsigned act_pt = first_entry / I915_PPGTT_PT_ENTRIES;
unsigned act_pte = first_entry % I915_PPGTT_PT_ENTRIES;
@@ -227,7 +251,7 @@ static void gen6_ppgtt_insert_entries(struct i915_hw_ppgtt *ppgtt,
dma_addr_t page_addr;
page_addr = sg_page_iter_dma_address(&sg_iter);
- pt_vaddr[act_pte] = ppgtt->pte_encode(page_addr, cache_level);
+ pt_vaddr[act_pte] = vm->pte_encode(page_addr, cache_level);
if (++act_pte == I915_PPGTT_PT_ENTRIES) {
kunmap_atomic(pt_vaddr);
act_pt++;
@@ -239,13 +263,17 @@ static void gen6_ppgtt_insert_entries(struct i915_hw_ppgtt *ppgtt,
kunmap_atomic(pt_vaddr);
}
-static void gen6_ppgtt_cleanup(struct i915_hw_ppgtt *ppgtt)
+static void gen6_ppgtt_cleanup(struct i915_address_space *vm)
{
+ struct i915_hw_ppgtt *ppgtt =
+ container_of(vm, struct i915_hw_ppgtt, base);
int i;
+ drm_mm_takedown(&ppgtt->base.mm);
+
if (ppgtt->pt_dma_addr) {
for (i = 0; i < ppgtt->num_pd_entries; i++)
- pci_unmap_page(ppgtt->dev->pdev,
+ pci_unmap_page(ppgtt->base.dev->pdev,
ppgtt->pt_dma_addr[i],
4096, PCI_DMA_BIDIRECTIONAL);
}
@@ -259,7 +287,7 @@ static void gen6_ppgtt_cleanup(struct i915_hw_ppgtt *ppgtt)
static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt)
{
- struct drm_device *dev = ppgtt->dev;
+ struct drm_device *dev = ppgtt->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
unsigned first_pd_entry_in_global_pt;
int i;
@@ -271,17 +299,18 @@ static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt)
first_pd_entry_in_global_pt = gtt_total_entries(dev_priv->gtt);
if (IS_HASWELL(dev)) {
- ppgtt->pte_encode = hsw_pte_encode;
+ ppgtt->base.pte_encode = hsw_pte_encode;
} else if (IS_VALLEYVIEW(dev)) {
- ppgtt->pte_encode = byt_pte_encode;
+ ppgtt->base.pte_encode = byt_pte_encode;
} else {
- ppgtt->pte_encode = gen6_pte_encode;
+ ppgtt->base.pte_encode = gen6_pte_encode;
}
ppgtt->num_pd_entries = GEN6_PPGTT_PD_ENTRIES;
ppgtt->enable = gen6_ppgtt_enable;
- ppgtt->clear_range = gen6_ppgtt_clear_range;
- ppgtt->insert_entries = gen6_ppgtt_insert_entries;
- ppgtt->cleanup = gen6_ppgtt_cleanup;
+ ppgtt->base.clear_range = gen6_ppgtt_clear_range;
+ ppgtt->base.insert_entries = gen6_ppgtt_insert_entries;
+ ppgtt->base.cleanup = gen6_ppgtt_cleanup;
+ ppgtt->base.scratch = dev_priv->gtt.base.scratch;
ppgtt->pt_pages = kzalloc(sizeof(struct page *)*ppgtt->num_pd_entries,
GFP_KERNEL);
if (!ppgtt->pt_pages)
@@ -312,8 +341,8 @@ static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt)
ppgtt->pt_dma_addr[i] = pt_addr;
}
- ppgtt->clear_range(ppgtt, 0,
- ppgtt->num_pd_entries*I915_PPGTT_PT_ENTRIES);
+ ppgtt->base.clear_range(&ppgtt->base, 0,
+ ppgtt->num_pd_entries * I915_PPGTT_PT_ENTRIES);
ppgtt->pd_offset = first_pd_entry_in_global_pt * sizeof(gen6_gtt_pte_t);
@@ -346,7 +375,7 @@ static int i915_gem_init_aliasing_ppgtt(struct drm_device *dev)
if (!ppgtt)
return -ENOMEM;
- ppgtt->dev = dev;
+ ppgtt->base.dev = dev;
if (INTEL_INFO(dev)->gen < 8)
ret = gen6_ppgtt_init(ppgtt);
@@ -355,8 +384,11 @@ static int i915_gem_init_aliasing_ppgtt(struct drm_device *dev)
if (ret)
kfree(ppgtt);
- else
+ else {
dev_priv->mm.aliasing_ppgtt = ppgtt;
+ drm_mm_init(&ppgtt->base.mm, ppgtt->base.start,
+ ppgtt->base.total);
+ }
return ret;
}
@@ -369,7 +401,7 @@ void i915_gem_cleanup_aliasing_ppgtt(struct drm_device *dev)
if (!ppgtt)
return;
- ppgtt->cleanup(ppgtt);
+ ppgtt->base.cleanup(&ppgtt->base);
dev_priv->mm.aliasing_ppgtt = NULL;
}
@@ -377,17 +409,17 @@ void i915_ppgtt_bind_object(struct i915_hw_ppgtt *ppgtt,
struct drm_i915_gem_object *obj,
enum i915_cache_level cache_level)
{
- ppgtt->insert_entries(ppgtt, obj->pages,
- i915_gem_obj_ggtt_offset(obj) >> PAGE_SHIFT,
- cache_level);
+ ppgtt->base.insert_entries(&ppgtt->base, obj->pages,
+ i915_gem_obj_ggtt_offset(obj) >> PAGE_SHIFT,
+ cache_level);
}
void i915_ppgtt_unbind_object(struct i915_hw_ppgtt *ppgtt,
struct drm_i915_gem_object *obj)
{
- ppgtt->clear_range(ppgtt,
- i915_gem_obj_ggtt_offset(obj) >> PAGE_SHIFT,
- obj->base.size >> PAGE_SHIFT);
+ ppgtt->base.clear_range(&ppgtt->base,
+ i915_gem_obj_ggtt_offset(obj) >> PAGE_SHIFT,
+ obj->base.size >> PAGE_SHIFT);
}
extern int intel_iommu_gfx_mapped;
@@ -434,8 +466,9 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev)
struct drm_i915_gem_object *obj;
/* First fill our portion of the GTT with scratch pages */
- dev_priv->gtt.gtt_clear_range(dev, dev_priv->gtt.start / PAGE_SIZE,
- dev_priv->gtt.total / PAGE_SIZE);
+ dev_priv->gtt.base.clear_range(&dev_priv->gtt.base,
+ dev_priv->gtt.base.start / PAGE_SIZE,
+ dev_priv->gtt.base.total / PAGE_SIZE);
list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
i915_gem_clflush_object(obj);
@@ -464,12 +497,12 @@ int i915_gem_gtt_prepare_object(struct drm_i915_gem_object *obj)
* within the global GTT as well as accessible by the GPU through the GMADR
* mapped BAR (dev_priv->mm.gtt->gtt).
*/
-static void gen6_ggtt_insert_entries(struct drm_device *dev,
+static void gen6_ggtt_insert_entries(struct i915_address_space *vm,
struct sg_table *st,
unsigned int first_entry,
enum i915_cache_level level)
{
- struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_private *dev_priv = vm->dev->dev_private;
gen6_gtt_pte_t __iomem *gtt_entries =
(gen6_gtt_pte_t __iomem *)dev_priv->gtt.gsm + first_entry;
int i = 0;
@@ -478,8 +511,7 @@ static void gen6_ggtt_insert_entries(struct drm_device *dev,
for_each_sg_page(st->sgl, &sg_iter, st->nents, 0) {
addr = sg_page_iter_dma_address(&sg_iter);
- iowrite32(dev_priv->gtt.pte_encode(addr, level),
- &gtt_entries[i]);
+ iowrite32(vm->pte_encode(addr, level), &gtt_entries[i]);
i++;
}
@@ -490,8 +522,8 @@ static void gen6_ggtt_insert_entries(struct drm_device *dev,
* hardware should work, we must keep this posting read for paranoia.
*/
if (i != 0)
- WARN_ON(readl(&gtt_entries[i-1])
- != dev_priv->gtt.pte_encode(addr, level));
+ WARN_ON(readl(&gtt_entries[i-1]) !=
+ vm->pte_encode(addr, level));
/* This next bit makes the above posting read even more important. We
* want to flush the TLBs only after we're certain all the PTE updates
@@ -501,11 +533,11 @@ static void gen6_ggtt_insert_entries(struct drm_device *dev,
POSTING_READ(GFX_FLSH_CNTL_GEN6);
}
-static void gen6_ggtt_clear_range(struct drm_device *dev,
+static void gen6_ggtt_clear_range(struct i915_address_space *vm,
unsigned int first_entry,
unsigned int num_entries)
{
- struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_private *dev_priv = vm->dev->dev_private;
gen6_gtt_pte_t scratch_pte, __iomem *gtt_base =
(gen6_gtt_pte_t __iomem *) dev_priv->gtt.gsm + first_entry;
const int max_entries = gtt_total_entries(dev_priv->gtt) - first_entry;
@@ -516,15 +548,14 @@ static void gen6_ggtt_clear_range(struct drm_device *dev,
first_entry, num_entries, max_entries))
num_entries = max_entries;
- scratch_pte = dev_priv->gtt.pte_encode(dev_priv->gtt.scratch.addr,
- I915_CACHE_LLC);
+ scratch_pte = vm->pte_encode(vm->scratch.addr, I915_CACHE_LLC);
for (i = 0; i < num_entries; i++)
iowrite32(scratch_pte, &gtt_base[i]);
readl(gtt_base);
}
-static void i915_ggtt_insert_entries(struct drm_device *dev,
+static void i915_ggtt_insert_entries(struct i915_address_space *vm,
struct sg_table *st,
unsigned int pg_start,
enum i915_cache_level cache_level)
@@ -536,7 +567,7 @@ static void i915_ggtt_insert_entries(struct drm_device *dev,
}
-static void i915_ggtt_clear_range(struct drm_device *dev,
+static void i915_ggtt_clear_range(struct i915_address_space *vm,
unsigned int first_entry,
unsigned int num_entries)
{
@@ -549,10 +580,11 @@ void i915_gem_gtt_bind_object(struct drm_i915_gem_object *obj,
{
struct drm_device *dev = obj->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
+ const unsigned long entry = i915_gem_obj_ggtt_offset(obj) >> PAGE_SHIFT;
- dev_priv->gtt.gtt_insert_entries(dev, obj->pages,
- i915_gem_obj_ggtt_offset(obj) >> PAGE_SHIFT,
- cache_level);
+ dev_priv->gtt.base.insert_entries(&dev_priv->gtt.base, obj->pages,
+ entry,
+ cache_level);
obj->has_global_gtt_mapping = 1;
}
@@ -561,10 +593,11 @@ void i915_gem_gtt_unbind_object(struct drm_i915_gem_object *obj)
{
struct drm_device *dev = obj->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
+ const unsigned long entry = i915_gem_obj_ggtt_offset(obj) >> PAGE_SHIFT;
- dev_priv->gtt.gtt_clear_range(obj->base.dev,
- i915_gem_obj_ggtt_offset(obj) >> PAGE_SHIFT,
- obj->base.size >> PAGE_SHIFT);
+ dev_priv->gtt.base.clear_range(&dev_priv->gtt.base,
+ entry,
+ obj->base.size >> PAGE_SHIFT);
obj->has_global_gtt_mapping = 0;
}
@@ -623,38 +656,42 @@ void i915_gem_setup_global_gtt(struct drm_device *dev,
BUG_ON(mappable_end > end);
/* Subtract the guard page ... */
- drm_mm_init(&dev_priv->mm.gtt_space, start, end - start - PAGE_SIZE);
+ drm_mm_init(&dev_priv->gtt.base.mm, start, end - start - PAGE_SIZE);
if (!HAS_LLC(dev))
- dev_priv->mm.gtt_space.color_adjust = i915_gtt_color_adjust;
+ dev_priv->gtt.base.mm.color_adjust = i915_gtt_color_adjust;
/* Mark any preallocated objects as occupied */
list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
+ struct i915_vma *vma = __i915_gem_obj_to_vma(obj);
int ret;
DRM_DEBUG_KMS("reserving preallocated space: %lx + %zx\n",
i915_gem_obj_ggtt_offset(obj), obj->base.size);
WARN_ON(i915_gem_obj_ggtt_bound(obj));
- ret = drm_mm_reserve_node(&dev_priv->mm.gtt_space,
- &obj->gtt_space);
+ ret = drm_mm_reserve_node(&dev_priv->gtt.base.mm, &vma->node);
if (ret)
DRM_DEBUG_KMS("Reservation failed\n");
obj->has_global_gtt_mapping = 1;
+ list_add(&vma->vma_link, &obj->vma_list);
}
- dev_priv->gtt.start = start;
- dev_priv->gtt.total = end - start;
+ dev_priv->gtt.base.start = start;
+ dev_priv->gtt.base.total = end - start;
/* Clear any non-preallocated blocks */
- drm_mm_for_each_hole(entry, &dev_priv->mm.gtt_space,
+ drm_mm_for_each_hole(entry, &dev_priv->gtt.base.mm,
hole_start, hole_end) {
+ const unsigned long count = (hole_end - hole_start) / PAGE_SIZE;
DRM_DEBUG_KMS("clearing unused GTT space: [%lx, %lx]\n",
hole_start, hole_end);
- dev_priv->gtt.gtt_clear_range(dev, hole_start / PAGE_SIZE,
- (hole_end-hole_start) / PAGE_SIZE);
+ dev_priv->gtt.base.clear_range(&dev_priv->gtt.base,
+ hole_start / PAGE_SIZE,
+ count);
}
/* And finally clear the reserved guard page */
- dev_priv->gtt.gtt_clear_range(dev, end / PAGE_SIZE - 1, 1);
+ dev_priv->gtt.base.clear_range(&dev_priv->gtt.base,
+ end / PAGE_SIZE - 1, 1);
}
static bool
@@ -677,7 +714,7 @@ void i915_gem_init_global_gtt(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
unsigned long gtt_size, mappable_size;
- gtt_size = dev_priv->gtt.total;
+ gtt_size = dev_priv->gtt.base.total;
mappable_size = dev_priv->gtt.mappable_end;
if (intel_enable_ppgtt(dev) && HAS_ALIASING_PPGTT(dev)) {
@@ -696,7 +733,7 @@ void i915_gem_init_global_gtt(struct drm_device *dev)
return;
DRM_ERROR("Aliased PPGTT setup failed %d\n", ret);
- drm_mm_takedown(&dev_priv->mm.gtt_space);
+ drm_mm_takedown(&dev_priv->gtt.base.mm);
gtt_size += GEN6_PPGTT_PD_ENTRIES * PAGE_SIZE;
}
i915_gem_setup_global_gtt(dev, 0, mappable_size, gtt_size);
@@ -722,8 +759,8 @@ static int setup_scratch_page(struct drm_device *dev)
#else
dma_addr = page_to_phys(page);
#endif
- dev_priv->gtt.scratch.page = page;
- dev_priv->gtt.scratch.addr = dma_addr;
+ dev_priv->gtt.base.scratch.page = page;
+ dev_priv->gtt.base.scratch.addr = dma_addr;
return 0;
}
@@ -731,11 +768,13 @@ static int setup_scratch_page(struct drm_device *dev)
static void teardown_scratch_page(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- set_pages_wb(dev_priv->gtt.scratch.page, 1);
- pci_unmap_page(dev->pdev, dev_priv->gtt.scratch.addr,
+ struct page *page = dev_priv->gtt.base.scratch.page;
+
+ set_pages_wb(page, 1);
+ pci_unmap_page(dev->pdev, dev_priv->gtt.base.scratch.addr,
PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
- put_page(dev_priv->gtt.scratch.page);
- __free_page(dev_priv->gtt.scratch.page);
+ put_page(page);
+ __free_page(page);
}
static inline unsigned int gen6_get_total_gtt_size(u16 snb_gmch_ctl)
@@ -798,17 +837,18 @@ static int gen6_gmch_probe(struct drm_device *dev,
if (ret)
DRM_ERROR("Scratch setup failed\n");
- dev_priv->gtt.gtt_clear_range = gen6_ggtt_clear_range;
- dev_priv->gtt.gtt_insert_entries = gen6_ggtt_insert_entries;
+ dev_priv->gtt.base.clear_range = gen6_ggtt_clear_range;
+ dev_priv->gtt.base.insert_entries = gen6_ggtt_insert_entries;
return ret;
}
-static void gen6_gmch_remove(struct drm_device *dev)
+static void gen6_gmch_remove(struct i915_address_space *vm)
{
- struct drm_i915_private *dev_priv = dev->dev_private;
- iounmap(dev_priv->gtt.gsm);
- teardown_scratch_page(dev_priv->dev);
+
+ struct i915_gtt *gtt = container_of(vm, struct i915_gtt, base);
+ iounmap(gtt->gsm);
+ teardown_scratch_page(vm->dev);
}
static int i915_gmch_probe(struct drm_device *dev,
@@ -829,13 +869,13 @@ static int i915_gmch_probe(struct drm_device *dev,
intel_gtt_get(gtt_total, stolen, mappable_base, mappable_end);
dev_priv->gtt.do_idle_maps = needs_idle_maps(dev_priv->dev);
- dev_priv->gtt.gtt_clear_range = i915_ggtt_clear_range;
- dev_priv->gtt.gtt_insert_entries = i915_ggtt_insert_entries;
+ dev_priv->gtt.base.clear_range = i915_ggtt_clear_range;
+ dev_priv->gtt.base.insert_entries = i915_ggtt_insert_entries;
return 0;
}
-static void i915_gmch_remove(struct drm_device *dev)
+static void i915_gmch_remove(struct i915_address_space *vm)
{
intel_gmch_remove();
}
@@ -848,25 +888,30 @@ int i915_gem_gtt_init(struct drm_device *dev)
if (INTEL_INFO(dev)->gen <= 5) {
gtt->gtt_probe = i915_gmch_probe;
- gtt->gtt_remove = i915_gmch_remove;
+ gtt->base.cleanup = i915_gmch_remove;
} else {
gtt->gtt_probe = gen6_gmch_probe;
- gtt->gtt_remove = gen6_gmch_remove;
- if (IS_HASWELL(dev))
- gtt->pte_encode = hsw_pte_encode;
+ gtt->base.cleanup = gen6_gmch_remove;
+ if (IS_HASWELL(dev) && dev_priv->ellc_size)
+ gtt->base.pte_encode = iris_pte_encode;
+ else if (IS_HASWELL(dev))
+ gtt->base.pte_encode = hsw_pte_encode;
else if (IS_VALLEYVIEW(dev))
- gtt->pte_encode = byt_pte_encode;
+ gtt->base.pte_encode = byt_pte_encode;
else
- gtt->pte_encode = gen6_pte_encode;
+ gtt->base.pte_encode = gen6_pte_encode;
}
- ret = gtt->gtt_probe(dev, &gtt->total, &gtt->stolen_size,
+ ret = gtt->gtt_probe(dev, &gtt->base.total, &gtt->stolen_size,
&gtt->mappable_base, &gtt->mappable_end);
if (ret)
return ret;
+ gtt->base.dev = dev;
+
/* GMADR is the PCI mmio aperture into the global GTT. */
- DRM_INFO("Memory usable by graphics device = %zdM\n", gtt->total >> 20);
+ DRM_INFO("Memory usable by graphics device = %zdM\n",
+ gtt->base.total >> 20);
DRM_DEBUG_DRIVER("GMADR size = %ldM\n", gtt->mappable_end >> 20);
DRM_DEBUG_DRIVER("GTT stolen size = %zdM\n", gtt->stolen_size >> 20);
diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c
index a3d1a12..38afadf 100644
--- a/drivers/gpu/drm/i915/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
@@ -45,45 +45,27 @@
static unsigned long i915_stolen_to_physical(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- struct pci_dev *pdev = dev_priv->bridge_dev;
struct resource *r;
u32 base;
- /* On the machines I have tested the Graphics Base of Stolen Memory
- * is unreliable, so on those compute the base by subtracting the
- * stolen memory from the Top of Low Usable DRAM which is where the
- * BIOS places the graphics stolen memory.
+ /* Almost universally we can find the Graphics Base of Stolen Memory
+ * at offset 0x5c in the igfx configuration space. On a few (desktop)
+ * machines this is also mirrored in the bridge device at different
+ * locations, or in the MCHBAR. On gen2, the layout is again slightly
+ * different with the Graphics Segment immediately following Top of
+ * Memory (or Top of Usable DRAM). Note it appears that TOUD is only
+ * reported by 865g, so we just use the top of memory as determined
+ * by the e820 probe.
*
- * On gen2, the layout is slightly different with the Graphics Segment
- * immediately following Top of Memory (or Top of Usable DRAM). Note
- * it appears that TOUD is only reported by 865g, so we just use the
- * top of memory as determined by the e820 probe.
- *
- * XXX gen2 requires an unavailable symbol and 945gm fails with
- * its value of TOLUD.
+ * XXX However gen2 requires an unavailable symbol.
*/
base = 0;
- if (IS_VALLEYVIEW(dev)) {
+ if (INTEL_INFO(dev)->gen >= 3) {
+ /* Read Graphics Base of Stolen Memory directly */
pci_read_config_dword(dev->pdev, 0x5c, &base);
base &= ~((1<<20) - 1);
- } else if (INTEL_INFO(dev)->gen >= 6) {
- /* Read Base Data of Stolen Memory Register (BDSM) directly.
- * Note that there is also a MCHBAR miror at 0x1080c0 or
- * we could use device 2:0x5c instead.
- */
- pci_read_config_dword(pdev, 0xB0, &base);
- base &= ~4095; /* lower bits used for locking register */
- } else if (INTEL_INFO(dev)->gen > 3 || IS_G33(dev)) {
- /* Read Graphics Base of Stolen Memory directly */
- pci_read_config_dword(pdev, 0xA4, &base);
+ } else { /* GEN2 */
#if 0
- } else if (IS_GEN3(dev)) {
- u8 val;
- /* Stolen is immediately below Top of Low Usable DRAM */
- pci_read_config_byte(pdev, 0x9c, &val);
- base = val >> 3 << 27;
- base -= dev_priv->mm.gtt->stolen_size;
- } else {
/* Stolen is immediately above Top of Memory */
base = max_low_pfn_mapped << PAGE_SHIFT;
#endif
@@ -367,8 +349,10 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev,
u32 size)
{
struct drm_i915_private *dev_priv = dev->dev_private;
+ struct i915_address_space *vm = &dev_priv->gtt.base;
struct drm_i915_gem_object *obj;
struct drm_mm_node *stolen;
+ struct i915_vma *vma;
int ret;
if (!drm_mm_initialized(&dev_priv->mm.stolen))
@@ -409,30 +393,38 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev,
if (gtt_offset == I915_GTT_OFFSET_NONE)
return obj;
+ vma = i915_gem_vma_create(obj, &dev_priv->gtt.base);
+ if (IS_ERR(vma)) {
+ ret = PTR_ERR(vma);
+ goto err_out;
+ }
+
/* To simplify the initialisation sequence between KMS and GTT,
* we allow construction of the stolen object prior to
* setting up the GTT space. The actual reservation will occur
* later.
*/
- obj->gtt_space.start = gtt_offset;
- obj->gtt_space.size = size;
- if (drm_mm_initialized(&dev_priv->mm.gtt_space)) {
- ret = drm_mm_reserve_node(&dev_priv->mm.gtt_space,
- &obj->gtt_space);
+ vma->node.start = gtt_offset;
+ vma->node.size = size;
+ if (drm_mm_initialized(&dev_priv->gtt.base.mm)) {
+ ret = drm_mm_reserve_node(&dev_priv->gtt.base.mm, &vma->node);
if (ret) {
DRM_DEBUG_KMS("failed to allocate stolen GTT space\n");
- goto unref_out;
+ i915_gem_vma_destroy(vma);
+ goto err_out;
}
}
obj->has_global_gtt_mapping = 1;
list_add_tail(&obj->global_list, &dev_priv->mm.bound_list);
- list_add_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
+ list_add_tail(&obj->mm_list, &vm->inactive_list);
return obj;
-unref_out:
+err_out:
+ drm_mm_remove_node(stolen);
+ kfree(stolen);
drm_gem_object_unreference(&obj->base);
return NULL;
}
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
index 58386ce..d970d84 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -622,6 +622,7 @@ static struct drm_i915_error_object *
i915_error_first_batchbuffer(struct drm_i915_private *dev_priv,
struct intel_ring_buffer *ring)
{
+ struct i915_address_space *vm = &dev_priv->gtt.base;
struct drm_i915_gem_object *obj;
u32 seqno;
@@ -641,7 +642,7 @@ i915_error_first_batchbuffer(struct drm_i915_private *dev_priv,
}
seqno = ring->get_seqno(ring, false);
- list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) {
+ list_for_each_entry(obj, &vm->active_list, mm_list) {
if (obj->ring != ring)
continue;
@@ -773,11 +774,12 @@ static void i915_gem_record_rings(struct drm_device *dev,
static void i915_gem_capture_buffers(struct drm_i915_private *dev_priv,
struct drm_i915_error_state *error)
{
+ struct i915_address_space *vm = &dev_priv->gtt.base;
struct drm_i915_gem_object *obj;
int i;
i = 0;
- list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list)
+ list_for_each_entry(obj, &vm->active_list, mm_list)
i++;
error->active_bo_count = i;
list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list)
@@ -797,7 +799,7 @@ static void i915_gem_capture_buffers(struct drm_i915_private *dev_priv,
error->active_bo_count =
capture_active_bo(error->active_bo,
error->active_bo_count,
- &dev_priv->mm.active_list);
+ &vm->active_list);
if (error->pinned_bo)
error->pinned_bo_count =
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 64db680f..6a1c207 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -698,18 +698,13 @@ static void ironlake_rps_change_irq_handler(struct drm_device *dev)
static void notify_ring(struct drm_device *dev,
struct intel_ring_buffer *ring)
{
- struct drm_i915_private *dev_priv = dev->dev_private;
-
if (ring->obj == NULL)
return;
trace_i915_gem_request_complete(ring, ring->get_seqno(ring, false));
wake_up_all(&ring->irq_queue);
- if (i915_enable_hangcheck) {
- mod_timer(&dev_priv->gpu_error.hangcheck_timer,
- round_jiffies_up(jiffies + DRM_I915_HANGCHECK_JIFFIES));
- }
+ i915_queue_hangcheck(dev);
}
static void gen6_pm_rps_work(struct work_struct *work)
@@ -817,7 +812,7 @@ static void ivybridge_parity_work(struct work_struct *work)
mutex_unlock(&dev_priv->dev->struct_mutex);
- parity_event[0] = "L3_PARITY_ERROR=1";
+ parity_event[0] = I915_L3_PARITY_UEVENT "=1";
parity_event[1] = kasprintf(GFP_KERNEL, "ROW=%d", row);
parity_event[2] = kasprintf(GFP_KERNEL, "BANK=%d", bank);
parity_event[3] = kasprintf(GFP_KERNEL, "SUBBANK=%d", subbank);
@@ -849,6 +844,17 @@ static void ivybridge_parity_error_irq_handler(struct drm_device *dev)
queue_work(dev_priv->wq, &dev_priv->l3_parity.error_work);
}
+static void ilk_gt_irq_handler(struct drm_device *dev,
+ struct drm_i915_private *dev_priv,
+ u32 gt_iir)
+{
+ if (gt_iir &
+ (GT_RENDER_USER_INTERRUPT | GT_RENDER_PIPECTL_NOTIFY_INTERRUPT))
+ notify_ring(dev, &dev_priv->ring[RCS]);
+ if (gt_iir & ILK_BSD_USER_INTERRUPT)
+ notify_ring(dev, &dev_priv->ring[VCS]);
+}
+
static void snb_gt_irq_handler(struct drm_device *dev,
struct drm_i915_private *dev_priv,
u32 gt_iir)
@@ -913,6 +919,10 @@ static inline void intel_hpd_irq_handler(struct drm_device *dev,
spin_lock(&dev_priv->irq_lock);
for (i = 1; i < HPD_NUM_PINS; i++) {
+ WARN(((hpd[i] & hotplug_trigger) &&
+ dev_priv->hpd_stats[i].hpd_mark != HPD_ENABLED),
+ "Received HPD interrupt although disabled\n");
+
if (!(hpd[i] & hotplug_trigger) ||
dev_priv->hpd_stats[i].hpd_mark != HPD_ENABLED)
continue;
@@ -923,6 +933,7 @@ static inline void intel_hpd_irq_handler(struct drm_device *dev,
+ msecs_to_jiffies(HPD_STORM_DETECT_PERIOD))) {
dev_priv->hpd_stats[i].hpd_last_jiffies = jiffies;
dev_priv->hpd_stats[i].hpd_cnt = 0;
+ DRM_DEBUG_KMS("Received HPD interrupt on PIN %d - cnt: 0\n", i);
} else if (dev_priv->hpd_stats[i].hpd_cnt > HPD_STORM_THRESHOLD) {
dev_priv->hpd_stats[i].hpd_mark = HPD_MARK_DISABLED;
dev_priv->hpd_event_bits &= ~(1 << i);
@@ -930,6 +941,8 @@ static inline void intel_hpd_irq_handler(struct drm_device *dev,
storm_detected = true;
} else {
dev_priv->hpd_stats[i].hpd_cnt++;
+ DRM_DEBUG_KMS("Received HPD interrupt on PIN %d - cnt: %d\n", i,
+ dev_priv->hpd_stats[i].hpd_cnt);
}
}
@@ -1202,27 +1215,111 @@ static void cpt_irq_handler(struct drm_device *dev, u32 pch_iir)
cpt_serr_int_handler(dev);
}
-static irqreturn_t ivybridge_irq_handler(int irq, void *arg)
+static void ilk_display_irq_handler(struct drm_device *dev, u32 de_iir)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (de_iir & DE_AUX_CHANNEL_A)
+ dp_aux_irq_handler(dev);
+
+ if (de_iir & DE_GSE)
+ intel_opregion_asle_intr(dev);
+
+ if (de_iir & DE_PIPEA_VBLANK)
+ drm_handle_vblank(dev, 0);
+
+ if (de_iir & DE_PIPEB_VBLANK)
+ drm_handle_vblank(dev, 1);
+
+ if (de_iir & DE_POISON)
+ DRM_ERROR("Poison interrupt\n");
+
+ if (de_iir & DE_PIPEA_FIFO_UNDERRUN)
+ if (intel_set_cpu_fifo_underrun_reporting(dev, PIPE_A, false))
+ DRM_DEBUG_DRIVER("Pipe A FIFO underrun\n");
+
+ if (de_iir & DE_PIPEB_FIFO_UNDERRUN)
+ if (intel_set_cpu_fifo_underrun_reporting(dev, PIPE_B, false))
+ DRM_DEBUG_DRIVER("Pipe B FIFO underrun\n");
+
+ if (de_iir & DE_PLANEA_FLIP_DONE) {
+ intel_prepare_page_flip(dev, 0);
+ intel_finish_page_flip_plane(dev, 0);
+ }
+
+ if (de_iir & DE_PLANEB_FLIP_DONE) {
+ intel_prepare_page_flip(dev, 1);
+ intel_finish_page_flip_plane(dev, 1);
+ }
+
+ /* check event from PCH */
+ if (de_iir & DE_PCH_EVENT) {
+ u32 pch_iir = I915_READ(SDEIIR);
+
+ if (HAS_PCH_CPT(dev))
+ cpt_irq_handler(dev, pch_iir);
+ else
+ ibx_irq_handler(dev, pch_iir);
+
+ /* should clear PCH hotplug event before clear CPU irq */
+ I915_WRITE(SDEIIR, pch_iir);
+ }
+
+ if (IS_GEN5(dev) && de_iir & DE_PCU_EVENT)
+ ironlake_rps_change_irq_handler(dev);
+}
+
+static void ivb_display_irq_handler(struct drm_device *dev, u32 de_iir)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int i;
+
+ if (de_iir & DE_ERR_INT_IVB)
+ ivb_err_int_handler(dev);
+
+ if (de_iir & DE_AUX_CHANNEL_A_IVB)
+ dp_aux_irq_handler(dev);
+
+ if (de_iir & DE_GSE_IVB)
+ intel_opregion_asle_intr(dev);
+
+ for (i = 0; i < 3; i++) {
+ if (de_iir & (DE_PIPEA_VBLANK_IVB << (5 * i)))
+ drm_handle_vblank(dev, i);
+ if (de_iir & (DE_PLANEA_FLIP_DONE_IVB << (5 * i))) {
+ intel_prepare_page_flip(dev, i);
+ intel_finish_page_flip_plane(dev, i);
+ }
+ }
+
+ /* check event from PCH */
+ if (!HAS_PCH_NOP(dev) && (de_iir & DE_PCH_EVENT_IVB)) {
+ u32 pch_iir = I915_READ(SDEIIR);
+
+ cpt_irq_handler(dev, pch_iir);
+
+ /* clear PCH hotplug event before clear CPU irq */
+ I915_WRITE(SDEIIR, pch_iir);
+ }
+}
+
+static irqreturn_t ironlake_irq_handler(int irq, void *arg)
{
struct drm_device *dev = (struct drm_device *) arg;
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
- u32 de_iir, gt_iir, de_ier, pm_iir, sde_ier = 0;
+ u32 de_iir, gt_iir, de_ier, sde_ier = 0;
irqreturn_t ret = IRQ_NONE;
- int i;
atomic_inc(&dev_priv->irq_received);
/* We get interrupts on unclaimed registers, so check for this before we
* do any I915_{READ,WRITE}. */
- if (IS_HASWELL(dev) &&
- (I915_READ_NOTRACE(FPGA_DBG) & FPGA_DBG_RM_NOCLAIM)) {
- DRM_ERROR("Unclaimed register before interrupt\n");
- I915_WRITE_NOTRACE(FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
- }
+ intel_uncore_check_errors(dev);
/* disable master interrupt before clearing iir */
de_ier = I915_READ(DEIER);
I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
+ POSTING_READ(DEIER);
/* Disable south interrupts. We'll only write to SDEIIR once, so further
* interrupts will will be stored on its back queue, and then we'll be
@@ -1246,53 +1343,34 @@ static irqreturn_t ivybridge_irq_handler(int irq, void *arg)
gt_iir = I915_READ(GTIIR);
if (gt_iir) {
- snb_gt_irq_handler(dev, dev_priv, gt_iir);
+ if (INTEL_INFO(dev)->gen >= 6)
+ snb_gt_irq_handler(dev, dev_priv, gt_iir);
+ else
+ ilk_gt_irq_handler(dev, dev_priv, gt_iir);
I915_WRITE(GTIIR, gt_iir);
ret = IRQ_HANDLED;
}
de_iir = I915_READ(DEIIR);
if (de_iir) {
- if (de_iir & DE_ERR_INT_IVB)
- ivb_err_int_handler(dev);
-
- if (de_iir & DE_AUX_CHANNEL_A_IVB)
- dp_aux_irq_handler(dev);
-
- if (de_iir & DE_GSE_IVB)
- intel_opregion_asle_intr(dev);
-
- for (i = 0; i < 3; i++) {
- if (de_iir & (DE_PIPEA_VBLANK_IVB << (5 * i)))
- drm_handle_vblank(dev, i);
- if (de_iir & (DE_PLANEA_FLIP_DONE_IVB << (5 * i))) {
- intel_prepare_page_flip(dev, i);
- intel_finish_page_flip_plane(dev, i);
- }
- }
-
- /* check event from PCH */
- if (!HAS_PCH_NOP(dev) && (de_iir & DE_PCH_EVENT_IVB)) {
- u32 pch_iir = I915_READ(SDEIIR);
-
- cpt_irq_handler(dev, pch_iir);
-
- /* clear PCH hotplug event before clear CPU irq */
- I915_WRITE(SDEIIR, pch_iir);
- }
-
+ if (INTEL_INFO(dev)->gen >= 7)
+ ivb_display_irq_handler(dev, de_iir);
+ else
+ ilk_display_irq_handler(dev, de_iir);
I915_WRITE(DEIIR, de_iir);
ret = IRQ_HANDLED;
}
- pm_iir = I915_READ(GEN6_PMIIR);
- if (pm_iir) {
- if (IS_HASWELL(dev))
- hsw_pm_irq_handler(dev_priv, pm_iir);
- else if (pm_iir & GEN6_PM_RPS_EVENTS)
- gen6_rps_irq_handler(dev_priv, pm_iir);
- I915_WRITE(GEN6_PMIIR, pm_iir);
- ret = IRQ_HANDLED;
+ if (INTEL_INFO(dev)->gen >= 6) {
+ u32 pm_iir = I915_READ(GEN6_PMIIR);
+ if (pm_iir) {
+ if (IS_HASWELL(dev))
+ hsw_pm_irq_handler(dev_priv, pm_iir);
+ else if (pm_iir & GEN6_PM_RPS_EVENTS)
+ gen6_rps_irq_handler(dev_priv, pm_iir);
+ I915_WRITE(GEN6_PMIIR, pm_iir);
+ ret = IRQ_HANDLED;
+ }
}
if (IS_HASWELL(dev)) {
@@ -1312,119 +1390,6 @@ static irqreturn_t ivybridge_irq_handler(int irq, void *arg)
return ret;
}
-static void ilk_gt_irq_handler(struct drm_device *dev,
- struct drm_i915_private *dev_priv,
- u32 gt_iir)
-{
- if (gt_iir &
- (GT_RENDER_USER_INTERRUPT | GT_RENDER_PIPECTL_NOTIFY_INTERRUPT))
- notify_ring(dev, &dev_priv->ring[RCS]);
- if (gt_iir & ILK_BSD_USER_INTERRUPT)
- notify_ring(dev, &dev_priv->ring[VCS]);
-}
-
-static irqreturn_t ironlake_irq_handler(int irq, void *arg)
-{
- struct drm_device *dev = (struct drm_device *) arg;
- drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
- int ret = IRQ_NONE;
- u32 de_iir, gt_iir, de_ier, pm_iir, sde_ier;
-
- atomic_inc(&dev_priv->irq_received);
-
- /* disable master interrupt before clearing iir */
- de_ier = I915_READ(DEIER);
- I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
- POSTING_READ(DEIER);
-
- /* Disable south interrupts. We'll only write to SDEIIR once, so further
- * interrupts will will be stored on its back queue, and then we'll be
- * able to process them after we restore SDEIER (as soon as we restore
- * it, we'll get an interrupt if SDEIIR still has something to process
- * due to its back queue). */
- sde_ier = I915_READ(SDEIER);
- I915_WRITE(SDEIER, 0);
- POSTING_READ(SDEIER);
-
- de_iir = I915_READ(DEIIR);
- gt_iir = I915_READ(GTIIR);
- pm_iir = I915_READ(GEN6_PMIIR);
-
- if (de_iir == 0 && gt_iir == 0 && (!IS_GEN6(dev) || pm_iir == 0))
- goto done;
-
- ret = IRQ_HANDLED;
-
- if (IS_GEN5(dev))
- ilk_gt_irq_handler(dev, dev_priv, gt_iir);
- else
- snb_gt_irq_handler(dev, dev_priv, gt_iir);
-
- if (de_iir & DE_AUX_CHANNEL_A)
- dp_aux_irq_handler(dev);
-
- if (de_iir & DE_GSE)
- intel_opregion_asle_intr(dev);
-
- if (de_iir & DE_PIPEA_VBLANK)
- drm_handle_vblank(dev, 0);
-
- if (de_iir & DE_PIPEB_VBLANK)
- drm_handle_vblank(dev, 1);
-
- if (de_iir & DE_POISON)
- DRM_ERROR("Poison interrupt\n");
-
- if (de_iir & DE_PIPEA_FIFO_UNDERRUN)
- if (intel_set_cpu_fifo_underrun_reporting(dev, PIPE_A, false))
- DRM_DEBUG_DRIVER("Pipe A FIFO underrun\n");
-
- if (de_iir & DE_PIPEB_FIFO_UNDERRUN)
- if (intel_set_cpu_fifo_underrun_reporting(dev, PIPE_B, false))
- DRM_DEBUG_DRIVER("Pipe B FIFO underrun\n");
-
- if (de_iir & DE_PLANEA_FLIP_DONE) {
- intel_prepare_page_flip(dev, 0);
- intel_finish_page_flip_plane(dev, 0);
- }
-
- if (de_iir & DE_PLANEB_FLIP_DONE) {
- intel_prepare_page_flip(dev, 1);
- intel_finish_page_flip_plane(dev, 1);
- }
-
- /* check event from PCH */
- if (de_iir & DE_PCH_EVENT) {
- u32 pch_iir = I915_READ(SDEIIR);
-
- if (HAS_PCH_CPT(dev))
- cpt_irq_handler(dev, pch_iir);
- else
- ibx_irq_handler(dev, pch_iir);
-
- /* should clear PCH hotplug event before clear CPU irq */
- I915_WRITE(SDEIIR, pch_iir);
- }
-
- if (IS_GEN5(dev) && de_iir & DE_PCU_EVENT)
- ironlake_rps_change_irq_handler(dev);
-
- if (IS_GEN6(dev) && pm_iir & GEN6_PM_RPS_EVENTS)
- gen6_rps_irq_handler(dev_priv, pm_iir);
-
- I915_WRITE(GTIIR, gt_iir);
- I915_WRITE(DEIIR, de_iir);
- I915_WRITE(GEN6_PMIIR, pm_iir);
-
-done:
- I915_WRITE(DEIER, de_ier);
- POSTING_READ(DEIER);
- I915_WRITE(SDEIER, sde_ier);
- POSTING_READ(SDEIER);
-
- return ret;
-}
-
/**
* i915_error_work_func - do process context error handling work
* @work: work struct
@@ -1440,9 +1405,9 @@ static void i915_error_work_func(struct work_struct *work)
gpu_error);
struct drm_device *dev = dev_priv->dev;
struct intel_ring_buffer *ring;
- char *error_event[] = { "ERROR=1", NULL };
- char *reset_event[] = { "RESET=1", NULL };
- char *reset_done_event[] = { "ERROR=0", NULL };
+ char *error_event[] = { I915_ERROR_UEVENT "=1", NULL };
+ char *reset_event[] = { I915_RESET_UEVENT "=1", NULL };
+ char *reset_done_event[] = { I915_ERROR_UEVENT "=0", NULL };
int i, ret;
kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, error_event);
@@ -1696,29 +1661,14 @@ static int ironlake_enable_vblank(struct drm_device *dev, int pipe)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
unsigned long irqflags;
+ uint32_t bit = (INTEL_INFO(dev)->gen >= 7) ? DE_PIPE_VBLANK_IVB(pipe) :
+ DE_PIPE_VBLANK_ILK(pipe);
if (!i915_pipe_enabled(dev, pipe))
return -EINVAL;
spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
- ironlake_enable_display_irq(dev_priv, (pipe == 0) ?
- DE_PIPEA_VBLANK : DE_PIPEB_VBLANK);
- spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
-
- return 0;
-}
-
-static int ivybridge_enable_vblank(struct drm_device *dev, int pipe)
-{
- drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
- unsigned long irqflags;
-
- if (!i915_pipe_enabled(dev, pipe))
- return -EINVAL;
-
- spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
- ironlake_enable_display_irq(dev_priv,
- DE_PIPEA_VBLANK_IVB << (5 * pipe));
+ ironlake_enable_display_irq(dev_priv, bit);
spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
return 0;
@@ -1769,21 +1719,11 @@ static void ironlake_disable_vblank(struct drm_device *dev, int pipe)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
unsigned long irqflags;
+ uint32_t bit = (INTEL_INFO(dev)->gen >= 7) ? DE_PIPE_VBLANK_IVB(pipe) :
+ DE_PIPE_VBLANK_ILK(pipe);
spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
- ironlake_disable_display_irq(dev_priv, (pipe == 0) ?
- DE_PIPEA_VBLANK : DE_PIPEB_VBLANK);
- spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
-}
-
-static void ivybridge_disable_vblank(struct drm_device *dev, int pipe)
-{
- drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
- unsigned long irqflags;
-
- spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
- ironlake_disable_display_irq(dev_priv,
- DE_PIPEA_VBLANK_IVB << (pipe * 5));
+ ironlake_disable_display_irq(dev_priv, bit);
spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
}
@@ -2030,9 +1970,17 @@ void i915_hangcheck_elapsed(unsigned long data)
if (busy_count)
/* Reset timer case chip hangs without another request
* being added */
- mod_timer(&dev_priv->gpu_error.hangcheck_timer,
- round_jiffies_up(jiffies +
- DRM_I915_HANGCHECK_JIFFIES));
+ i915_queue_hangcheck(dev);
+}
+
+void i915_queue_hangcheck(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ if (!i915_enable_hangcheck)
+ return;
+
+ mod_timer(&dev_priv->gpu_error.hangcheck_timer,
+ round_jiffies_up(jiffies + DRM_I915_HANGCHECK_JIFFIES));
}
static void ibx_irq_preinstall(struct drm_device *dev)
@@ -2054,31 +2002,26 @@ static void ibx_irq_preinstall(struct drm_device *dev)
POSTING_READ(SDEIER);
}
-/* drm_dma.h hooks
-*/
-static void ironlake_irq_preinstall(struct drm_device *dev)
+static void gen5_gt_irq_preinstall(struct drm_device *dev)
{
- drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
-
- atomic_set(&dev_priv->irq_received, 0);
-
- I915_WRITE(HWSTAM, 0xeffe);
-
- /* XXX hotplug from PCH */
-
- I915_WRITE(DEIMR, 0xffffffff);
- I915_WRITE(DEIER, 0x0);
- POSTING_READ(DEIER);
+ struct drm_i915_private *dev_priv = dev->dev_private;
/* and GT */
I915_WRITE(GTIMR, 0xffffffff);
I915_WRITE(GTIER, 0x0);
POSTING_READ(GTIER);
- ibx_irq_preinstall(dev);
+ if (INTEL_INFO(dev)->gen >= 6) {
+ /* and PM */
+ I915_WRITE(GEN6_PMIMR, 0xffffffff);
+ I915_WRITE(GEN6_PMIER, 0x0);
+ POSTING_READ(GEN6_PMIER);
+ }
}
-static void ivybridge_irq_preinstall(struct drm_device *dev)
+/* drm_dma.h hooks
+*/
+static void ironlake_irq_preinstall(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -2086,21 +2029,11 @@ static void ivybridge_irq_preinstall(struct drm_device *dev)
I915_WRITE(HWSTAM, 0xeffe);
- /* XXX hotplug from PCH */
-
I915_WRITE(DEIMR, 0xffffffff);
I915_WRITE(DEIER, 0x0);
POSTING_READ(DEIER);
- /* and GT */
- I915_WRITE(GTIMR, 0xffffffff);
- I915_WRITE(GTIER, 0x0);
- POSTING_READ(GTIER);
-
- /* Power management */
- I915_WRITE(GEN6_PMIMR, 0xffffffff);
- I915_WRITE(GEN6_PMIER, 0x0);
- POSTING_READ(GEN6_PMIER);
+ gen5_gt_irq_preinstall(dev);
ibx_irq_preinstall(dev);
}
@@ -2121,9 +2054,8 @@ static void valleyview_irq_preinstall(struct drm_device *dev)
/* and GT */
I915_WRITE(GTIIR, I915_READ(GTIIR));
I915_WRITE(GTIIR, I915_READ(GTIIR));
- I915_WRITE(GTIMR, 0xffffffff);
- I915_WRITE(GTIER, 0x0);
- POSTING_READ(GTIER);
+
+ gen5_gt_irq_preinstall(dev);
I915_WRITE(DPINVGTT, 0xff);
@@ -2193,120 +2125,99 @@ static void ibx_irq_postinstall(struct drm_device *dev)
I915_WRITE(SDEIMR, ~mask);
}
-static int ironlake_irq_postinstall(struct drm_device *dev)
+static void gen5_gt_irq_postinstall(struct drm_device *dev)
{
- unsigned long irqflags;
-
- drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
- /* enable kind of interrupts always enabled */
- u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT |
- DE_PLANEA_FLIP_DONE | DE_PLANEB_FLIP_DONE |
- DE_AUX_CHANNEL_A | DE_PIPEB_FIFO_UNDERRUN |
- DE_PIPEA_FIFO_UNDERRUN | DE_POISON;
- u32 gt_irqs;
-
- dev_priv->irq_mask = ~display_mask;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 pm_irqs, gt_irqs;
- /* should always can generate irq */
- I915_WRITE(DEIIR, I915_READ(DEIIR));
- I915_WRITE(DEIMR, dev_priv->irq_mask);
- I915_WRITE(DEIER, display_mask |
- DE_PIPEA_VBLANK | DE_PIPEB_VBLANK | DE_PCU_EVENT);
- POSTING_READ(DEIER);
+ pm_irqs = gt_irqs = 0;
dev_priv->gt_irq_mask = ~0;
+ if (HAS_L3_GPU_CACHE(dev)) {
+ /* L3 parity interrupt is always unmasked. */
+ dev_priv->gt_irq_mask = ~GT_RENDER_L3_PARITY_ERROR_INTERRUPT;
+ gt_irqs |= GT_RENDER_L3_PARITY_ERROR_INTERRUPT;
+ }
- I915_WRITE(GTIIR, I915_READ(GTIIR));
- I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
-
- gt_irqs = GT_RENDER_USER_INTERRUPT;
-
- if (IS_GEN6(dev))
- gt_irqs |= GT_BLT_USER_INTERRUPT | GT_BSD_USER_INTERRUPT;
- else
+ gt_irqs |= GT_RENDER_USER_INTERRUPT;
+ if (IS_GEN5(dev)) {
gt_irqs |= GT_RENDER_PIPECTL_NOTIFY_INTERRUPT |
ILK_BSD_USER_INTERRUPT;
+ } else {
+ gt_irqs |= GT_BLT_USER_INTERRUPT | GT_BSD_USER_INTERRUPT;
+ }
+ I915_WRITE(GTIIR, I915_READ(GTIIR));
+ I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
I915_WRITE(GTIER, gt_irqs);
POSTING_READ(GTIER);
- ibx_irq_postinstall(dev);
+ if (INTEL_INFO(dev)->gen >= 6) {
+ pm_irqs |= GEN6_PM_RPS_EVENTS;
- if (IS_IRONLAKE_M(dev)) {
- /* Enable PCU event interrupts
- *
- * spinlocking not required here for correctness since interrupt
- * setup is guaranteed to run in single-threaded context. But we
- * need it to make the assert_spin_locked happy. */
- spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
- ironlake_enable_display_irq(dev_priv, DE_PCU_EVENT);
- spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
- }
+ if (HAS_VEBOX(dev))
+ pm_irqs |= PM_VEBOX_USER_INTERRUPT;
- return 0;
+ I915_WRITE(GEN6_PMIIR, I915_READ(GEN6_PMIIR));
+ I915_WRITE(GEN6_PMIMR, 0xffffffff);
+ I915_WRITE(GEN6_PMIER, pm_irqs);
+ POSTING_READ(GEN6_PMIER);
+ }
}
-static int ivybridge_irq_postinstall(struct drm_device *dev)
+static int ironlake_irq_postinstall(struct drm_device *dev)
{
+ unsigned long irqflags;
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
- /* enable kind of interrupts always enabled */
- u32 display_mask =
- DE_MASTER_IRQ_CONTROL | DE_GSE_IVB | DE_PCH_EVENT_IVB |
- DE_PLANEC_FLIP_DONE_IVB |
- DE_PLANEB_FLIP_DONE_IVB |
- DE_PLANEA_FLIP_DONE_IVB |
- DE_AUX_CHANNEL_A_IVB |
- DE_ERR_INT_IVB;
- u32 pm_irqs = GEN6_PM_RPS_EVENTS;
- u32 gt_irqs;
+ u32 display_mask, extra_mask;
+
+ if (INTEL_INFO(dev)->gen >= 7) {
+ display_mask = (DE_MASTER_IRQ_CONTROL | DE_GSE_IVB |
+ DE_PCH_EVENT_IVB | DE_PLANEC_FLIP_DONE_IVB |
+ DE_PLANEB_FLIP_DONE_IVB |
+ DE_PLANEA_FLIP_DONE_IVB | DE_AUX_CHANNEL_A_IVB |
+ DE_ERR_INT_IVB);
+ extra_mask = (DE_PIPEC_VBLANK_IVB | DE_PIPEB_VBLANK_IVB |
+ DE_PIPEA_VBLANK_IVB);
+
+ I915_WRITE(GEN7_ERR_INT, I915_READ(GEN7_ERR_INT));
+ } else {
+ display_mask = (DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT |
+ DE_PLANEA_FLIP_DONE | DE_PLANEB_FLIP_DONE |
+ DE_AUX_CHANNEL_A | DE_PIPEB_FIFO_UNDERRUN |
+ DE_PIPEA_FIFO_UNDERRUN | DE_POISON);
+ extra_mask = DE_PIPEA_VBLANK | DE_PIPEB_VBLANK | DE_PCU_EVENT;
+ }
dev_priv->irq_mask = ~display_mask;
/* should always can generate irq */
- I915_WRITE(GEN7_ERR_INT, I915_READ(GEN7_ERR_INT));
I915_WRITE(DEIIR, I915_READ(DEIIR));
I915_WRITE(DEIMR, dev_priv->irq_mask);
- I915_WRITE(DEIER,
- display_mask |
- DE_PIPEC_VBLANK_IVB |
- DE_PIPEB_VBLANK_IVB |
- DE_PIPEA_VBLANK_IVB);
+ I915_WRITE(DEIER, display_mask | extra_mask);
POSTING_READ(DEIER);
- dev_priv->gt_irq_mask = ~GT_RENDER_L3_PARITY_ERROR_INTERRUPT;
-
- I915_WRITE(GTIIR, I915_READ(GTIIR));
- I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
-
- gt_irqs = GT_RENDER_USER_INTERRUPT | GT_BSD_USER_INTERRUPT |
- GT_BLT_USER_INTERRUPT | GT_RENDER_L3_PARITY_ERROR_INTERRUPT;
- I915_WRITE(GTIER, gt_irqs);
- POSTING_READ(GTIER);
-
- I915_WRITE(GEN6_PMIIR, I915_READ(GEN6_PMIIR));
- if (HAS_VEBOX(dev))
- pm_irqs |= PM_VEBOX_USER_INTERRUPT;
-
- /* Our enable/disable rps functions may touch these registers so
- * make sure to set a known state for only the non-RPS bits.
- * The RMW is extra paranoia since this should be called after being set
- * to a known state in preinstall.
- * */
- I915_WRITE(GEN6_PMIMR,
- (I915_READ(GEN6_PMIMR) | ~GEN6_PM_RPS_EVENTS) & ~pm_irqs);
- I915_WRITE(GEN6_PMIER,
- (I915_READ(GEN6_PMIER) & GEN6_PM_RPS_EVENTS) | pm_irqs);
- POSTING_READ(GEN6_PMIER);
+ gen5_gt_irq_postinstall(dev);
ibx_irq_postinstall(dev);
+ if (IS_IRONLAKE_M(dev)) {
+ /* Enable PCU event interrupts
+ *
+ * spinlocking not required here for correctness since interrupt
+ * setup is guaranteed to run in single-threaded context. But we
+ * need it to make the assert_spin_locked happy. */
+ spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
+ ironlake_enable_display_irq(dev_priv, DE_PCU_EVENT);
+ spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
+ }
+
return 0;
}
static int valleyview_irq_postinstall(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
- u32 gt_irqs;
u32 enable_mask;
u32 pipestat_enable = PLANE_FLIP_DONE_INT_EN_VLV;
unsigned long irqflags;
@@ -2346,13 +2257,7 @@ static int valleyview_irq_postinstall(struct drm_device *dev)
I915_WRITE(VLV_IIR, 0xffffffff);
I915_WRITE(VLV_IIR, 0xffffffff);
- I915_WRITE(GTIIR, I915_READ(GTIIR));
- I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
-
- gt_irqs = GT_RENDER_USER_INTERRUPT | GT_BSD_USER_INTERRUPT |
- GT_BLT_USER_INTERRUPT;
- I915_WRITE(GTIER, gt_irqs);
- POSTING_READ(GTIER);
+ gen5_gt_irq_postinstall(dev);
/* ack & enable invalid PTE error interrupts */
#if 0 /* FIXME: add support to irq handler for checking these bits */
@@ -3118,15 +3023,6 @@ void intel_irq_init(struct drm_device *dev)
dev->driver->enable_vblank = valleyview_enable_vblank;
dev->driver->disable_vblank = valleyview_disable_vblank;
dev_priv->display.hpd_irq_setup = i915_hpd_irq_setup;
- } else if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev)) {
- /* Share uninstall handlers with ILK/SNB */
- dev->driver->irq_handler = ivybridge_irq_handler;
- dev->driver->irq_preinstall = ivybridge_irq_preinstall;
- dev->driver->irq_postinstall = ivybridge_irq_postinstall;
- dev->driver->irq_uninstall = ironlake_irq_uninstall;
- dev->driver->enable_vblank = ivybridge_enable_vblank;
- dev->driver->disable_vblank = ivybridge_disable_vblank;
- dev_priv->display.hpd_irq_setup = ibx_hpd_irq_setup;
} else if (HAS_PCH_SPLIT(dev)) {
dev->driver->irq_handler = ironlake_irq_handler;
dev->driver->irq_preinstall = ironlake_irq_preinstall;
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index dc3d6a7..3aebe5d 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -61,6 +61,12 @@
#define GC_LOW_FREQUENCY_ENABLE (1 << 7)
#define GC_DISPLAY_CLOCK_190_200_MHZ (0 << 4)
#define GC_DISPLAY_CLOCK_333_MHZ (4 << 4)
+#define GC_DISPLAY_CLOCK_267_MHZ_PNV (0 << 4)
+#define GC_DISPLAY_CLOCK_333_MHZ_PNV (1 << 4)
+#define GC_DISPLAY_CLOCK_444_MHZ_PNV (2 << 4)
+#define GC_DISPLAY_CLOCK_200_MHZ_PNV (5 << 4)
+#define GC_DISPLAY_CLOCK_133_MHZ_PNV (6 << 4)
+#define GC_DISPLAY_CLOCK_167_MHZ_PNV (7 << 4)
#define GC_DISPLAY_CLOCK_MASK (7 << 4)
#define GM45_GC_RENDER_CLOCK_MASK (0xf << 0)
#define GM45_GC_RENDER_CLOCK_266_MHZ (8 << 0)
@@ -1779,6 +1785,71 @@
#define BCLRPAT(pipe) _PIPE(pipe, _BCLRPAT_A, _BCLRPAT_B)
#define VSYNCSHIFT(trans) _TRANSCODER(trans, _VSYNCSHIFT_A, _VSYNCSHIFT_B)
+/* HSW eDP PSR registers */
+#define EDP_PSR_CTL 0x64800
+#define EDP_PSR_ENABLE (1<<31)
+#define EDP_PSR_LINK_DISABLE (0<<27)
+#define EDP_PSR_LINK_STANDBY (1<<27)
+#define EDP_PSR_MIN_LINK_ENTRY_TIME_MASK (3<<25)
+#define EDP_PSR_MIN_LINK_ENTRY_TIME_8_LINES (0<<25)
+#define EDP_PSR_MIN_LINK_ENTRY_TIME_4_LINES (1<<25)
+#define EDP_PSR_MIN_LINK_ENTRY_TIME_2_LINES (2<<25)
+#define EDP_PSR_MIN_LINK_ENTRY_TIME_0_LINES (3<<25)
+#define EDP_PSR_MAX_SLEEP_TIME_SHIFT 20
+#define EDP_PSR_SKIP_AUX_EXIT (1<<12)
+#define EDP_PSR_TP1_TP2_SEL (0<<11)
+#define EDP_PSR_TP1_TP3_SEL (1<<11)
+#define EDP_PSR_TP2_TP3_TIME_500us (0<<8)
+#define EDP_PSR_TP2_TP3_TIME_100us (1<<8)
+#define EDP_PSR_TP2_TP3_TIME_2500us (2<<8)
+#define EDP_PSR_TP2_TP3_TIME_0us (3<<8)
+#define EDP_PSR_TP1_TIME_500us (0<<4)
+#define EDP_PSR_TP1_TIME_100us (1<<4)
+#define EDP_PSR_TP1_TIME_2500us (2<<4)
+#define EDP_PSR_TP1_TIME_0us (3<<4)
+#define EDP_PSR_IDLE_FRAME_SHIFT 0
+
+#define EDP_PSR_AUX_CTL 0x64810
+#define EDP_PSR_AUX_DATA1 0x64814
+#define EDP_PSR_DPCD_COMMAND 0x80060000
+#define EDP_PSR_AUX_DATA2 0x64818
+#define EDP_PSR_DPCD_NORMAL_OPERATION (1<<24)
+#define EDP_PSR_AUX_DATA3 0x6481c
+#define EDP_PSR_AUX_DATA4 0x64820
+#define EDP_PSR_AUX_DATA5 0x64824
+
+#define EDP_PSR_STATUS_CTL 0x64840
+#define EDP_PSR_STATUS_STATE_MASK (7<<29)
+#define EDP_PSR_STATUS_STATE_IDLE (0<<29)
+#define EDP_PSR_STATUS_STATE_SRDONACK (1<<29)
+#define EDP_PSR_STATUS_STATE_SRDENT (2<<29)
+#define EDP_PSR_STATUS_STATE_BUFOFF (3<<29)
+#define EDP_PSR_STATUS_STATE_BUFON (4<<29)
+#define EDP_PSR_STATUS_STATE_AUXACK (5<<29)
+#define EDP_PSR_STATUS_STATE_SRDOFFACK (6<<29)
+#define EDP_PSR_STATUS_LINK_MASK (3<<26)
+#define EDP_PSR_STATUS_LINK_FULL_OFF (0<<26)
+#define EDP_PSR_STATUS_LINK_FULL_ON (1<<26)
+#define EDP_PSR_STATUS_LINK_STANDBY (2<<26)
+#define EDP_PSR_STATUS_MAX_SLEEP_TIMER_SHIFT 20
+#define EDP_PSR_STATUS_MAX_SLEEP_TIMER_MASK 0x1f
+#define EDP_PSR_STATUS_COUNT_SHIFT 16
+#define EDP_PSR_STATUS_COUNT_MASK 0xf
+#define EDP_PSR_STATUS_AUX_ERROR (1<<15)
+#define EDP_PSR_STATUS_AUX_SENDING (1<<12)
+#define EDP_PSR_STATUS_SENDING_IDLE (1<<9)
+#define EDP_PSR_STATUS_SENDING_TP2_TP3 (1<<8)
+#define EDP_PSR_STATUS_SENDING_TP1 (1<<4)
+#define EDP_PSR_STATUS_IDLE_MASK 0xf
+
+#define EDP_PSR_PERF_CNT 0x64844
+#define EDP_PSR_PERF_CNT_MASK 0xffffff
+
+#define EDP_PSR_DEBUG_CTL 0x64860
+#define EDP_PSR_DEBUG_MASK_LPSP (1<<27)
+#define EDP_PSR_DEBUG_MASK_MEMUP (1<<26)
+#define EDP_PSR_DEBUG_MASK_HPD (1<<25)
+
/* VGA port control */
#define ADPA 0x61100
#define PCH_ADPA 0xe1100
@@ -2048,6 +2119,7 @@
* (Haswell and newer) to see which VIDEO_DIP_DATA byte corresponds to each byte
* of the infoframe structure specified by CEA-861. */
#define VIDEO_DIP_DATA_SIZE 32
+#define VIDEO_DIP_VSC_DATA_SIZE 36
#define VIDEO_DIP_CTL 0x61170
/* Pre HSW: */
#define VIDEO_DIP_ENABLE (1 << 31)
@@ -2195,6 +2267,8 @@
#define BLC_PWM_CPU_CTL2 0x48250
#define BLC_PWM_CPU_CTL 0x48254
+#define HSW_BLC_PWM2_CTL 0x48350
+
/* PCH CTL1 is totally different, all but the below bits are reserved. CTL2 is
* like the normal CTL from gen4 and earlier. Hooray for confusing naming. */
#define BLC_PWM_PCH_CTL1 0xc8250
@@ -2203,6 +2277,12 @@
#define BLM_PCH_POLARITY (1 << 29)
#define BLC_PWM_PCH_CTL2 0xc8254
+#define UTIL_PIN_CTL 0x48400
+#define UTIL_PIN_ENABLE (1 << 31)
+
+#define PCH_GTC_CTL 0xe7000
+#define PCH_GTC_ENABLE (1 << 31)
+
/* TV port control */
#define TV_CTL 0x68000
/** Enables the TV encoder */
@@ -3721,6 +3801,9 @@
#define DE_PLANEA_FLIP_DONE_IVB (1<<3)
#define DE_PIPEA_VBLANK_IVB (1<<0)
+#define DE_PIPE_VBLANK_ILK(pipe) (1 << ((pipe * 8) + 7))
+#define DE_PIPE_VBLANK_IVB(pipe) (1 << (pipe * 5))
+
#define VLV_MASTER_IER 0x4400c /* Gunit master IER */
#define MASTER_INTERRUPT_ENABLE (1<<31)
@@ -4084,6 +4167,13 @@
#define HSW_TVIDEO_DIP_VSC_DATA(trans) \
_TRANSCODER(trans, HSW_VIDEO_DIP_VSC_DATA_A, HSW_VIDEO_DIP_VSC_DATA_B)
+#define HSW_STEREO_3D_CTL_A 0x70020
+#define S3D_ENABLE (1<<31)
+#define HSW_STEREO_3D_CTL_B 0x71020
+
+#define HSW_STEREO_3D_CTL(trans) \
+ _TRANSCODER(trans, HSW_STEREO_3D_CTL_A, HSW_STEREO_3D_CTL_A)
+
#define _PCH_TRANS_HTOTAL_B 0xe1000
#define _PCH_TRANS_HBLANK_B 0xe1004
#define _PCH_TRANS_HSYNC_B 0xe1008
@@ -4472,6 +4562,10 @@
#define GT_FIFO_FREE_ENTRIES 0x120008
#define GT_FIFO_NUM_RESERVED_ENTRIES 20
+#define HSW_IDICR 0x9008
+#define IDIHASHMSK(x) (((x) & 0x3f) << 16)
+#define HSW_EDRAM_PRESENT 0x120010
+
#define GEN6_UCGCTL1 0x9400
# define GEN6_BLBUNIT_CLOCK_GATE_DISABLE (1 << 5)
# define GEN6_CSUNIT_CLOCK_GATE_DISABLE (1 << 7)
@@ -4862,7 +4956,8 @@
#define SBI_SSCAUXDIV6 0x0610
#define SBI_SSCAUXDIV_FINALDIV2SEL(x) ((x)<<4)
#define SBI_DBUFF0 0x2a00
-#define SBI_DBUFF0_ENABLE (1<<0)
+#define SBI_GEN0 0x1f00
+#define SBI_GEN0_CFG_BUFFENABLE_DISABLE (1<<0)
/* LPT PIXCLK_GATE */
#define PIXCLK_GATE 0xC6020
@@ -4928,7 +5023,14 @@
#define LCPLL_CLK_FREQ_450 (0<<26)
#define LCPLL_CD_CLOCK_DISABLE (1<<25)
#define LCPLL_CD2X_CLOCK_DISABLE (1<<23)
+#define LCPLL_POWER_DOWN_ALLOW (1<<22)
#define LCPLL_CD_SOURCE_FCLK (1<<21)
+#define LCPLL_CD_SOURCE_FCLK_DONE (1<<19)
+
+#define D_COMP (MCHBAR_MIRROR_BASE_SNB + 0x5F0C)
+#define D_COMP_RCOMP_IN_PROGRESS (1<<9)
+#define D_COMP_COMP_FORCE (1<<8)
+#define D_COMP_COMP_DISABLE (1<<0)
/* Pipe WM_LINETIME - watermark line time */
#define PIPE_WM_LINETIME_A 0x45270
diff --git a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h
index 7d283b5..2933e2f 100644
--- a/drivers/gpu/drm/i915/i915_trace.h
+++ b/drivers/gpu/drm/i915/i915_trace.h
@@ -406,10 +406,12 @@ TRACE_EVENT(i915_flip_complete,
TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
);
-TRACE_EVENT(i915_reg_rw,
- TP_PROTO(bool write, u32 reg, u64 val, int len),
+TRACE_EVENT_CONDITION(i915_reg_rw,
+ TP_PROTO(bool write, u32 reg, u64 val, int len, bool trace),
- TP_ARGS(write, reg, val, len),
+ TP_ARGS(write, reg, val, len, trace),
+
+ TP_CONDITION(trace),
TP_STRUCT__entry(
__field(u64, val)
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index 3acec8c..0c0d4e8 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -613,6 +613,10 @@ intel_crt_detect(struct drm_connector *connector, bool force)
enum drm_connector_status status;
struct intel_load_detect_pipe tmp;
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s] force=%d\n",
+ connector->base.id, drm_get_connector_name(connector),
+ force);
+
if (I915_HAS_HOTPLUG(dev)) {
/* We can not rely on the HPD pin always being correctly wired
* up, for example many KVM do not pass it through, and so
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 324211a..931b4bb 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);
@@ -1117,6 +1118,7 @@ static void intel_enable_ddi(struct intel_encoder *intel_encoder)
intel_dp_stop_link_train(intel_dp);
ironlake_edp_backlight_on(intel_dp);
+ intel_edp_psr_enable(intel_dp);
}
if (intel_crtc->eld_vld && type != INTEL_OUTPUT_EDP) {
@@ -1147,6 +1149,7 @@ static void intel_disable_ddi(struct intel_encoder *intel_encoder)
if (type == INTEL_OUTPUT_EDP) {
struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+ intel_edp_psr_disable(intel_dp);
ironlake_edp_backlight_off(intel_dp);
}
}
@@ -1347,8 +1350,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 ae3dc5d..3e66f05 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -2274,6 +2274,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
}
intel_update_fbc(dev);
+ intel_edp_psr_update(dev);
mutex_unlock(&dev->struct_mutex);
intel_crtc_update_sarea_pos(crtc, x, y);
@@ -4162,6 +4163,30 @@ static int i9xx_misc_get_display_clock_speed(struct drm_device *dev)
return 200000;
}
+static int pnv_get_display_clock_speed(struct drm_device *dev)
+{
+ u16 gcfgc = 0;
+
+ pci_read_config_word(dev->pdev, GCFGC, &gcfgc);
+
+ switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
+ case GC_DISPLAY_CLOCK_267_MHZ_PNV:
+ return 267000;
+ case GC_DISPLAY_CLOCK_333_MHZ_PNV:
+ return 333000;
+ case GC_DISPLAY_CLOCK_444_MHZ_PNV:
+ return 444000;
+ case GC_DISPLAY_CLOCK_200_MHZ_PNV:
+ return 200000;
+ default:
+ DRM_ERROR("Unknown pnv display core clock 0x%04x\n", gcfgc);
+ case GC_DISPLAY_CLOCK_133_MHZ_PNV:
+ return 133000;
+ case GC_DISPLAY_CLOCK_167_MHZ_PNV:
+ return 167000;
+ }
+}
+
static int i915gm_get_display_clock_speed(struct drm_device *dev)
{
u16 gcfgc = 0;
@@ -4946,22 +4971,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 =
@@ -5166,74 +5188,37 @@ static void ironlake_init_pch_refclk(struct drm_device *dev)
BUG_ON(val != final);
}
-/* Sequence to enable CLKOUT_DP for FDI usage and configure PCH FDI I/O. */
-static void lpt_init_pch_refclk(struct drm_device *dev)
+static void lpt_reset_fdi_mphy(struct drm_i915_private *dev_priv)
{
- struct drm_i915_private *dev_priv = dev->dev_private;
- struct drm_mode_config *mode_config = &dev->mode_config;
- struct intel_encoder *encoder;
- bool has_vga = false;
- bool is_sdv = false;
- u32 tmp;
-
- list_for_each_entry(encoder, &mode_config->encoder_list, base.head) {
- switch (encoder->type) {
- case INTEL_OUTPUT_ANALOG:
- has_vga = true;
- break;
- }
- }
-
- if (!has_vga)
- return;
-
- mutex_lock(&dev_priv->dpio_lock);
-
- /* XXX: Rip out SDV support once Haswell ships for real. */
- if (IS_HASWELL(dev) && (dev->pci_device & 0xFF00) == 0x0C00)
- is_sdv = true;
+ uint32_t tmp;
- tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK);
- tmp &= ~SBI_SSCCTL_DISABLE;
- tmp |= SBI_SSCCTL_PATHALT;
- intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
+ tmp = I915_READ(SOUTH_CHICKEN2);
+ tmp |= FDI_MPHY_IOSFSB_RESET_CTL;
+ I915_WRITE(SOUTH_CHICKEN2, tmp);
- udelay(24);
+ if (wait_for_atomic_us(I915_READ(SOUTH_CHICKEN2) &
+ FDI_MPHY_IOSFSB_RESET_STATUS, 100))
+ DRM_ERROR("FDI mPHY reset assert timeout\n");
- tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK);
- tmp &= ~SBI_SSCCTL_PATHALT;
- intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
+ tmp = I915_READ(SOUTH_CHICKEN2);
+ tmp &= ~FDI_MPHY_IOSFSB_RESET_CTL;
+ I915_WRITE(SOUTH_CHICKEN2, tmp);
- if (!is_sdv) {
- tmp = I915_READ(SOUTH_CHICKEN2);
- tmp |= FDI_MPHY_IOSFSB_RESET_CTL;
- I915_WRITE(SOUTH_CHICKEN2, tmp);
-
- if (wait_for_atomic_us(I915_READ(SOUTH_CHICKEN2) &
- FDI_MPHY_IOSFSB_RESET_STATUS, 100))
- DRM_ERROR("FDI mPHY reset assert timeout\n");
-
- tmp = I915_READ(SOUTH_CHICKEN2);
- tmp &= ~FDI_MPHY_IOSFSB_RESET_CTL;
- I915_WRITE(SOUTH_CHICKEN2, tmp);
+ if (wait_for_atomic_us((I915_READ(SOUTH_CHICKEN2) &
+ FDI_MPHY_IOSFSB_RESET_STATUS) == 0, 100))
+ DRM_ERROR("FDI mPHY reset de-assert timeout\n");
+}
- if (wait_for_atomic_us((I915_READ(SOUTH_CHICKEN2) &
- FDI_MPHY_IOSFSB_RESET_STATUS) == 0,
- 100))
- DRM_ERROR("FDI mPHY reset de-assert timeout\n");
- }
+/* WaMPhyProgramming:hsw */
+static void lpt_program_fdi_mphy(struct drm_i915_private *dev_priv)
+{
+ uint32_t tmp;
tmp = intel_sbi_read(dev_priv, 0x8008, SBI_MPHY);
tmp &= ~(0xFF << 24);
tmp |= (0x12 << 24);
intel_sbi_write(dev_priv, 0x8008, tmp, SBI_MPHY);
- if (is_sdv) {
- tmp = intel_sbi_read(dev_priv, 0x800C, SBI_MPHY);
- tmp |= 0x7FFF;
- intel_sbi_write(dev_priv, 0x800C, tmp, SBI_MPHY);
- }
-
tmp = intel_sbi_read(dev_priv, 0x2008, SBI_MPHY);
tmp |= (1 << 11);
intel_sbi_write(dev_priv, 0x2008, tmp, SBI_MPHY);
@@ -5242,24 +5227,6 @@ static void lpt_init_pch_refclk(struct drm_device *dev)
tmp |= (1 << 11);
intel_sbi_write(dev_priv, 0x2108, tmp, SBI_MPHY);
- if (is_sdv) {
- tmp = intel_sbi_read(dev_priv, 0x2038, SBI_MPHY);
- tmp |= (0x3F << 24) | (0xF << 20) | (0xF << 16);
- intel_sbi_write(dev_priv, 0x2038, tmp, SBI_MPHY);
-
- tmp = intel_sbi_read(dev_priv, 0x2138, SBI_MPHY);
- tmp |= (0x3F << 24) | (0xF << 20) | (0xF << 16);
- intel_sbi_write(dev_priv, 0x2138, tmp, SBI_MPHY);
-
- tmp = intel_sbi_read(dev_priv, 0x203C, SBI_MPHY);
- tmp |= (0x3F << 8);
- intel_sbi_write(dev_priv, 0x203C, tmp, SBI_MPHY);
-
- tmp = intel_sbi_read(dev_priv, 0x213C, SBI_MPHY);
- tmp |= (0x3F << 8);
- intel_sbi_write(dev_priv, 0x213C, tmp, SBI_MPHY);
- }
-
tmp = intel_sbi_read(dev_priv, 0x206C, SBI_MPHY);
tmp |= (1 << 24) | (1 << 21) | (1 << 18);
intel_sbi_write(dev_priv, 0x206C, tmp, SBI_MPHY);
@@ -5268,17 +5235,15 @@ static void lpt_init_pch_refclk(struct drm_device *dev)
tmp |= (1 << 24) | (1 << 21) | (1 << 18);
intel_sbi_write(dev_priv, 0x216C, tmp, SBI_MPHY);
- if (!is_sdv) {
- tmp = intel_sbi_read(dev_priv, 0x2080, SBI_MPHY);
- tmp &= ~(7 << 13);
- tmp |= (5 << 13);
- intel_sbi_write(dev_priv, 0x2080, tmp, SBI_MPHY);
+ tmp = intel_sbi_read(dev_priv, 0x2080, SBI_MPHY);
+ tmp &= ~(7 << 13);
+ tmp |= (5 << 13);
+ intel_sbi_write(dev_priv, 0x2080, tmp, SBI_MPHY);
- tmp = intel_sbi_read(dev_priv, 0x2180, SBI_MPHY);
- tmp &= ~(7 << 13);
- tmp |= (5 << 13);
- intel_sbi_write(dev_priv, 0x2180, tmp, SBI_MPHY);
- }
+ tmp = intel_sbi_read(dev_priv, 0x2180, SBI_MPHY);
+ tmp &= ~(7 << 13);
+ tmp |= (5 << 13);
+ intel_sbi_write(dev_priv, 0x2180, tmp, SBI_MPHY);
tmp = intel_sbi_read(dev_priv, 0x208C, SBI_MPHY);
tmp &= ~0xFF;
@@ -5300,34 +5265,120 @@ static void lpt_init_pch_refclk(struct drm_device *dev)
tmp |= (0x1C << 16);
intel_sbi_write(dev_priv, 0x2198, tmp, SBI_MPHY);
- if (!is_sdv) {
- tmp = intel_sbi_read(dev_priv, 0x20C4, SBI_MPHY);
- tmp |= (1 << 27);
- intel_sbi_write(dev_priv, 0x20C4, tmp, SBI_MPHY);
+ tmp = intel_sbi_read(dev_priv, 0x20C4, SBI_MPHY);
+ tmp |= (1 << 27);
+ intel_sbi_write(dev_priv, 0x20C4, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x21C4, SBI_MPHY);
+ tmp |= (1 << 27);
+ intel_sbi_write(dev_priv, 0x21C4, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x20EC, SBI_MPHY);
+ tmp &= ~(0xF << 28);
+ tmp |= (4 << 28);
+ intel_sbi_write(dev_priv, 0x20EC, tmp, SBI_MPHY);
+
+ tmp = intel_sbi_read(dev_priv, 0x21EC, SBI_MPHY);
+ tmp &= ~(0xF << 28);
+ tmp |= (4 << 28);
+ intel_sbi_write(dev_priv, 0x21EC, tmp, SBI_MPHY);
+}
+
+/* Implements 3 different sequences from BSpec chapter "Display iCLK
+ * Programming" based on the parameters passed:
+ * - Sequence to enable CLKOUT_DP
+ * - Sequence to enable CLKOUT_DP without spread
+ * - Sequence to enable CLKOUT_DP for FDI usage and configure PCH FDI I/O
+ */
+static void lpt_enable_clkout_dp(struct drm_device *dev, bool with_spread,
+ bool with_fdi)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t reg, tmp;
+
+ if (WARN(with_fdi && !with_spread, "FDI requires downspread\n"))
+ with_spread = true;
+ if (WARN(dev_priv->pch_id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE &&
+ with_fdi, "LP PCH doesn't have FDI\n"))
+ with_fdi = false;
- tmp = intel_sbi_read(dev_priv, 0x21C4, SBI_MPHY);
- tmp |= (1 << 27);
- intel_sbi_write(dev_priv, 0x21C4, tmp, SBI_MPHY);
+ mutex_lock(&dev_priv->dpio_lock);
- tmp = intel_sbi_read(dev_priv, 0x20EC, SBI_MPHY);
- tmp &= ~(0xF << 28);
- tmp |= (4 << 28);
- intel_sbi_write(dev_priv, 0x20EC, tmp, SBI_MPHY);
+ tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK);
+ tmp &= ~SBI_SSCCTL_DISABLE;
+ tmp |= SBI_SSCCTL_PATHALT;
+ intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
+
+ udelay(24);
- tmp = intel_sbi_read(dev_priv, 0x21EC, SBI_MPHY);
- tmp &= ~(0xF << 28);
- tmp |= (4 << 28);
- intel_sbi_write(dev_priv, 0x21EC, tmp, SBI_MPHY);
+ if (with_spread) {
+ tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK);
+ tmp &= ~SBI_SSCCTL_PATHALT;
+ intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
+
+ if (with_fdi) {
+ lpt_reset_fdi_mphy(dev_priv);
+ lpt_program_fdi_mphy(dev_priv);
+ }
}
- /* ULT uses SBI_GEN0, but ULT doesn't have VGA, so we don't care. */
- tmp = intel_sbi_read(dev_priv, SBI_DBUFF0, SBI_ICLK);
- tmp |= SBI_DBUFF0_ENABLE;
- intel_sbi_write(dev_priv, SBI_DBUFF0, tmp, SBI_ICLK);
+ reg = (dev_priv->pch_id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE) ?
+ SBI_GEN0 : SBI_DBUFF0;
+ tmp = intel_sbi_read(dev_priv, reg, SBI_ICLK);
+ tmp |= SBI_GEN0_CFG_BUFFENABLE_DISABLE;
+ intel_sbi_write(dev_priv, reg, tmp, SBI_ICLK);
+
+ mutex_unlock(&dev_priv->dpio_lock);
+}
+
+/* Sequence to disable CLKOUT_DP */
+static void lpt_disable_clkout_dp(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t reg, tmp;
+
+ mutex_lock(&dev_priv->dpio_lock);
+
+ reg = (dev_priv->pch_id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE) ?
+ SBI_GEN0 : SBI_DBUFF0;
+ tmp = intel_sbi_read(dev_priv, reg, SBI_ICLK);
+ tmp &= ~SBI_GEN0_CFG_BUFFENABLE_DISABLE;
+ intel_sbi_write(dev_priv, reg, tmp, SBI_ICLK);
+
+ tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK);
+ if (!(tmp & SBI_SSCCTL_DISABLE)) {
+ if (!(tmp & SBI_SSCCTL_PATHALT)) {
+ tmp |= SBI_SSCCTL_PATHALT;
+ intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
+ udelay(32);
+ }
+ tmp |= SBI_SSCCTL_DISABLE;
+ intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
+ }
mutex_unlock(&dev_priv->dpio_lock);
}
+static void lpt_init_pch_refclk(struct drm_device *dev)
+{
+ struct drm_mode_config *mode_config = &dev->mode_config;
+ struct intel_encoder *encoder;
+ bool has_vga = false;
+
+ list_for_each_entry(encoder, &mode_config->encoder_list, base.head) {
+ switch (encoder->type) {
+ case INTEL_OUTPUT_ANALOG:
+ has_vga = true;
+ break;
+ }
+ }
+
+ if (has_vga)
+ lpt_enable_clkout_dp(dev, true, true);
+ else
+ lpt_disable_clkout_dp(dev);
+}
+
/*
* Initialize reference clocks when the driver loads
*/
@@ -5895,6 +5946,142 @@ static bool ironlake_get_pipe_config(struct intel_crtc *crtc,
return true;
}
+static void assert_can_disable_lcpll(struct drm_i915_private *dev_priv)
+{
+ struct drm_device *dev = dev_priv->dev;
+ struct intel_ddi_plls *plls = &dev_priv->ddi_plls;
+ struct intel_crtc *crtc;
+ unsigned long irqflags;
+ uint32_t val, pch_hpd_mask;
+
+ pch_hpd_mask = SDE_PORTB_HOTPLUG_CPT | SDE_PORTC_HOTPLUG_CPT;
+ if (!(dev_priv->pch_id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE))
+ pch_hpd_mask |= SDE_PORTD_HOTPLUG_CPT | SDE_CRT_HOTPLUG_CPT;
+
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, base.head)
+ WARN(crtc->base.enabled, "CRTC for pipe %c enabled\n",
+ pipe_name(crtc->pipe));
+
+ WARN(I915_READ(HSW_PWR_WELL_DRIVER), "Power well on\n");
+ WARN(plls->spll_refcount, "SPLL enabled\n");
+ WARN(plls->wrpll1_refcount, "WRPLL1 enabled\n");
+ WARN(plls->wrpll2_refcount, "WRPLL2 enabled\n");
+ WARN(I915_READ(PCH_PP_STATUS) & PP_ON, "Panel power on\n");
+ WARN(I915_READ(BLC_PWM_CPU_CTL2) & BLM_PWM_ENABLE,
+ "CPU PWM1 enabled\n");
+ WARN(I915_READ(HSW_BLC_PWM2_CTL) & BLM_PWM_ENABLE,
+ "CPU PWM2 enabled\n");
+ WARN(I915_READ(BLC_PWM_PCH_CTL1) & BLM_PCH_PWM_ENABLE,
+ "PCH PWM1 enabled\n");
+ WARN(I915_READ(UTIL_PIN_CTL) & UTIL_PIN_ENABLE,
+ "Utility pin enabled\n");
+ WARN(I915_READ(PCH_GTC_CTL) & PCH_GTC_ENABLE, "PCH GTC enabled\n");
+
+ spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
+ val = I915_READ(DEIMR);
+ WARN((val & ~DE_PCH_EVENT_IVB) != val,
+ "Unexpected DEIMR bits enabled: 0x%x\n", val);
+ val = I915_READ(SDEIMR);
+ WARN((val & ~pch_hpd_mask) != val,
+ "Unexpected SDEIMR bits enabled: 0x%x\n", val);
+ spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
+}
+
+/*
+ * This function implements pieces of two sequences from BSpec:
+ * - Sequence for display software to disable LCPLL
+ * - Sequence for display software to allow package C8+
+ * The steps implemented here are just the steps that actually touch the LCPLL
+ * register. Callers should take care of disabling all the display engine
+ * functions, doing the mode unset, fixing interrupts, etc.
+ */
+void hsw_disable_lcpll(struct drm_i915_private *dev_priv,
+ bool switch_to_fclk, bool allow_power_down)
+{
+ uint32_t val;
+
+ assert_can_disable_lcpll(dev_priv);
+
+ val = I915_READ(LCPLL_CTL);
+
+ if (switch_to_fclk) {
+ val |= LCPLL_CD_SOURCE_FCLK;
+ I915_WRITE(LCPLL_CTL, val);
+
+ if (wait_for_atomic_us(I915_READ(LCPLL_CTL) &
+ LCPLL_CD_SOURCE_FCLK_DONE, 1))
+ DRM_ERROR("Switching to FCLK failed\n");
+
+ val = I915_READ(LCPLL_CTL);
+ }
+
+ val |= LCPLL_PLL_DISABLE;
+ I915_WRITE(LCPLL_CTL, val);
+ POSTING_READ(LCPLL_CTL);
+
+ if (wait_for((I915_READ(LCPLL_CTL) & LCPLL_PLL_LOCK) == 0, 1))
+ DRM_ERROR("LCPLL still locked\n");
+
+ val = I915_READ(D_COMP);
+ val |= D_COMP_COMP_DISABLE;
+ I915_WRITE(D_COMP, val);
+ POSTING_READ(D_COMP);
+ ndelay(100);
+
+ if (wait_for((I915_READ(D_COMP) & D_COMP_RCOMP_IN_PROGRESS) == 0, 1))
+ DRM_ERROR("D_COMP RCOMP still in progress\n");
+
+ if (allow_power_down) {
+ val = I915_READ(LCPLL_CTL);
+ val |= LCPLL_POWER_DOWN_ALLOW;
+ I915_WRITE(LCPLL_CTL, val);
+ POSTING_READ(LCPLL_CTL);
+ }
+}
+
+/*
+ * Fully restores LCPLL, disallowing power down and switching back to LCPLL
+ * source.
+ */
+void hsw_restore_lcpll(struct drm_i915_private *dev_priv)
+{
+ uint32_t val;
+
+ val = I915_READ(LCPLL_CTL);
+
+ if ((val & (LCPLL_PLL_LOCK | LCPLL_PLL_DISABLE | LCPLL_CD_SOURCE_FCLK |
+ LCPLL_POWER_DOWN_ALLOW)) == LCPLL_PLL_LOCK)
+ return;
+
+ if (val & LCPLL_POWER_DOWN_ALLOW) {
+ val &= ~LCPLL_POWER_DOWN_ALLOW;
+ I915_WRITE(LCPLL_CTL, val);
+ }
+
+ val = I915_READ(D_COMP);
+ val |= D_COMP_COMP_FORCE;
+ val &= ~D_COMP_COMP_DISABLE;
+ I915_WRITE(D_COMP, val);
+ I915_READ(D_COMP);
+
+ val = I915_READ(LCPLL_CTL);
+ val &= ~LCPLL_PLL_DISABLE;
+ I915_WRITE(LCPLL_CTL, val);
+
+ if (wait_for(I915_READ(LCPLL_CTL) & LCPLL_PLL_LOCK, 5))
+ DRM_ERROR("LCPLL not locked yet\n");
+
+ if (val & LCPLL_CD_SOURCE_FCLK) {
+ val = I915_READ(LCPLL_CTL);
+ val &= ~LCPLL_CD_SOURCE_FCLK;
+ I915_WRITE(LCPLL_CTL, val);
+
+ if (wait_for_atomic_us((I915_READ(LCPLL_CTL) &
+ LCPLL_CD_SOURCE_FCLK_DONE) == 0, 1))
+ DRM_ERROR("Switching back to LCPLL failed\n");
+ }
+}
+
static void haswell_modeset_global_resources(struct drm_device *dev)
{
bool enable = false;
@@ -8434,6 +8621,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);
@@ -8658,15 +8847,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;
@@ -8679,10 +8873,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) {
@@ -9437,9 +9629,12 @@ static void intel_init_display(struct drm_device *dev)
else if (IS_I915G(dev))
dev_priv->display.get_display_clock_speed =
i915_get_display_clock_speed;
- else if (IS_I945GM(dev) || IS_845G(dev) || IS_PINEVIEW_M(dev))
+ else if (IS_I945GM(dev) || IS_845G(dev))
dev_priv->display.get_display_clock_speed =
i9xx_misc_get_display_clock_speed;
+ else if (IS_PINEVIEW(dev))
+ dev_priv->display.get_display_clock_speed =
+ pnv_get_display_clock_speed;
else if (IS_I915GM(dev))
dev_priv->display.get_display_clock_speed =
i915gm_get_display_clock_speed;
@@ -9536,6 +9731,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;
@@ -9605,6 +9811,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)
@@ -9955,8 +10166,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,
@@ -10016,6 +10227,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);
@@ -10047,6 +10259,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
@@ -10256,8 +10480,7 @@ intel_display_capture_error_state(struct drm_device *dev)
* well was on, so here we have to clear the FPGA_DBG_RM_NOCLAIM bit to
* prevent the next I915_WRITE from detecting it and printing an error
* message. */
- if (HAS_POWER_WELL(dev))
- I915_WRITE_NOTRACE(FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
+ intel_uncore_clear_errors(dev);
return error;
}
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 7db2cd7..d0c3f9b 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -276,29 +276,13 @@ intel_dp_aux_wait_done(struct intel_dp *intel_dp, bool has_aux_irq)
return status;
}
-static int
-intel_dp_aux_ch(struct intel_dp *intel_dp,
- uint8_t *send, int send_bytes,
- uint8_t *recv, int recv_size)
+static uint32_t get_aux_clock_divider(struct intel_dp *intel_dp,
+ int index)
{
struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
struct drm_device *dev = intel_dig_port->base.base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- uint32_t ch_ctl = intel_dp->aux_ch_ctl_reg;
- uint32_t ch_data = ch_ctl + 4;
- int i, ret, recv_bytes;
- uint32_t status;
- uint32_t aux_clock_divider;
- int try, precharge;
- bool has_aux_irq = INTEL_INFO(dev)->gen >= 5 && !IS_VALLEYVIEW(dev);
- /* dp aux is extremely sensitive to irq latency, hence request the
- * lowest possible wakeup latency and so prevent the cpu from going into
- * deep sleep states.
- */
- pm_qos_update_request(&dev_priv->pm_qos, 0);
-
- intel_dp_check_edp(intel_dp);
/* The clock divider is based off the hrawclk,
* and would like to run at 2MHz. So, take the
* hrawclk value and divide by 2 and use that
@@ -307,23 +291,53 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
* clock divider.
*/
if (IS_VALLEYVIEW(dev)) {
- aux_clock_divider = 100;
+ return index ? 0 : 100;
} else if (intel_dig_port->port == PORT_A) {
+ if (index)
+ return 0;
if (HAS_DDI(dev))
- aux_clock_divider = DIV_ROUND_CLOSEST(
- intel_ddi_get_cdclk_freq(dev_priv), 2000);
+ return DIV_ROUND_CLOSEST(intel_ddi_get_cdclk_freq(dev_priv), 2000);
else if (IS_GEN6(dev) || IS_GEN7(dev))
- aux_clock_divider = 200; /* SNB & IVB eDP input clock at 400Mhz */
+ return 200; /* SNB & IVB eDP input clock at 400Mhz */
else
- aux_clock_divider = 225; /* eDP input clock at 450Mhz */
+ return 225; /* eDP input clock at 450Mhz */
} else if (dev_priv->pch_id == INTEL_PCH_LPT_DEVICE_ID_TYPE) {
/* Workaround for non-ULT HSW */
- aux_clock_divider = 74;
+ switch (index) {
+ case 0: return 63;
+ case 1: return 72;
+ default: return 0;
+ }
} else if (HAS_PCH_SPLIT(dev)) {
- aux_clock_divider = DIV_ROUND_UP(intel_pch_rawclk(dev), 2);
+ return index ? 0 : DIV_ROUND_UP(intel_pch_rawclk(dev), 2);
} else {
- aux_clock_divider = intel_hrawclk(dev) / 2;
+ return index ? 0 :intel_hrawclk(dev) / 2;
}
+}
+
+static int
+intel_dp_aux_ch(struct intel_dp *intel_dp,
+ uint8_t *send, int send_bytes,
+ uint8_t *recv, int recv_size)
+{
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+ struct drm_device *dev = intel_dig_port->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t ch_ctl = intel_dp->aux_ch_ctl_reg;
+ uint32_t ch_data = ch_ctl + 4;
+ uint32_t aux_clock_divider;
+ int i, ret, recv_bytes;
+ uint32_t status;
+ int try, precharge, clock = 0;
+ bool has_aux_irq = INTEL_INFO(dev)->gen >= 5 && !IS_VALLEYVIEW(dev);
+
+ /* dp aux is extremely sensitive to irq latency, hence request the
+ * lowest possible wakeup latency and so prevent the cpu from going into
+ * deep sleep states.
+ */
+ pm_qos_update_request(&dev_priv->pm_qos, 0);
+
+ intel_dp_check_edp(intel_dp);
if (IS_GEN6(dev))
precharge = 3;
@@ -345,37 +359,41 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
goto out;
}
- /* Must try at least 3 times according to DP spec */
- for (try = 0; try < 5; try++) {
- /* Load the send data into the aux channel data registers */
- for (i = 0; i < send_bytes; i += 4)
- I915_WRITE(ch_data + i,
- pack_aux(send + i, send_bytes - i));
-
- /* Send the command and wait for it to complete */
- I915_WRITE(ch_ctl,
- DP_AUX_CH_CTL_SEND_BUSY |
- (has_aux_irq ? DP_AUX_CH_CTL_INTERRUPT : 0) |
- DP_AUX_CH_CTL_TIME_OUT_400us |
- (send_bytes << DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT) |
- (precharge << DP_AUX_CH_CTL_PRECHARGE_2US_SHIFT) |
- (aux_clock_divider << DP_AUX_CH_CTL_BIT_CLOCK_2X_SHIFT) |
- DP_AUX_CH_CTL_DONE |
- DP_AUX_CH_CTL_TIME_OUT_ERROR |
- DP_AUX_CH_CTL_RECEIVE_ERROR);
-
- status = intel_dp_aux_wait_done(intel_dp, has_aux_irq);
-
- /* Clear done status and any errors */
- I915_WRITE(ch_ctl,
- status |
- DP_AUX_CH_CTL_DONE |
- DP_AUX_CH_CTL_TIME_OUT_ERROR |
- DP_AUX_CH_CTL_RECEIVE_ERROR);
-
- if (status & (DP_AUX_CH_CTL_TIME_OUT_ERROR |
- DP_AUX_CH_CTL_RECEIVE_ERROR))
- continue;
+ while ((aux_clock_divider = get_aux_clock_divider(intel_dp, clock++))) {
+ /* Must try at least 3 times according to DP spec */
+ for (try = 0; try < 5; try++) {
+ /* Load the send data into the aux channel data registers */
+ for (i = 0; i < send_bytes; i += 4)
+ I915_WRITE(ch_data + i,
+ pack_aux(send + i, send_bytes - i));
+
+ /* Send the command and wait for it to complete */
+ I915_WRITE(ch_ctl,
+ DP_AUX_CH_CTL_SEND_BUSY |
+ (has_aux_irq ? DP_AUX_CH_CTL_INTERRUPT : 0) |
+ DP_AUX_CH_CTL_TIME_OUT_400us |
+ (send_bytes << DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT) |
+ (precharge << DP_AUX_CH_CTL_PRECHARGE_2US_SHIFT) |
+ (aux_clock_divider << DP_AUX_CH_CTL_BIT_CLOCK_2X_SHIFT) |
+ DP_AUX_CH_CTL_DONE |
+ DP_AUX_CH_CTL_TIME_OUT_ERROR |
+ DP_AUX_CH_CTL_RECEIVE_ERROR);
+
+ status = intel_dp_aux_wait_done(intel_dp, has_aux_irq);
+
+ /* Clear done status and any errors */
+ I915_WRITE(ch_ctl,
+ status |
+ DP_AUX_CH_CTL_DONE |
+ DP_AUX_CH_CTL_TIME_OUT_ERROR |
+ DP_AUX_CH_CTL_RECEIVE_ERROR);
+
+ if (status & (DP_AUX_CH_CTL_TIME_OUT_ERROR |
+ DP_AUX_CH_CTL_RECEIVE_ERROR))
+ continue;
+ if (status & DP_AUX_CH_CTL_DONE)
+ break;
+ }
if (status & DP_AUX_CH_CTL_DONE)
break;
}
@@ -710,8 +728,11 @@ intel_dp_compute_config(struct intel_encoder *encoder,
/* Walk through all bpp values. Luckily they're all nicely spaced with 2
* bpc in between. */
bpp = pipe_config->pipe_bpp;
- if (is_edp(intel_dp) && dev_priv->vbt.edp_bpp)
+ if (is_edp(intel_dp) && dev_priv->vbt.edp_bpp) {
+ DRM_DEBUG_KMS("clamping bpp for eDP panel to BIOS-provided %i\n",
+ dev_priv->vbt.edp_bpp);
bpp = min_t(int, bpp, dev_priv->vbt.edp_bpp);
+ }
for (; bpp >= 6*3; bpp -= 2*3) {
mode_rate = intel_dp_link_required(adjusted_mode->clock, bpp);
@@ -1369,6 +1390,268 @@ static void intel_dp_get_config(struct intel_encoder *encoder,
}
}
+static bool is_edp_psr(struct intel_dp *intel_dp)
+{
+ return is_edp(intel_dp) &&
+ intel_dp->psr_dpcd[0] & DP_PSR_IS_SUPPORTED;
+}
+
+static bool intel_edp_is_psr_enabled(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (!IS_HASWELL(dev))
+ return false;
+
+ return I915_READ(EDP_PSR_CTL) & EDP_PSR_ENABLE;
+}
+
+static void intel_edp_psr_write_vsc(struct intel_dp *intel_dp,
+ struct edp_vsc_psr *vsc_psr)
+{
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+ struct drm_device *dev = dig_port->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *crtc = to_intel_crtc(dig_port->base.base.crtc);
+ u32 ctl_reg = HSW_TVIDEO_DIP_CTL(crtc->config.cpu_transcoder);
+ u32 data_reg = HSW_TVIDEO_DIP_VSC_DATA(crtc->config.cpu_transcoder);
+ uint32_t *data = (uint32_t *) vsc_psr;
+ unsigned int i;
+
+ /* As per BSPec (Pipe Video Data Island Packet), we need to disable
+ the video DIP being updated before program video DIP data buffer
+ registers for DIP being updated. */
+ I915_WRITE(ctl_reg, 0);
+ POSTING_READ(ctl_reg);
+
+ for (i = 0; i < VIDEO_DIP_VSC_DATA_SIZE; i += 4) {
+ if (i < sizeof(struct edp_vsc_psr))
+ I915_WRITE(data_reg + i, *data++);
+ else
+ I915_WRITE(data_reg + i, 0);
+ }
+
+ I915_WRITE(ctl_reg, VIDEO_DIP_ENABLE_VSC_HSW);
+ POSTING_READ(ctl_reg);
+}
+
+static void intel_edp_psr_setup(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct edp_vsc_psr psr_vsc;
+
+ if (intel_dp->psr_setup_done)
+ return;
+
+ /* Prepare VSC packet as per EDP 1.3 spec, Table 3.10 */
+ memset(&psr_vsc, 0, sizeof(psr_vsc));
+ psr_vsc.sdp_header.HB0 = 0;
+ psr_vsc.sdp_header.HB1 = 0x7;
+ psr_vsc.sdp_header.HB2 = 0x2;
+ psr_vsc.sdp_header.HB3 = 0x8;
+ intel_edp_psr_write_vsc(intel_dp, &psr_vsc);
+
+ /* Avoid continuous PSR exit by masking memup and hpd */
+ I915_WRITE(EDP_PSR_DEBUG_CTL, EDP_PSR_DEBUG_MASK_MEMUP |
+ EDP_PSR_DEBUG_MASK_HPD);
+
+ intel_dp->psr_setup_done = true;
+}
+
+static void intel_edp_psr_enable_sink(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t aux_clock_divider = get_aux_clock_divider(intel_dp, 0);
+ int precharge = 0x3;
+ int msg_size = 5; /* Header(4) + Message(1) */
+
+ /* Enable PSR in sink */
+ if (intel_dp->psr_dpcd[1] & DP_PSR_NO_TRAIN_ON_EXIT)
+ intel_dp_aux_native_write_1(intel_dp, DP_PSR_EN_CFG,
+ DP_PSR_ENABLE &
+ ~DP_PSR_MAIN_LINK_ACTIVE);
+ else
+ intel_dp_aux_native_write_1(intel_dp, DP_PSR_EN_CFG,
+ DP_PSR_ENABLE |
+ DP_PSR_MAIN_LINK_ACTIVE);
+
+ /* Setup AUX registers */
+ I915_WRITE(EDP_PSR_AUX_DATA1, EDP_PSR_DPCD_COMMAND);
+ I915_WRITE(EDP_PSR_AUX_DATA2, EDP_PSR_DPCD_NORMAL_OPERATION);
+ I915_WRITE(EDP_PSR_AUX_CTL,
+ DP_AUX_CH_CTL_TIME_OUT_400us |
+ (msg_size << DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT) |
+ (precharge << DP_AUX_CH_CTL_PRECHARGE_2US_SHIFT) |
+ (aux_clock_divider << DP_AUX_CH_CTL_BIT_CLOCK_2X_SHIFT));
+}
+
+static void intel_edp_psr_enable_source(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t max_sleep_time = 0x1f;
+ uint32_t idle_frames = 1;
+ uint32_t val = 0x0;
+
+ if (intel_dp->psr_dpcd[1] & DP_PSR_NO_TRAIN_ON_EXIT) {
+ val |= EDP_PSR_LINK_STANDBY;
+ val |= EDP_PSR_TP2_TP3_TIME_0us;
+ val |= EDP_PSR_TP1_TIME_0us;
+ val |= EDP_PSR_SKIP_AUX_EXIT;
+ } else
+ val |= EDP_PSR_LINK_DISABLE;
+
+ I915_WRITE(EDP_PSR_CTL, val |
+ EDP_PSR_MIN_LINK_ENTRY_TIME_8_LINES |
+ max_sleep_time << EDP_PSR_MAX_SLEEP_TIME_SHIFT |
+ idle_frames << EDP_PSR_IDLE_FRAME_SHIFT |
+ EDP_PSR_ENABLE);
+}
+
+static bool intel_edp_psr_match_conditions(struct intel_dp *intel_dp)
+{
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+ struct drm_device *dev = dig_port->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc = dig_port->base.base.crtc;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct drm_i915_gem_object *obj = to_intel_framebuffer(crtc->fb)->obj;
+ struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base;
+
+ if (!IS_HASWELL(dev)) {
+ DRM_DEBUG_KMS("PSR not supported on this platform\n");
+ dev_priv->no_psr_reason = PSR_NO_SOURCE;
+ return false;
+ }
+
+ if ((intel_encoder->type != INTEL_OUTPUT_EDP) ||
+ (dig_port->port != PORT_A)) {
+ DRM_DEBUG_KMS("HSW ties PSR to DDI A (eDP)\n");
+ dev_priv->no_psr_reason = PSR_HSW_NOT_DDIA;
+ return false;
+ }
+
+ if (!is_edp_psr(intel_dp)) {
+ DRM_DEBUG_KMS("PSR not supported by this panel\n");
+ dev_priv->no_psr_reason = PSR_NO_SINK;
+ return false;
+ }
+
+ if (!i915_enable_psr) {
+ DRM_DEBUG_KMS("PSR disable by flag\n");
+ dev_priv->no_psr_reason = PSR_MODULE_PARAM;
+ return false;
+ }
+
+ crtc = dig_port->base.base.crtc;
+ if (crtc == NULL) {
+ DRM_DEBUG_KMS("crtc not active for PSR\n");
+ dev_priv->no_psr_reason = PSR_CRTC_NOT_ACTIVE;
+ return false;
+ }
+
+ intel_crtc = to_intel_crtc(crtc);
+ if (!intel_crtc->active || !crtc->fb || !crtc->mode.clock) {
+ DRM_DEBUG_KMS("crtc not active for PSR\n");
+ dev_priv->no_psr_reason = PSR_CRTC_NOT_ACTIVE;
+ return false;
+ }
+
+ obj = to_intel_framebuffer(crtc->fb)->obj;
+ if (obj->tiling_mode != I915_TILING_X ||
+ obj->fence_reg == I915_FENCE_REG_NONE) {
+ DRM_DEBUG_KMS("PSR condition failed: fb not tiled or fenced\n");
+ dev_priv->no_psr_reason = PSR_NOT_TILED;
+ return false;
+ }
+
+ if (I915_READ(SPRCTL(intel_crtc->pipe)) & SPRITE_ENABLE) {
+ DRM_DEBUG_KMS("PSR condition failed: Sprite is Enabled\n");
+ dev_priv->no_psr_reason = PSR_SPRITE_ENABLED;
+ return false;
+ }
+
+ if (I915_READ(HSW_STEREO_3D_CTL(intel_crtc->config.cpu_transcoder)) &
+ S3D_ENABLE) {
+ DRM_DEBUG_KMS("PSR condition failed: Stereo 3D is Enabled\n");
+ dev_priv->no_psr_reason = PSR_S3D_ENABLED;
+ return false;
+ }
+
+ if (crtc->mode.flags & DRM_MODE_FLAG_INTERLACE) {
+ DRM_DEBUG_KMS("PSR condition failed: Interlaced is Enabled\n");
+ dev_priv->no_psr_reason = PSR_INTERLACED_ENABLED;
+ return false;
+ }
+
+ return true;
+}
+
+static void intel_edp_psr_do_enable(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
+
+ if (!intel_edp_psr_match_conditions(intel_dp) ||
+ intel_edp_is_psr_enabled(dev))
+ return;
+
+ /* Setup PSR once */
+ intel_edp_psr_setup(intel_dp);
+
+ /* Enable PSR on the panel */
+ intel_edp_psr_enable_sink(intel_dp);
+
+ /* Enable PSR on the host */
+ intel_edp_psr_enable_source(intel_dp);
+}
+
+void intel_edp_psr_enable(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
+
+ if (intel_edp_psr_match_conditions(intel_dp) &&
+ !intel_edp_is_psr_enabled(dev))
+ intel_edp_psr_do_enable(intel_dp);
+}
+
+void intel_edp_psr_disable(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp_to_dev(intel_dp);
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (!intel_edp_is_psr_enabled(dev))
+ return;
+
+ I915_WRITE(EDP_PSR_CTL, I915_READ(EDP_PSR_CTL) & ~EDP_PSR_ENABLE);
+
+ /* Wait till PSR is idle */
+ if (_wait_for((I915_READ(EDP_PSR_STATUS_CTL) &
+ EDP_PSR_STATUS_STATE_MASK) == 0, 2000, 10))
+ DRM_ERROR("Timed out waiting for PSR Idle State\n");
+}
+
+void intel_edp_psr_update(struct drm_device *dev)
+{
+ struct intel_encoder *encoder;
+ struct intel_dp *intel_dp = NULL;
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head)
+ if (encoder->type == INTEL_OUTPUT_EDP) {
+ intel_dp = enc_to_intel_dp(&encoder->base);
+
+ if (!is_edp_psr(intel_dp))
+ return;
+
+ if (!intel_edp_psr_match_conditions(intel_dp))
+ intel_edp_psr_disable(intel_dp);
+ else
+ if (!intel_edp_is_psr_enabled(dev))
+ intel_edp_psr_do_enable(intel_dp);
+ }
+}
+
static void intel_disable_dp(struct intel_encoder *encoder)
{
struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
@@ -2282,6 +2565,13 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
if (intel_dp->dpcd[DP_DPCD_REV] == 0)
return false; /* DPCD not present */
+ /* Check if the panel supports PSR */
+ memset(intel_dp->psr_dpcd, 0, sizeof(intel_dp->psr_dpcd));
+ intel_dp_aux_native_read_retry(intel_dp, DP_PSR_SUPPORT,
+ intel_dp->psr_dpcd,
+ sizeof(intel_dp->psr_dpcd));
+ if (is_edp_psr(intel_dp))
+ DRM_DEBUG_KMS("Detected EDP PSR Panel.\n");
if (!(intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] &
DP_DWN_STRM_PORT_PRESENT))
return true; /* native DP sink */
@@ -2549,6 +2839,9 @@ intel_dp_detect(struct drm_connector *connector, bool force)
enum drm_connector_status status;
struct edid *edid = NULL;
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
+ connector->base.id, drm_get_connector_name(connector));
+
intel_dp->has_audio = false;
if (HAS_PCH_SPLIT(dev))
@@ -3173,6 +3466,8 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
WARN(error, "intel_dp_i2c_init failed with error %d for port %c\n",
error, port_name(port));
+ intel_dp->psr_setup_done = false;
+
if (!intel_edp_init_connector(intel_dp, intel_connector)) {
i2c_del_adapter(&intel_dp->adapter);
if (is_edp(intel_dp)) {
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 5dfc1a0..d9f50e3 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -487,6 +487,7 @@ struct intel_dp {
uint8_t link_bw;
uint8_t lane_count;
uint8_t dpcd[DP_RECEIVER_CAP_SIZE];
+ uint8_t psr_dpcd[EDP_PSR_RECEIVER_CAP_SIZE];
uint8_t downstream_ports[DP_MAX_DOWNSTREAM_PORTS];
struct i2c_adapter adapter;
struct i2c_algo_dp_aux_data algo;
@@ -498,13 +499,14 @@ struct intel_dp {
int backlight_off_delay;
struct delayed_work panel_vdd_work;
bool want_panel_vdd;
+ bool psr_setup_done;
struct intel_connector *attached_connector;
};
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;
};
@@ -804,7 +806,6 @@ extern void intel_init_power_well(struct drm_device *dev);
extern void intel_set_power_well(struct drm_device *dev, bool enable);
extern void intel_enable_gt_powersave(struct drm_device *dev);
extern void intel_disable_gt_powersave(struct drm_device *dev);
-extern void gen6_gt_check_fifodbg(struct drm_i915_private *dev_priv);
extern void ironlake_teardown_rc6(struct drm_device *dev);
extern bool intel_ddi_get_hw_state(struct intel_encoder *encoder,
@@ -833,4 +834,11 @@ extern bool intel_set_pch_fifo_underrun_reporting(struct drm_device *dev,
enum transcoder pch_transcoder,
bool enable);
+extern void intel_edp_psr_enable(struct intel_dp *intel_dp);
+extern void intel_edp_psr_disable(struct intel_dp *intel_dp);
+extern void intel_edp_psr_update(struct drm_device *dev);
+extern void hsw_disable_lcpll(struct drm_i915_private *dev_priv,
+ bool switch_to_fclk, bool allow_power_down);
+extern void hsw_restore_lcpll(struct drm_i915_private *dev_priv);
+
#endif /* __INTEL_DRV_H__ */
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
index cbbc49d..8b4ad27 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -332,6 +332,8 @@ static enum drm_connector_status
intel_dvo_detect(struct drm_connector *connector, bool force)
{
struct intel_dvo *intel_dvo = intel_attached_dvo(connector);
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
+ connector->base.id, drm_get_connector_name(connector));
return intel_dvo->dev.dev_ops->detect(&intel_dvo->dev);
}
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 98df2a0..af18da7 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -866,6 +866,9 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
struct edid *edid;
enum drm_connector_status status = connector_status_disconnected;
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
+ connector->base.id, drm_get_connector_name(connector));
+
intel_hdmi->has_hdmi_sink = false;
intel_hdmi->has_audio = false;
intel_hdmi->rgb_quant_range_selectable = false;
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index a0745d1..2110df2 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.
@@ -297,14 +304,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
@@ -339,6 +343,9 @@ intel_lvds_detect(struct drm_connector *connector, bool force)
struct drm_device *dev = connector->dev;
enum drm_connector_status status;
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
+ connector->base.id, drm_get_connector_name(connector));
+
status = intel_panel_detect(dev);
if (status != connector_status_unknown)
return status;
diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c
index 2abb53e..9ec5a4e 100644
--- a/drivers/gpu/drm/i915/intel_overlay.c
+++ b/drivers/gpu/drm/i915/intel_overlay.c
@@ -1333,7 +1333,9 @@ void intel_setup_overlay(struct drm_device *dev)
overlay->dev = dev;
- reg_bo = i915_gem_object_create_stolen(dev, PAGE_SIZE);
+ reg_bo = NULL;
+ if (!OVERLAY_NEEDS_PHYSICAL(dev))
+ reg_bo = i915_gem_object_create_stolen(dev, PAGE_SIZE);
if (reg_bo == NULL)
reg_bo = i915_gem_alloc_object(dev, PAGE_SIZE);
if (reg_bo == NULL)
diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
index 80bea1d..67e2c1f 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 fb4afaa..0a5ba92 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -32,8 +32,6 @@
#include <linux/module.h>
#include <drm/i915_powerwell.h>
-#define FORCEWAKE_ACK_TIMEOUT_MS 2
-
/* FBC, or Frame Buffer Compression, is a technique employed to compress the
* framebuffer contents in-memory, aiming at reducing the required bandwidth
* during in-memory transfers and, therefore, reduce the power packet.
@@ -404,6 +402,8 @@ static void intel_enable_fbc(struct drm_crtc *crtc, unsigned long interval)
* following the termination of the page-flipping sequence
* and indeed performing the enable as a co-routine and not
* waiting synchronously upon the vblank.
+ *
+ * WaFbcWaitForVBlankBeforeEnable:ilk,snb
*/
schedule_delayed_work(&work->work, msecs_to_jiffies(50));
}
@@ -3121,13 +3121,10 @@ void valleyview_set_rps(struct drm_device *dev, u8 val)
trace_intel_gpu_freq_change(vlv_gpu_freq(dev_priv->mem_freq, val));
}
-
-static void gen6_disable_rps(struct drm_device *dev)
+static void gen6_disable_rps_interrupts(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- I915_WRITE(GEN6_RC_CONTROL, 0);
- I915_WRITE(GEN6_RPNSWREQ, 1 << 31);
I915_WRITE(GEN6_PMINTRMSK, 0xffffffff);
I915_WRITE(GEN6_PMIER, I915_READ(GEN6_PMIER) & ~GEN6_PM_RPS_EVENTS);
/* Complete PM interrupt masking here doesn't race with the rps work
@@ -3142,23 +3139,23 @@ static void gen6_disable_rps(struct drm_device *dev)
I915_WRITE(GEN6_PMIIR, GEN6_PM_RPS_EVENTS);
}
-static void valleyview_disable_rps(struct drm_device *dev)
+static void gen6_disable_rps(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
I915_WRITE(GEN6_RC_CONTROL, 0);
- I915_WRITE(GEN6_PMINTRMSK, 0xffffffff);
- I915_WRITE(GEN6_PMIER, 0);
- /* Complete PM interrupt masking here doesn't race with the rps work
- * item again unmasking PM interrupts because that is using a different
- * register (PMIMR) to mask PM interrupts. The only risk is in leaving
- * stale bits in PMIIR and PMIMR which gen6_enable_rps will clean up. */
+ I915_WRITE(GEN6_RPNSWREQ, 1 << 31);
- spin_lock_irq(&dev_priv->irq_lock);
- dev_priv->rps.pm_iir = 0;
- spin_unlock_irq(&dev_priv->irq_lock);
+ gen6_disable_rps_interrupts(dev);
+}
+
+static void valleyview_disable_rps(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ I915_WRITE(GEN6_RC_CONTROL, 0);
- I915_WRITE(GEN6_PMIIR, I915_READ(GEN6_PMIIR));
+ gen6_disable_rps_interrupts(dev);
if (dev_priv->vlv_pctx) {
drm_gem_object_unreference(&dev_priv->vlv_pctx->base);
@@ -3168,6 +3165,10 @@ static void valleyview_disable_rps(struct drm_device *dev)
int intel_enable_rc6(const struct drm_device *dev)
{
+ /* No RC6 before Ironlake */
+ if (INTEL_INFO(dev)->gen < 5)
+ return 0;
+
/* Respect the kernel parameter if it is set */
if (i915_enable_rc6 >= 0)
return i915_enable_rc6;
@@ -3191,6 +3192,19 @@ int intel_enable_rc6(const struct drm_device *dev)
return (INTEL_RC6_ENABLE | INTEL_RC6p_ENABLE);
}
+static void gen6_enable_rps_interrupts(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ spin_lock_irq(&dev_priv->irq_lock);
+ WARN_ON(dev_priv->rps.pm_iir);
+ I915_WRITE(GEN6_PMIMR, I915_READ(GEN6_PMIMR) & ~GEN6_PM_RPS_EVENTS);
+ I915_WRITE(GEN6_PMIIR, GEN6_PM_RPS_EVENTS);
+ spin_unlock_irq(&dev_priv->irq_lock);
+ /* unmask all PM interrupts */
+ I915_WRITE(GEN6_PMINTRMSK, 0);
+}
+
static void gen6_enable_rps(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
@@ -3319,17 +3333,7 @@ static void gen6_enable_rps(struct drm_device *dev)
gen6_set_rps(dev_priv->dev, (gt_perf_status & 0xff00) >> 8);
- /* requires MSI enabled */
- I915_WRITE(GEN6_PMIER, I915_READ(GEN6_PMIER) | GEN6_PM_RPS_EVENTS);
- spin_lock_irq(&dev_priv->irq_lock);
- /* FIXME: Our interrupt enabling sequence is bonghits.
- * dev_priv->rps.pm_iir really should be 0 here. */
- dev_priv->rps.pm_iir = 0;
- I915_WRITE(GEN6_PMIMR, I915_READ(GEN6_PMIMR) & ~GEN6_PM_RPS_EVENTS);
- I915_WRITE(GEN6_PMIIR, GEN6_PM_RPS_EVENTS);
- spin_unlock_irq(&dev_priv->irq_lock);
- /* unmask all PM interrupts */
- I915_WRITE(GEN6_PMINTRMSK, 0);
+ gen6_enable_rps_interrupts(dev);
rc6vids = 0;
ret = sandybridge_pcode_read(dev_priv, GEN6_PCODE_READ_RC6VIDS, &rc6vids);
@@ -3599,14 +3603,7 @@ static void valleyview_enable_rps(struct drm_device *dev)
valleyview_set_rps(dev_priv->dev, dev_priv->rps.rpe_delay);
- /* requires MSI enabled */
- I915_WRITE(GEN6_PMIER, GEN6_PM_RPS_EVENTS);
- spin_lock_irq(&dev_priv->irq_lock);
- WARN_ON(dev_priv->rps.pm_iir != 0);
- I915_WRITE(GEN6_PMIMR, 0);
- spin_unlock_irq(&dev_priv->irq_lock);
- /* enable all PM interrupts */
- I915_WRITE(GEN6_PMINTRMSK, 0);
+ gen6_enable_rps_interrupts(dev);
gen6_gt_force_wake_put(dev_priv);
}
@@ -4421,7 +4418,10 @@ static void ironlake_init_clock_gating(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
uint32_t dspclk_gate = ILK_VRHUNIT_CLOCK_GATE_DISABLE;
- /* Required for FBC */
+ /*
+ * Required for FBC
+ * WaFbcDisableDpfcClockGating:ilk
+ */
dspclk_gate |= ILK_DPFCRUNIT_CLOCK_GATE_DISABLE |
ILK_DPFCUNIT_CLOCK_GATE_DISABLE |
ILK_DPFDUNIT_CLOCK_GATE_ENABLE;
@@ -4458,6 +4458,7 @@ static void ironlake_init_clock_gating(struct drm_device *dev)
* The bit 7,8,9 of 0x42020.
*/
if (IS_IRONLAKE_M(dev)) {
+ /* WaFbcAsynchFlipDisableFbcQueue:ilk */
I915_WRITE(ILK_DISPLAY_CHICKEN1,
I915_READ(ILK_DISPLAY_CHICKEN1) |
ILK_FBCQ_DIS);
@@ -4594,6 +4595,8 @@ static void gen6_init_clock_gating(struct drm_device *dev)
* The bit5 and bit7 of 0x42020
* The bit14 of 0x70180
* The bit14 of 0x71180
+ *
+ * WaFbcAsynchFlipDisableFbcQueue:snb
*/
I915_WRITE(ILK_DISPLAY_CHICKEN1,
I915_READ(ILK_DISPLAY_CHICKEN1) |
@@ -5284,254 +5287,6 @@ void intel_init_pm(struct drm_device *dev)
}
}
-static void __gen6_gt_wait_for_thread_c0(struct drm_i915_private *dev_priv)
-{
- u32 gt_thread_status_mask;
-
- if (IS_HASWELL(dev_priv->dev))
- gt_thread_status_mask = GEN6_GT_THREAD_STATUS_CORE_MASK_HSW;
- else
- gt_thread_status_mask = GEN6_GT_THREAD_STATUS_CORE_MASK;
-
- /* w/a for a sporadic read returning 0 by waiting for the GT
- * thread to wake up.
- */
- if (wait_for_atomic_us((I915_READ_NOTRACE(GEN6_GT_THREAD_STATUS_REG) & gt_thread_status_mask) == 0, 500))
- DRM_ERROR("GT thread status wait timed out\n");
-}
-
-static void __gen6_gt_force_wake_reset(struct drm_i915_private *dev_priv)
-{
- I915_WRITE_NOTRACE(FORCEWAKE, 0);
- POSTING_READ(ECOBUS); /* something from same cacheline, but !FORCEWAKE */
-}
-
-static void __gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
-{
- if (wait_for_atomic((I915_READ_NOTRACE(FORCEWAKE_ACK) & 1) == 0,
- FORCEWAKE_ACK_TIMEOUT_MS))
- DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
-
- I915_WRITE_NOTRACE(FORCEWAKE, 1);
- POSTING_READ(ECOBUS); /* something from same cacheline, but !FORCEWAKE */
-
- if (wait_for_atomic((I915_READ_NOTRACE(FORCEWAKE_ACK) & 1),
- FORCEWAKE_ACK_TIMEOUT_MS))
- DRM_ERROR("Timed out waiting for forcewake to ack request.\n");
-
- /* WaRsForcewakeWaitTC0:snb */
- __gen6_gt_wait_for_thread_c0(dev_priv);
-}
-
-static void __gen6_gt_force_wake_mt_reset(struct drm_i915_private *dev_priv)
-{
- I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_DISABLE(0xffff));
- /* something from same cacheline, but !FORCEWAKE_MT */
- POSTING_READ(ECOBUS);
-}
-
-static void __gen6_gt_force_wake_mt_get(struct drm_i915_private *dev_priv)
-{
- u32 forcewake_ack;
-
- if (IS_HASWELL(dev_priv->dev))
- forcewake_ack = FORCEWAKE_ACK_HSW;
- else
- forcewake_ack = FORCEWAKE_MT_ACK;
-
- if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & FORCEWAKE_KERNEL) == 0,
- FORCEWAKE_ACK_TIMEOUT_MS))
- DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
-
- I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
- /* something from same cacheline, but !FORCEWAKE_MT */
- POSTING_READ(ECOBUS);
-
- if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & FORCEWAKE_KERNEL),
- FORCEWAKE_ACK_TIMEOUT_MS))
- DRM_ERROR("Timed out waiting for forcewake to ack request.\n");
-
- /* WaRsForcewakeWaitTC0:ivb,hsw */
- __gen6_gt_wait_for_thread_c0(dev_priv);
-}
-
-/*
- * Generally this is called implicitly by the register read function. However,
- * if some sequence requires the GT to not power down then this function should
- * be called at the beginning of the sequence followed by a call to
- * gen6_gt_force_wake_put() at the end of the sequence.
- */
-void gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
-{
- 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);
- spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags);
-}
-
-void gen6_gt_check_fifodbg(struct drm_i915_private *dev_priv)
-{
- u32 gtfifodbg;
- gtfifodbg = I915_READ_NOTRACE(GTFIFODBG);
- if (WARN(gtfifodbg & GT_FIFO_CPU_ERROR_MASK,
- "MMIO read or write has been dropped %x\n", gtfifodbg))
- I915_WRITE_NOTRACE(GTFIFODBG, GT_FIFO_CPU_ERROR_MASK);
-}
-
-static void __gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
-{
- I915_WRITE_NOTRACE(FORCEWAKE, 0);
- /* something from same cacheline, but !FORCEWAKE */
- POSTING_READ(ECOBUS);
- gen6_gt_check_fifodbg(dev_priv);
-}
-
-static void __gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv)
-{
- I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
- /* something from same cacheline, but !FORCEWAKE_MT */
- POSTING_READ(ECOBUS);
- gen6_gt_check_fifodbg(dev_priv);
-}
-
-/*
- * see gen6_gt_force_wake_get()
- */
-void gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
-{
- unsigned long irqflags;
-
- spin_lock_irqsave(&dev_priv->gt_lock, irqflags);
- if (--dev_priv->forcewake_count == 0)
- dev_priv->gt.force_wake_put(dev_priv);
- spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags);
-}
-
-int __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv)
-{
- int ret = 0;
-
- if (dev_priv->gt_fifo_count < GT_FIFO_NUM_RESERVED_ENTRIES) {
- int loop = 500;
- u32 fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
- while (fifo <= GT_FIFO_NUM_RESERVED_ENTRIES && loop--) {
- udelay(10);
- fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
- }
- if (WARN_ON(loop < 0 && fifo <= GT_FIFO_NUM_RESERVED_ENTRIES))
- ++ret;
- dev_priv->gt_fifo_count = fifo;
- }
- dev_priv->gt_fifo_count--;
-
- return ret;
-}
-
-static void vlv_force_wake_reset(struct drm_i915_private *dev_priv)
-{
- I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_DISABLE(0xffff));
- /* something from same cacheline, but !FORCEWAKE_VLV */
- POSTING_READ(FORCEWAKE_ACK_VLV);
-}
-
-static void vlv_force_wake_get(struct drm_i915_private *dev_priv)
-{
- if (wait_for_atomic((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & FORCEWAKE_KERNEL) == 0,
- FORCEWAKE_ACK_TIMEOUT_MS))
- DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
-
- I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
- I915_WRITE_NOTRACE(FORCEWAKE_MEDIA_VLV,
- _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
-
- if (wait_for_atomic((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & FORCEWAKE_KERNEL),
- FORCEWAKE_ACK_TIMEOUT_MS))
- DRM_ERROR("Timed out waiting for GT to ack forcewake request.\n");
-
- if (wait_for_atomic((I915_READ_NOTRACE(FORCEWAKE_ACK_MEDIA_VLV) &
- FORCEWAKE_KERNEL),
- FORCEWAKE_ACK_TIMEOUT_MS))
- DRM_ERROR("Timed out waiting for media to ack forcewake request.\n");
-
- /* WaRsForcewakeWaitTC0:vlv */
- __gen6_gt_wait_for_thread_c0(dev_priv);
-}
-
-static void vlv_force_wake_put(struct drm_i915_private *dev_priv)
-{
- I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
- I915_WRITE_NOTRACE(FORCEWAKE_MEDIA_VLV,
- _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
- /* The below doubles as a POSTING_READ */
- gen6_gt_check_fifodbg(dev_priv);
-}
-
-void intel_gt_reset(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
-
- if (IS_VALLEYVIEW(dev)) {
- vlv_force_wake_reset(dev_priv);
- } else if (INTEL_INFO(dev)->gen >= 6) {
- __gen6_gt_force_wake_reset(dev_priv);
- if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev))
- __gen6_gt_force_wake_mt_reset(dev_priv);
- }
-}
-
-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_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;
- }
- INIT_DELAYED_WORK(&dev_priv->rps.delayed_resume_work,
- intel_gen6_powersave_work);
-}
-
int sandybridge_pcode_read(struct drm_i915_private *dev_priv, u8 mbox, u32 *val)
{
WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock));
@@ -5634,3 +5389,11 @@ int vlv_freq_opcode(int ddr_freq, int val)
return val;
}
+void intel_pm_init(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ INIT_DELAYED_WORK(&dev_priv->rps.delayed_resume_work,
+ intel_gen6_powersave_work);
+}
+
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 798df11..c3b59b8 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -1696,6 +1696,9 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector);
enum drm_connector_status ret;
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
+ connector->base.id, drm_get_connector_name(connector));
+
if (!intel_sdvo_get_value(intel_sdvo,
SDVO_CMD_GET_ATTACHED_DISPLAYS,
&response, 2))
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index 39debd8..b0b446f 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -1305,6 +1305,10 @@ intel_tv_detect(struct drm_connector *connector, bool force)
struct intel_tv *intel_tv = intel_attached_tv(connector);
int type;
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s] force=%d\n",
+ connector->base.id, drm_get_connector_name(connector),
+ force);
+
mode = reported_modes[0];
if (force) {
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
new file mode 100644
index 0000000..8f5bc86
--- /dev/null
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -0,0 +1,595 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * 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 "i915_drv.h"
+#include "intel_drv.h"
+
+#define FORCEWAKE_ACK_TIMEOUT_MS 2
+
+#define __raw_i915_read8(dev_priv__, reg__) readb((dev_priv__)->regs + (reg__))
+#define __raw_i915_write8(dev_priv__, reg__, val__) writeb(val__, (dev_priv__)->regs + (reg__))
+
+#define __raw_i915_read16(dev_priv__, reg__) readw((dev_priv__)->regs + (reg__))
+#define __raw_i915_write16(dev_priv__, reg__, val__) writew(val__, (dev_priv__)->regs + (reg__))
+
+#define __raw_i915_read32(dev_priv__, reg__) readl((dev_priv__)->regs + (reg__))
+#define __raw_i915_write32(dev_priv__, reg__, val__) writel(val__, (dev_priv__)->regs + (reg__))
+
+#define __raw_i915_read64(dev_priv__, reg__) readq((dev_priv__)->regs + (reg__))
+#define __raw_i915_write64(dev_priv__, reg__, val__) writeq(val__, (dev_priv__)->regs + (reg__))
+
+#define __raw_posting_read(dev_priv__, reg__) (void)__raw_i915_read32(dev_priv__, reg__)
+
+
+static void __gen6_gt_wait_for_thread_c0(struct drm_i915_private *dev_priv)
+{
+ u32 gt_thread_status_mask;
+
+ if (IS_HASWELL(dev_priv->dev))
+ gt_thread_status_mask = GEN6_GT_THREAD_STATUS_CORE_MASK_HSW;
+ else
+ gt_thread_status_mask = GEN6_GT_THREAD_STATUS_CORE_MASK;
+
+ /* w/a for a sporadic read returning 0 by waiting for the GT
+ * thread to wake up.
+ */
+ if (wait_for_atomic_us((__raw_i915_read32(dev_priv, GEN6_GT_THREAD_STATUS_REG) & gt_thread_status_mask) == 0, 500))
+ DRM_ERROR("GT thread status wait timed out\n");
+}
+
+static void __gen6_gt_force_wake_reset(struct drm_i915_private *dev_priv)
+{
+ __raw_i915_write32(dev_priv, FORCEWAKE, 0);
+ /* something from same cacheline, but !FORCEWAKE */
+ __raw_posting_read(dev_priv, ECOBUS);
+}
+
+static void __gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
+{
+ if (wait_for_atomic((__raw_i915_read32(dev_priv, FORCEWAKE_ACK) & 1) == 0,
+ FORCEWAKE_ACK_TIMEOUT_MS))
+ DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
+
+ __raw_i915_write32(dev_priv, FORCEWAKE, 1);
+ /* something from same cacheline, but !FORCEWAKE */
+ __raw_posting_read(dev_priv, ECOBUS);
+
+ if (wait_for_atomic((__raw_i915_read32(dev_priv, FORCEWAKE_ACK) & 1),
+ FORCEWAKE_ACK_TIMEOUT_MS))
+ DRM_ERROR("Timed out waiting for forcewake to ack request.\n");
+
+ /* WaRsForcewakeWaitTC0:snb */
+ __gen6_gt_wait_for_thread_c0(dev_priv);
+}
+
+static void __gen6_gt_force_wake_mt_reset(struct drm_i915_private *dev_priv)
+{
+ __raw_i915_write32(dev_priv, FORCEWAKE_MT, _MASKED_BIT_DISABLE(0xffff));
+ /* something from same cacheline, but !FORCEWAKE_MT */
+ __raw_posting_read(dev_priv, ECOBUS);
+}
+
+static void __gen6_gt_force_wake_mt_get(struct drm_i915_private *dev_priv)
+{
+ u32 forcewake_ack;
+
+ if (IS_HASWELL(dev_priv->dev))
+ forcewake_ack = FORCEWAKE_ACK_HSW;
+ else
+ forcewake_ack = FORCEWAKE_MT_ACK;
+
+ if (wait_for_atomic((__raw_i915_read32(dev_priv, forcewake_ack) & FORCEWAKE_KERNEL) == 0,
+ FORCEWAKE_ACK_TIMEOUT_MS))
+ DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
+
+ __raw_i915_write32(dev_priv, FORCEWAKE_MT,
+ _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
+ /* something from same cacheline, but !FORCEWAKE_MT */
+ __raw_posting_read(dev_priv, ECOBUS);
+
+ if (wait_for_atomic((__raw_i915_read32(dev_priv, forcewake_ack) & FORCEWAKE_KERNEL),
+ FORCEWAKE_ACK_TIMEOUT_MS))
+ DRM_ERROR("Timed out waiting for forcewake to ack request.\n");
+
+ /* WaRsForcewakeWaitTC0:ivb,hsw */
+ __gen6_gt_wait_for_thread_c0(dev_priv);
+}
+
+static void gen6_gt_check_fifodbg(struct drm_i915_private *dev_priv)
+{
+ u32 gtfifodbg;
+
+ gtfifodbg = __raw_i915_read32(dev_priv, GTFIFODBG);
+ if (WARN(gtfifodbg & GT_FIFO_CPU_ERROR_MASK,
+ "MMIO read or write has been dropped %x\n", gtfifodbg))
+ __raw_i915_write32(dev_priv, GTFIFODBG, GT_FIFO_CPU_ERROR_MASK);
+}
+
+static void __gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
+{
+ __raw_i915_write32(dev_priv, FORCEWAKE, 0);
+ /* something from same cacheline, but !FORCEWAKE */
+ __raw_posting_read(dev_priv, ECOBUS);
+ gen6_gt_check_fifodbg(dev_priv);
+}
+
+static void __gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv)
+{
+ __raw_i915_write32(dev_priv, FORCEWAKE_MT,
+ _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
+ /* something from same cacheline, but !FORCEWAKE_MT */
+ __raw_posting_read(dev_priv, ECOBUS);
+ gen6_gt_check_fifodbg(dev_priv);
+}
+
+static int __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv)
+{
+ int ret = 0;
+
+ if (dev_priv->uncore.fifo_count < GT_FIFO_NUM_RESERVED_ENTRIES) {
+ int loop = 500;
+ u32 fifo = __raw_i915_read32(dev_priv, GT_FIFO_FREE_ENTRIES);
+ while (fifo <= GT_FIFO_NUM_RESERVED_ENTRIES && loop--) {
+ udelay(10);
+ fifo = __raw_i915_read32(dev_priv, GT_FIFO_FREE_ENTRIES);
+ }
+ if (WARN_ON(loop < 0 && fifo <= GT_FIFO_NUM_RESERVED_ENTRIES))
+ ++ret;
+ dev_priv->uncore.fifo_count = fifo;
+ }
+ dev_priv->uncore.fifo_count--;
+
+ return ret;
+}
+
+static void vlv_force_wake_reset(struct drm_i915_private *dev_priv)
+{
+ __raw_i915_write32(dev_priv, FORCEWAKE_VLV,
+ _MASKED_BIT_DISABLE(0xffff));
+ /* something from same cacheline, but !FORCEWAKE_VLV */
+ __raw_posting_read(dev_priv, FORCEWAKE_ACK_VLV);
+}
+
+static void vlv_force_wake_get(struct drm_i915_private *dev_priv)
+{
+ if (wait_for_atomic((__raw_i915_read32(dev_priv, FORCEWAKE_ACK_VLV) & FORCEWAKE_KERNEL) == 0,
+ FORCEWAKE_ACK_TIMEOUT_MS))
+ DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
+
+ __raw_i915_write32(dev_priv, FORCEWAKE_VLV,
+ _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
+ __raw_i915_write32(dev_priv, FORCEWAKE_MEDIA_VLV,
+ _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
+
+ if (wait_for_atomic((__raw_i915_read32(dev_priv, FORCEWAKE_ACK_VLV) & FORCEWAKE_KERNEL),
+ FORCEWAKE_ACK_TIMEOUT_MS))
+ DRM_ERROR("Timed out waiting for GT to ack forcewake request.\n");
+
+ if (wait_for_atomic((__raw_i915_read32(dev_priv, FORCEWAKE_ACK_MEDIA_VLV) &
+ FORCEWAKE_KERNEL),
+ FORCEWAKE_ACK_TIMEOUT_MS))
+ DRM_ERROR("Timed out waiting for media to ack forcewake request.\n");
+
+ /* WaRsForcewakeWaitTC0:vlv */
+ __gen6_gt_wait_for_thread_c0(dev_priv);
+}
+
+static void vlv_force_wake_put(struct drm_i915_private *dev_priv)
+{
+ __raw_i915_write32(dev_priv, FORCEWAKE_VLV,
+ _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
+ __raw_i915_write32(dev_priv, FORCEWAKE_MEDIA_VLV,
+ _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
+ /* The below doubles as a POSTING_READ */
+ gen6_gt_check_fifodbg(dev_priv);
+}
+
+void intel_uncore_early_sanitize(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (HAS_FPGA_DBG_UNCLAIMED(dev))
+ __raw_i915_write32(dev_priv, FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
+}
+
+void intel_uncore_init(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (IS_VALLEYVIEW(dev)) {
+ dev_priv->uncore.funcs.force_wake_get = vlv_force_wake_get;
+ dev_priv->uncore.funcs.force_wake_put = vlv_force_wake_put;
+ } else if (IS_HASWELL(dev)) {
+ dev_priv->uncore.funcs.force_wake_get = __gen6_gt_force_wake_mt_get;
+ dev_priv->uncore.funcs.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 = __raw_i915_read32(dev_priv, ECOBUS);
+ __gen6_gt_force_wake_mt_put(dev_priv);
+ mutex_unlock(&dev->struct_mutex);
+
+ if (ecobus & FORCEWAKE_MT_ENABLE) {
+ dev_priv->uncore.funcs.force_wake_get =
+ __gen6_gt_force_wake_mt_get;
+ dev_priv->uncore.funcs.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->uncore.funcs.force_wake_get =
+ __gen6_gt_force_wake_get;
+ dev_priv->uncore.funcs.force_wake_put =
+ __gen6_gt_force_wake_put;
+ }
+ } else if (IS_GEN6(dev)) {
+ dev_priv->uncore.funcs.force_wake_get =
+ __gen6_gt_force_wake_get;
+ dev_priv->uncore.funcs.force_wake_put =
+ __gen6_gt_force_wake_put;
+ }
+}
+
+void intel_uncore_sanitize(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (IS_VALLEYVIEW(dev)) {
+ vlv_force_wake_reset(dev_priv);
+ } else if (INTEL_INFO(dev)->gen >= 6) {
+ __gen6_gt_force_wake_reset(dev_priv);
+ 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 */
+ intel_disable_gt_powersave(dev);
+}
+
+/*
+ * Generally this is called implicitly by the register read function. However,
+ * if some sequence requires the GT to not power down then this function should
+ * be called at the beginning of the sequence followed by a call to
+ * gen6_gt_force_wake_put() at the end of the sequence.
+ */
+void gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
+{
+ unsigned long irqflags;
+
+ spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
+ if (dev_priv->uncore.forcewake_count++ == 0)
+ dev_priv->uncore.funcs.force_wake_get(dev_priv);
+ spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
+}
+
+/*
+ * see gen6_gt_force_wake_get()
+ */
+void gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
+{
+ unsigned long irqflags;
+
+ spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
+ if (--dev_priv->uncore.forcewake_count == 0)
+ dev_priv->uncore.funcs.force_wake_put(dev_priv);
+ spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
+}
+
+/* We give fast paths for the really cool registers */
+#define NEEDS_FORCE_WAKE(dev_priv, reg) \
+ ((HAS_FORCE_WAKE((dev_priv)->dev)) && \
+ ((reg) < 0x40000) && \
+ ((reg) != FORCEWAKE))
+
+static void
+ilk_dummy_write(struct drm_i915_private *dev_priv)
+{
+ /* WaIssueDummyWriteToWakeupFromRC6:ilk Issue a dummy write to wake up
+ * the chip from rc6 before touching it for real. MI_MODE is masked,
+ * hence harmless to write 0 into. */
+ __raw_i915_write32(dev_priv, MI_MODE, 0);
+}
+
+static void
+hsw_unclaimed_reg_clear(struct drm_i915_private *dev_priv, u32 reg)
+{
+ if (HAS_FPGA_DBG_UNCLAIMED(dev_priv->dev) &&
+ (__raw_i915_read32(dev_priv, FPGA_DBG) & FPGA_DBG_RM_NOCLAIM)) {
+ DRM_ERROR("Unknown unclaimed register before writing to %x\n",
+ reg);
+ __raw_i915_write32(dev_priv, FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
+ }
+}
+
+static void
+hsw_unclaimed_reg_check(struct drm_i915_private *dev_priv, u32 reg)
+{
+ if (HAS_FPGA_DBG_UNCLAIMED(dev_priv->dev) &&
+ (__raw_i915_read32(dev_priv, FPGA_DBG) & FPGA_DBG_RM_NOCLAIM)) {
+ DRM_ERROR("Unclaimed write to %x\n", reg);
+ __raw_i915_write32(dev_priv, FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
+ }
+}
+
+#define __i915_read(x) \
+u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg, bool trace) { \
+ unsigned long irqflags; \
+ u##x val = 0; \
+ spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); \
+ if (dev_priv->info->gen == 5) \
+ ilk_dummy_write(dev_priv); \
+ if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
+ if (dev_priv->uncore.forcewake_count == 0) \
+ dev_priv->uncore.funcs.force_wake_get(dev_priv); \
+ val = __raw_i915_read##x(dev_priv, reg); \
+ if (dev_priv->uncore.forcewake_count == 0) \
+ dev_priv->uncore.funcs.force_wake_put(dev_priv); \
+ } else { \
+ val = __raw_i915_read##x(dev_priv, reg); \
+ } \
+ spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); \
+ trace_i915_reg_rw(false, reg, val, sizeof(val), trace); \
+ return val; \
+}
+
+__i915_read(8)
+__i915_read(16)
+__i915_read(32)
+__i915_read(64)
+#undef __i915_read
+
+#define __i915_write(x) \
+void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val, bool trace) { \
+ unsigned long irqflags; \
+ u32 __fifo_ret = 0; \
+ trace_i915_reg_rw(true, reg, val, sizeof(val), trace); \
+ spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); \
+ if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
+ __fifo_ret = __gen6_gt_wait_for_fifo(dev_priv); \
+ } \
+ if (dev_priv->info->gen == 5) \
+ ilk_dummy_write(dev_priv); \
+ hsw_unclaimed_reg_clear(dev_priv, reg); \
+ __raw_i915_write##x(dev_priv, reg, val); \
+ if (unlikely(__fifo_ret)) { \
+ gen6_gt_check_fifodbg(dev_priv); \
+ } \
+ hsw_unclaimed_reg_check(dev_priv, reg); \
+ spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); \
+}
+__i915_write(8)
+__i915_write(16)
+__i915_write(32)
+__i915_write(64)
+#undef __i915_write
+
+static const struct register_whitelist {
+ uint64_t offset;
+ uint32_t size;
+ uint32_t gen_bitmask; /* support gens, 0x10 for 4, 0x30 for 4 and 5, etc. */
+} whitelist[] = {
+ { RING_TIMESTAMP(RENDER_RING_BASE), 8, 0xF0 },
+};
+
+int i915_reg_read_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_reg_read *reg = data;
+ struct register_whitelist const *entry = whitelist;
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(whitelist); i++, entry++) {
+ if (entry->offset == reg->offset &&
+ (1 << INTEL_INFO(dev)->gen & entry->gen_bitmask))
+ break;
+ }
+
+ if (i == ARRAY_SIZE(whitelist))
+ return -EINVAL;
+
+ switch (entry->size) {
+ case 8:
+ reg->val = I915_READ64(reg->offset);
+ break;
+ case 4:
+ reg->val = I915_READ(reg->offset);
+ break;
+ case 2:
+ reg->val = I915_READ16(reg->offset);
+ break;
+ case 1:
+ reg->val = I915_READ8(reg->offset);
+ break;
+ default:
+ WARN_ON(1);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int i8xx_do_reset(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (IS_I85X(dev))
+ return -ENODEV;
+
+ I915_WRITE(D_STATE, I915_READ(D_STATE) | DSTATE_GFX_RESET_I830);
+ POSTING_READ(D_STATE);
+
+ if (IS_I830(dev) || IS_845G(dev)) {
+ I915_WRITE(DEBUG_RESET_I830,
+ DEBUG_RESET_DISPLAY |
+ DEBUG_RESET_RENDER |
+ DEBUG_RESET_FULL);
+ POSTING_READ(DEBUG_RESET_I830);
+ msleep(1);
+
+ I915_WRITE(DEBUG_RESET_I830, 0);
+ POSTING_READ(DEBUG_RESET_I830);
+ }
+
+ msleep(1);
+
+ I915_WRITE(D_STATE, I915_READ(D_STATE) & ~DSTATE_GFX_RESET_I830);
+ POSTING_READ(D_STATE);
+
+ return 0;
+}
+
+static int i965_reset_complete(struct drm_device *dev)
+{
+ u8 gdrst;
+ pci_read_config_byte(dev->pdev, I965_GDRST, &gdrst);
+ return (gdrst & GRDOM_RESET_ENABLE) == 0;
+}
+
+static int i965_do_reset(struct drm_device *dev)
+{
+ int ret;
+
+ /*
+ * Set the domains we want to reset (GRDOM/bits 2 and 3) as
+ * well as the reset bit (GR/bit 0). Setting the GR bit
+ * triggers the reset; when done, the hardware will clear it.
+ */
+ pci_write_config_byte(dev->pdev, I965_GDRST,
+ GRDOM_RENDER | GRDOM_RESET_ENABLE);
+ ret = wait_for(i965_reset_complete(dev), 500);
+ if (ret)
+ return ret;
+
+ /* We can't reset render&media without also resetting display ... */
+ pci_write_config_byte(dev->pdev, I965_GDRST,
+ GRDOM_MEDIA | GRDOM_RESET_ENABLE);
+
+ ret = wait_for(i965_reset_complete(dev), 500);
+ if (ret)
+ return ret;
+
+ pci_write_config_byte(dev->pdev, I965_GDRST, 0);
+
+ return 0;
+}
+
+static int ironlake_do_reset(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 gdrst;
+ int ret;
+
+ gdrst = I915_READ(MCHBAR_MIRROR_BASE + ILK_GDSR);
+ gdrst &= ~GRDOM_MASK;
+ I915_WRITE(MCHBAR_MIRROR_BASE + ILK_GDSR,
+ gdrst | GRDOM_RENDER | GRDOM_RESET_ENABLE);
+ ret = wait_for(I915_READ(MCHBAR_MIRROR_BASE + ILK_GDSR) & 0x1, 500);
+ if (ret)
+ return ret;
+
+ /* We can't reset render&media without also resetting display ... */
+ gdrst = I915_READ(MCHBAR_MIRROR_BASE + ILK_GDSR);
+ gdrst &= ~GRDOM_MASK;
+ I915_WRITE(MCHBAR_MIRROR_BASE + ILK_GDSR,
+ gdrst | GRDOM_MEDIA | GRDOM_RESET_ENABLE);
+ return wait_for(I915_READ(MCHBAR_MIRROR_BASE + ILK_GDSR) & 0x1, 500);
+}
+
+static int gen6_do_reset(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int ret;
+ unsigned long irqflags;
+
+ /* Hold uncore.lock across reset to prevent any register access
+ * with forcewake not set correctly
+ */
+ spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
+
+ /* Reset the chip */
+
+ /* GEN6_GDRST is not in the gt power well, no need to check
+ * for fifo space for the write or forcewake the chip for
+ * the read
+ */
+ __raw_i915_write32(dev_priv, GEN6_GDRST, GEN6_GRDOM_FULL);
+
+ /* Spin waiting for the device to ack the reset request */
+ ret = wait_for((__raw_i915_read32(dev_priv, GEN6_GDRST) & GEN6_GRDOM_FULL) == 0, 500);
+
+ /* If reset with a user forcewake, try to restore, otherwise turn it off */
+ if (dev_priv->uncore.forcewake_count)
+ dev_priv->uncore.funcs.force_wake_get(dev_priv);
+ else
+ dev_priv->uncore.funcs.force_wake_put(dev_priv);
+
+ /* Restore fifo count */
+ dev_priv->uncore.fifo_count = __raw_i915_read32(dev_priv, GT_FIFO_FREE_ENTRIES);
+
+ spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
+ return ret;
+}
+
+int intel_gpu_reset(struct drm_device *dev)
+{
+ switch (INTEL_INFO(dev)->gen) {
+ case 7:
+ case 6: return gen6_do_reset(dev);
+ case 5: return ironlake_do_reset(dev);
+ case 4: return i965_do_reset(dev);
+ case 2: return i8xx_do_reset(dev);
+ default: return -ENODEV;
+ }
+}
+
+void intel_uncore_clear_errors(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ /* XXX needs spinlock around caller's grouping */
+ if (HAS_FPGA_DBG_UNCLAIMED(dev))
+ __raw_i915_write32(dev_priv, FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
+}
+
+void intel_uncore_check_errors(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (HAS_FPGA_DBG_UNCLAIMED(dev) &&
+ (__raw_i915_read32(dev_priv, FPGA_DBG) & FPGA_DBG_RM_NOCLAIM)) {
+ DRM_ERROR("Unclaimed register before interrupt\n");
+ __raw_i915_write32(dev_priv, FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
+ }
+}
diff --git a/drivers/gpu/drm/nouveau/core/engine/bsp/nvc0.c b/drivers/gpu/drm/nouveau/core/engine/bsp/nvc0.c
index 262c9f5..ce860de 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 c46882c..ba6aeca 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 3c7a31f..e03fc8e 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 98072c1..73719aa 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 1879229..ac1f62a 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 d28ecbf..d4c3108 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 1edec38..181aa7d 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 4b1afb1..4e7ee5f 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 c8ffba2..78637af 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 2c2097a..1faa75f 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 9352010..4c1bc06 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 1680d91..be31499 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 86597eb..487242f 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 54dc635..8b40a36 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/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index 4427e8e..0ad208a 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 85aeef6..d546f50 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 4d6c7d8..ea8a414 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 98ddc32..0cf5f8e 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 9c343b4..3ffbc56 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/md/bcache/alloc.c b/drivers/md/bcache/alloc.c
index 048f294..e45f557 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 d3e15b4..b39f6f0 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 1d27d3a..8010eed 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 57a9cff..ae115a2 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 7a5658f..ee37288 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 af4a709..3333d37 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 bd05a9a..9aba201 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 89fd520..88e6411 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 f9378a2..1c39b5a 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 48efd4d..9056632 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 8c8dfdc..ba95ab8 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 8589512..1a3b4f4 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 e5ff12e..786a1a4 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 254d9ab..57dc478 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 f88e2b6..547c4c5 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 4d9cca4..12a2c28 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 983f9bb..f7b6c19 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 da3a99e..98eb811 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 577393e..1ae2a73 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 2714ed3..22cbff5 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 0000000..c91f61b
--- /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/net/ethernet/atheros/atl1e/atl1e_main.c b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
index 6d1a62a..1966444 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 1d680ba..52c9603 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 2df48bb..181edb5 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 4273c06..9c7194b 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 4dccead..23a0fff 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 876c722..a98fb0e 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 5cdcf92..db690a3 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 0ba1e7e..a5ba8dd 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 ff7f111..36808bf 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/pnp/pnpacpi/rsparser.c b/drivers/pnp/pnpacpi/rsparser.c
index 9847ab1..167f3d0 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 3e6db1c..d95e101 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 fb1c1e0..8ed52aa 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 f446a77..d4174b8 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/staging/Kconfig b/drivers/staging/Kconfig
index 3227ebe..57d8b34 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 4d79ebe..429321f 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/csr/Kconfig b/drivers/staging/csr/Kconfig
deleted file mode 100644
index ad2a109..0000000
--- 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 364853e..0000000
--- 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 dbd135a..0000000
--- 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 d795852..0000000
--- 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 98122bc..0000000
--- 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 6d26ac6..0000000
--- 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 575598c..0000000
--- 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 9829410..0000000
--- 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 283647c..0000000
--- 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 cfcf64a..0000000
--- 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 c47f1d9..0000000
--- 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 8d88e78..0000000
--- 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 db5e845..0000000
--- 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 7e4dd38..0000000
--- 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 81a1eaa..0000000
--- 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 cbb607d..0000000
--- 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 c7d672c..0000000
--- 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 0971d13..0000000
--- 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 9713b9a..0000000
--- 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 01179e4..0000000
--- 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 fc29e8e..0000000
--- 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 c3aa9d5..0000000
--- 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 efc43a5..0000000
--- 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 fc5c5aa..0000000
--- 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 0690ca9..0000000
--- 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 d21c60a..0000000
--- 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 bd47f60..0000000
--- 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 d542532..0000000
--- 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 a9b9ec4..0000000
--- 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 cfe186e..0000000
--- 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 17867f6..0000000
--- 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 5cf5b8a..0000000
--- 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 09b3aef..0000000
--- 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 e5e5799..0000000
--- 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 bf7a52e..0000000
--- 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 2f44a38..0000000
--- 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 7b7eec4..0000000
--- 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 0768aef..0000000
--- 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 76429e5..0000000
--- 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 3c82132..0000000
--- 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 ca4d077..0000000
--- 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 6112cc3..0000000
--- 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 f1df36a..0000000
--- 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 aa684c6..0000000
--- 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 a6b006b..0000000
--- 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 1160a0e..0000000
--- 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 9a35285..0000000
--- 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 4126e85..0000000
--- 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 3f9fcbd..0000000
--- 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 d1c6678..0000000
--- 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 050a15f..0000000
--- 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 3c50723..0000000
--- 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 cfb3e27..0000000
--- 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 5fde0ef..0000000
--- 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 f8b4029..0000000
--- 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 0689d6f..0000000
--- 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 b89d7c7..0000000
--- 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 ab93588..0000000
--- 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 2786a6b..0000000
--- 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 6d8df83..0000000
--- 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 b32bdbc..0000000
--- 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 bfebb15..0000000
--- 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 3daaa09..0000000
--- 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 1a901a7..0000000
--- 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 c04585e..0000000
--- 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 85e6f5f..0000000
--- 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 5a1f132..0000000
--- 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 9a7927a..0000000
--- 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 ebac484..0000000
--- 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 84e973a..0000000
--- 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 ee3bd51..0000000
--- 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 3c394c7..0000000
--- 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 775c013..0000000
--- 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 478327b..0000000
--- 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 a02e307..0000000
--- 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 c984589..0000000
--- 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 7fa85fb..0000000
--- 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 954b3de..0000000
--- 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 f235153..0000000
--- 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 1312a33..0000000
--- 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 99cf930..0000000
--- 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 2fb4937..0000000
--- 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 3eda1b6..0000000
--- 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 c904838..0000000
--- 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 c4badc5..0000000
--- 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 4cd1263..0000000
--- 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 b0477c4..0000000
--- 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 c52344b..0000000
--- 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 45a10fb..0000000
--- 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 86692c7..0000000
--- 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 4eccf5d..0000000
--- 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 94ccdac..0000000
--- 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 9ba892f..0000000
--- 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 e905ead..0000000
--- 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 dd93d00..0000000
--- 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 48ea914..0000000
--- 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 3c4bcbc..0000000
--- 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 31835f0..0000000
--- 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 ba5e4b4..0000000
--- 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 03b5ddb..0000000
--- 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 c04767b..0000000
--- 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 53cf126..0000000
--- 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 17ec79c..0000000
--- 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 cf32254..0000000
--- 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 78b88c0..0000000
--- 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 7d7e1d8..0000000
--- 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 f852626..0000000
--- 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 1e938c1..0000000
--- 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 8ff9788..0000000
--- 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 9e3d8b8..0000000
--- 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 92898de..0000000
--- 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 b42a4d6..0000000
--- 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 b3ef818..0000000
--- 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 3b8a4ba..0000000
--- 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 f903022..0000000
--- 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 861d6b7..0000000
--- 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 e11f6cb..0000000
--- 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 9c716c1..0000000
--- 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 37ec59d..0000000
--- 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 5613cf0..0000000
--- 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 2a80b9e..0000000
--- 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 2b503c2..0000000
--- 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 839fae0..0000000
--- 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 0c6e216..0000000
--- 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 58d1b3b..0000000
--- 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 d0b9be3..0000000
--- 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 b5258d7..0000000
--- 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 b919b00..0000000
--- 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 ebe371c..0000000
--- 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 84f11cb..0000000
--- 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 eb286e5..0000000
--- 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 df853e1..0000000
--- 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 fe11970..0000000
--- 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 38d5708..0000000
--- 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 71fdb21..0000000
--- 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 a73b38e..0000000
--- 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 56a2698..0000000
--- 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 04fe9e2..0000000
--- 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 37302f3..0000000
--- 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 5090882..0000000
--- 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 aff9aa1..0000000
--- 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 beba089..0000000
--- 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 b9de0cb..0000000
--- 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 9860ea3..0000000
--- 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/iio/accel/lis3l02dq_core.c b/drivers/staging/iio/accel/lis3l02dq_core.c
index 1bfe5d8..8ed75a9 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 3fc79e5..a2e61c2 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 d92c97a..9f52a28 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/thermal/x86_pkg_temp_thermal.c b/drivers/thermal/x86_pkg_temp_thermal.c
index 5de56f6..f36950e 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/vhost/net.c b/drivers/vhost/net.c
index 027be91..969a859 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 06adf31..0c27c7d 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 a73ea21..339eae8 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 42298cd..4465ed5 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/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 0236de7..1204c8e 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 4ba2a69..64a157b 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 998ea11..1194b1f 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/extents.c b/fs/ext4/extents.c
index 7097b0f..a618738 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 4b8df7f..91cb110 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)
{
@@ -665,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);
@@ -744,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;
@@ -780,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 {
@@ -889,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);
/*
@@ -933,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);
@@ -952,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 98b9bff..ba33c67 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -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;
@@ -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));
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index 234b834..35f55a0 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/fuse/dir.c b/fs/fuse/dir.c
index 0eda527..72a5d5b 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/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index 0abfb846..3850b01 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/open.c b/fs/open.c
index 9156cb0..d53e298 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 2850317..a1a16eb 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 7465d43..68307c0 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/include/acpi/acpixf.h b/include/acpi/acpixf.h
index 1b09300..22d497e 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 a64adcc..22b03c9 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/acpi/video.h b/include/acpi/video.h
index 61109f2..b26dc4f 100644
--- a/include/acpi/video.h
+++ b/include/acpi/video.h
@@ -17,12 +17,21 @@ struct acpi_device;
#define ACPI_VIDEO_DISPLAY_LEGACY_TV 0x0200
#if (defined CONFIG_ACPI_VIDEO || defined CONFIG_ACPI_VIDEO_MODULE)
-extern int acpi_video_register(void);
+extern int __acpi_video_register(bool backlight_quirks);
+static inline int acpi_video_register(void)
+{
+ return __acpi_video_register(false);
+}
+static inline int acpi_video_register_with_quirks(void)
+{
+ return __acpi_video_register(true);
+}
extern void acpi_video_unregister(void);
extern int acpi_video_get_edid(struct acpi_device *device, int type,
int device_id, void **edid);
#else
static inline int acpi_video_register(void) { return 0; }
+static inline int acpi_video_register_with_quirks(void) { return 0; }
static inline void acpi_video_unregister(void) { return; }
static inline int acpi_video_get_edid(struct acpi_device *device, int type,
int device_id, void **edid)
diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h
index e8e1417..ae8dbfb 100644
--- a/include/drm/drm_dp_helper.h
+++ b/include/drm/drm_dp_helper.h
@@ -342,13 +342,42 @@ u8 drm_dp_get_adjust_request_voltage(u8 link_status[DP_LINK_STATUS_SIZE],
u8 drm_dp_get_adjust_request_pre_emphasis(u8 link_status[DP_LINK_STATUS_SIZE],
int lane);
-#define DP_RECEIVER_CAP_SIZE 0xf
+#define DP_RECEIVER_CAP_SIZE 0xf
+#define EDP_PSR_RECEIVER_CAP_SIZE 2
+
void drm_dp_link_train_clock_recovery_delay(u8 dpcd[DP_RECEIVER_CAP_SIZE]);
void drm_dp_link_train_channel_eq_delay(u8 dpcd[DP_RECEIVER_CAP_SIZE]);
u8 drm_dp_link_rate_to_bw_code(int link_rate);
int drm_dp_bw_code_to_link_rate(u8 link_bw);
+struct edp_sdp_header {
+ u8 HB0; /* Secondary Data Packet ID */
+ u8 HB1; /* Secondary Data Packet Type */
+ u8 HB2; /* 7:5 reserved, 4:0 revision number */
+ u8 HB3; /* 7:5 reserved, 4:0 number of valid data bytes */
+} __packed;
+
+#define EDP_SDP_HEADER_REVISION_MASK 0x1F
+#define EDP_SDP_HEADER_VALID_PAYLOAD_BYTES 0x1F
+
+struct edp_vsc_psr {
+ struct edp_sdp_header sdp_header;
+ u8 DB0; /* Stereo Interface */
+ u8 DB1; /* 0 - PSR State; 1 - Update RFB; 2 - CRC Valid */
+ u8 DB2; /* CRC value bits 7:0 of the R or Cr component */
+ u8 DB3; /* CRC value bits 15:8 of the R or Cr component */
+ u8 DB4; /* CRC value bits 7:0 of the G or Y component */
+ u8 DB5; /* CRC value bits 15:8 of the G or Y component */
+ u8 DB6; /* CRC value bits 7:0 of the B or Cb component */
+ u8 DB7; /* CRC value bits 15:8 of the B or Cb component */
+ u8 DB8_31[24]; /* Reserved */
+} __packed;
+
+#define EDP_VSC_PSR_STATE_ACTIVE (1<<0)
+#define EDP_VSC_PSR_UPDATE_RFB (1<<1)
+#define EDP_VSC_PSR_CRC_VALUES_VALID (1<<2)
+
static inline int
drm_dp_max_link_rate(u8 dpcd[DP_RECEIVER_CAP_SIZE])
{
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 353ba25..6ad72f9 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -191,6 +191,7 @@ extern bool wmi_has_guid(const char *guid);
#define ACPI_VIDEO_BACKLIGHT_DMI_VIDEO 0x0200
#define ACPI_VIDEO_OUTPUT_SWITCHING_DMI_VENDOR 0x0400
#define ACPI_VIDEO_OUTPUT_SWITCHING_DMI_VIDEO 0x0800
+#define ACPI_VIDEO_SKIP_BACKLIGHT 0x1000
#if defined(CONFIG_ACPI_VIDEO) || defined(CONFIG_ACPI_VIDEO_MODULE)
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index 3092df36..b90337c 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/drbd.h b/include/linux/drbd.h
index 1b4d4ee..de7d74a 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 d0d8fac..e8c4457 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 1fedf2b..17e50bb 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/if_vlan.h b/include/linux/if_vlan.h
index cdcbafa..715c343 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 8d171f4..3d35b70 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/pm_wakeup.h b/include/linux/pm_wakeup.h
index 569781f..a0f7080 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/trace/events/bcache.h b/include/trace/events/bcache.h
index 3cc5a0b..5ebda97 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 d615f78..41a6643 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 05ac354..95e46c8 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/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
index 923ed7f..a1a7b6b 100644
--- a/include/uapi/drm/i915_drm.h
+++ b/include/uapi/drm/i915_drm.h
@@ -33,6 +33,30 @@
* subject to backwards-compatibility constraints.
*/
+/**
+ * DOC: uevents generated by i915 on it's device node
+ *
+ * I915_L3_PARITY_UEVENT - Generated when the driver receives a parity mismatch
+ * event from the gpu l3 cache. Additional information supplied is ROW,
+ * BANK, SUBBANK of the affected cacheline. Userspace should keep track of
+ * these events and if a specific cache-line seems to have a persistent
+ * error remap it with the l3 remapping tool supplied in intel-gpu-tools.
+ * The value supplied with the event is always 1.
+ *
+ * I915_ERROR_UEVENT - Generated upon error detection, currently only via
+ * hangcheck. The error detection event is a good indicator of when things
+ * began to go badly. The value supplied with the event is a 1 upon error
+ * detection, and a 0 upon reset completion, signifying no more error
+ * exists. NOTE: Disabling hangcheck or reset via module parameter will
+ * cause the related events to not be seen.
+ *
+ * I915_RESET_UEVENT - Event is generated just before an attempt to reset the
+ * the GPU. The value supplied with the event is always 1. NOTE: Disable
+ * reset via module parameter will cause this event to not be seen.
+ */
+#define I915_L3_PARITY_UEVENT "L3_PARITY_ERROR"
+#define I915_ERROR_UEVENT "ERROR"
+#define I915_RESET_UEVENT "RESET"
/* Each region is a minimum of 16k, and there are at most 255 of them.
*/
diff --git a/include/xen/interface/io/blkif.h b/include/xen/interface/io/blkif.h
index ffd4652..65e1209 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 75271b9..7d28aff 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/kernel/power/autosleep.c b/kernel/power/autosleep.c
index c6422ff..9012ecf 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/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index e444ff8..cc2f66f 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 0cd500b..3f24777 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -3008,7 +3008,6 @@ static int tracing_release(struct inode *inode, struct file *file)
iter = m->private;
tr = iter->tr;
- trace_array_put(tr);
mutex_lock(&trace_types_lock);
@@ -3023,6 +3022,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);
@@ -3447,6 +3449,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 +3457,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 +3544,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
@@ -3958,6 +3965,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;
}
@@ -4704,21 +4712,24 @@ static int tracing_snapshot_open(struct inode *inode, struct file *file)
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;
m->private = iter;
file->private_data = m;
}
-
+out:
if (ret < 0)
trace_array_put(tr);
@@ -4948,8 +4959,6 @@ 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.trace = tr->current_trace;
@@ -5328,9 +5337,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_tc,
.read = tracing_stats_read,
.llseek = generic_file_llseek,
+ .release = tracing_release_generic_tc,
};
#ifdef CONFIG_DYNAMIC_FTRACE
@@ -5973,8 +5983,10 @@ static int new_instance_create(const char *name)
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);
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 4a4f6e1..e7d643b 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -214,7 +214,6 @@ struct trace_array {
struct dentry *event_dir;
struct list_head systems;
struct list_head events;
- struct task_struct *waiter;
int ref;
};
@@ -680,6 +679,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 84b1e04..80c36bc 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 7d85429..898f868 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 0d883dc..0c7b75a 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 b863f93..38fe148 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 8388bc9..b5c0924 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 7ed6976..3811487 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 a5e8f48..b3dcfb2 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 bb922d9..34e7cba 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 322e164..8fd0365 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 d5d0cd3..a23d2d7 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 ce0daa3..dec68bd 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/lib/mpi/longlong.h b/lib/mpi/longlong.h
index d411355..aac5114 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/net/8021q/vlan_core.c b/net/8021q/vlan_core.c
index 8a15eaa..4a78c4d 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 3a8c8fd..1cd3d2a 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 a3d8d44..26755dd 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 ab5fa63..78e9d92 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/ethernet/eth.c b/net/ethernet/eth.c
index 5359560..be1f64d 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 3da817b..15e3e68 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 b3b5730..24c03396 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 d14152e..ffcec22 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/sched/sch_qfq.c b/net/sched/sch_qfq.c
index a7ab323..8056fb4 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 9963584..74f6a70 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)